डी-वेव दुनिया में 'हैलो वर्ल्ड' के समकक्ष 2 डी चेकरबोर्ड उदाहरण है। इस उदाहरण में, आपको 4 नोड्स के साथ निम्नलिखित वर्ग ग्राफ दिया गया है:
चलो परिभाषित है कि हम रंग शिखर काला यदि σ मैं = - 1 और सफेद यदि σ मैं = + 1 । लक्ष्य ग्राफ में चार कोने के साथ एक चेकरबोर्ड पैटर्न बनाना है। इस परिणाम को प्राप्त करने के लिए h और J को परिभाषित करने के विभिन्न तरीके हैं
। सबसे पहले, इस समस्या के दो संभावित समाधान हैं:σमैंσमैं= - १σमैं= + 1जजम्मू
डी-वेव क्वांटम एनीलर आइसिंग हैमिल्टन को न्यूनतम करता है जिसे हम परिभाषित करते हैं और विभिन्न युग्मक सेटिंग्स के प्रभाव को समझना महत्वपूर्ण है। उदाहरण के लिए कपलर पर विचार करें :जम्मू0 , 1
यदि हम इसे सेट करते हैं , तो हैमिल्टनियन को कम से कम किया जाता है यदि दोनों क्विबेट समान मान लेते हैं। हम कहते हैं कि नकारात्मक युग्मक सहसंबंधित हैं । जबकि अगर हम इसे J 0 , 1 = + 1 में सेट करते हैं , तो दो क्विल्ट विपरीत मान लेने पर हैमिल्टनियन को कम से कम किया जाता है। इस प्रकार, सकारात्मक कप्लर्स सहसंबंधी होते हैं ।जम्मू0 , 1= - १जम्मू0 , 1= + 1
चेकरबोर्ड के उदाहरण में, हम पड़ोसी जोड़ी के प्रत्येक जोड़े का सहसंबंधी बनाना चाहते हैं, जो निम्न हैम्पटनटन को जन्म देता है:
एच= σ0σ1+ σ0σ2+ σ1σ3+ σ2σ3
प्रदर्शन की खातिर, हम qu qubit पर एक पूर्वाग्रह शब्द भी जोड़ते हैं, जैसे कि हम केवल # 1 समाधान प्राप्त करते हैं। यह समाधान की आवश्यकता है σ 0 = - 1 और इसलिए हम अपने पूर्वाग्रह सेट ज 0 = 1 । अंतिम हैमिल्टन अब है:0σ0= - १ज0= 1
एच= σ0+ σ0σ1+ σ0σ2+ σ1σ3+ σ2σ3
तो चलो इसे ऊपर कोड!
नोट: आप कुछ भी काम करने के लिए डी-वेव क्लाउड सेवा तक पहुँच की आवश्यकता नहीं है।
सबसे पहले, सुनिश्चित करें कि आपके पास dwave_sapi2
( https://cloud.dwavesys.com/qubist/downloads/ ) पायथन पैकेज स्थापित है। सब कुछ अजगर 2.7 होने जा रहा है क्योंकि डी-वेव वर्तमान में किसी भी उच्च पायथन संस्करण का समर्थन नहीं करता है। कहा जा रहा है, चलो आवश्यक आयात करते हैं:
from dwave_sapi2.core import solve_ising
from dwave_sapi2.embedding import find_embedding, embed_problem, unembed_answer
from dwave_sapi2.util import get_hardware_adjacency
from dwave_sapi2.remote import RemoteConnection
डी-वेव सॉल्वर एपीआई से कनेक्ट करने के लिए आपको उनके एसएपीआई सॉल्वर, एसएपीआई यूआरएल के लिए वैध एपीआई टोकन की आवश्यकता होगी और आपको यह तय करना होगा कि आप किस क्वांटम प्रोसेसर का उपयोग करना चाहते हैं:
DWAVE_SAPI_URL = 'https://cloud.dwavesys.com/sapi'
DWAVE_TOKEN = [your D-Wave API token]
DWAVE_SOLVER = 'DW_2000Q_VFYC_1'
मैं डी-वेव 2000Q वर्चुअल फुल यील्ड चिमेरा (VFYC) का उपयोग करने की सलाह देता हूं, जो कि बिना किसी भी तरह की पूरी तरह से कार्यात्मक चिप है! यहाँ है चीमरा चिप लेआउट:
इस बिंदु पर मैं ट्यूटोरियल को दो अलग-अलग टुकड़ों में विभाजित कर रहा हूं। पहले खंड में, हम मैन्युअल रूप से समस्या को चिमेरा हार्डवेयर ग्राफ पर एम्बेड कर रहे हैं और दूसरे खंड में हम एक हार्डवेयर एम्बेडिंग खोजने के लिए डी-वेव की एम्बेडिंग हेयुरेटिक्स का उपयोग कर रहे हैं।
मैनुअल एम्बेडिंग
डी-वेव 2000Q चिप लेआउट के शीर्ष बाएं कोने में स्थित इकाई कक्ष इस तरह दिखता है:
010 → 0१ → ४२ → 7३ → ३जजम्मू
J = {(0,4): 1, (4,3): 1, (3,7): 1, (7,0): 1}
h = [-1,0,0,0,0,0,0,0,0]
ज
connection = RemoteConnection(DWAVE_SAPI_URL, DWAVE_TOKEN)
solver = connection.get_solver(DWAVE_SOLVER)
अब, हम रीडआउट की संख्या को परिभाषित कर सकते हैं और answer_mode
"हिस्टोग्राम" चुन सकते हैं जो पहले से ही हमारे लिए होने वाली घटनाओं की संख्या से परिणामों को क्रमबद्ध करता है। अब हम डी-वेव क्वांटम एनीलर के साथ ईज़िंग उदाहरण को हल करने के लिए तैयार हैं:
params = {"answer_mode": 'histogram', "num_reads": 10000}
results = solve_ising(solver, h, J, **params)
print results
आपको निम्न परिणाम प्राप्त करना चाहिए:
{
'timing': {
'total_real_time': 1655206,
'anneal_time_per_run': 20,
'post_processing_overhead_time': 13588,
'qpu_sampling_time': 1640000,
'readout_time_per_run': 123,
'qpu_delay_time_per_sample': 21,
'qpu_anneal_time_per_sample': 20,
'total_post_processing_time': 97081,
'qpu_programming_time': 8748,
'run_time_chip': 1640000,
'qpu_access_time': 1655206,
'qpu_readout_time_per_sample': 123
},
'energies': [-5.0],
'num_occurrences': [10000],
'solutions': [
[1, 3, 3, 1, -1, 3, 3, -1, {
lots of 3 's that I am omitting}]]}
energies
- 5.030 → 0४ → १7 → 2३ → ३[ १ , - १ , - १ , १ ]
हेयुरिस्टिक एम्बेडिंग
जम्मूज
J = {(0,1): 1, (0,2): 1, (1,3): 1, (2,3): 1}
h = [-1,0,0,0]
हम फिर से रिमोट कनेक्शन स्थापित करते हैं और डी-वेव 2000Q VFYC सॉल्वर उदाहरण प्राप्त करते हैं:
connection = RemoteConnection(DWAVE_SAPI_URL, DWAVE_TOKEN)
solver = connection.get_solver(DWAVE_SOLVER)
हमारी समस्या का एक एम्बेडिंग खोजने के लिए, हमें सबसे पहले वर्तमान हार्डवेयर ग्राफ के आसन्न मैट्रिक्स को प्राप्त करने की आवश्यकता है:
adjacency = get_hardware_adjacency(solver)
आइए अब अपनी समस्या के बारे में जानने की कोशिश करें:
embedding = find_embedding(J.keys(), adjacency)
यदि आप बड़े ईज़िंग उदाहरणों के साथ काम कर रहे हैं, तो आप कई थ्रेड्स (कई सीपीयू पर समानांतर) में एम्बेडिंग के लिए खोज करना चाहते हैं और फिर सबसे छोटी श्रृंखला लंबाई के साथ एम्बेडिंग का चयन कर सकते हैं! एक चेन तब होती है जब कनेक्टिविटी की डिग्री बढ़ाने के लिए कई क्विट्स को एक सिंगल क्वेट के रूप में कार्य करने के लिए मजबूर किया जाता है। हालांकि, श्रृंखला जितनी अधिक बार यह टूटने की संभावना है। और टूटी हुई जंजीरें बुरा परिणाम देती हैं!
अब हम अपनी समस्या को ग्राफ पर एम्बेड करने के लिए तैयार हैं:
[h, j0, jc, embeddings] = embed_problem(h, J, embedding, adjacency)
j0
jc
जम्मू
J = j0.copy()
J.update(jc)
अब, हम एम्बेडेड समस्या को हल करने के लिए तैयार हैं:
params = {"answer_mode": 'histogram', "num_reads": 10000}
raw_results = solve_ising(solver, h, J, **params)
print 'Lowest energy found: {}'.format(raw_results['energies'])
print 'Number of occurences: {}'.format(raw_results['num_occurrences'])
raw_results
जब तक हम इस समस्या unembed हमें कोई मतलब नहीं होगा। मामले में, कुछ जंजीरों को तोड़ दिया हम उन्हें वैकल्पिक मत द्वारा परिभाषित बहुमत वोट के माध्यम से ठीक कर रहे हैं broken_chains
:
unembedded_results = unembed_answer(raw_results['solutions'],
embedding, broken_chains='vote')
print 'Solution string: {}'.format(unembedded_results)
यदि आप इसे चलाते हैं, तो आपको सभी रीडआउट में सही परिणाम प्राप्त करना चाहिए:
Lowest energy found: [-5.0]
Number of occurences: [10000]
Solution string: [[1, -1, -1, 1]]
मैं इस अपने प्रश्न का उत्तर और मैं अत्यधिक सभी अतिरिक्त पैरामीटर बाहर की जाँच है कि आप करने के लिए पारित कर सकते हैं की सिफारिश आशा solve_ising
जैसे समारोह अपने समाधान की गुणवत्ता में सुधार करने के लिए num_spin_reversal_transforms
या postprocess
।