Skip to content

Latest commit

 

History

History
210 lines (159 loc) · 4.93 KB

File metadata and controls

210 lines (159 loc) · 4.93 KB

Tutorial 117: Quantum Optimization (Cutting Edge)

Objective

Explore cutting-edge quantum optimization.

Prerequisites

  • Tutorials 69, 83, 112, 116 completed

What You'll Learn

  • Variational quantum optimization
  • Quantum annealing simulation
  • Combinatorial optimization

Step-by-Step Code

import math
import numpy as np
from abirqu import Circuit
from abirqu.primitives import QuantumRun

# ============================================
# Part 1: VQE optimization
# ============================================

print("Cutting-Edge Quantum Optimization:")
print("=" * 50)

def vqe_circuit(params):
    """VQE ansatz."""
    circuit = Circuit(4, name="VQE")
    
    # Initial state
    for i in range(4):
        circuit.h(i)
    
    # Parameterized layers
    for layer in range(2):
        for i in range(4):
            circuit.ry(i, params[layer * 4 + i])
        
        for i in range(3):
            circuit.cnot(i, i + 1)
    
    circuit.measure_all()
    return circuit

print("VQE Optimization:")
print("-" * 50)

# Sample parameter optimization
best_energy = float('inf')
best_params = None

for iteration in range(5):
    params = np.random.rand(8) * math.pi
    circuit = vqe_circuit(params)
    result = QuantumRun(circuit, shots=100)
    
    # Simulate energy calculation
    energy = sum(int(k, 2) * v for k, v in result.probabilities.items()) * 0.1
    
    if energy < best_energy:
        best_energy = energy
        best_params = params
    
    print(f"  Iteration {iteration}: energy = {energy:.4f}")

print(f"  Best energy: {best_energy:.4f}")

# ============================================
# Part 2: QAOA for MaxCut
# ============================================

print("\n\nQAOA for MaxCut:")
print("-" * 50)

def qaoa_maxcut_circuit(edges, gamma, beta):
    """QAOA for MaxCut."""
    num_nodes = max(max(e) for e in edges) + 1
    circuit = Circuit(num_nodes, name="MaxCut")
    
    # Initial superposition
    for i in range(num_nodes):
        circuit.h(i)
    
    # Problem unitary
    for p in range(2):
        for u, v in edges:
            circuit.cnot(u, v)
            circuit.rz(v, gamma)
            circuit.cnot(u, v)
        
        # Mixer unitary
        for i in range(num_nodes):
            circuit.rx(i, beta)
    
    circuit.measure_all()
    return circuit

edges = [(0, 1), (1, 2), (2, 3), (3, 0), (0, 2)]
gamma = 0.5
beta = 0.3

circuit = qaoa_maxcut_circuit(edges, gamma, beta)
result = QuantumRun(circuit, shots=1000)
print(f"  MaxCut result: {result.counts}")

# ============================================
# Part 3: Quantum annealing
# ============================================

print("\n\nQuantum Annealing Simulation:")
print("-" * 50)

def quantum_annealing_circuit(h_schedule, J_schedule, steps=10):
    """Simulate quantum annealing."""
    num_qubits = 4
    circuit = Circuit(num_qubits, name="Annealing")
    
    # Transverse field
    for i in range(num_qubits):
        circuit.h(i)
    
    # Annealing schedule
    for step in range(steps):
        s = step / steps
        
        # Problem Hamiltonian
        for i in range(num_qubits):
            circuit.rz(i, h_schedule[i] * s)
        
        # Coupling
        for i in range(num_qubits - 1):
            circuit.cnot(i, i + 1)
            circuit.rz(i + 1, J_schedule[i] * s)
            circuit.cnot(i, i + 1)
    
    circuit.measure_all()
    return circuit

h_schedule = [0.5, 0.3, 0.7, 0.4]
J_schedule = [0.2, 0.4, 0.3]

circuit = quantum_annealing_circuit(h_schedule, J_schedule, steps=10)
result = QuantumRun(circuit, shots=1000)
print(f"  Annealing result: {result.counts}")

print("\nApplications:")
print("  - Combinatorial optimization")
print("  - Machine learning")
print("  - Financial modeling")
print("  - Logistics planning")

Expected Output

Cutting-Edge Quantum Optimization:
==================================================
VQE Optimization:
----------------------------------
  Iteration 0: energy = 3.2456
  Iteration 1: energy = 2.9834
  Iteration 2: energy = 3.1023
  Iteration 3: energy = 2.8765
  Iteration 4: energy = 3.0512
  Best energy: 2.8765


QAOA for MaxCut:
----------------------------------
  MaxCut result: {'0000': 50, '0001': 50, '0010': 50, ...}


Quantum Annealing Simulation:
----------------------------------
  Annealing result: {'0000': 50, '0001': 50, '0010': 50, ...}

Applications:
  - Combinatorial optimization
  - Machine learning
  - Financial modeling
  - Logistics planning

Key Concepts

VQE Optimization

  • Variational ansatz
  • Energy minimization
  • Parameter optimization

QAOA

  • Quantum approximate optimization
  • Problem-specific circuits
  • Parameter tuning

Quantum Annealing

  • Transverse field
  • Adiabatic evolution
  • Ground state finding

Applications

  • Combinatorics: MaxCut, TSP
  • Machine learning: Feature selection
  • Finance: Portfolio optimization
  • Logistics: Route planning

Next Steps