Results¶
Current code calls the historical “Fractional VQE” method a variational quantum allocator: circuit expectations parameterise weights and the portfolio objective is evaluated classically. Historical tables, figures, and manifests below retain their original labels, data, and source provenance. The corrected smoothed normalisation changes the allocation map, so new runs must use fresh output directories.
This page separates deterministic synthetic examples from real market-data examples. The plots are committed artifacts generated by the notebook clients, so the documentation build stays deterministic and does not depend on live notebook execution or market-data downloads.
These examples do not establish quantum advantage. The quantum advantage research protocol defines prospective quality targets, budgets, and decision rules for that investigation; the existing tables have not been evaluated under that protocol.
Allocator correction validation¶
The fresh 128-trial report uses the allocator validation configuration: 4 and 6 assets, two instance seeds and two solver seeds, 15 quantum training steps, and 256 binary extraction samples. It compares 20 methods across eight frozen binary/fractional problem instances, including the corrected top-return control, variational allocator, and current classical solvers.
All 128 returned portfolios passed independent feasibility checks. There were zero solver errors and zero reference contradictions. Saved candidates were rescored independently and all recorded package/runner source hashes were checked against the implementation used for this run.
This study ran from the uncommitted development tree before the v0.3.4 release. Its manifest retains the preceding Git HEAD and installed package version 0.3.3; the recorded source hashes identify the implementation actually tested.
Selected target-hit counts follow; targets use the configured normalised gap of at most 0.001 against each track’s own reference:
Track |
Method |
Target hits / trials |
|---|---|---|
Binary |
Top-return control |
2 / 4 |
Binary |
Binary VQE |
3 / 8 |
Binary |
QAOA X |
8 / 8 |
Binary |
QAOA XY, basis initialisation and ring exchanges |
1 / 8 |
Fractional |
Variational quantum allocator |
2 / 8 |
Fractional |
Projected gradient descent |
4 / 4 |
The full report includes every method, feasibility, target-hit rate, objective gap, runtime, and failures. The manifest, trial checkpoint, and CSV exports preserve inputs, settings, software versions, and source provenance. These small simulator runs are a correctness check, not a matched-budget comparison, scaling result, or quantum-advantage claim. They do not isolate a performance effect from the normalisation change or replace the historical studies below.
Historical comparison artifacts¶
Machine-readable copies of the historical comparison tables are committed under results/:
results/synthetic_comparison.csvresults/real_data_comparison.csvresults/generated_comparison_summary.csvresults/generated_repeatability_trials.csvresults/real_data_method_comparison.csvresults/larger_real_data_comparison.csvresults/ansatz_comparison.csv
For repeatable synthetic benchmark summaries, regenerate a compact comparison CSV with:
python scripts/generate_comparison_results.py
By default this writes results/generated_comparison_summary.csv with classical baselines, multi-seed quantum summaries, feasibility rates, objectives, risk/return metrics, and runtimes. It also writes results/generated_repeatability_trials.csv with one row per method/seed trial. Use --asset-counts, --seeds, --steps, and --methods to expand or tighten the run.
Stronger baselines (OSQP, HiGHS, SCIP, QP relaxation with rounding, multistart swap search, simulated annealing, tabu search, memetic genetic search, ILS, GRASP, VNS, and fractional PGD) are available through --methods classical-solvers; see usage. The historical tables listed above are not regenerated automatically. The separate small-instance validation pilot below includes OSQP, HiGHS, and swap search. SCIP, annealing, and tabu search were added in v0.3.3; QP rounding, memetic search, ILS, GRASP, VNS, and PGD are subsequent additions. None of these later methods have been added to those archived experiments.
How to Read the Tables¶
The committed tables below use the historical schema: binary feasible_rate measures sample feasibility. Newly regenerated comparisons independently validate returned portfolios, use feasible_rate for returned-portfolio feasibility, and report sample feasibility separately as sample_feasible_rate. They also include a shared problem_id, and trial rows separate original objective scores from penalized_energy. See shared problem definitions and evaluation.
For binary selection methods, lower objective is better for a fixed dataset, risk-aversion value, penalty, and cardinality. For fractional allocation methods, lower simplex objective is better at the same risk-aversion value.
Generated comparison tables include objective_family and reported_weighting columns because binary QUBO objectives and fractional simplex objectives are different mathematical objectives. In generated comparison rows, binary return and risk are reported from equal-weight selected portfolios (x / K) so risk-return plots are comparable with simplex allocations, while the binary objective remains the true QUBO objective evaluated on the raw bitstring x.
The real-data tables report values already saved in notebook outputs. Exact real-data classical optimizer rows should be regenerated together with the market-data notebooks because adjusted prices and shrinkage estimates are provider-dependent.
Small-Instance Validation Pilot¶
The validation runner completed 198 trials across 4, 6 and 8 securities, with three independent synthetic factor-model instances per size and three solver seeds per stochastic method. Binary cardinality is half the universe size. Quantum methods use 25 optimisation steps on a noiseless simulator; the binary methods sample 512 candidates. Fractional allocation is a separate control track. See the configuration and reproduction instructions and full report.
All 198 returned portfolios passed independent feasibility checks. No solver exceptions or reference contradictions were recorded. The target is a feasible normalised objective gap of at most 0.001 against the corresponding reference, using the scale defined in the research protocol.
Method |
Target hit: 4 securities |
6 securities |
8 securities |
|---|---|---|---|
Classical methods (each, in its own track) |
100% |
100% |
100% |
Binary VQE |
66.7% |
33.3% |
0% |
QAOA X |
100% |
100% |
100% |
QAOA XY |
66.7% |
66.7% |
0% |
Fractional VQE |
33.3% |
11.1% |
33.3% |
QAOA X returned the exact binary optimum in every trial, but the classical best-of-512 uniformly sampled feasible subsets baseline also did so. These small search spaces therefore do not establish a benefit from quantum parameter optimisation. All classical comparators had shorter mean runtimes than the corresponding quantum simulator methods in this run. These timings describe the tested implementation and machine, not QPU performance.
The pilot validates the comparison pipeline and exposes reliability differences for these settings. It has no matched end-to-end time budgets, uncertainty estimates or held-out tuning study, and does not establish quantum advantage or a scaling law. In particular, the three tested sizes do not justify extrapolating a crossover. Frozen inputs, references, software/source metadata, raw candidates and trial-level scores are saved under results/small_instance_validation/.
Effect of Training on Binary Circuit Distributions¶
The before/after diagnostic compares each full circuit at its initial random parameters and after 25 Adam updates, using the same nine frozen binary problems and three initialisation seeds. All 81 pairs completed without errors. The measure below is the exact single-draw probability of a feasible portfolio within the normalised quality target (0.001), not the chance of finding one after 512 samples. No sampling or Top-K repair is used in this diagnostic.
Securities |
Method |
Initial target probability |
Trained target probability |
Improved / worsened pairs |
|---|---|---|---|---|
4 |
Binary VQE |
6.124% |
26.65% |
4 / 5 |
4 |
QAOA X |
6.346% |
11.64% |
8 / 1 |
4 |
QAOA XY |
24.64% |
41.17% |
5 / 1 |
6 |
Binary VQE |
0.9142% |
18.53% |
4 / 5 |
6 |
QAOA X |
2.075% |
4.312% |
8 / 1 |
6 |
QAOA XY |
4.226% |
35.55% |
5 / 1 |
8 |
Binary VQE |
0.5765% |
0.003692% |
0 / 9 |
8 |
QAOA X |
0.5499% |
1.090% |
9 / 0 |
8 |
QAOA XY |
approximately zero |
approximately zero |
0 / 0 |
Means average seeds within each instance, then give instances equal weight. Improved/worsened counts use a numerical deadband of 1e-12 probability; remaining pairs are unchanged within that tolerance. Numerically negligible QAOA XY target mass at eight securities is below that deadband before and after training.
Training improves mean target probability at four and six securities for all three methods, but Binary VQE worsens in five of nine runs at each of those sizes: a few large gains raise the mean. At eight securities, Binary VQE’s mean feasibility rises from 30.52% to 97.22%, while its target probability falls in every run. QAOA X improves unconditional target probability in 25 of 27 pairs; its mean target probability conditional on feasibility nevertheless decreases at four and six securities. Better constraint satisfaction and better selection among feasible portfolios are distinct outcomes.
These observations apply to the tested settings and small development-instance sample. They do not establish an advantage over classical methods, statistical significance, or a scaling law. Fractional allocation is outside this binary sampling diagnostic. The full report, paired metrics, checkpointed raw distributions and plot are saved separately from the original validation artifacts.
Sampling Allowance: 16, 64 and 512 Draws¶
The sampling allowance diagnostic reuses all 81 initial/trained pairs. For each run it calculates 1 - (1 - p)^m before averaging across seeds and instances. It also evaluates uniform sampling of feasible exact-K subsets with replacement, once per instance and allowance. No training or new sampling occurs. Success requires at least one raw feasible target-quality portfolio; infeasible circuit samples consume draws, and no Top-K repair is applied.
At eight securities, the expected success probabilities are:
Distribution |
16 draws |
64 draws |
512 draws |
|---|---|---|---|
Binary VQE, initial |
8.446% |
26.15% |
61.23% |
Binary VQE, trained |
0.05893% |
0.2339% |
1.740% |
QAOA X, initial |
8.344% |
28.48% |
87.15% |
QAOA X, trained |
15.92% |
48.79% |
98.03% |
QAOA XY, initial or trained |
approximately zero |
approximately zero |
approximately zero |
Classical uniform feasible |
26.08% |
68.24% |
99.96% |
Increasing the allowance to 512 makes QAOA X highly reliable in this small pilot, but the classical baseline matches or exceeds every original fixed-setting circuit’s mean success probability at every tested size and allowance. No sampling-reliability advantage is observed for those circuits and settings.
The before/after result depends on the allowance: Binary VQE at four and six securities has a higher mean single-draw target probability after training, yet its expected 512-draw success falls from 89.74% to 49.96% and from 68.85% to 34.05%, respectively. A few large single-draw gains coexist with runs where target probability becomes tiny. Evaluating the nonlinear success formula on the mean single-draw probability would hide that heterogeneity.
These analytical probabilities are not the observed fractions in the earlier finite-sample pilot. The calculation assumes independent fixed-distribution draws with replacement, excludes training/execution costs and does not establish a computational or quantum advantage. Tables may round probabilities near certainty to 100%; CSVs retain full precision. See the full report and curves, per-run allowance results and summary.
Training Effort: 0, 25 and 100 Steps¶
The training-effort study completed 81 uninterrupted Adam trajectories and evaluated 243 checkpoint distributions. All initial and step-25 parameters/probabilities reproduced the saved diagnostic within numerical tolerance. Optimiser moments were preserved through step 100; distribution evaluation occurred after training, outside the cumulative optimisation timer. No trajectory errors occurred.
The effect of extending training from 25 to 100 steps on expected success within 512 raw draws was:
Securities |
Method |
25 steps |
100 steps |
|---|---|---|---|
4 |
Binary VQE |
49.96% |
66.67% |
4 |
QAOA X |
approximately 100% |
approximately 100% |
4 |
QAOA XY |
66.67% |
66.67% |
6 |
Binary VQE |
34.05% |
22.22% |
6 |
QAOA X |
approximately 100% |
approximately 100% |
6 |
QAOA XY |
66.67% |
66.67% |
8 |
Binary VQE |
1.740% |
<0.00001% |
8 |
QAOA X |
98.03% |
98.42% |
8 |
QAOA XY |
approximately zero |
approximately zero |
More training does not consistently improve reliability under these settings. At six securities, Binary VQE’s mean single-draw target probability increases from 18.53% to 22.21%, while 512-draw success decreases: two runs improve and seven worsen between checkpoints. At eight securities, all nine Binary VQE runs worsen, despite mean feasibility approaching 100%. QAOA XY’s negligible eight-security target probability persists.
For eight securities, QAOA X’s extra 75 steps improve expected 512-draw success by about 0.391 percentage points, while measured mean cumulative optimiser time rises from 2.11 to 8.17 seconds. Uniform feasible classical sampling from the prior allowance analysis reaches 99.96% at the same draw count, excluding execution/training costs. This does not establish quantum advantage or a fixed-time comparison.
The full report includes single-draw quality, feasibility, all three sampling allowances and cumulative times. Paired plots show individual runs, and summary plots show means. Raw parameters/distributions, input/source hashes and paired changes are retained. This development study uses the existing small instance set; settings chosen from it need fresh held-out evaluation.
Eight-Security Failure Diagnostics¶
The failure study completed 81 depth/penalty variants on the three frozen eight-security instances and three seeds: 18 verified baseline trajectories were reused and 63 new trajectories were trained. All use the inherited 100-step effort and checkpoints at 0, 25 and 100. No errors occurred. Exact support, penalty thresholds, raw distributions, modal portfolios, gradients and illustrative swap-path barriers are retained with input/source hashes.
XY QAOA has a structural depth-1 obstruction. From its initial 11110000 portfolio, the ordered mixer can reach only 11110000, 11101000, 01110001 and 01101001 at depth 1. Exact integer Laurent-polynomial amplitudes establish that support for all beta angles. None of the target portfolios in any of the three instances is in that set. The first cost angle contributes only a global phase; extra optimisation cannot overcome this depth-1 exclusion.
At depths 2 and 3, gate-path support upper bounds cover 66 and 70 of the 70 feasible bitstrings, respectively. These are bounds rather than exact higher-depth reachability claims. Actual initial distributions have positive target mass at the higher depths, demonstrating that targets can be reached, but the 100-step training sharply reduces it. At depth 3, expected 512-draw success is only 1.107% after training. Removing the depth-1 obstruction alone does not produce reliable optimisation under the tested settings.
Binary VQE has sufficient basis-state expressivity at both depths. A direct RY parameter construction represents every basis portfolio, including the targets. The baseline penalty of 5 also exceeds all three exhaustive strict-sufficiency thresholds: approximately 0.02923, 0.06385 and 0.009771. Thus the baseline failure is not explained by unrepresentable target states or an infeasible global penalised optimum.
At 100 steps, the VQE sensitivity results are:
Depth |
Alpha |
Mean feasibility |
Expected success: 512 draws |
|---|---|---|---|
2 |
0.05 |
88.89% |
44.45% |
2 |
0.5 |
approximately 100% |
approximately zero |
2 |
5 |
approximately 100% |
approximately zero |
3 |
0.05 |
66.71% |
65.54% |
3 |
0.5 |
approximately 100% |
11.11% |
3 |
5 |
approximately 100% |
approximately zero |
Alpha 0.05 is below the feasibility-sufficiency threshold for instance 202, where its penalised ground state is infeasible. Its improved sampling results are not a validated universal penalty choice. Quality always scores the original feasible objective; infeasible samples consume draws. All nine baseline VQE modal portfolios are feasible yet admit an improving one-for-one swap. Their measured gradients and barriers along a specified product-state swap path are diagnostics, not certificates of convergence, local minima or barriers along all possible entangled paths.
The support figure, sensitivity figure, VQE convergence figure and full report separate structural exclusion, penalty adequacy and observed training behaviour. These development results do not establish a scaling law or quantum advantage, and settings chosen from this grid require fresh held-out evaluation.
v0.3.1 solver reliability and deadline pilots¶
The solver reliability study compares reference-free penalty selection, normalization, restarts, best-iterate selection, and learning-rate decay for Binary VQE, plus basis/Dicke initial states and ring/complete XY networks. Every variant receives the same total Adam updates; wall-clock time and circuit-evaluation counts are not equalized. Exact target probabilities are evaluated after training on the frozen original objectives.
Across the three eight-asset development instances and three seeds, switching XY QAOA from basis/ring to Dicke/ring raises mean analytical success within 64 draws from 0% to 90.96%; uniform exact-K sampling reaches 68.24%. The combined Binary VQE restart strategy reaches 11.89%, versus 0.19% for its legacy control. These results use 24 total Adam updates per run and do not establish runtime improvement or held-out performance.
The fixed-deadline pilot evaluates portfolios received within explicit end-to-end allowances, including process startup, encoding, training, sampling, repair, and delivery. It retains failed returns, cleanup overruns, and incumbent trajectories. Per-instance T90 includes censored failures and is unreached when fewer than 90% succeed. Numerical references keep their numerical status. These development pilots provide no held-out statistical or quantum-advantage claim; historical reports above are unchanged.
The committed deadline pilot uses one four-asset instance and one run per method and allowance to check execution behavior. Re-run its settings with the current runner in a new directory (exact historical reproduction requires v0.3.1 sources):
python scripts/run_budget_benchmark.py --asset-counts 4 --instance-seeds 101 \
--seeds 0 --steps 24 --checkpoint-every 4 --budgets 1,10,60 \
--methods binary-vqe,qaoa-x,qaoa-xy,highs,swap,random-k,fractional-vqe,osqp \
--output-dir results/my_budget_pilot
Fresh-instance deadline comparison¶
The fresh-instance report contains 594 completed trials across 4, 6, and 8 assets, three fresh factor-model instances per size (seeds 707, 808, and 909), two run seeds, and independent 1/10/60-second allowances. Settings were fixed before evaluating these inputs. The runner rejects overlap with the declared development manifests and saves their hashes. See the frozen configuration and reproduction instructions.
The central comparison uses identical production parameter initializations for trained and untrained Dicke-ring XY QAOA. The trained variant publishes candidates during 24 Adam updates, then repeatedly samples the final parameters for its remaining allowance. The untrained control repeatedly samples its initial parameters with zero updates. Both execute actual 64-shot circuit batches. Sampling can stop once every feasible portfolio has actually been observed, using only the domain size rather than a reference target. Other trained comparators retain their declared finite update caps and ordinary final sampling.
At the primary 10-second allowance, binary target-hit rates are:
Binary method/variant |
4 assets |
6 assets |
8 assets |
|---|---|---|---|
Binary VQE, legacy |
50.0% |
33.3% |
16.7% |
Binary VQE, improved |
83.3% |
100.0% |
33.3% |
QAOA X |
100.0% |
100.0% |
100.0% |
XY QAOA, basis/ring |
33.3% |
0.0% |
66.7% |
XY QAOA, Dicke/ring, trained |
100.0% |
100.0% |
100.0% |
XY QAOA, Dicke/ring, untrained |
100.0% |
100.0% |
100.0% |
HiGHS, swap search, uniform exact-K (each) |
100.0% |
100.0% |
100.0% |
Each cell contains six runs, with instances weighted equally. Trained and untrained Dicke-ring circuits and all three classical controls return the exact binary optimum in every 10-second run. This endpoint therefore shows no quality or target-hit benefit from training at these sizes. These are elapsed-time outcomes, distinct from the historical analytical success probabilities at a fixed 64-draw allowance. Across the 18 primary-budget runs per method, mean observed first-target times are 2.01 seconds for trained Dicke-ring, 1.87 seconds for untrained Dicke-ring, and between 1.74 and 1.83 seconds for the three classical controls. These are descriptive implementation timings, without uncertainty estimates or a hardware speed claim.
In the separate fractional control track, Fractional VQE hits its own target in 50.0%, 16.7%, and 33.3% of 10-second runs at 4, 6, and 8 assets, respectively; OSQP reaches 100.0% at each size. Binary and fractional objectives are not pooled.
All 198 one-second runs time out during startup, before worker setup is observed. Where worker entry is observed, startup averages 1.77 seconds on this environment (range 1.47 to 3.63 seconds). Every 10/60-second run returns a feasible portfolio. Four runs reach their deadline after returning an incumbent; these remain in the denominators with their delivered portfolios. No solver errors or reference contradictions occur. Maximum observed cleanup overrun is 0.0344 seconds and does not extend candidate eligibility. Parent validation must finish before the deadline for a portfolio to count.
Timing records separate startup, setup, optimization, candidate processing, delivery, parent validation, cleanup, and interrupted phases. Delivery and validation overlap worker work and must not be added to the worker phase totals. Paired records retain matched instance/seed/budget outcomes and failed returns; conditional quality differences require two feasible outputs. The saved empirical T90 uses only two repeats per instance and is a coarse descriptive statistic. This small fresh-instance check has no confidence intervals, formal held-out tuning study, scaling conclusion, or quantum-advantage claim. Historical evidence is preserved.
Synthetic Results¶
Synthetic examples use fixed in-notebook arrays and are therefore the best place for deterministic method-to-baseline comparisons.
Generated Baseline and Repeatability Results¶
The generated comparison files add baseline rows and repeatability summaries from deterministic synthetic data:
Binary baselines: exact exhaustive search, top-return subset, and minimum-variance subset
Continuous baselines: equal-weight allocation and exact long-only Markowitz
Quantum repeatability: Binary VQE, QAOA X, QAOA XY, and Fractional VQE summarized across seeds, with per-seed rows saved separately
Objective plots are split by objective family so binary QUBO objectives are not visually mixed with fractional simplex objectives
The committed generated CSVs are lightweight benchmark artifacts. Regenerate them after algorithm changes with:
python scripts/generate_comparison_results.py
Dataset |
Method |
Objective family |
Reported weighting |
Seeds |
Mean return |
Mean risk |
Best objective |
Mean objective |
Std objective |
Feasible rate |
|---|---|---|---|---|---|---|---|---|---|---|
Synthetic generated n=4 |
Classical exhaustive search |
binary QUBO |
equal-weight selected |
1 |
0.102055 |
0.174865 |
0.285137 |
0.285137 |
0.000000 |
1.000000 |
Synthetic generated n=4 |
Classical top-return heuristic |
binary QUBO |
equal-weight selected |
1 |
0.161566 |
0.209324 |
0.377932 |
0.377932 |
0.000000 |
1.000000 |
Synthetic generated n=4 |
Classical minimum-variance subset |
binary QUBO |
equal-weight selected |
1 |
0.102055 |
0.174865 |
0.285137 |
0.285137 |
0.000000 |
1.000000 |
Synthetic generated n=4 |
Classical equal weight |
fractional simplex |
simplex weights |
1 |
0.118063 |
0.129968 |
-0.050496 |
-0.050496 |
0.000000 |
1.000000 |
Synthetic generated n=4 |
Classical exact Markowitz |
fractional simplex |
simplex weights |
1 |
0.125046 |
0.133935 |
-0.053292 |
-0.053292 |
0.000000 |
1.000000 |
Synthetic generated n=4 |
Binary VQE best feasible |
binary QUBO |
equal-weight selected |
3 |
0.107872 |
0.177643 |
0.285137 |
0.289414 |
0.006049 |
0.978516 |
Synthetic generated n=4 |
QAOA X best feasible |
binary QUBO |
equal-weight selected |
3 |
0.102055 |
0.174865 |
0.285137 |
0.285137 |
0.000000 |
0.699219 |
Synthetic generated n=4 |
QAOA XY best feasible |
binary QUBO |
equal-weight selected |
3 |
0.102055 |
0.174865 |
0.285137 |
0.285137 |
0.000000 |
1.000000 |
Synthetic generated n=4 |
Fractional VQE |
fractional simplex |
simplex weights |
3 |
0.123596 |
0.132920 |
-0.053289 |
-0.052921 |
0.000415 |
1.000000 |

