Langkau ke kandungan utama

Pengoptimum Portfolio Kuantum: Fungsi Qiskit oleh Global Data Quantum

nota

Fungsi Qiskit ialah ciri eksperimental yang hanya tersedia untuk pengguna Pelan Premium, Pelan Flex, dan Pelan On-Prem IBM Quantumยฎ (melalui API IBM Quantum Platform). Ciri ini dalam status keluaran pratonton dan tertakluk kepada perubahan.

Gambaran Keseluruhan

Pengoptimum Portfolio Kuantum ialah Fungsi Qiskit yang menangani masalah pengoptimuman portfolio dinamik โ€” masalah piawai dalam kewangan yang bertujuan untuk mengimbangi semula pelaburan berkala merentas set aset bagi memaksimumkan pulangan dan meminimumkan risiko. Dengan menggunakan teknik pengoptimuman kuantum terkini, fungsi ini memudahkan proses supaya pengguna tanpa kepakaran dalam pengkomputeran kuantum dapat memanfaatkan kelebihannya dalam mencari trajektori pelaburan yang optimum. Sesuai untuk pengurus portfolio, penyelidik dalam kewangan kuantitatif, dan pelabur individu, alat ini membolehkan pengujian semula strategi perdagangan dalam pengoptimuman portfolio.

Penerangan Fungsi

Fungsi Pengoptimum Portfolio Kuantum menggunakan algoritma Variational Quantum Eigensolver (VQE) untuk menyelesaikan masalah Quadratic Unconstrained Binary Optimization (QUBO) bagi menangani masalah pengoptimuman portfolio dinamik. Pengguna hanya perlu menyediakan data harga aset dan mentakrifkan kekangan pelaburan, kemudian fungsi menjalankan proses pengoptimuman kuantum yang mengembalikan set trajektori pelaburan yang telah dioptimumkan.

Proses ini terdiri daripada empat peringkat utama. Pertama, data input dipetakan kepada masalah yang serasi dengan kuantum, membina QUBO bagi masalah pengoptimuman portfolio dinamik, dan mengubahnya menjadi operator kuantum (Ising Hamiltonian). Seterusnya, masalah input dan algoritma VQE disesuaikan untuk dijalankan pada perkakasan kuantum. Algoritma VQE kemudiannya dijalankan pada perkakasan kuantum, dan akhirnya, keputusan diproses semula untuk menyediakan trajektori pelaburan yang optimum. Sistem ini juga menyertakan pemprosesan semula yang peka hingar (berasaskan SQD) untuk memaksimumkan kualiti output.

Fungsi Qiskit ini berdasarkan manuskrip yang diterbitkan oleh Global Data Quantum. Visualisasi aliran kerja fungsi

Input

Argumen input fungsi diterangkan dalam jadual berikut. Data aset dan spesifikasi masalah lain mesti disediakan; selain itu, tetapan VQE boleh disertakan untuk menyesuaikan proses pengoptimuman.

NamaJenisPeneranganDiperlukanLalaiContoh
assetsjsonKamus dengan harga asetYa--
qubo_settingsjsonTetapan QUBOYa-Lihat contoh dalam jadual di bawah
ansatz_settingsjsonTetapan ansatzTidakNoneLihat contoh dalam jadual di bawah.
optimizer_settingsjsonTetapan pengoptimumTidakNoneLihat contoh dalam jadual di bawah.
backendstrNama Backend QPUTidak-"ibm_torino"
previous_session_idlist of strSenarai ID sesi untuk mendapatkan semula data daripada larian sebelumnya(*)TidakSenarai kosong["session_id_1", "session_id_2"]
apply_postprocessboolGuna pemprosesan semula SQD peka hingarTidakTrueTrue
tagslist of stringsSenarai tag untuk mengenal pasti eksperimenTidakSenarai kosong["optimization", "quantum_computing"]

*Untuk menyambung semula pelaksanaan atau mendapatkan semula kerja yang diproses dalam satu atau lebih sesi sebelumnya, senarai ID sesi mesti dihantar dalam parameter previous_session_id. Ini amat berguna dalam kes di mana tugas pengoptimuman gagal selesai akibat ralat dalam proses, dan pelaksanaan perlu diteruskan. Untuk mencapai ini, anda mesti menyediakan argumen yang sama yang digunakan dalam pelaksanaan awal, bersama senarai previous_session_id seperti yang diterangkan.

Amaran

