Langkau ke kandungan utama

Pengoptimum Portfolio Kuantum: Fungsi Qiskit oleh Global Data Quantum

Lihat rujukan API

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

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.)

# Added by doQumentation — required packages for this notebook
!pip install -q pandas qiskit-ibm-catalog
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

Fungsi mengembalikan kamus dengan trajektori pelaburan yang disusun dari terendah ke tertinggi mengikut nilai fungsi objektifnya (lihat bahagian Output dalam rujukan API). 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