Ansatz Comparison Results¶
The ansatz comparison notebook is a compact pure-package client for the Binary VQE and Fractional VQE ansatz options. It writes results/ansatz_comparison.csv and keeps method/ansatz colors consistent across its risk-return, objective, and feasibility plots.
Regenerate it with:
python scripts/generate_ansatz_comparison.py

Synthetic Discrete Selection¶
Dataset |
Method |
Type |
λ |
K |
Selection |
Return |
Risk |
Variance |
Objective |
Feasible |
|---|---|---|---|---|---|---|---|---|---|---|
Synthetic binary toy |
Classical exhaustive search |
Classical |
5.0 |
2 |
|
0.300000 |
0.158114 |
0.025000 |
-0.175000 |
yes |
Synthetic binary toy |
Binary VQE Top-K |
Quantum |
5.0 |
2 |
|
0.320000 |
0.256905 |
0.066000 |
0.010000 |
yes |
Synthetic QAOA toy |
Classical exhaustive search |
Classical |
4.0 |
2 |
|
0.250000 |
0.360555 |
0.130000 |
0.270000 |
yes |
Synthetic QAOA toy |
QAOA X/XY best feasible |
Quantum |
4.0 |
2 |
|
0.250000 |
0.360555 |
0.130000 |
0.270000 |
yes |
Synthetic QAOA toy |
QAOA X/XY Top-K |
Quantum |
4.0 |
2 |
|
0.220000 |
0.387298 |
0.150000 |
0.380000 |
yes |
Synthetic Continuous Allocation¶
Dataset |
Method |
Type |
λ |
Selection or weights |
Return |
Risk |
Objective |
Feasible |
|---|---|---|---|---|---|---|---|---|
Synthetic fractional toy |
Classical Markowitz |
Classical |
5.0 |
|
0.142785 |
0.059812 |
-0.124897 |
yes |
Synthetic fractional toy |
Fractional VQE |
Quantum |
5.0 |
continuous allocation |
0.142792 |
0.059825 |
not printed |
simplex-normalized |
Binary VQE Synthetic Figures¶
Binary VQE solves a cardinality-constrained portfolio selection problem by mapping the QUBO objective to an Ising Hamiltonian and minimizing its expectation value with a parameterized circuit.
Artifact |
What it shows |
|---|---|
Circuit |
Hardware-efficient binary VQE ansatz used by the notebook client |
Convergence |
Optimizer cost trace over training steps |
Probabilities |
Selection probability distribution after optimization |
Bitstrings |
Most likely sampled portfolio bitstrings |
Lambda sweep |
Risk-return behavior as the risk-aversion parameter changes |
Efficient frontier |
Binary candidates compared across return/risk tradeoffs |

