بناء وتشغيل قالب دالة Qiskit لمحاكاة البنية الإلكترونية مع نموذج المذيب الضمني
هذا القالب، الذي طُوِّر بالتعاون مع كليفلاند كلينك، يتضمن سير عملٍ لحساب طاقة الحالة الأساسية وطاقة حرية الذوبان لجزيء في مذيب ضمني [1]. تعتمد هذه المحاكاة على طريقة القطرنة الكمومية القائمة على العينات (SQD) [2-6] ونموذج المتصل المستقطب لصياغة معادلات التكاملات (IEF-PCM) للمذيب [7].
يستخدم هذا الدليل القالب مع جزيء الميثانول كمذاب، إذ تُحاكَى بنيته الإلكترونية بشكل صريح، فيما يُمثَّل الماء كمذيب بوصفه وسطاً عازلاً متصلاً. ولمراعاة تأثيرات ترابط الإلكترونات في الميثانول مع الحفاظ على التوازن بين التكلفة الحسابية والدقة، نقتصر على تضمين المدارات و وأزواج الإلكترونات المنفردة في الفضاء النشط الذي تُحاكيه SQD IEF-PCM. يُجرى اختيار هذه المدارات بواسطة طريقة الفضاء النشط لقيمة التكافؤ الذرية (AVAS) باستخدام مكونات المدارات الذرية C[2s,2p] وO[2s,2p] وH[1s]، مما ينتج عنه فضاء نشط مؤلف من 14 إلكتروناً و12 مداراً (14e,12o). تُحسَب المدارات المرجعية باستخدام هارتري-فوك ذي القشرة المغلقة مع مجموعة الأساس cc-pvdz.
مقدمة عن سير العمل
يوضح هذا الدليل التفاعلي كيفية رفع قالب الدالة هذا إلى Qiskit Serverless وتشغيل عبء عمل نموذجي. القالب منظَّم كنمط Qiskit يتكون من أربع خطوات:
1. جمع المدخلات وتعيين المشكلة
تأخذ هذه الخطوة هندسة الجزيء والفضاء النشط المختار ونموذج الإذابة وخيارات LUCJ وخيارات SQD كمدخلات. ثم تنتج ملف نقطة تفتيش PySCF الذي يحتوي على بيانات هارتري-فوك (HF) IEF-PCM، وستُستخدم هذه البيانات في جزء SQD من سير العمل. أما في جزء LUCJ من سير العمل، فيولّد قسم الإدخال أيضاً بيانات HF للطور الغازي المخزّنة داخلياً بصيغة FCIDUMP لـ PySCF.
تُؤخذ المعلومات من محاكاة HF للطور الغازي وتعريف الفضاء النشط كمدخلات. والأهم من ذلك أنها تستخدم أيضاً المعلومات التي يحددها المستخدم في قسم الإدخال بشأن قمع الأخطاء وعدد الرمايات ومستوى تحسين المُحوِّل وتخطيط Qubit.
تولّد هذه الخطوة تكاملات أحادية الإلكترون وثنائية الإلكترون ضمن الفضاء النشط المحدد. ثم تُستخدم هذه التكاملات لإجراء حسابات CCSD الكلاسيكية التي تُعيد سعات t2 التي نستخدمها لتحديد معاملات دائرة LUCJ.
2. تحسين الدائرة
تُحوَّل دائرة LUCJ بعد ذلك إلى دائرة ISA للعتاد المستهدف. ثم يُهيَّأ Sampler primitive مع مجموعة افتراضية من خيارات تخفيف الأخطاء لإدارة التنفيذ.
3. تنفيذ الدائرة
تُعيد حسابات LUCJ سلاسل البتات لكل قياس، وتتوافق هذه السلاسل مع ترتيبات الإلكترونات في النظام المدروس. ثم تُستخدم سلاسل البتات هذه كمدخلات لمرحلة المعالجة اللاحقة.
4. المعالجة اللاحقة باستخدام SQD
تأخذ هذه الخطوة الأخيرة ملف نقطة تفتيش PySCF الذي يحتوي على معلومات HF IEF-PCM، وسلاسل البتات التي تمثل ترتيبات الإلكترونات التي تنبأت بها LUCJ، وخيارات SQD التي حددها المستخدم في قسم الإدخال، كمدخلات. وكمخرجات، تنتج إجمالي طاقة SQD IEF-PCM للدُفعة ذات الطاقة الأدنى وطاقة حرية الذوبان المقابلة لها.
الخيارات
يجب عليك في هذا القالب تحديد خيارات توليد دائرة LUCJ ومعاملات تشغيل SQD.
خيارات LUCJ
عند تنفيذ دائرة LUCJ الكمية، تُنتَج مجموعة من العينات التي تمثل الحالات الأساسية الحسابية من التوزيع الاحتمالي للنظام الجزيئي. للموازنة بين عمق دائرة LUCJ وقدرتها التعبيرية، تُطبَّق البوابات ثنائية Qubit بين Qubit المقابلة للمدارات الدورانية ذات الدوران المعاكس عندما تكون هذه Qubit مجاورة عبر Qubit وسيطة واحدة. لتنفيذ هذا النهج على عتاد IBM بطوبولوجيا hex ثقيلة، تُربط Qubit التي تمثل المدارات الدورانية بنفس الاتجاه عبر طوبولوجيا خطية تأخذ شكلاً متعرجاً بسبب الاتصال الشبكي hex الثقيل للعتاد المستهدف، بينما تتصل Qubit التي تمثل المدارات الدورانية بالاتجاه المعاكس عند كل Qubit رابع فقط.
انقر للتوسيع للمزيد من التفاصيل حول الخيارات المطلوبة:
يجب على المستخدم توفير مصفوفة initial_layout المقابلة لـ Qubit التي تستوفي هذا النمط المتعرج في قسم lucj_options من دالة SQD IEF-PCM. في حالة محاكاة SQD IEF-PCM (14e,12o)/cc-pvdz للميثانول، اخترنا تخطيط Qubit الأولي المقابل للقطر الرئيسي لوحدة المعالجة الكمية Eagle R3. هنا، العناصر الـ 12 الأولى من مصفوفة initial_layout وهي [0, 14, 18, 19, 20, 33, 39, 40, 41, 53, 60, 61, ...] تتوافق مع المدارات الدورانية ألفا. أما العناصر الـ 12 الأخيرة [... 2, 3, 4, 15, 22, 23, 24, 34, 43, 44, 45, 54] فتتوافق مع المدارات الدورانية بيتا.
والأهم أن على المستخدم تحديد number_of_shots الذي يتوافق مع عدد القياسات في دائرة LUCJ. يجب أن يكون عدد الرمايات كبيراً بما يكفي لأن الخطوة الأولى من إجراء S-CORE تعتمد على العينات في قطاع الجسيم الصحيح للحصول على التقريب الأولي لتوزيع أعداد الإشغال لحالة الأرضية.
عدد الرمايات يعتمد بشكل كبير على النظام والعتاد، لكن الدراسات حول الروابط غير التساهمية والقائمة على الأجزاء والمذيب الضمني في SQD تقترح إمكانية الوصول إلى الدقة الكيميائية باتباع هذه الإرشادات:
- من 20,000 إلى 200,000 رمية للأنظمة التي تحتوي على أقل من 16 مداراً جزيئياً (32 مداراً دورانياً)
- 200,000 رمية للأنظمة التي تحتوي على 16 إلى 18 مداراً جزيئياً
- من 200,000 إلى 2,000,000 رمية للأنظمة التي تحتوي على أكثر من 18 مداراً جزيئياً
يتأثر العدد المطلوب من الرمايات بعدد المدارات الدورانية في النظام المدروس وبحجم فضاء هيلبرت المقابل للفضاء النشط المختار ضمن النظام المدروس. بشكل عام، الحالات ذات فضاءات هيلبرت الأصغر تتطلب رمايات أقل. من الخيارات الأخرى المتاحة في LUCJ: مستوى تحسين المُحوِّل وخيارات قمع الأخطاء. لاحظ أن هذه الخيارات تؤثر أيضاً على العدد المطلوب من الرمايات والدقة الناتجة.
خيارات SQD
تشمل الخيارات المهمة في محاكاة SQD: sqd_iterations وnumber_of_batches وsamples_per_batch. بشكل عام، يمكن تعويض انخفاض عدد العينات لكل دُفعة بزيادة عدد الدُفعات (number_of_batches) والمزيد من تكرارات S-CORE (sqd_iterations). مع زيادة عدد الدُفعات، يمكننا أخذ المزيد من التنوعات في الفضاءات الجزئية التهيئوية. بما أن الدُفعة ذات الطاقة الأدنى تُؤخذ كحل لطاقة الحالة الأساسية للنظام، فإن المزيد من الدُفعات يمكن أن يحسّن النتائج من خلال إحصاءات أفضل. تكرارات S-CORE الإضافية ت تيح استعادة المزيد من التهيئات من توزيع LUCJ الأصلي إذا كان عدد العينات في قطاع الجسيم الصحيح منخفضاً. يمكن أن يُمكّن ذلك من تقليل عدد العينات لكل دُفعة.
انقر للتوسيع للمزيد من المعلومات حول ضبط خيارات SQD:
استراتيجية بديلة هي استخدام المزيد من العينات لكل دُفعة، مما يضمن استخدام معظم عينات LUCJ الأولية في فضاء الجسيم الصحيح أثناء إجراء S-CORE، وأن الفضاءات الجزئية الفردية تحتوي على تنوع كافٍ من ترتيبات الإلكترونات. وهذا بدوره يقلل من عدد خطوات S-CORE المطلوبة، إذ تكفي تكرارتان أو ثلاث فقط من SQD إذا كان عدد العينات لكل دُفعة كبيراً بما يكفي. غير أن المزيد من العينات لكل دُفعة يُفضي إلى تكلفة حسابية أعلى لكل خطوة قطرنة. لذا، يمكن تحقيق التوازن بين الدقة والتكلفة الحسابية في محاكاة SQD باختيار sqd_iterations وnumber_of_batches وsamples_per_batch على النحو الأمثل.
تُظهر دراسة SQD IEF-PCM أنه عند استخدام ثلاث تكرارات من S-CORE، يمكن الوصول إلى الدقة الكيميائية باتباع هذه الإرشادات:
- 600 عينة لكل دُفعة في محاكاة الميثانول SQD IEF-PCM (14e,12o)
- 1500 عينة لكل دُفعة في محاكاة الميثيلامين SQD IEF-PCM (14e,13o)
- 6000 عينة لكل دُفعة في محاكاة الماء SQD IEF-PCM (8e,23o)
- 16000 عينة لكل دُفعة في محاكاة الإيثانول SQD IEF-PCM (20e,18o)
تماماً مثل العدد المطلوب من الرمايات في LUCJ، فإن العدد المطلوب من العينات لكل دُفعة المستخدمة في إجراء S-CORE يعتمد بشكل كبير على النظام والعتاد. يمكن استخدام الأمثلة أعلاه لتقدير نقطة البداية لمعيار العدد المطلوب من العينات لكل دُفعة. يمكن العثور على الدليل التعليمي لمعيار العدد المطلوب من العينات لكل دُفعة بشكل منهجي هنا.
نشر دالة القالب SQD IEF-PCM وتنفيذها
# Added by doQumentation — required packages for this notebook
!pip install -q ffsim numpy pyscf qiskit qiskit-addon-sqd qiskit-ibm-catalog qiskit-ibm-runtime qiskit-serverless solve-solvent
المصادقة
استخدم qiskit-ibm-catalog للمصادقة على QiskitServerless بمفتاح API الخاص بك (الرمز المميز)، الذي يمكن العثور عليه في لوحة تحكم IBM Quantum Platform. يتيح ذلك إنشاء عميل serverless لرفع الدالة المختارة أو تشغيلها:
from qiskit_ibm_catalog import QiskitServerless
serverless = QiskitServerless(
channel="ibm_quantum_platform",
instance="INSTANCE_CRN",
token="YOUR_API_KEY" # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
)
اختيارياً، استخدم save_account() لحفظ بيانات اعتمادك في بيئة محلية (راجع دليل إعداد حساب IBM Cloud الخاص بك). لاحظ أن هذا يكتب بيانات اعتمادك في نفس الملف كـ QiskitRuntimeService.save_account():
QiskitServerless.save_account(token="YOUR_API_KEY", channel="ibm_quantum_platform", instance="INSTANCE_CRN")
إذا كان الحساب محفوظاً، فلا حاجة لتوفير الرمز المميز للمصادقة:
from qiskit_ibm_catalog import QiskitServerless
serverless = QiskitServerless()
رفع القالب
لرفع دالة Qiskit مخصصة، يجب أولاً إنشاء كائن QiskitFunction يحدد الكود المصدري للدالة. سيتيح العنوان لك التعرف على الدالة بمجرد وجودها في المجموعة البعيدة. نقطة الدخول الرئيسية هي الملف الذي يحتوي على if __name__ == "__main__". إذا كان سير عملك يتطلب ملفات مصدر إضافية، يمكنك تحديد دليل عمل سيُرفع مع نقطة الدخول.
from qiskit_ibm_catalog import QiskitFunction
template = QiskitFunction(
title="sqd_pcm_template",
entrypoint="sqd_pcm_entrypoint.py",
working_dir="./source_files/", # all files in this directory will be uploaded
dependencies=[
"ffsim==0.0.54",
"pyscf==2.9.0",
"qiskit_addon_sqd==0.10.0",
],
)
print(template)
QiskitFunction(sqd_pcm_template)
بمجرد أن تكون الحالة جاهزة، ارفعها إلى serverless:
serverless.upload(template)
QiskitFunction(sqd_pcm_template)
للتحقق من نجاح رفع البرنامج، استخدم serverless.list():
serverless.list()
[QiskitFunction(sqd_pcm_template),
QiskitFunction(hamiltonian_simulation_template)]
تحميل القالب وتشغيله عن بُعد
تم رفع قالب الدالة، ويمكنك الآن تشغيله عن بُعد باستخدام Qiskit Serverless. أولاً، حمّل القالب بالاسم:
template = serverless.load("sqd_pcm_template")
print(template)
QiskitFunction(sqd_pcm_template)
بعد ذلك، شغّل القالب مع المدخلات على مستوى النطاق لـ SQD-IEF PCM. يحدد هذا المثال عبء عمل قائماً على الميثانول.
molecule = {
"atom": """
O -0.04559 -0.75076 -0.00000;
C -0.04844 0.65398 -0.00000;
H 0.85330 -1.05128 -0.00000;
H -1.08779 0.98076 -0.00000;
H 0.44171 1.06337 0.88811;
H 0.44171 1.06337 -0.88811
""", # Must be specified
"basis": "cc-pvdz", # default is "sto-3g"
"spin": 0, # default is 0
"charge": 0, # default is 0
"verbosity": 0, # default is 0
"number_of_active_orb": 12, # Must be specified
"number_of_active_alpha_elec": 7, # Must be specified
"number_of_active_beta_elec": 7, # Must be specified
"avas_selection": [
"%d O %s" % (k, x) for k in [0] for x in ["2s", "2px", "2py", "2pz"]
]
+ ["%d C %s" % (k, x) for k in [1] for x in ["2s", "2px", "2py", "2pz"]]
+ ["%d H 1s" % k for k in [2, 3, 4, 5]], # default is None
}
solvent_options = {
"method": "IEF-PCM", # other available methods are COSMO, C-PCM, SS(V)PE, see https://manual.q-chem.com/5.4/topic_pcm-em.html
"eps": 78.3553, # value for water
}
lucj_options = {
"initial_layout": [
0,
14,
18,
19,
20,
33,
39,
40,
41,
53,
60,
61,
2,
3,
4,
15,
22,
23,
24,
34,
43,
44,
45,
54,
],
"dynamical_decoupling_choice": True,
"twirling_choice": True,
"number_of_shots": 200000,
"optimization_level": 2,
}
sqd_options = {
"sqd_iterations": 3,
"number_of_batches": 10,
"samples_per_batch": 1000,
"max_davidson_cycles": 200,
}
backend_name = "ibm_sherbrooke"
job = template.run(
backend_name=backend_name,
molecule=molecule,
solvent_options=solvent_options,
lucj_options=lucj_options,
sqd_options=sqd_options,
)
print(job.job_id)
39f8fb70-79b2-43ca-b723-84e6b6135821
تحقق من الحالة التفصيلية للمهمة:
import time
t0 = time.time()
status = job.status()
if status == "QUEUED":
print(f"time = {time.time()-t0:.2f}, status = QUEUED")
while True:
status = job.status()
if status == "QUEUED":
continue
print(f"time = {time.time()-t0:.2f}, status = {status}")
if status == "DONE" or status == "ERROR":
break
time = 2.35, status = DONE
أثناء تشغيل المهمة، يمكنك جلب السجلات المُنشأة من مخرجات logger.info. يمكن أن توفر هذه السجلات معلومات قابلة للتنفيذ حول تقدم سير عمل SQD IEF-PCM. على سبيل المثال، اتصالات المدارات الدورانية المتماث لة، أو عمق البوابة الثنائية لدائرة ISA النهائية المخصصة للتنفيذ على العتاد.
print(job.logs())
استدعاء نتيجة المهمة يوقف بقية البرنامج حتى تتوفر نتيجة. بعد اكتمال المهمة، يمكنك استرداد النتائج. تشمل هذه النتائج طاقة حرية الذوبان، فضلاً عن معلومات حول الدُفعة ذات الطاقة الأدنى وقيمة الطاقة الأدنى ومعلومات مفيدة أخرى مثل إجمالي مدة المُحلِّل.
result = job.result()
result
{'total_energy_hist': array([[-115.14768518, -115.1368396 , -114.19181692, -115.13745429,
-115.1445012 , -114.19673326, -115.1547003 , -114.20563866,
-115.13748344, -115.14764974],
[-115.15768392, -115.15850126, -115.15857275, -115.15770916,
-115.15801684, -115.15822125, -115.15833521, -115.15844051,
-115.15735538, -115.15862354],
[-115.15795148, -115.15847925, -115.15856677, -115.15811156,
-115.15815602, -115.15785171, -115.1583672 , -115.1585533 ,
-115.15833528, -115.15808791]]),
'spin_squared_value_hist': array([[5.37327508e-03, 1.32981759e-02, 1.36214922e-02, 8.84413615e-03,
7.26723578e-03, 1.94875195e-02, 3.03153152e-03, 6.07543106e-03,
1.04951849e-02, 5.36529204e-03],
[6.39397528e-04, 1.36814350e-04, 9.09054260e-05, 5.99361358e-04,
3.64261739e-04, 2.54905866e-04, 2.32540370e-04, 1.53181990e-04,
7.23519739e-04, 6.80737671e-05],
[4.53776416e-04, 1.63043449e-04, 1.05317263e-04, 3.82912836e-04,
3.41047803e-04, 5.18620393e-04, 2.06819142e-04, 1.17086537e-04,
2.32357159e-04, 4.26071537e-04]]),
'solvation_free_energy_hist': array([[-0.00725018, -0.00743955, -0.01132905, -0.0073377 , -0.00722221,
-0.01136705, -0.00719279, -0.01072829, -0.00733404, -0.00725961],
[-0.00719252, -0.00718315, -0.00718074, -0.00719325, -0.00717703,
-0.00718391, -0.00718354, -0.00717928, -0.00719887, -0.0071801 ],
[-0.00719351, -0.00718255, -0.00718198, -0.00718429, -0.00718349,
-0.00718329, -0.0071882 , -0.00718363, -0.00718549, -0.00718814]]),
'occupancy_hist': [[array([0.99712298, 0.99278936, 0.99083163, 0.97328469, 0.98959809,
0.98922134, 0.720333 , 0.25683194, 0.01939338, 0.02840332,
0.00946988, 0.0327204 ]),
array([0.99712298, 0.99278936, 0.99083163, 0.97328469, 0.98959809,
0.98922134, 0.720333 , 0.25683194, 0.01939338, 0.02840332,
0.00946988, 0.0327204 ])],
[array([0.9959042 , 0.9922607 , 0.99018862, 0.99265843, 0.98927447,
0.9900833 , 0.99403876, 0.00989025, 0.01120814, 0.01137717,
0.01152871, 0.01158725]),
array([0.9959042 , 0.9922607 , 0.99018862, 0.99265843, 0.98927447,
0.9900833 , 0.99403876, 0.00989025, 0.01120814, 0.01137717,
0.01152871, 0.01158725])],
[array([0.99590079, 0.99222193, 0.99016753, 0.99265045, 0.98927264,
0.99007179, 0.99407207, 0.00986684, 0.01125181, 0.01141439,
0.01150733, 0.01160243]),
array([0.99590079, 0.99222193, 0.99016753, 0.99265045, 0.98927264,
0.99007179, 0.99407207, 0.00986684, 0.01125181, 0.01141439,
0.01150733, 0.01160243])]],
'lowest_energy_batch': 2,
'lowest_energy_value': -115.1585667736213,
'solvation_free_energy': -0.007181981952470838,
'sci_solver_total_duration': 493.997501373291,
'metadata': {'resources_usage': {'RUNNING: MAPPING': {'CPU_TIME': 6.080063343048096},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU_TIME': 1.999896764755249},
'RUNNING: WAITING_FOR_QPU': {'CPU_TIME': 6.2850868701934814},
'RUNNING: EXECUTING_QPU': {'QPU_TIME': 21.639373540878296},
'RUNNING: POST_PROCESSING': {'CPU_TIME': 495.40831995010376}},
'num_iterations_executed': 3}}
لاحظ أن بيانات النتيجة تتضمن ملخصاً لاستخدام الموارد يتيح لك تقدير وقت وحدة المعالجة الكمية ووقت وحدة المعالجة المركزية المطلوبين لكل عبء عمل بشكل أفضل (يُشغَّل هذا المثال على جهاز وهمي، لذا قد تختلف أوقات استخدام الموارد الفعلية). بعد اكتمال المهمة، ستتوفر مخرجات السجل بالكامل.
print(job.logs())
2025-06-27 08:42:41,358 INFO job_manager.py:531 -- Runtime env is setting up.
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:45,015: Starting runtime service
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:45,621: Backend: ibm_sherbrooke
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:46,809: Initializing molecule object
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:51,599: Performing CCSD
Parsing /tmp/ray/session_2025-06-27_08-42-13_898146_1/runtime_resources/working_dir_files/_ray_pkg_4bc93dcc58c04b91/output_sqd_pcm/2025-06-27_08-42-45.fcidump.txt
Overwritten attributes get_ovlp get_hcore of <class 'pyscf.scf.hf_symm.SymAdaptedRHF'>
/usr/local/lib/python3.11/site-packages/pyscf/gto/mole.py:1293: UserWarning: Function mol.dumps drops attribute energy_nuc because it is not JSON-serializable
warnings.warn(msg)
/usr/local/lib/python3.11/site-packages/pyscf/gto/mole.py:1293: UserWarning: Function mol.dumps drops attribute intor_symmetric because it is not JSON-serializable
warnings.warn(msg)
converged SCF energy = -115.049680672847
E(CCSD) = -115.1519910037652 E_corr = -0.1023103309180226
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:51,694: Same spin orbital connections: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11)]
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:51,694: Opposite spin orbital connections: [(0, 0), (4, 4), (8, 8)]
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:53,718: Optimization level: 2, ops: OrderedDict([('rz', 2438), ('sx', 1496), ('ecr', 766), ('x', 185), ('measure', 24), ('barrier', 1)]), depth: 391
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:53,736: Two-qubit gate depth: 94
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:53,737: Submitting sampler job
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:54,273: Job ID: d1f5j3lqbivc73ebqpj0
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:42:54,313: Job Status: QUEUED
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,813: Starting configuration recovery iteration 0
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,841: Batch 0 subspace dimension: 531441
2025-06-27 08:43:24,844 INFO worker.py:1588 -- Using address 172.17.16.124:6379 set in the environment variable RAY_ADDRESS
2025-06-27 08:43:24,847 INFO worker.py:1723 -- Connecting to existing Ray cluster at address: 172.17.16.124:6379...
2025-06-27 08:43:24,876 INFO worker.py:1908 -- Connected to Ray cluster. View the dashboard at [1m[32mhttp://172.17.16.124:8265 [39m[22m
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,945: Batch 1 subspace dimension: 519841
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,950: Batch 2 subspace dimension: 543169
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,955: Batch 3 subspace dimension: 532900
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,960: Batch 4 subspace dimension: 534361
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,964: Batch 5 subspace dimension: 531441
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,969: Batch 6 subspace dimension: 540225
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,974: Batch 7 subspace dimension: 524176
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,979: Batch 8 subspace dimension: 537289
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:43:24,983: Batch 9 subspace dimension: 540225
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:09,006: Lowest energy batch: 6
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:09,007: Lowest energy value: -115.15470029849135
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:09,007: Corresponding g_solv value: -0.0071927910374866375
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:09,007: -----------------------------------
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:09,007: Starting configuration recovery iteration 1
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,564: Batch 0 subspace dimension: 413449
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,572: Batch 1 subspace dimension: 399424
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,578: Batch 2 subspace dimension: 438244
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,583: Batch 3 subspace dimension: 422500
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,589: Batch 4 subspace dimension: 409600
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,596: Batch 5 subspace dimension: 404496
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,601: Batch 6 subspace dimension: 410881
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,605: Batch 7 subspace dimension: 442225
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,611: Batch 8 subspace dimension: 409600
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:48:40,618: Batch 9 subspace dimension: 405769
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:49:54,917: Lowest energy batch: 9
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:49:54,917: Lowest energy value: -115.15862353596414
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:49:54,917: Corresponding g_solv value: -0.0071800982859467006
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:49:54,918: -----------------------------------
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:49:54,918: Starting configuration recovery iteration 2
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,501: Batch 0 subspace dimension: 399424
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,508: Batch 1 subspace dimension: 412164
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,514: Batch 2 subspace dimension: 432964
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,519: Batch 3 subspace dimension: 400689
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,524: Batch 4 subspace dimension: 432964
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,529: Batch 5 subspace dimension: 418609
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,533: Batch 6 subspace dimension: 418609
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,538: Batch 7 subspace dimension: 425104
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,543: Batch 8 subspace dimension: 404496
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:50:25,548: Batch 9 subspace dimension: 429025
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:51:37,900: Lowest energy batch: 2
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:51:37,900: Lowest energy value: -115.1585667736213
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:51:37,901: Corresponding g_solv value: -0.007181981952470838
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:51:37,901: -----------------------------------
sqd_pcm_entrypoint.run_function:INFO:2025-06-27 08:51:37,901: SCI_solver totally takes: 493.997501373291 seconds
الخطوات التالية
- راجع الدليل الخاص ببناء قالب دالة لـ محاكاة هاميلتونيان
- Review the guide on building a function template for Hamiltonian simulation
- اطّلع على الملفات المصدرية لهذا القالب على GitHub