Memuatkan data untuk sesi sebelumnya (untuk menyambung semula pengoptimuman) boleh mengambil masa sehingga satu jam.

assetsโ€‹

Data mesti disusun sebagai objek JSON yang menyimpan maklumat tentang harga penutup aset kewangan pada tarikh tertentu. Formatnya adalah seperti berikut:

  • Kunci utama (string): Nama atau simbol ticker aset kewangan (contohnya, "8801.T").
  • Kunci sekunder (string): Tarikh dalam format YYYY-MM-DD.
  • Nilai (nombor): Harga penutup aset pada tarikh yang dinyatakan. Harga boleh dimasukkan sama ada dalam bentuk ternormal atau tidak ternormal.

Perhatikan bahawa semua kamus mesti mempunyai kunci sekunder yang sama (tarikh). Jika sesebuah aset tidak mempunyai tarikh yang dimiliki aset lain, data mesti diisi untuk memastikan konsistensi. Contohnya, ini boleh dilakukan dengan menggunakan harga penutup terakhir yang dicatat bagi aset tersebut.

Contohโ€‹

{
"8801.T": {
"2023-01-01": 2374.0,
"2023-01-02": 2374.0,
"2023-01-03": 2374.0,
"2023-01-04": 2356.5,
...
},
"AAPL": {
"2023-01-01": 145.2,
"2023-01-02": 146.5,
"2023-01-03": 147.3,
"2023-01-04": 148.1,
...
},
...
}
# Added by doQumentation โ€” required packages for this notebook
!pip install -q pandas qiskit-ibm-catalog
{
"asset_name": {
"date": closing_value,
...
},
...
}
Nota

Data aset mesti mengandungi, sekurang-kurangnya, harga penutup pada (nt+1) * dt (lihat bahagian input qubo_settings) cap masa (contohnya, hari).

qubo_settingsโ€‹

Jadual seterusnya menerangkan kunci kamus qubo_settings. Bina kamus dengan menentukan bilangan langkah masa nt, bilangan qubit resolusi nq, dan max_investment โ€” atau ubah nilai lalai lain.

NamaJenisPeneranganDiperlukanLalaiContoh
ntintBilangan langkah masaYa-4
nqintBilangan Qubit resolusiYa-4
max_investmentfloatBilangan maksimum unit mata wang yang dilaburkan merentasi semua asetYa-10
dt*intTetingkap masa yang dipertimbangkan dalam setiap langkah masa. Unitnya sepadan dengan selang masa antara kunci dalam data asetTidak30-
risk_aversionfloatPekali pengelakan risikoTidak1000-
transaction_feefloatPekali yuran transaksiTidak0.01-
restriction_coefffloatPendarab Lagrange yang digunakan untuk menguatkuasakan kekangan masalah dalam formulasi QUBOTidak1-

ansatz_settingsโ€‹

Untuk mengubah pilihan lalai, cipta kamus untuk parameter ansatz_settings dengan kunci berikut. Secara lalai, ansatz ditetapkan kepada "real_amplitudes", dan kedua-dua pilihan tambahan (lihat jadual berikut) ditetapkan kepada False.

NamaJenisPeneranganDiperlukanLalai
ansatz*strAnsatz yang akan digunakanTidak"real_amplitudes"
multiple_passmanager**boolMendayakan subrutin passmanager berganda (tidak tersedia untuk ansatz Tailored)TidakFalse
dd_enableboolMenambah dynamical decouplingTidakFalse

* Ansatz yang tersedia

  • real_amplitudes
  • cyclic
  • optimized_real_amplitudes
  • tailored (Hanya untuk Backend ibm_torino, 7 aset, 4 langkah masa, dan 4 qubit resolusi)

** Jika multiple_passmanager ditetapkan kepada False, fungsi menggunakan pass manager Qiskit lalai dengan optimization_level=3. Jika ditetapkan kepada True, subrutin multiple_passmanager membandingkan tiga pass manager: pass manager Qiskit lalai sebelumnya, pass manager yang memetakan qubit ke atas rantaian jiran terdekat QPU, dan perkhidmatan Transpiler AI. Kemudian, pass manager dengan anggaran ralat kumulatif yang lebih rendah dipilih.

optimizer_settingsโ€‹

Parameter ini ialah kamus dengan beberapa pilihan yang boleh dilaraskan bagi proses pengoptimuman.