QAOA Synthetic Figures¶
QAOA solves the binary portfolio objective with alternating cost and mixer unitaries. The synthetic notebook compares standard X-mixer sampling with constraint-aware XY-mixer behavior.
Artifact |
What it shows |
|---|---|
Candidate comparison |
Top-K, mode, and best-feasible sampled bitstrings |
Mixer comparison |
X and XY mixer behavior on the same binary objective |
Final portfolio metrics |
Return, quadratic risk, and objective for the selected feasible bitstring |
Fractional VQE Synthetic Figures¶
Fractional VQE optimizes long-only continuous allocations on the simplex. This complements binary selection by producing allocation weights directly rather than choosing a fixed-size subset.
Artifact |
What it shows |
|---|---|
Circuit |
Fractional VQE ansatz used for continuous allocation |
Convergence |
Optimizer behavior for the fractional objective |
Probabilities |
Allocation-related distribution from the fractional workflow |
Final allocation |
Portfolio weights displayed as a pie chart |
Lambda sweep |
Allocation changes over risk-aversion settings |
Efficient frontier |
Fractional allocation frontier from optimized portfolios |

Classical Markowitz Synthetic Figures¶
The classical Markowitz notebook provides reference plots for interpreting quantum portfolio outputs. These plots are useful for checking whether quantum-generated candidates sit in sensible risk-return regions.
Artifact |
What it shows |
|---|---|
Risk-return scatter |
Candidate portfolios colored by return/risk behavior |
Markowitz lambda sweep |
Classical allocation changes across risk-aversion settings |

