FSharp.Azure.Quantum
Quantum-First F# Library - Solve combinatorial optimization problems using QAOA (Quantum Approximate Optimization Algorithm) with automatic backend selection.
π Quick Start
F# Computation Expressions
open FSharp.Azure.Quantum
open FSharp.Azure.Quantum.GraphColoring
// Graph Coloring: Register Allocation
let problem = graphColoring {
node "R1" ["R2"; "R3"]
node "R2" ["R1"; "R4"]
node "R3" ["R1"; "R4"]
node "R4" ["R2"; "R3"]
colors ["EAX"; "EBX"; "ECX"; "EDX"]
}
// Solve using quantum optimization (QAOA)
match GraphColoring.solve problem 4 None with
| Ok solution ->
printfn "Colors used: %d" solution.ColorsUsed
solution.Assignments
|> Map.iter (fun node color -> printfn "%s β %s" node color)
| Error err ->
printfn "Error: %s" err.Message
C# Fluent API
using FSharp.Azure.Quantum;
using static FSharp.Azure.Quantum.CSharpBuilders;
// MaxCut: Circuit Partitioning
var vertices = new[] { "A", "B", "C", "D" };
var edges = new[] {
(source: "A", target: "B", weight: 1.0),
(source: "B", target: "C", weight: 2.0),
(source: "C", target: "D", weight: 1.0),
(source: "D", target: "A", weight: 1.0)
};
var problem = MaxCutProblem(vertices, edges);
var result = MaxCut.solve(problem, null);
if (result.IsOk) {
var solution = result.ResultValue;
Console.WriteLine($"Cut Value: {solution.CutValue}");
Console.WriteLine($"Partition S: {string.Join(", ", solution.PartitionS)}");
Console.WriteLine($"Partition T: {string.Join(", ", solution.PartitionT)}");
}
π¦ Installation
dotnet add package FSharp.Azure.Quantum
β¨ Features
π― 7 Quantum Optimization Builders
Production-ready quantum algorithms for common combinatorial problems:
- Graph Coloring - Register allocation, frequency assignment, scheduling
- MaxCut - Circuit partitioning, community detection, load balancing
- Knapsack - Resource allocation, cargo loading, project selection
- TSP - Route optimization, delivery planning, logistics
- Portfolio - Investment allocation, asset selection, risk management
- Network Flow - Supply chain optimization, distribution planning
- Task Scheduling - Manufacturing workflows, project management, resource allocation with dependencies
π§ Quantum Machine Learning
Apply quantum computing to machine learning:
- β Variational Quantum Classifier (VQC) - Supervised learning with quantum circuits
- β Quantum Kernel SVM - Support vector machines with quantum feature spaces
- β Feature Maps - ZZFeatureMap, PauliFeatureMap for data encoding
- β Variational Forms - RealAmplitudes, EfficientSU2 ansatz circuits
- β Adam Optimizer - Gradient-based training
- β Model Serialization - Save/load trained models
Examples: examples/QML/ (VQCExample, FeatureMapExample, VariationalFormExample)
π Business Problem Builders
High-level APIs for business applications:
- β AutoML - Automated machine learning with quantum kernels
- β Anomaly Detection - Security threat detection, fraud prevention
- β Binary Classification - Fraud detection, spam filtering
- β Predictive Modeling - Customer churn, demand forecasting
- β Similarity Search - Product recommendations, semantic search
Examples: examples/AutoML/, examples/AnomalyDetection/, examples/BinaryClassification/, examples/PredictiveModeling/
π€ HybridSolver - Optional Smart Routing
Optional optimization layer for variable-sized problems:
- β Analyzes problem size - Routes small problems (< 20 variables) to classical fallback
- β Quantum-first - Uses QAOA on LocalBackend/Cloud for >= 20 variables
- β Cost guards - Budget limits prevent runaway quantum costs
- β Transparent reasoning - Explains routing decision
- β Production-ready - Useful when problem sizes vary significantly
Recommendation: Use direct quantum API (GraphColoring.solve, MaxCut.solve, etc.) for most cases. HybridSolver adds classical fallback optimization for very small problems.
See: Getting Started Guide for detailed examples and decision criteria
π¬ QAOA Implementation
Quantum Approximate Optimization Algorithm with:
- β Automatic QUBO encoding
- β Advanced parameter optimization (COBYLA, SPSA, gradient-free)
- β Configurable circuit depth and shot counts
- β Solution validation and quality metrics
- β Integer variable support
Example: examples/QaoaParameterOptimizationExample.fsx
π₯οΈ Multiple Execution Backends
- LocalBackend - Fast simulation (β€20 qubits, free)
- IonQBackend - Azure Quantum (29+ qubits simulator, 11 qubits QPU)
- RigettiBackend - Azure Quantum (40+ qubits simulator, 80 qubits QPU)
- AtomComputingBackend - Azure Quantum (100+ qubits, neutral atoms, all-to-all connectivity)
- QuantinuumBackend - Azure Quantum (20-32 qubits, 99.9%+ fidelity, trapped-ion)
- DWaveBackend - D-Wave quantum annealer (2000+ qubits, production hardware)
π» Cross-Language Support
- F# First - Idiomatic computation expressions and type safety
- C# Friendly - Fluent API extensions with value tuples
- Seamless Interop - Works naturally in both languages
π― Problem Types & Examples
Graph Coloring
// Register allocation for compiler optimization
let registers = graphColoring {
node "R1" ["R2"; "R3"; "R5"]
node "R2" ["R1"; "R4"]
node "R3" ["R1"; "R4"; "R5"]
node "R4" ["R2"; "R3"]
node "R5" ["R1"; "R3"]
colors ["EAX"; "EBX"; "ECX"; "EDX"]
objective MinimizeColors
}
MaxCut
// Network community detection
let vertices = ["User1"; "User2"; "User3"; "User4"]
let edges = [
("User1", "User2", 3.0) // interaction strength
("User2", "User3", 5.0)
("User3", "User4", 2.0)
("User4", "User1", 4.0)
]
let problem = MaxCut.createProblem vertices edges
let solution = MaxCut.solve problem None
Knapsack
// Cargo loading optimization
let items = [
("Electronics", 50.0, 10000.0)
("Furniture", 200.0, 5000.0)
("Textiles", 30.0, 3000.0)
("Machinery", 150.0, 8000.0)
]
let problem = Knapsack.createProblem items 300.0 // 300kg capacity
TSP
// Delivery route optimization
let cities = [
("Warehouse", 0.0, 0.0)
("Store A", 5.0, 3.0)
("Store B", 2.0, 7.0)
("Store C", 8.0, 4.0)
]
let problem = TSP.createProblem cities
Portfolio
// Investment allocation
let assets = [
("Tech ETF", 0.15, 0.20, 100.0) // return, risk, price
("Bonds", 0.05, 0.05, 50.0)
("Real Estate", 0.10, 0.12, 200.0)
]
let problem = Portfolio.createProblem assets 10000.0 // $10k budget
Network Flow
// Supply chain optimization
let nodes = [
{ NetworkFlow.Id = "Factory"; NodeType = NetworkFlow.Source; Capacity = 1000 }
{ NetworkFlow.Id = "Warehouse"; NodeType = NetworkFlow.Intermediate; Capacity = 800 }
{ NetworkFlow.Id = "Customer"; NodeType = NetworkFlow.Sink; Capacity = 500 }
]
let routes = [
{ NetworkFlow.From = "Factory"; To = "Warehouse"; Cost = 5.0 }
{ NetworkFlow.From = "Warehouse"; To = "Customer"; Cost = 3.0 }
]
let problem = { NetworkFlow.Nodes = nodes; Routes = routes }
Task Scheduling
// Manufacturing workflow with dependencies
let taskA = scheduledTask {
taskId "TaskA"
duration (hours 2.0)
priority 10.0
}
let taskB = scheduledTask {
taskId "TaskB"
duration (hours 1.5)
after "TaskA" // Must wait for A
requires "Worker" 2.0
deadline 180.0
}
let problem = scheduling {
tasks [taskA; taskB]
objective MinimizeMakespan
}
// Solve with quantum backend for resource constraints
let backend = LocalBackendFactory.createUnified()
match solveQuantum backend problem with
| Ok solution ->
printfn "Makespan: %.2f" solution.Makespan
| Error err -> printfn "Error: %s" err.Message
ποΈ Architecture
3-Layer Quantum-Only Design:
Design Philosophy:
- β Quantum-Only: No classical algorithms (pure quantum optimization library)
- β Clear Layers: No leaky abstractions between layers
- β Type-Safe: F# type system prevents invalid problem specifications
- β Extensible: Easy to add new problem types following existing patterns
π Complete Documentation
π Getting Started
- Getting Started Guide - Installation, first steps, and basic examples
- Quantum Computing Introduction - Comprehensive introduction to quantum computing for F# developers (no quantum background needed)
- API Reference - Includes C# interop examples with fluent API
π Core Concepts
- API Reference - Complete API documentation for all modules
- Computation Expressions Reference - Complete CE reference table with all custom operations (when IntelliSense fails)
- Architecture Overview - Deep dive into 3-layer quantum-only design
- Backend Switching - Local vs Cloud vs D-Wave quantum execution
- Local Simulation - LocalBackend internals and performance characteristics
π¬ Advanced Topics
- QUBO Encoding Strategies - Problem-to-QUBO transformations for QAOA
- Computation Expression Composition - Advanced CE patterns for loops and composition
- Topological Quantum Computing - Fault-tolerant quantum computing with anyons and braiding
- Quantum Machine Learning - VQC, Quantum Kernels, Feature Maps
- Business Problem Builders - AutoML, Fraud Detection, Anomaly Detection, Predictive Modeling
- Error Mitigation - ZNE, PEC, REM strategies for NISQ hardware
- Advanced Quantum Builders - Tree Search, Constraint Solver, Pattern Matcher, Shorβs Algorithm, Phase Estimation
- D-Wave Integration Guide - Using D-Wave quantum annealers (coming soon)
- FAQ - Frequently asked questions and troubleshooting
π― Problem-Specific API Guides
- Graph Coloring API - Register allocation, frequency assignment, scheduling
- Quantum Chemistry API - VQE for molecular ground state energies
- Task Scheduling API - Constraint-based quantum scheduling
π‘ Working Code Examples
View source code on GitHub:
Optimization Problems (QAOA)
- DeliveryRouting - TSP with 16-city NYC routing, HybridSolver
- InvestmentPortfolio - Portfolio optimization with constraints (F#)
- InvestmentPortfolio_CSharp - Portfolio optimization (C# version)
- GraphColoring - Graph coloring with QAOA
- MaxCut - Max-Cut problem with QAOA
- Knapsack - 0/1 Knapsack optimization
- SupplyChain - Multi-constraint resource allocation
- JobScheduling - Task scheduling with dependencies
Advanced Quantum Algorithms
- QuantumChemistry - VQE for molecular simulation
- PhaseEstimation - Quantum Phase Estimation (QPE)
- QuantumArithmetic - QFT-based arithmetic operations
- CryptographicAnalysis - Shorβs algorithm demonstrations
Interactive Demonstrations
- Gomoku - Quantum vs Classical AI game (with Hybrid mode)
- Kasino - Quantum gambling game demonstrating superposition (F#)
- Kasino_CSharp - Quantum gambling game (C# version)
π― When to Use This Library
β Use FSharp.Azure.Quantum When:
- You want to learn quantum optimization algorithms (QAOA)
- Youβre building quantum-enabled applications
- You need quantum solutions for combinatorial problems
- Youβre researching quantum algorithm performance
- You want to experiment with quantum computing
π Consider Classical Libraries When:
- Problem size < 50 variables (classical is faster)
- You need immediate results (< 1 second)
- Cost is a primary concern
- Deterministic results required
Best Practice:
- Use direct quantum API (
GraphColoring.solve,MaxCut.solve, etc.) for consistent quantum experience across all problem sizes - Use HybridSolver only if you need automatic classical fallback for very small problems (< 20 variables)
- LocalBackend (default) provides free, fast quantum simulation up to 20 qubits - ideal for development, testing, and many production use cases
- Cloud backends (IonQ, Rigetti) for larger problems or real quantum hardware experimentation
π§ Backend Selection Guide
LocalBackend (Default)
// Automatic: No backend parameter needed
match MaxCut.solve problem None with
| Ok solution -> printfn "Max cut value: %f" solution.CutValue
| Error err -> eprintfn "Error: %s" err.Message
Characteristics:
- β Free (local simulation)
- β Fast (milliseconds)
- β Up to 20 qubits
- β Perfect for development and testing
Azure Quantum (Cloud)
// Create cloud backend - IonQ (trapped-ion)
let backend_ionq = // Cloud backend requires Azure Quantum workspace configuration
// createIonQBackend(
connectionString = "YOUR_CONNECTION_STRING",
targetId = "ionq.simulator" // or "ionq.qpu"
)
// Rigetti (superconducting)
let backend_rigetti = // Cloud backend requires Azure Quantum workspace configuration
// createRigettiBackend(
connectionString = "YOUR_CONNECTION_STRING",
targetId = "rigetti.sim.qvm" // or "rigetti.qpu.*"
)
// Atom Computing (neutral atoms, 100+ qubits, all-to-all connectivity)
let backend_atom = // Cloud backend requires Azure Quantum workspace
// createAtomComputingBackend(
connectionString = "YOUR_CONNECTION_STRING",
targetId = "atom-computing.sim" // or "atom-computing.qpu.phoenix"
)
// Quantinuum (trapped-ion, highest fidelity)
let backend_quantinuum = // Cloud backend requires Azure Quantum workspace
// createQuantinuumBackend(
connectionString = "YOUR_CONNECTION_STRING",
targetId = "quantinuum.sim.h1-1sc" // or "quantinuum.qpu.*"
)
// Pass to solver
match MaxCut.solve problem (Some backend_atom) with
| Ok solution -> printfn "Max cut value: %f" solution.CutValue
| Error err -> eprintfn "Error: %s" err.Message
Backend Characteristics:
| Backend | Qubits | Technology | Best For |
|---|---|---|---|
| IonQ | 29+ (sim), 11 (QPU) | Trapped-ion | General gate-based algorithms |
| Rigetti | 40+ (sim), 80 (QPU) | Superconducting | Fast gate operations |
| Atom Computing | 100+ (sim/QPU) | Neutral atoms | Large-scale problems, all-to-all connectivity |
| Quantinuum | 20-32 (sim/QPU) | Trapped-ion | High-precision (99.9%+ fidelity) |
Cost & Performance:
- β‘ Scalable (11-100+ qubits depending on backend)
- β‘ Real quantum hardware available
- π° Paid service (~$10-100 per run, varies by provider)
- β±οΈ Slower (job queue, 10-60 seconds)
π€ Contributing
Contributions welcome! See GitHub Repository for contribution guidelines.
Areas weβd love help with:
- New problem builders (SAT, Job Shop Scheduling, Vehicle Routing)
- QAOA warm-start strategies
- Alternative quantum algorithms (VQE, QASM)
- Additional cloud backend support (AWS Braket, IBM Quantum)
- Performance optimizations
π Links
π Performance Guidelines
| Problem Type | LocalBackend | Cloud Required |
|---|---|---|
| Graph Coloring | β€20 nodes | 25+ nodes |
| MaxCut | β€20 vertices | 25+ vertices |
| Knapsack | β€20 items | 25+ items |
| TSP | β€8 cities | 10+ cities |
| Portfolio | β€20 assets | 25+ assets |
| Network Flow | β€15 nodes | 20+ nodes |
| Task Scheduling | β€15 tasks | 20+ tasks |
Note: LocalBackend supports up to 20 qubits. Larger problems require cloud backends.
π License
This project is licensed under the Unlicense - dedicated to the public domain.
Status: Production Ready - Quantum-only architecture with 7 problem builders
Last Updated: 2025-12-03