NamaJenisPeneranganDiperlukanLalai
primitive_optionsjsonTetapan primitifTidak-
optimizerstrPengoptimum klasik yang dipilihTidak"differential_evolution"
optimizer_optionsjsonKonfigurasi pengoptimumTidak-
Nota

Pada masa ini, satu-satunya pilihan pengoptimum yang tersedia ialah "differential_evolution".

Di bawah kunci primitive_options dan optimizer_options, kita tetapkan kamus dengan parameter berikut:

primitive_optionsโ€‹

NamaJenisPeneranganDiperlukanLalaiContoh
sampler_shotsintBilangan shot Sampler.Tidak100000-
estimator_shotsintBilangan shot Estimator.Tidak25000-
estimator_precisionfloatKetepatan yang diingini bagi nilai jangkaan. Jika dinyatakan, ketepatan akan digunakan sebagai ganti estimator_shots.TidakNone0.015625 ยท (1 / sqrt(4096))
max_timeint or strJumlah masa maksimum sesi runtime boleh kekal terbuka sebelum ditutup secara paksa. Boleh diberikan dalam saat (int) atau sebagai string, seperti "2h 30m 40s". Mesti kurang daripada had maksimum sistem.TidakNone"1h 15m"

optimizer_optionsโ€‹

NamaJenisPeneranganDiperlukanLalai
num_generationsintBilangan generasiTidak20
population_sizeintSaiz populasiTidak20
mutation_rangelistFaktor mutasi maksimum dan minimumTidak[0, 0.25]
recombinationfloatFaktor rekombinasiTidak0.4
max_parallel_jobsintBilangan maksimum kerja QPU yang dilaksanakan secara selariTidak3
max_batchsizeintSaiz kelompok maksimumTidak200
Nota
  • Bilangan generasi yang dinilai oleh evolusi pembezaan ialah num_generations + 1 kerana populasi awal disertakan.

  • Jumlah bilangan Circuit dikira sebagai (num_generations + 1) * population_size.

  • Menggunakan saiz populasi yang lebih besar dan lebih banyak generasi secara amnya meningkatkan kualiti hasil pengoptimuman. Walau bagaimanapun, tidak disyorkan untuk melebihi saiz populasi 120 dan bilangan generasi melebihi 20 (contohnya, 120 * 21 = 2520 jumlah Circuit), kerana ini akan menjana bilangan Circuit yang berlebihan, yang boleh menjadi mahal dari segi pengiraan dan memakan masa.

  • Fungsi ini membolehkan anda menyambung semula pengoptimuman sebelumnya, dan sentiasa boleh meningkatkan bilangan generasi (dengan menyediakan input yang sama kecuali untuk previous_session_id dan num_generations yang ditingkatkan).

Nota

Pastikan pematuhan dengan had kerja Qiskit Runtime.

  • Sampler: sampler_shots <= 10_000_000.
  • Estimator: max_batchsize * estimator_shots * observable_size <= 10_000_000 (untuk fungsi ini, semua sebutan observable bertukar, jadi observable_size=1).

Lihat panduan Had Kerja untuk maklumat lanjut.

Output

Fungsi mengembalikan dua kamus: kamus "result", yang mengandungi hasil pengoptimuman terbaik, termasuk penyelesaian optimum dan kos objektif minimum yang berkaitan; dan "metadata", dengan data daripada semua hasil yang diperoleh semasa proses pengoptimuman, berserta metrik masing-masing.

Kamus pertama memberi tumpuan kepada penyelesaian yang berprestasi terbaik, manakala yang kedua menyediakan maklumat terperinci tentang semua penyelesaian, termasuk kos objektif dan metrik lain yang relevan.

Kamus Output:โ€‹

NamaJenisPeneranganContoh
resultdict[str, dict[str, float]]Mengandungi strategi pelaburan dari masa ke masa, dengan setiap cap masa dipetakan kepada wajaran pelaburan khusus aset (setiap wajaran ialah jumlah pelaburan yang dinormalkan oleh jumlah pelaburan keseluruhan).{'time_1': {'asset_1': 0.2, 'asset_2': 0.3, ...\}, ...\}
metadatadict[str, Any]Data yang dijana semasa analisis, termasuk penyelesaian, kos, dan metrik.Lihat contoh di bawah

Penerangan kamus metadataโ€‹