Real-Data Results¶
Real-data notebooks use market data for a fixed 2024-01-01 to 2025-01-01 window. The committed values below come from notebook output cells and should be regenerated whenever the real-data notebooks are rerun.
Real-Data Summary¶
Dataset |
Method |
Type |
Window |
Selection or frontier |
Return |
Risk |
Objective |
Feasible |
|---|---|---|---|---|---|---|---|---|
Real binary example |
Binary VQE Top-K |
Quantum |
2024-01-01 to 2025-01-01 |
NVDA, AMZN |
0.681501 |
0.335301 |
not printed |
yes |
Real binary example |
Classical equal-weight evaluation |
Classical evaluation |
2024-01-01 to 2025-01-01 |
NVDA, AMZN |
0.681501 |
0.335301 |
not printed |
yes |
Real QAOA example |
QAOA X best feasible |
Quantum |
2024-01-01 to 2025-01-01 |
AAPL, NVDA |
not printed |
not printed |
-0.205323 |
yes |
Real QAOA example |
QAOA XY best feasible |
Quantum |
2024-01-01 to 2025-01-01 |
AAPL, NVDA |
not printed |
not printed |
-0.205323 |
yes |
Real-Data Method Comparison¶
notebooks/Real_Data_Comparison.ipynb writes results/real_data_method_comparison.csv and plots the same-method comparison from those rows.
Binary rows use equal-weight selected portfolios for reported return and risk, while objective values remain true binary QUBO objectives. Fractional rows use simplex weights and simplex objectives.

