Crates.io | quantrs2-anneal |
lib.rs | quantrs2-anneal |
version | 0.1.0-alpha.5 |
created_at | 2025-05-13 01:57:16.24683+00 |
updated_at | 2025-06-17 11:53:01.103667+00 |
description | Quantum annealing support for the QuantRS2 framework |
homepage | |
repository | https://github.com/cool-japan/quantrs |
max_upload_size | |
id | 1671317 |
size | 4,340,657 |
QuantRS2-Anneal is the premier quantum annealing module of the QuantRS2 quantum computing framework, providing comprehensive support for quantum annealing, optimization problems, and quantum-inspired algorithms.
use quantrs2_anneal::{
ising::IsingModel,
simulator::{ClassicalAnnealingSimulator, AnnealingParams}
};
// Create and solve a simple Max-Cut problem
let mut model = IsingModel::new(4);
model.set_coupling(0, 1, -1.0)?;
model.set_coupling(1, 2, -1.0)?;
model.set_coupling(2, 3, -1.0)?;
model.set_coupling(3, 0, -1.0)?;
let simulator = ClassicalAnnealingSimulator::new(AnnealingParams::default())?;
let result = simulator.solve(&model)?;
println!("Best energy: {}", result.best_energy);
println!("Solution: {:?}", result.best_spins);
Add to your Cargo.toml
:
[dependencies]
quantrs2-anneal = "0.1"
# Optional features for cloud integration
quantrs2-anneal = { version = "0.1", features = ["dwave", "braket", "fujitsu"] }
default
: Core functionality (Ising models, QUBO, classical simulators)dwave
: D-Wave Leap cloud service integrationbraket
: AWS Braket quantum computing platformfujitsu
: Fujitsu Digital Annealer Unit integrationModule | Description | Key Features |
---|---|---|
ising |
Ising model representation | Sparse matrices, efficient operations |
qubo |
QUBO formulation and constraints | Penalty methods, constraint handling |
simulator |
Classical annealing simulators | Multiple algorithms, configurable schedules |
dsl |
Problem construction DSL | Intuitive problem building syntax |
Module | Description | Use Cases |
---|---|---|
coherent_ising_machine |
Quantum-inspired optimization | Large-scale continuous optimization |
population_annealing |
Parallel population-based annealing | High-quality solution sampling |
reverse_annealing |
Reverse annealing schedules | Solution refinement and local search |
variational_quantum_annealing |
VQA-based optimization | Hybrid classical-quantum optimization |
Module | Description | Applications |
---|---|---|
embedding |
Minor graph embedding | Hardware topology mapping |
layout_embedding |
Layout-aware embedding | Optimized hardware utilization |
penalty_optimization |
Constraint penalty tuning | Enhanced solution quality |
compression |
Problem compression techniques | Large problem reduction |
Module | Description | Capabilities |
---|---|---|
dwave |
D-Wave Leap integration | QPU access, hybrid solvers, embedding |
braket |
AWS Braket integration | Multi-provider access, cost management |
fujitsu |
Fujitsu DAU integration | Digital annealer optimization |
Module | Description | Domain Expertise |
---|---|---|
applications::energy |
Energy system optimization | Grid operations, renewable integration |
applications::finance |
Financial optimization | Portfolio management, risk analysis |
applications::healthcare |
Healthcare optimization | Resource allocation, treatment planning |
applications::logistics |
Logistics and supply chain | Routing, scheduling, inventory |
use quantrs2_anneal::{
qubo::{QuboBuilder, QuboFormulation},
simulator::ClassicalAnnealingSimulator
};
// Portfolio optimization: select assets with target return and risk constraints
let mut qubo = QuboBuilder::new(10); // 10 assets
// Objective: minimize risk (maximize return)
let risk_matrix = vec![vec![0.1; 10]; 10]; // Simplified risk matrix
qubo.add_quadratic_objective(&risk_matrix, 1.0)?;
// Constraint: select exactly 5 assets
let selection = vec![1.0; 10];
qubo.add_constraint_eq(&(0..10).collect::<Vec<_>>(), &selection, 5.0, 10.0)?;
// Solve
let formulation = qubo.build()?;
let ising_model = formulation.to_ising_model()?;
let simulator = ClassicalAnnealingSimulator::new(Default::default())?;
let result = simulator.solve(&ising_model)?;
let portfolio = formulation.to_binary_solution(&result.best_spins)?;
println!("Selected assets: {:?}", portfolio);
#[cfg(feature = "dwave")]
use quantrs2_anneal::dwave::{
DWaveClient, SolverSelector, SolverCategory, EmbeddingConfig,
ChainStrengthMethod, AdvancedProblemParams, AnnealingSchedule
};
#[cfg(feature = "dwave")]
async fn solve_with_dwave() -> Result<(), Box<dyn std::error::Error>> {
// Advanced solver selection
let selector = SolverSelector {
category: SolverCategory::QPU,
min_qubits: Some(2000),
max_queue_time: Some(60.0),
topology_preference: Some("pegasus".to_string()),
..Default::default()
};
// Custom embedding configuration
let embedding_config = EmbeddingConfig {
auto_embed: true,
chain_strength_method: ChainStrengthMethod::Adaptive(1.5),
optimization_level: 3,
..Default::default()
};
// Advanced annealing parameters
let schedule = AnnealingSchedule::pause_and_ramp(200.0, 100.0, 20.0);
let params = AdvancedProblemParams {
num_reads: 10000,
anneal_schedule: Some(schedule),
programming_thermalization: Some(2000),
auto_scale: Some(true),
..Default::default()
};
let client = DWaveClient::new(std::env::var("DWAVE_TOKEN")?, None)?;
let solution = client.submit_ising_with_embedding(
&ising_model,
None, // Auto-select best solver
Some(params),
Some(&embedding_config),
)?;
Ok(())
}
#[cfg(feature = "braket")]
use quantrs2_anneal::braket::{
BraketClient, DeviceSelector, DeviceType, CostTracker, AdvancedAnnealingParams
};
#[cfg(feature = "braket")]
async fn solve_with_braket() -> Result<(), Box<dyn std::error::Error>> {
// Cost tracking setup
let cost_tracker = CostTracker {
cost_limit: Some(100.0), // $100 budget
current_cost: 0.0,
cost_estimates: HashMap::new(),
};
// Device selection for cost optimization
let device_selector = DeviceSelector {
device_type: Some(DeviceType::QuantumProcessor),
max_cost_per_shot: Some(0.001), // Prefer cheaper devices
required_capabilities: vec!["ANNEALING".to_string()],
..Default::default()
};
let client = BraketClient::with_config(
std::env::var("AWS_ACCESS_KEY_ID")?,
std::env::var("AWS_SECRET_ACCESS_KEY")?,
None,
"us-east-1",
device_selector,
cost_tracker,
)?;
// Submit with cost monitoring
let task_result = client.submit_ising(&ising_model, None, None)?;
let metrics = client.get_task_metrics(&task_result.task_arn)?;
println!("Cost: ${:.4}", metrics.cost);
println!("Best energy: {:.6}", metrics.best_energy.unwrap_or(0.0));
Ok(())
}
use quantrs2_anneal::{
coherent_ising_machine::{CoherentIsingMachine, CIMParams},
ising::IsingModel
};
// Large-scale continuous optimization problem
let mut large_model = IsingModel::new(10000);
// ... populate with problem data ...
let cim_params = CIMParams {
pump_power: 2.0,
detuning: 0.1,
coupling_strength: 0.5,
num_iterations: 1000,
convergence_threshold: 1e-6,
..Default::default()
};
let cim = CoherentIsingMachine::new(cim_params)?;
let result = cim.solve(&large_model)?;
println!("CIM found energy: {}", result.best_energy);
use quantrs2_anneal::{
multi_objective::{MultiObjectiveOptimizer, ObjectiveWeight},
ising::IsingModel
};
// Portfolio optimization with multiple objectives: return, risk, diversity
let mut optimizer = MultiObjectiveOptimizer::new();
// Add objectives with weights
optimizer.add_objective("return", return_model, ObjectiveWeight::Maximize(0.4))?;
optimizer.add_objective("risk", risk_model, ObjectiveWeight::Minimize(0.4))?;
optimizer.add_objective("diversity", diversity_model, ObjectiveWeight::Maximize(0.2))?;
// Pareto frontier analysis
let pareto_solutions = optimizer.find_pareto_frontier(100)?;
for solution in &pareto_solutions {
println!("Return: {:.3}, Risk: {:.3}, Diversity: {:.3}",
solution.objectives["return"],
solution.objectives["risk"],
solution.objectives["diversity"]);
}
use quantrs2_anneal::applications::energy::{
PowerGridOptimizer, GridConstraints, RenewableIntegration
};
// Smart grid optimization with renewable integration
let grid_config = GridConstraints {
total_demand: 1000.0, // MW
renewable_capacity: 300.0, // MW
storage_capacity: 100.0, // MWh
transmission_limits: vec![200.0, 150.0, 250.0], // MW per line
cost_coefficients: vec![50.0, 80.0, 120.0], // $/MWh per generator
};
let renewable_config = RenewableIntegration {
solar_forecast: vec![0.0, 50.0, 150.0, 200.0, 150.0, 50.0], // Hourly MW
wind_forecast: vec![80.0, 90.0, 70.0, 60.0, 85.0, 95.0], // Hourly MW
storage_schedule: true,
demand_response: true,
};
let optimizer = PowerGridOptimizer::new(grid_config, renewable_config)?;
let schedule = optimizer.optimize_24_hour_schedule()?;
println!("Optimized power generation schedule:");
for (hour, power) in schedule.generation_schedule.iter().enumerate() {
println!("Hour {}: {:.1} MW", hour, power);
}
The framework includes comprehensive testing and benchmarking capabilities:
use quantrs2_anneal::{
applications::performance_benchmarks::{BenchmarkSuite, Algorithm},
applications::integration_tests::IntegrationTestSuite
};
// Run performance benchmarks
let mut benchmark = BenchmarkSuite::new();
benchmark.add_algorithm(Algorithm::ClassicalAnnealing);
benchmark.add_algorithm(Algorithm::PopulationAnnealing);
benchmark.add_algorithm(Algorithm::CoherentIsingMachine);
let results = benchmark.run_all_benchmarks()?;
results.print_comparison_report();
// Run integration tests
let test_suite = IntegrationTestSuite::new();
let test_results = test_suite.run_all_tests()?;
println!("Integration tests: {}/{} passed",
test_results.passed, test_results.total);
use quantrs2_anneal::visualization::{
EnergyLandscapeVisualizer, SolutionVisualizer, ConvergenceAnalyzer
};
// Visualize energy landscape
let visualizer = EnergyLandscapeVisualizer::new(&ising_model)?;
visualizer.plot_2d_projection("energy_landscape.svg")?;
// Analyze solution quality
let solution_viz = SolutionVisualizer::new(&result);
solution_viz.plot_energy_histogram("solution_quality.svg")?;
// Monitor convergence
let convergence = ConvergenceAnalyzer::new(&annealing_trace);
convergence.plot_convergence_curve("convergence.svg")?;
QuantRS2-Anneal integrates seamlessly with other QuantRS2 modules:
Algorithm | Problem Size | Time Complexity | Memory Usage | Best Use Case |
---|---|---|---|---|
Classical Annealing | < 10,000 vars | O(nΒ²Β·t) | O(nΒ²) | General optimization |
Population Annealing | < 1,000 vars | O(pΒ·nΒ²Β·t) | O(pΒ·n) | High-quality sampling |
Coherent Ising Machine | < 100,000 vars | O(nΒ·t) | O(n) | Large continuous problems |
D-Wave QPU | < 5,000 qubits | Constant | Cloud | Real quantum annealing |
AWS Braket | < 30 qubits | Variable | Cloud | Multi-vendor quantum access |
Hybrid Solvers | > 10,000 vars | O(nΒ·log(n)Β·t) | Cloud | Very large problems |
Comprehensive examples are available in the examples/
directory:
simple_penalty_optimization.rs
, advanced_embedding.rs
dwave_leap_client_example.rs
, aws_braket_client_example.rs
coherent_ising_machine_example.rs
, population_annealing_example.rs
energy_optimization.rs
, portfolio_optimization.rs
energy_landscape_visualization.rs
We welcome contributions! Please see our Contributing Guide for details.
This project is licensed under either:
at your option.
If you use QuantRS2-Anneal in your research, please cite:
@software{quantrs2_anneal,
title={QuantRS2-Anneal: Comprehensive Quantum Annealing Framework},
author={QuantRS2 Development Team},
year={2024},
url={https://github.com/cool-japan/quantrs}
}
π Ready to solve optimization problems with quantum annealing? Check out our Quick Start Guide and Examples!