Quantum Computing & Machine Learning - Projects¶
🚀 Project Portfolio
Hands-on projects to apply your quantum computing knowledge
This section provides a comprehensive list of projects covering various aspects of quantum computing and machine learning. Each project includes objectives, implementation guidance, and expected outcomes.
Project Overview
These projects range from beginner to advanced levels and cover quantum algorithms, quantum machine learning, optimization, and real-world applications.
Project Categories¶
- Quantum Algorithms: Implementing and optimizing quantum algorithms
- Quantum Machine Learning: Building QML models for classification and regression
- Quantum Optimization: Solving optimization problems with quantum algorithms
- Quantum Chemistry: Computing molecular properties using VQE
- Quantum Cryptography: Implementing quantum key distribution protocols
- Hybrid Systems: Combining quantum and classical computing
Beginner Projects¶
Project 1: Implementing Grover's Algorithm and Proving Optimality¶
Difficulty: Beginner
Estimated Time: 4-6 hours
Prerequisites: Module 1, Module 3
Objectives¶
- Implement Grover's search algorithm in Qiskit
- Prove optimality of Grover's search (bounded error and zero error)
- Compare quantum search with classical search
Implementation Steps¶
from qiskit import QuantumCircuit, Aer, execute
from qiskit.circuit.library import GroverOperator
from qiskit.algorithms import Grover
from qiskit.quantum_info import Statevector
import numpy as np
def grover_algorithm_implementation(marked_state, n_qubits):
"""Implement Grover's algorithm"""
# Step 1: Create oracle that marks the target
def create_oracle(marked_state, n_qubits):
qc = QuantumCircuit(n_qubits)
# Mark the target state
binary = format(marked_state, f'0{n_qubits}b')
for i, bit in enumerate(binary):
if bit == '0':
qc.x(i)
# Multi-controlled Z
if n_qubits == 2:
qc.cz(0, 1)
elif n_qubits == 3:
qc.h(2)
qc.ccx(0, 1, 2)
qc.h(2)
# Uncompute
for i, bit in enumerate(binary):
if bit == '0':
qc.x(i)
return qc
# Step 2: Create diffusion operator
def create_diffusion(n_qubits):
qc = QuantumCircuit(n_qubits)
for i in range(n_qubits):
qc.h(i)
qc.x(i)
if n_qubits == 2:
qc.cz(0, 1)
elif n_qubits == 3:
qc.h(2)
qc.ccx(0, 1, 2)
qc.h(2)
for i in range(n_qubits):
qc.x(i)
qc.h(i)
return qc
# Step 3: Optimal number of iterations
N = 2**n_qubits
num_iterations = int(np.pi / 4 * np.sqrt(N))
# Step 4: Build circuit
qc = QuantumCircuit(n_qubits, n_qubits)
# Initialize superposition
for i in range(n_qubits):
qc.h(i)
# Grover iterations
oracle = create_oracle(marked_state, n_qubits)
diffusion = create_diffusion(n_qubits)
for _ in range(num_iterations):
qc = qc.compose(oracle)
qc = qc.compose(diffusion)
# Measure
qc.measure_all()
return qc, num_iterations
# Test
qc, iterations = grover_algorithm_implementation(3, 2) # Find |11⟩
print(f"Grover's algorithm with {iterations} iterations")
print(qc.draw())
simulator = Aer.get_backend('qasm_simulator')
job = execute(qc, simulator, shots=1000)
result = job.result()
counts = result.get_counts(qc)
print(f"Results: {counts}")
Proving Optimality¶
def prove_grover_optimality():
"""Prove optimality of Grover's algorithm"""
print("Grover's Algorithm Optimality Proof:")
print("\n1. Bounded Error:")
print(" - Classical: O(N) queries for bounded error")
print(" - Grover: O(√N) queries for bounded error")
print(" - Proved optimal by Bennett et al. (1997)")
print("\n2. Zero Error:")
print(" - Classical: O(N) queries")
print(" - Grover: O(√N) queries (with small error)")
print(" - For zero error, requires O(N) queries")
print("\n3. Lower Bound:")
print(" - Any quantum algorithm needs Ω(√N) queries")
print(" - Grover achieves this bound")
print(" - Therefore, Grover is optimal!")
prove_grover_optimality()
Expected Outcomes¶
- Working Grover's algorithm implementation
- Understanding of optimality proofs
- Comparison with classical search algorithms
Project 2: To Implement Grover's Search Algorithm Where 1101 Is the Marked State¶
Difficulty: Beginner
Estimated Time: 3-4 hours
Prerequisites: Module 1, Module 3
Objectives¶
- Implement Grover's algorithm for a specific marked state
- Visualize the search process
- Analyze success probability
Implementation¶
def grover_specific_state():
"""Grover's algorithm for |1101⟩"""
marked_state = int('1101', 2) # Binary 1101 = decimal 13
n_qubits = 4
qc, iterations = grover_algorithm_implementation(marked_state, n_qubits)
print(f"Searching for state |1101⟩ (decimal {marked_state})")
print(f"Number of iterations: {iterations}")
simulator = Aer.get_backend('qasm_simulator')
job = execute(qc, simulator, shots=1000)
result = job.result()
counts = result.get_counts(qc)
print(f"\nMeasurement results: {counts}")
print(f"Success rate: {counts.get('1101', 0) / 1000 * 100:.1f}%")
return qc
grover_specific_state()
Project 3: To Understand and Implement Quantum Counting¶
Difficulty: Beginner-Intermediate
Estimated Time: 5-7 hours
Prerequisites: Module 3, Module 4
Objectives¶
- Understand quantum counting algorithm
- Implement quantum counting using phase estimation
- Count marked items in a database
Implementation¶
from qiskit.algorithms import AmplitudeEstimation
from qiskit.circuit.library import GroverOperator
def quantum_counting(marked_items, total_items, n_qubits):
"""Quantum counting algorithm"""
# Number of marked items
M = len(marked_items)
N = total_items
# Amplitude: √(M/N)
amplitude = np.sqrt(M / N)
print("Quantum Counting:")
print(f"Total items: {N}")
print(f"Marked items: {M}")
print(f"Amplitude: {amplitude:.4f}")
# Use amplitude estimation
# (Simplified - full implementation uses phase estimation)
# Estimate using Grover iterations
# Number of iterations gives estimate of M
return M, N
quantum_counting([1, 3, 5], 8, 3)
Intermediate Projects¶
Project 4: Hybrid Quantum Neural Networks for Remote Sensing Imagery Classification¶
Difficulty: Intermediate
Estimated Time: 15-20 hours
Prerequisites: Module 5, Module 6
Objectives¶
- Build hybrid quantum-classical neural network
- Classify remote sensing images
- Compare with classical methods
Implementation Guide¶
from qiskit_machine_learning.algorithms import VQC
from qiskit.circuit.library import ZZFeatureMap, RealAmplitudes
from qiskit.algorithms.optimizers import SPSA
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np
def hybrid_qnn_remote_sensing():
"""Hybrid QNN for remote sensing classification"""
print("Hybrid Quantum Neural Network for Remote Sensing:")
print("\n1. Data Preparation:")
print(" - Load remote sensing imagery")
print(" - Extract features (spectral bands)")
print(" - Normalize and preprocess")
print("\n2. Classical Preprocessing:")
print(" - PCA for dimensionality reduction")
print(" - Feature selection")
print(" - Data augmentation")
print("\n3. Quantum Layer:")
print(" - Encode features using quantum feature map")
print(" - Apply variational quantum circuit")
print(" - Measure expectation values")
print("\n4. Classical Post-processing:")
print(" - Dense layers for final classification")
print(" - Softmax activation")
# Example structure
n_features = 10
n_qubits = 4
n_classes = 3
# Feature map
feature_map = ZZFeatureMap(feature_dimension=n_qubits, reps=2)
# Ansatz
ansatz = RealAmplitudes(num_qubits=n_qubits, reps=2)
# VQC
vqc = VQC(
feature_map=feature_map,
ansatz=ansatz,
optimizer=SPSA(maxiter=100),
quantum_instance=Aer.get_backend('qasm_simulator')
)
print("\n5. Training:")
print(" - Train on remote sensing dataset")
print(" - Validate on test set")
print(" - Compare accuracy with classical CNN")
return vqc
hybrid_qnn_remote_sensing()
Dataset¶
- Use publicly available remote sensing datasets (e.g., UC Merced Land Use, EuroSAT)
- Extract spectral features from satellite imagery
- Create classification labels
Expected Outcomes¶
- Working hybrid QNN model
- Classification accuracy report
- Comparison with classical methods
Project 5: Analysis and Implementation of Quantum Encoding Techniques¶
Difficulty: Intermediate
Estimated Time: 10-12 hours
Prerequisites: Module 1, Module 5
Objectives¶
- Implement various quantum encoding methods
- Compare encoding techniques
- Analyze resource requirements
Implementation¶
def quantum_encoding_analysis():
"""Analyze different quantum encoding techniques"""
data = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print("Quantum Encoding Techniques Analysis:")
# 1. Basis Encoding
print("\n1. Basis Encoding:")
print(" - Pros: Simple, exact representation")
print(" - Cons: Requires many qubits (n qubits for n values)")
print(" - Use case: Discrete, small datasets")
# 2. Amplitude Encoding
print("\n2. Amplitude Encoding:")
print(" - Pros: Exponential compression (log₂(n) qubits)")
print(" - Cons: Difficult to prepare, requires normalization")
print(" - Use case: Large, dense datasets")
# 3. Angle Encoding
print("\n3. Angle Encoding:")
print(" - Pros: Easy to implement, continuous values")
print(" - Cons: Limited expressivity, requires many qubits")
print(" - Use case: Continuous features")
# 4. Dense Angle Encoding
print("\n4. Dense Angle Encoding:")
print(" - Pros: Better expressivity than angle encoding")
print(" - Cons: More complex circuit")
print(" - Use case: High-dimensional continuous data")
# Implementation comparison
n_qubits_basis = len(data)
n_qubits_amplitude = int(np.ceil(np.log2(len(data))))
n_qubits_angle = len(data)
print(f"\nResource Comparison for {len(data)} data points:")
print(f"Basis encoding: {n_qubits_basis} qubits")
print(f"Amplitude encoding: {n_qubits_amplitude} qubits")
print(f"Angle encoding: {n_qubits_angle} qubits")
return {
'basis': n_qubits_basis,
'amplitude': n_qubits_amplitude,
'angle': n_qubits_angle
}
quantum_encoding_analysis()
Project 6: Quantum Convolutional Neural Network for Classical Data Classification¶
Difficulty: Intermediate
Estimated Time: 12-15 hours
Prerequisites: Module 5, Module 6
Objectives¶
- Design quantum convolutional layers
- Build QCNN for image classification
- Compare with classical CNNs
Implementation¶
def quantum_cnn_classification():
"""Quantum CNN for classification"""
print("Quantum Convolutional Neural Network:")
print("\n1. Quantum Convolutional Layer:")
print(" - Apply parameterized quantum gates")
print(" - Pooling using measurement")
print(" - Feature extraction")
print("\n2. Architecture:")
print(" - Input: Classical image data")
print(" - Encoding: Quantum feature map")
print(" - Quantum conv layers: Variational circuits")
print(" - Pooling: Measurement and reduction")
print(" - Output: Classical classification")
# Example QCNN structure
from qiskit.circuit.library import RealAmplitudes
def quantum_conv_layer(n_qubits, reps=2):
"""Quantum convolutional layer"""
qc = QuantumCircuit(n_qubits)
# Alternating layers
for _ in range(reps):
# Entangling gates
for i in range(n_qubits - 1):
qc.cz(i, i+1)
# Parameterized rotations
for i in range(n_qubits):
qc.ry(f'θ_{i}', i)
return qc
print("\n3. Training:")
print(" - Hybrid quantum-classical training")
print(" - Gradient estimation")
print(" - Parameter optimization")
return quantum_conv_layer(4)
quantum_cnn_classification()
Project 7: Prediction of Solar Irradiation using Quantum Support Vector Machine¶
Difficulty: Intermediate
Estimated Time: 10-14 hours
Prerequisites: Module 5
Objectives¶
- Implement quantum SVM
- Predict solar irradiation from weather data
- Evaluate regression performance
Implementation¶
def quantum_svm_solar_irradiation():
"""Quantum SVM for solar irradiation prediction"""
print("Quantum SVM for Solar Irradiation Prediction:")
print("\n1. Data Collection:")
print(" - Weather features: temperature, humidity, cloud cover")
print(" - Target: Solar irradiation (kWh/m²)")
print(" - Time series data")
print("\n2. Feature Engineering:")
print(" - Normalize features")
print(" - Reduce dimensionality to match qubits")
print(" - Create training/test splits")
print("\n3. Quantum SVM:")
print(" - Use ZZFeatureMap for encoding")
print(" - Compute quantum kernel matrix")
print(" - Train SVM with quantum kernel")
from qiskit_machine_learning.kernels import QuantumKernel
from qiskit.circuit.library import ZZFeatureMap
feature_map = ZZFeatureMap(feature_dimension=4, reps=2)
quantum_kernel = QuantumKernel(
feature_map=feature_map,
quantum_instance=Aer.get_backend('qasm_simulator')
)
print("\n4. Evaluation:")
print(" - Mean squared error")
print(" - R² score")
print(" - Compare with classical SVM")
return quantum_kernel
quantum_svm_solar_irradiation()
Project 8: Variational Quantum Classifier¶
Difficulty: Intermediate
Estimated Time: 8-10 hours
Prerequisites: Module 5, Module 6
Objectives¶
- Build complete VQC pipeline
- Classify multiple datasets
- Optimize hyperparameters
Implementation¶
def variational_quantum_classifier():
"""Complete VQC implementation"""
from qiskit_machine_learning.algorithms import VQC
from qiskit.circuit.library import ZZFeatureMap, RealAmplitudes
from sklearn.datasets import make_classification
# Generate dataset
X, y = make_classification(n_samples=100, n_features=4, n_classes=2)
# Feature map
feature_map = ZZFeatureMap(feature_dimension=4, reps=2)
# Ansatz
ansatz = RealAmplitudes(num_qubits=4, reps=2)
# VQC
vqc = VQC(
feature_map=feature_map,
ansatz=ansatz,
optimizer=SPSA(maxiter=100),
quantum_instance=Aer.get_backend('qasm_simulator')
)
# Train
vqc.fit(X, y)
# Evaluate
score = vqc.score(X, y)
print(f"VQC Accuracy: {score:.3f}")
return vqc
variational_quantum_classifier()
Advanced Projects¶
Project 9: To Solve any Combinatorial Optimisation Problem (Like Knapsack) Using a Quantum Annealing Approach¶
Difficulty: Advanced
Estimated Time: 20-25 hours
Prerequisites: Module 7
Objectives¶
- Formulate knapsack as QUBO problem
- Implement quantum annealing solution
- Compare with classical methods
Implementation¶
def quantum_annealing_knapsack():
"""Quantum annealing for knapsack problem"""
print("Quantum Annealing for Knapsack Problem:")
print("\n1. Problem Formulation:")
print(" - Items with weights and values")
print(" - Maximize value within weight constraint")
print(" - Binary variables: xᵢ ∈ {0,1}")
print("\n2. QUBO Formulation:")
print(" H = -Σᵢ vᵢxᵢ + λ(Σᵢ wᵢxᵢ - W)²")
print(" - First term: Maximize value")
print(" - Second term: Weight constraint (penalty)")
# Example: 3 items
weights = [2, 3, 4]
values = [5, 7, 9]
capacity = 5
# Construct QUBO matrix
n = len(weights)
Q = np.zeros((n, n))
# Linear terms (value)
for i in range(n):
Q[i, i] = -values[i]
# Quadratic terms (constraint)
lambda_penalty = 10
for i in range(n):
for j in range(n):
Q[i, j] += lambda_penalty * weights[i] * weights[j]
Q[i, i] -= 2 * lambda_penalty * capacity * weights[i]
print(f"\nQUBO Matrix:\n{Q}")
print("\n3. Quantum Annealing:")
print(" - Use D-Wave or simulated annealing")
print(" - Find ground state of Ising model")
print(" - Extract solution")
return Q
quantum_annealing_knapsack()
Project 10: Comparative Study of Data Preparation Methods in Quantum Clustering Algorithms¶
Difficulty: Advanced
Estimated Time: 15-18 hours
Prerequisites: Module 5
Objectives¶
- Compare different data preparation methods
- Evaluate impact on quantum clustering
- Provide best practices
Implementation¶
def quantum_clustering_data_preparation():
"""Compare data preparation for quantum clustering"""
print("Data Preparation Methods for Quantum Clustering:")
methods = {
'Normalization': {
'description': 'Scale features to [0,1] or standardize',
'impact': 'Affects distance calculations',
'use_case': 'Features with different scales'
},
'PCA': {
'description': 'Principal Component Analysis',
'impact': 'Reduces dimensionality, may lose information',
'use_case': 'High-dimensional data'
},
'Quantum Encoding': {
'description': 'Basis, amplitude, or angle encoding',
'impact': 'Affects quantum circuit complexity',
'use_case': 'Depends on data characteristics'
},
'Feature Selection': {
'description': 'Select relevant features',
'impact': 'Reduces qubit requirements',
'use_case': 'Many irrelevant features'
}
}
for method, info in methods.items():
print(f"\n{method}:")
print(f" Description: {info['description']}")
print(f" Impact: {info['impact']}")
print(f" Use case: {info['use_case']}")
print("\nComparative Study:")
print("1. Test each method on same dataset")
print("2. Measure clustering quality (silhouette score)")
print("3. Compare resource requirements")
print("4. Provide recommendations")
quantum_clustering_data_preparation()
Project 11: To Calculate the Ground State Energy of a Simple Molecule (H₂, LiH, or H₂O) Using VQE¶
Difficulty: Advanced
Estimated Time: 18-22 hours
Prerequisites: Module 7
Objectives¶
- Set up molecular Hamiltonian
- Implement VQE for ground state
- Compare with exact diagonalization
Implementation¶
def vqe_molecular_ground_state():
"""VQE for molecular ground state energy"""
print("VQE for Molecular Ground State Energy:")
print("\n1. Molecule Selection:")
print(" - H₂: Simplest (2 electrons, 2 qubits)")
print(" - LiH: Intermediate (4 electrons, 4-6 qubits)")
print(" - H₂O: Complex (10 electrons, 8-12 qubits)")
print("\n2. Hamiltonian Construction:")
print(" - Use quantum chemistry packages (PySCF, Qiskit Nature)")
print(" - Compute electronic structure")
print(" - Map to qubits (Jordan-Wigner or Parity)")
print("\n3. VQE Implementation:")
print(" - Choose ansatz (UCCSD, hardware-efficient)")
print(" - Optimize parameters")
print(" - Compute ground state energy")
print("\n4. Validation:")
print(" - Compare with exact diagonalization")
print(" - Check convergence")
print(" - Analyze error sources")
# Example for H₂
from qiskit_nature.drivers import Molecule
from qiskit_nature.problems.second_quantization import ElectronicStructureProblem
molecule = Molecule(
geometry=[['H', [0., 0., 0.]],
['H', [0., 0., 0.74]]],
charge=0,
multiplicity=1
)
print(f"\nH₂ Molecule:")
print(f"Bond length: 0.74 Angstrom")
print(f"Expected ground state energy: ~-1.137 Hartree")
return molecule
vqe_molecular_ground_state()
Project 12: Implementing HHL Algorithm and Proving BQP-completeness of Matrix Inversion¶
Difficulty: Advanced
Estimated Time: 20-25 hours
Prerequisites: Module 4, Module 5
Objectives¶
- Implement HHL algorithm
- Understand BQP-completeness
- Apply to linear systems
Implementation¶
def hhl_algorithm_bqp():
"""HHL algorithm and BQP-completeness"""
print("HHL Algorithm and BQP-completeness:")
print("\n1. HHL Algorithm:")
print(" - Solves Ax = b for sparse, well-conditioned A")
print(" - Steps:")
print(" a. Encode |b⟩")
print(" b. Phase estimation of A")
print(" c. Invert eigenvalues")
print(" d. Uncompute")
print(" e. Output |x⟩")
print("\n2. BQP-completeness:")
print(" - BQP: Bounded-error Quantum Polynomial time")
print(" - Matrix inversion is BQP-complete")
print(" - Any BQP problem can be reduced to matrix inversion")
print(" - Proves HHL is optimal for this problem class")
print("\n3. Implementation Challenges:")
print(" - Hamiltonian simulation: exp(iAt)")
print(" - Quantum phase estimation")
print(" - Eigenvalue inversion")
print(" - Condition number requirements")
# Simplified HHL
def hhl_simplified(A, b):
"""Simplified HHL implementation"""
# Note: Full implementation requires:
# - Quantum phase estimation
# - Hamiltonian simulation
# - Eigenvalue inversion
print("\nHHL Algorithm (conceptual):")
print("1. Prepare |b⟩")
print("2. Apply exp(iAt) for various t")
print("3. Phase estimation → eigenvalues")
print("4. Invert: 1/λ")
print("5. Uncompute")
print("6. Result: |x⟩")
return None
return hhl_simplified
hhl_algorithm_bqp()
Project 13: Quantum Computing for Finance¶
Difficulty: Advanced
Estimated Time: 25-30 hours
Prerequisites: Module 7
Objectives¶
- Apply quantum algorithms to finance
- Implement portfolio optimization
- Option pricing with quantum methods
Implementation¶
def quantum_finance_applications():
"""Quantum computing applications in finance"""
print("Quantum Computing for Finance:")
applications = {
'Portfolio Optimization': {
'algorithm': 'QAOA or VQE',
'problem': 'Maximize return - λ*risk',
'formulation': 'QUBO/Ising model'
},
'Option Pricing': {
'algorithm': 'Quantum Monte Carlo',
'problem': 'Price financial derivatives',
'formulation': 'Amplitude estimation'
},
'Risk Analysis': {
'algorithm': 'Quantum simulation',
'problem': 'Model financial scenarios',
'formulation': 'Quantum walks'
},
'Credit Scoring': {
'algorithm': 'Quantum ML',
'problem': 'Classify credit risk',
'formulation': 'Quantum SVM/VQC'
}
}
for app, details in applications.items():
print(f"\n{app}:")
print(f" Algorithm: {details['algorithm']}")
print(f" Problem: {details['problem']}")
print(f" Formulation: {details['formulation']}")
return applications
quantum_finance_applications()
Project 14: To Solve Crop-Yield Problem using QAOA and VQE, and Run the Same on Real Quantum Computer¶
Difficulty: Advanced
Estimated Time: 30-35 hours
Prerequisites: Module 7
Objectives¶
- Formulate crop yield as optimization problem
- Solve using QAOA and VQE
- Execute on real quantum hardware
Implementation¶
def crop_yield_quantum():
"""Crop yield optimization using QAOA and VQE"""
print("Crop Yield Optimization:")
print("\n1. Problem Formulation:")
print(" - Variables: Crop types, planting times, resources")
print(" - Objective: Maximize yield")
print(" - Constraints: Budget, land, water, time")
print("\n2. QAOA Approach:")
print(" - Encode as QUBO")
print(" - Use QAOA to find optimal solution")
print(" - Parameters: crop selection, timing")
print("\n3. VQE Approach:")
print(" - Formulate as Hamiltonian")
print(" - Use VQE to find ground state")
print(" - Extract optimal configuration")
print("\n4. Real Quantum Hardware:")
print(" - IBM Quantum Experience")
print(" - D-Wave quantum annealer")
print(" - Error mitigation")
print(" - Compare results")
# Example QUBO formulation
def crop_yield_qubo():
"""Formulate crop yield as QUBO"""
# Variables: x[i,j] = 1 if crop i planted at time j
# Objective: Maximize yield
# Constraints: Budget, land availability
print("\nQUBO Formulation:")
print("H = -Σᵢⱼ yᵢⱼxᵢⱼ + λ₁(Σᵢⱼ cᵢⱼxᵢⱼ - B)² + λ₂(Σᵢⱼ aᵢxᵢⱼ - L)²")
print(" - First term: Maximize yield")
print(" - Second term: Budget constraint")
print(" - Third term: Land constraint")
return None
crop_yield_qubo()
return None
crop_yield_quantum()
Project 15: Analysis of Solving Combinatorial Optimisation Problems on Quantum and Quantum-like Annealers¶
Difficulty: Advanced
Estimated Time: 20-25 hours
Prerequisites: Module 7
Objectives¶
- Compare quantum and quantum-like annealers
- Analyze performance on optimization problems
- Provide recommendations
Implementation¶
def quantum_annealer_comparison():
"""Compare quantum and quantum-like annealers"""
print("Quantum vs Quantum-like Annealers:")
annealers = {
'D-Wave Quantum Annealer': {
'type': 'Quantum',
'qubits': '5000+',
'connectivity': 'Pegasus topology',
'use_case': 'Large QUBO problems'
},
'Fujitsu Digital Annealer': {
'type': 'Quantum-like',
'qubits': '8192+',
'connectivity': 'Fully connected',
'use_case': 'Fully connected problems'
},
'Simulated Annealing': {
'type': 'Classical',
'qubits': 'N/A',
'connectivity': 'N/A',
'use_case': 'Small problems'
}
}
for name, details in annealers.items():
print(f"\n{name}:")
print(f" Type: {details['type']}")
print(f" Capacity: {details['qubits']}")
print(f" Connectivity: {details['connectivity']}")
print(f" Use case: {details['use_case']}")
print("\nComparison Metrics:")
print("1. Problem size scalability")
print("2. Solution quality")
print("3. Execution time")
print("4. Cost")
print("5. Connectivity requirements")
quantum_annealer_comparison()
Project 16: To Implement Shor's Code in Qiskit with Noise Models¶
Difficulty: Advanced
Estimated Time: 15-20 hours
Prerequisites: Module 2, Module 4
Objectives¶
- Implement Shor's 9-qubit error correction code
- Add noise models
- Test error correction performance
Implementation¶
def shor_code_noise():
"""Shor's code with noise models"""
from qiskit.providers.aer.noise import NoiseModel
from qiskit.providers.aer.noise import depolarizing_error
print("Shor's Code with Noise Models:")
print("\n1. Shor's 9-Qubit Code:")
print(" - Encodes 1 logical qubit in 9 physical qubits")
print(" - Corrects 1 bit-flip OR 1 phase-flip error")
print(" - Combines bit-flip and phase-flip codes")
# Create noise model
noise_model = NoiseModel()
# Depolarizing error
error = depolarizing_error(0.1, 1) # 10% error rate
noise_model.add_all_qubit_quantum_error(error, ['x', 'y', 'z'])
print("\n2. Noise Model:")
print(" - Depolarizing noise: 10%")
print(" - Affects X, Y, Z gates")
print(" - Simulates realistic hardware")
print("\n3. Error Correction:")
print(" - Encode logical qubit")
print(" - Introduce noise")
print(" - Measure syndrome")
print(" - Apply correction")
print(" - Decode and verify")
return noise_model
shor_code_noise()
Specialized Projects¶
Project 17: Research on Quantum Computing usage to Expedite the Drug Discovery Process (Life Sciences)¶
Difficulty: Advanced
Estimated Time: 40-50 hours
Prerequisites: Module 7
Objectives¶
- Apply VQE to molecular docking
- Optimize drug-target interactions
- Accelerate drug discovery pipeline
Implementation¶
def quantum_drug_discovery():
"""Quantum computing for drug discovery"""
print("Quantum Computing for Drug Discovery:")
print("\n1. Molecular Docking:")
print(" - Use VQE to find optimal binding conformations")
print(" - Optimize drug-target interactions")
print(" - Search conformational space")
print("\n2. Molecular Property Prediction:")
print(" - Use quantum ML to predict properties")
print(" - ADMET properties (Absorption, Distribution, etc.)")
print(" - Toxicity prediction")
print("\n3. Compound Optimization:")
print(" - Use QAOA to optimize molecular structures")
print(" - Maximize desired properties")
print(" - Minimize side effects")
print("\n4. Quantum Simulation:")
print(" - Simulate molecular dynamics")
print(" - Study protein folding")
print(" - Understand mechanisms")
return None
quantum_drug_discovery()
Project 18: To Design and Build an Educational Game Using Fundamentals of Quantum Computing¶
Difficulty: Intermediate
Estimated Time: 30-40 hours
Prerequisites: All modules
Objectives¶
- Create interactive quantum computing game
- Teach quantum concepts through gameplay
- Make quantum computing accessible
Game Ideas¶
def quantum_educational_game():
"""Design quantum computing educational game"""
game_concepts = {
'Quantum Puzzle Solver': {
'concept': 'Use quantum gates to solve puzzles',
'learning': 'Gate operations, superposition'
},
'Quantum Cryptography Challenge': {
'concept': 'Implement BB84 protocol',
'learning': 'Quantum key distribution'
},
'Quantum Algorithm Race': {
'concept': 'Race to implement algorithms',
'learning': 'Algorithm design, optimization'
},
'Quantum State Visualizer': {
'concept': 'Interactive Bloch sphere',
'learning': 'Quantum states, measurements'
}
}
for game, details in game_concepts.items():
print(f"\n{game}:")
print(f" Concept: {details['concept']}")
print(f" Learning: {details['learning']}")
return game_concepts
quantum_educational_game()
Project 19: Solving Travelling Salesman Problem Using QAOA¶
Difficulty: Advanced
Estimated Time: 18-22 hours
Prerequisites: Module 7
Objectives¶
- Formulate TSP as QUBO
- Implement QAOA solution
- Compare with classical methods
Implementation¶
def qaoa_tsp():
"""QAOA for Traveling Salesman Problem"""
print("QAOA for Traveling Salesman Problem:")
print("\n1. Problem Formulation:")
print(" - Cities: n vertices")
print(" - Distances: edge weights")
print(" - Objective: Minimize total distance")
print(" - Constraint: Visit each city once")
print("\n2. QUBO Formulation:")
print(" - Variables: x[i,t] = 1 if city i visited at time t")
print(" - Objective: Minimize Σᵢⱼᵗ dᵢⱼxᵢᵗxⱼᵗ₊₁")
print(" - Constraints:")
print(" * Each city visited once: Σᵗ xᵢᵗ = 1")
print(" * One city per time: Σᵢ xᵢᵗ = 1")
print("\n3. QAOA Implementation:")
print(" - Encode as Ising model")
print(" - Use QAOA to find optimal route")
print(" - Extract solution from measurement")
# Example: 3 cities
distances = {
(0, 1): 10,
(1, 2): 15,
(2, 0): 12
}
print(f"\nExample: 3 cities")
print(f"Distances: {distances}")
return distances
qaoa_tsp()
Project 20: Implementing Clinical Data Classification by Quantum Machine Learning (QML)¶
Difficulty: Advanced
Estimated Time: 25-30 hours
Prerequisites: Module 5, Module 6
Objectives¶
- Classify clinical/medical data using QML
- Handle sensitive healthcare data
- Compare with classical ML
Implementation¶
def qml_clinical_classification():
"""QML for clinical data classification"""
print("QML for Clinical Data Classification:")
print("\n1. Data Considerations:")
print(" - Privacy: Use synthetic or anonymized data")
print(" - Features: Patient vitals, lab results, demographics")
print(" - Labels: Disease diagnosis, risk assessment")
print("\n2. Quantum Models:")
print(" - Variational Quantum Classifier (VQC)")
print(" - Quantum Support Vector Machine (QSVM)")
print(" - Quantum Neural Networks")
print("\n3. Implementation:")
print(" - Encode clinical features")
print(" - Train quantum classifier")
print(" - Evaluate on test set")
print(" - Compare with classical methods")
print("\n4. Applications:")
print(" - Disease diagnosis")
print(" - Drug response prediction")
print(" - Risk stratification")
print(" - Treatment recommendation")
return None
qml_clinical_classification()
Project Submission Guidelines¶
Report Structure¶
- Introduction: Problem statement and objectives
- Background: Relevant quantum computing concepts
- Methodology: Implementation approach
- Results: Performance metrics and analysis
- Discussion: Insights and limitations
- Conclusion: Summary and future work
Code Requirements¶
- Well-documented code
- Reproducible experiments
- Clear file structure
- Requirements.txt included
Evaluation Criteria¶
- Correctness: Algorithm implementation accuracy
- Completeness: All objectives met
- Documentation: Clear explanations
- Innovation: Creative solutions
- Analysis: Deep understanding demonstrated
Getting Started with Projects¶
- Choose a Project: Select based on your skill level and interests
- Review Prerequisites: Ensure you understand required concepts
- Set Up Environment: Install Qiskit, PennyLane, or other frameworks
- Plan Implementation: Break down into smaller tasks
- Implement: Code step by step
- Test and Validate: Verify correctness
- Document: Write clear documentation
Resources for Projects¶
Last Updated: November 2024