Larger Real-Data Universe¶
scripts/generate_larger_real_data_example.py writes results/larger_real_data_comparison.csv, regenerates notebooks/examples/04_Larger_Real_Data_Example.ipynb, and saves figures for a 12-stock 2024 market-data window. The binary and QAOA methods use one qubit per asset, so this example is deliberately a scalability/stress example rather than a claim of production scale or quantum advantage.
Regenerate it with:
python scripts/generate_larger_real_data_example.py
Method |
Objective family |
K |
Selection or weights |
Return |
Risk |
Best objective |
Feasible rate |
|---|---|---|---|---|---|---|---|
Classical exhaustive search |
binary QUBO |
5 |
AAPL, NVDA, JPM, JNJ, PG |
0.341060 |
0.128919 |
-0.043287 |
1.000000 |
Binary VQE best feasible |
binary QUBO |
5 |
NVDA, XOM, JNJ, PG, HD |
0.257295 |
0.120824 |
0.173363 |
0.777344 |
QAOA X best feasible |
binary QUBO |
5 |
AAPL, META, JPM, PG, UNH |
0.248903 |
0.117525 |
0.136708 |
0.343750 |
QAOA XY best feasible |
binary QUBO |
5 |
MSFT, NVDA, GOOGL, JPM, UNH |
0.346208 |
0.172098 |
1.230733 |
1.000000 |
Classical exact Markowitz |
fractional simplex |
simplex weights |
0.580921 |
0.226857 |
-0.375066 |
1.000000 |
|
Fractional VQE |
fractional simplex |
simplex weights |
0.549605 |
0.217478 |
-0.360419 |
1.000000 |