NamaJenisPeneranganContoh
session_idstrPengenal pasti unik untuk sesi IBM Quantum."d0h30qjvpqf00084fgw0"
all_samples_metricsdictKamus yang mengandungi pelbagai metrik untuk setiap sampel yang diproses semula, seperti kos atau kekangan.Lihat penerangan di bawah
sampler_countsdict[str, int]Kamus di mana kunci ialah representasi bitstring bagi penyelesaian yang disampel dan nilai ialah kiraan mereka.{"101010": 3, "111000": 1\}
asset_orderlist[str]Senarai dengan tertib pelaburan aset yang sepadan pada setiap langkah masa dalam strategi pelaburan.["Asset_0", "Asset_1", "Asset_3"]
QUBOlist[list[float]]Matriks QUBO bagi masalah.[[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...]
resource_summarydict[str, dict[str, float]]Ringkasan masa penggunaan CPU dan QPU (dalam saat) merentasi peringkat proses yang berbeza.{'RUNNING: EXECUTING_QPU': {'CPU_TIME': 412.84, 'QPU_TIME': 87.22\}, ...\}

Penerangan kamus all_samples_metricsโ€‹

NamaJenisPeneranganContoh
investment_trajectorieslist[list]Strategi pelaburan yang diperoleh daripada keadaan kuantum yang dinyahkod.[[1, 2, 2], [1, 2, 1]]

| counts | list[int] | Bilangan kali setiap trajektori pelaburan disampel. Indeks sepadan dengan investment_trajectories. | [5, 3] | | objective_costs | list[float] | Nilai fungsi objektif bagi setiap trajektori pelaburan, disusun dari terendah ke tertinggi. | [0.98, 1.25] | | sharpe_ratios | list[float] | Prestasi terlaras risiko (nisbah Sharpe) bagi setiap trajektori pelaburan. Diselaraskan mengikut indeks. | [1.1, 0.7] | | returns | list[float] | Pulangan yang dijangka bagi setiap trajektori pelaburan. Diselaraskan mengikut indeks. | [0.15, 0.10] | | rest_breaches | list[float] | Penyelewengan kekangan maksimum dalam setiap trajektori pelaburan. Diselaraskan mengikut indeks. | [0.0, 0.25] | | transaction_costs | list[float] | Anggaran kos transaksi yang berkaitan dengan setiap trajektori pelaburan. Diselaraskan mengikut indeks. | [0.01, 0.02] |

Mula Guna

Sahkan diri menggunakan kunci API anda dan pilih Fungsi Qiskit seperti berikut. (Coretan ini mengandaikan anda sudah menyimpan akaun anda ke persekitaran setempat anda.)

from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

# Access function
dpo_solver = catalog.load("global-data-quantum/quantum-portfolio-optimizer")

Contoh: Pengoptimuman portfolio dinamik dengan tujuh asetโ€‹

Contoh ini menunjukkan cara melaksanakan fungsi pengoptimuman portfolio dinamik (DPO) dan melaraskan tetapannya untuk prestasi optimum. Ia merangkumi langkah-langkah terperinci untuk memperhalusi parameter bagi mencapai hasil yang diingini.

Kes ini melibatkan tujuh aset, empat langkah masa, dan empat qubit resolusi, menghasilkan keperluan keseluruhan sebanyak 112 qubit.

1. Baca aset yang disertakan dalam portfolio.โ€‹

Jika semua aset dalam portfolio disimpan dalam folder pada laluan tertentu, anda boleh memuatkannya ke dalam pandas.DataFrame dan menukarnya kepada objek format dict menggunakan fungsi berikut.

import os
import glob
import pandas as pd

def read_and_join_csv(file_pattern):
"""
Reads multiple CSV files matching the file pattern and combines them into a single DataFrame.

Parameters:
file_pattern (str): The pattern to match CSV files.

Returns:
pd.DataFrame: Combined DataFrame with data from all CSV files.
"""
# Find all files matching the pattern
csv_files = glob.glob(file_pattern)
# Get the base file names without the .csv extension
file_names = [os.path.basename(f).replace(".csv", "") for f in csv_files]
# Read each CSV file into a DataFrame and set the first column as the index
df_list = [pd.read_csv(f).set_index("Unnamed: 0") for f in csv_files]

# Rename columns in each DataFrame to the base file names
for df, name in zip(df_list, file_names):
df.columns = [name]

# Combine all DataFrames into one by merging them side by side
combined_df = pd.concat(df_list, axis=1)
return combined_df

file_pattern = "route/to/folder/with/assets/data/*.csv"
assets = read_and_join_csv(file_pattern).to_dict()

Untuk contoh ini, kami telah menggunakan aset 8801.T, CLF, GBPJPY, ITX.MC, META, TMBMKDE-10Y, dan XS2239553048. Rajah berikut menggambarkan data yang digunakan dalam contoh ini, menunjukkan evolusi harga penutup harian aset dari 1 Januari hingga 1 September 2023.

Dalam contoh ini, untuk memastikan keseragaman merentasi tarikh, kami telah mengisi hari bukan perdagangan dengan harga penutup dari tarikh yang tersedia sebelumnya. Kami melaksanakan langkah ini kerana aset yang dipilih berasal dari pasaran berbeza dengan hari perdagangan yang berbeza-beza, menjadikannya penting untuk menyeragamkan set data bagi konsistensi. Visualisasi data sejarah aset

2. Takrifkan masalah.โ€‹

Takrifkan spesifikasi masalah dengan mengkonfigurasi parameter dalam kamus qubo_settings.

qubo_settings = {
"nt": 4,
"nq": 4,
"dt": 30,
"max_investment": 25,
"risk_aversion": 1000.0,
"transaction_fee": 0.01,
"restriction_coeff": 1.0,
}

3. Takrifkan tetapan pengoptimum dan ansatz. (Pilihan)โ€‹

Secara pilihan takrifkan keperluan khusus untuk proses pengoptimuman, termasuk pemilihan pengoptimum dan parameternya, serta spesifikasi primitif dan konfigurasinya.

Untuk Ansatz Tailored, saiz populasi yang dipilih berdasarkan eksperimen terdahulu yang menunjukkan nilai ini menghasilkan pengoptimuman yang stabil dan cekap.

Dalam kes Ansatz Real Amplitudes, anda boleh mengikuti hubungan linear antara population_size dan bilangan qubit dalam Circuit. Sebagai peraturan anggaran, adalah disyorkan untuk menggunakan minimum population_size ~ 0.8 * n_qubits untuk ansatz real_amplitudes.

Dijangkakan bahawa Optimized Real Amplitudes akan mempunyai prestasi pengoptimuman yang lebih baik daripada ansatz Real Amplitudes. Walau bagaimanapun, bilangan pemboleh ubah yang perlu dioptimumkan dalam ansatz ini meningkat jauh lebih pantas berbanding kes Real Amplitudes (lihat manuskrip). Oleh itu, untuk masalah besar, Optimized Real Amplitudes memerlukan lebih banyak pelaksanaan Circuit. Optimized Real Amplitudes berkemungkinan berguna untuk masalah yang memerlukan hingga 100 qubit, tetapi adalah disyorkan untuk berhati-hati semasa menetapkan parameter population_size. Sebagai contoh peningkatan skala dalam population_size, jadual sebelumnya menunjukkan bahawa untuk masalah 84 qubit, Optimized Real Amplitudes memerlukan population_size 120, manakala untuk masalah 56 qubit, population_size 40 sudah mencukupi.

optimizer_settings = {
"de_optimizer_settings": {
"num_generations": 20,
"population_size": 90,
"recombination": 0.4,
"max_parallel_jobs": 5,
"max_batchsize": 4,
"mutation_range": [0.0, 0.25],
},
"optimizer": "differential_evolution",
"primitive_settings": {
"estimator_shots": 25_000,
"estimator_precision": None,
"sampler_shots": 100_000,
},
}

Anda juga boleh memilih ansatz tertentu. Contoh berikut menggunakan ansatz 'Tailored'.

ansatz_settings = {
"ansatz": "tailored",
"multiple_passmanager": False,
}

4. Jalankan masalah.โ€‹

dpo_job = dpo_solver.run(
assets=assets,
qubo_settings=qubo_settings,
optimizer_settings=optimizer_settings,
ansatz_settings=ansatz_settings,
backend_name="<backend name>",
previous_session_id=[],
apply_postprocess=True,
)

5. Dapatkan semula keputusan.โ€‹

Seperti yang dinyatakan dalam bahagian Output, fungsi mengembalikan kamus dengan trajektori pelaburan yang disusun dari terendah ke tertinggi mengikut nilai fungsi objektifnya. Set hasil ini membolehkan pengenalpastian trajektori dengan kos terendah dan penilaian pelaburan yang sepadan. Selain itu, ia membolehkan analisis trajektori berbeza, memudahkan pemilihan yang paling sesuai dengan keperluan atau objektif tertentu. Fleksibiliti ini memastikan pilihan dapat disesuaikan untuk memenuhi pelbagai keutamaan atau senario. Mulakan dengan mempersembahkan strategi hasil yang mencapai kos objektif terendah yang ditemui semasa proses.

# Get the results of the job
dpo_result = dpo_job.result()

# Show the solution strategy
dpo_result["result"]
{'time_step_0': {'8801.T': 0.11764705882352941,
'ITX.MC': 0.20588235294117646,
'META': 0.38235294117647056,
'GBPJPY=X': 0.058823529411764705,
'TMBMKDE-10Y': 0.0,
'CLF': 0.058823529411764705,
'XS2239553048': 0.17647058823529413},
'time_step_1': {'8801.T': 0.11428571428571428,
'ITX.MC': 0.14285714285714285,
'META': 0.2,
'GBPJPY=X': 0.02857142857142857,
'TMBMKDE-10Y': 0.42857142857142855,
'CLF': 0.0,
'XS2239553048': 0.08571428571428572},
'time_step_2': {'8801.T': 0.0,
'ITX.MC': 0.09375,
'META': 0.3125,
'GBPJPY=X': 0.34375,
'TMBMKDE-10Y': 0.0,
'CLF': 0.0,
'XS2239553048': 0.25},
'time_step_3': {'8801.T': 0.3939393939393939,
'ITX.MC': 0.09090909090909091,
'META': 0.12121212121212122,
'GBPJPY=X': 0.18181818181818182,
'TMBMKDE-10Y': 0.0,
'CLF': 0.0,
'XS2239553048': 0.21212121212121213}}

Selepas itu, menggunakan metadata, anda boleh mengakses hasil semua strategi yang disampel. Anda kemudiannya boleh menganalisis lebih lanjut trajektori alternatif yang dikembalikan oleh pengoptimum. Untuk melakukan ini, baca kamus yang disimpan dalam dpo_result['metadata']['all_samples_metrics'], yang mengandungi bukan sahaja maklumat tambahan tentang strategi optimum, tetapi juga butiran strategi calon lain yang dinilai semasa pengoptimuman.

Contoh berikut menunjukkan cara membaca maklumat ini menggunakan pandas untuk mengekstrak metrik utama yang berkaitan dengan strategi optimum. Ini termasuk Penyelewengan Kekangan, Nisbah Sharpe, dan pulangan pelaburan yang sepadan.

# Convert metadata to a DataFrame
df = pd.DataFrame(dpo_result["metadata"]["all_samples_metrics"])

# Find the minimum objective cost
min_cost = df["objective_costs"].min()
print(f"Minimum Objective Cost Found: {min_cost:.2f}")

# Extract the row with the lowest cost
best_row = df[df["objective_costs"] == min_cost].iloc[0]

# Display the results associated with the best solution
print("Best Solution:")
print(f" - Restriction Deviation: {best_row['rest_breaches']}%")
print(f" - Sharpe Ratio: {best_row['sharpe_ratios']:.2f}")
print(f" - Return: {best_row['returns']}")
Minimum Objective Cost Found: -3.78
Best Solution:
- Restriction Deviation: 40.0
- Sharpe Ratio: 24.82
- Return: 0.46

6. Analisis prestasiโ€‹

Akhir sekali, analisis prestasi aplikasi pengoptimuman anda. Khususnya, bandingkan keputusan anda yang diperoleh dalam contoh sebelumnya dengan garis dasar rawak untuk menilai keberkesanan pendekatan kami. Jika algoritma kuantum secara nyata dan konsisten menghasilkan keputusan dengan nilai kos yang lebih rendah, ini menunjukkan proses pengoptimuman yang berkesan.

Rajah membentangkan taburan kebarangkalian kos objektif. Untuk menjana taburan ini, ambil senarai kos objektif daripada hasil fungsi dan kira kejadian setiap nilai kos (nilai dibundarkan kepada dua tempat perpuluhan). Kemudian, kemaskini lajur kiraan dengan sewajarnya dengan menggabungkan kiraan nilai yang dibundarkan yang sama. Perhatikan bahawa, untuk perbandingan visual yang lebih baik, kiraan kejadian telah dinormalkan supaya setiap taburan dipaparkan antara 0 dan 1. Visualisasi penyelesaian pengoptimuman Seperti yang ditunjukkan dalam rajah (garisan pepejal biru), taburan kos untuk pendekatan Variational Quantum Eigensolver kami (diproses semula dengan SQD) terumpu rapat pada nilai kos objektif yang lebih rendah, menunjukkan prestasi pengoptimuman yang baik. Sebaliknya, garis dasar berhingar menunjukkan taburan yang lebih luas, berpusat pada nilai kos yang lebih tinggi. Garisan menegak putus-putus kelabu mewakili nilai min taburan rawak, seterusnya menonjolkan konsistensi fungsi dalam mengembalikan strategi pelaburan yang dioptimumkan. Untuk perbandingan tambahan, garisan putus-putus hitam dalam rajah sepadan dengan penyelesaian yang diperoleh dengan pengoptimum Gurobi (versi percuma). Semua keputusan ini diterokai lebih lanjut dalam penanda aras di bawah untuk contoh "Aset Campuran" yang dinilai dengan ansatz "Tailored".

Penanda Aras

Fungsi ini telah diuji di bawah konfigurasi berbeza bagi qubit resolusi, Circuit ansatz, dan kumpulan aset dari pelbagai sektor: campuran aset berbeza (Set 1), derivatif minyak (Set 2), dan IBEX35 (Set 3). Lihat butiran lanjut dalam jadual berikut.

SetTarikhAset
Set 101/01/20238801.T, CL=F, GBPJPY=X, ITX.MC, META, TMBMKDE-10Y, XS2239553048
Set 201/06/2023CL=F, BZ=F, HO=F, NG=F, XOM, RB=F, 2222.SR
Set 301/11/2022ACS.MC, ITX.MC, FER.MC, ELE.MC, SCYR.MC, AENA.MC, AMS.MC

Dua metrik utama digunakan untuk menilai kualiti penyelesaian.

  1. Kos objektif, yang mengukur kecekapan pengoptimuman dengan membandingkan nilai fungsi kos daripada setiap eksperimen dengan hasil dari Gurobi (versi percuma).
  2. Nisbah Sharpe, yang merangkumi pulangan terlaras risiko setiap portfolio, memberikan gambaran tentang prestasi kewangan penyelesaian.

Bersama-sama, metrik ini menanda aras aspek pengiraan dan kewangan portfolio yang dijana secara kuantum.

ContohQubitAnsatzKedalamanPenggunaan Runtime (s)Jumlah penggunaan (s)Kos objektifSharpeKos objektif GurobiSharpe Gurobi
Aset Campuran (Set 1, 4 langkah masa, 4-bit)112Tailored831273513095-3.7824.82-4.2524.71
Aset Campuran (Set 1, 4 langkah masa, 4 langkah masa, 4-bit)112Real Amplitudes3591173911903-3.3923.64-4.2524.71
Derivatif Minyak (Set 2, 4 langkah masa, 3-bit)84Optimized Real Amplitudes7861806350-3.7319.13-4.1921.71
IBEX35 (Set 3, 4 langkah masa, 2-bit)56Optimized Real Amplitudes9633143523-3.6714.48-4.1116.44

Keputusan menunjukkan bahawa pengoptimum kuantum, dengan ansatz khusus masalah, secara berkesan mengenal pasti strategi pelaburan yang cekap merentasi pelbagai jenis portfolio. Di bawah ini kami merincikan saiz populasi dan bilangan generasi yang dinyatakan dalam kamus optimizer_options. Semua parameter lain ditetapkan kepada nilai lalainya.

Contohpopulation_sizenum_generations
Portfolio Aset Campuran9020
Portfolio Aset Campuran9220
Portfolio Derivatif Minyak12020
Portfolio IBEX354020

Bilangan generasi ditetapkan kepada 20, kerana nilai ini didapati mencukupi untuk mencapai penumpuan. Selain itu, nilai lalai untuk parameter dalaman pengoptimum dibiarkan tidak berubah, kerana ia secara konsisten memberikan prestasi yang baik dan umumnya disyorkan oleh literatur dan garis panduan pelaksanaan.

Dapatkan Sokongan

Jika anda memerlukan bantuan, anda boleh menghantar e-mel ke qpo.support@globaldataquantum.com. Dalam mesej anda, sertakan ID kerja fungsi.

Langkah Seterusnyaโ€‹

Cadangan
Source: IBM Quantum docs โ€” updated 27 Mac 2026
English version on doQumentation โ€” updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026