Real Fractional Frontier¶
Method |
λ |
Return |
Risk |
|---|---|---|---|
Fractional VQE |
8.00 |
0.324008 |
0.144192 |
Fractional VQE |
4.00 |
0.340232 |
0.151739 |
Fractional VQE |
2.00 |
0.340300 |
0.151828 |
Fractional VQE |
1.00 |
0.340450 |
0.152215 |
Fractional VQE |
0.50 |
0.340788 |
0.153889 |
Real Binary VQE Figures¶
Example |
Workflow |
Figures |
|---|---|---|
|
Binary VQE |
Convergence, probabilities, Top-K selection |

Real QAOA Figures¶
Example |
Workflow |
Figures |
|---|---|---|
|
QAOA |
Mixer comparison, probabilities, Top-K selections |

Real Fractional VQE Figures¶
Example |
Workflow |
Figures |
|---|---|---|
|
Fractional VQE |
Allocation, frontier, lambda sweep, convergence |

Reproducing These Figures¶
Run the notebooks from the repository root after installing the relevant extras:
pip install -e ".[all]"
Then open the notebook clients:
notebooks/Binary.ipynbnotebooks/QAOA.ipynbnotebooks/Fractional.ipynbnotebooks/Benchmark_Comparison.ipynbnotebooks/Real_Data_Comparison.ipynbnotebooks/Ansatz_Comparison.ipynbnotebooks/Classical_Markowitz.ipynbnotebooks/examples/01_Real_example.ipynbnotebooks/examples/02_Real_Example.ipynbnotebooks/examples/03_Real_Example.ipynbnotebooks/examples/04_Larger_Real_Data_Example.ipynb
The notebooks should save updated plots under notebooks/images/ and notebooks/examples/images/.