Skip to main content

πŸŽ“ Academic Research

Professional quantum computing infrastructure for universities and research institutions.

Why QCOS for Academia?​

ChallengeQCOS Solution
Limited HPC accessCloud-based GPU acceleration
Reproducibility requirementsDeterministic execution + logging
Publication deadlinesFast turnaround (minutes, not days)
Budget constraintsFree tier + academic discounts
Student trainingInteractive playground + docs

Academic Pricing​

TierFeaturesPrice
Student50 jobs/day, 30 qubitsFree
Researcher200 jobs/day, 50 qubits€29/mo
Lab1000 jobs/day, 100 qubits€199/mo
DepartmentUnlimited, priorityCustom

Apply with your .edu email for verification.

Use Case: Quantum Algorithm Research​

Implementing Novel Algorithms​

from qcos import QCOSClient
import numpy as np

client = QCOSClient()

def grover_search(n_qubits: int, target: int, iterations: int) -> str:
"""
Implement Grover's algorithm for n qubits.
"""
qasm = f"""
OPENQASM 2.0;
include "qelib1.inc";
qreg q[{n_qubits}];
creg c[{n_qubits}];

// Initialize superposition
"""
for i in range(n_qubits):
qasm += f"h q[{i}];\n"

for _ in range(iterations):
# Oracle (mark target state)
qasm += f"\n// Oracle for |{format(target, f'0{n_qubits}b')}>\n"
for i, bit in enumerate(format(target, f'0{n_qubits}b')):
if bit == '0':
qasm += f"x q[{i}];\n"

# Multi-controlled Z
qasm += f"h q[{n_qubits-1}];\n"
qasm += f"mcx q[0],q[1]" + "".join(f",q[{i}]" for i in range(2, n_qubits)) + f";\n"
qasm += f"h q[{n_qubits-1}];\n"

for i, bit in enumerate(format(target, f'0{n_qubits}b')):
if bit == '0':
qasm += f"x q[{i}];\n"

# Diffusion
qasm += "\n// Diffusion operator\n"
for i in range(n_qubits):
qasm += f"h q[{i}];\n"
for i in range(n_qubits):
qasm += f"x q[{i}];\n"

qasm += f"h q[{n_qubits-1}];\n"
qasm += f"mcx q[0],q[1]" + "".join(f",q[{i}]" for i in range(2, n_qubits)) + f";\n"
qasm += f"h q[{n_qubits-1}];\n"

for i in range(n_qubits):
qasm += f"x q[{i}];\n"
for i in range(n_qubits):
qasm += f"h q[{i}];\n"

qasm += "\nmeasure q -> c;\n"
return qasm

# Run Grover's algorithm
n = 5
target = 13 # Binary: 01101
iterations = int(np.floor(np.pi/4 * np.sqrt(2**n)))

circuit = grover_search(n, target, iterations)
result = client.execute(qasm=circuit, shots=1024)

print(f"Searching for |{format(target, f'0{n}b')}> in {2**n} items")
print(f"Iterations: {iterations}")
print(f"\nTop 5 results:")
sorted_counts = sorted(result.counts.items(), key=lambda x: x[1], reverse=True)
for state, count in sorted_counts[:5]:
prob = count / 1024
print(f" |{state}> : {count} ({prob:.1%})")

Quantum Error Analysis​

from qcos import QCOSClient
import numpy as np
import matplotlib.pyplot as plt

client = QCOSClient()

def analyze_decoherence(circuit_depth: int, n_qubits: int = 5) -> dict:
"""
Analyze how circuit depth affects state fidelity.
"""
# Create increasingly deep circuits
qasm = f"""
OPENQASM 2.0;
include "qelib1.inc";
qreg q[{n_qubits}];
creg c[{n_qubits}];

// Prepare GHZ state
h q[0];
"""
for i in range(n_qubits - 1):
qasm += f"cx q[{i}], q[{i+1}];\n"

# Add identity layers (depth simulation)
for layer in range(circuit_depth):
qasm += f"\n// Layer {layer + 1}\n"
for i in range(n_qubits):
qasm += f"id q[{i}];\n" # Identity gate

qasm += "\nmeasure q -> c;\n"

result = client.execute(qasm=qasm, shots=4096)

# Calculate GHZ fidelity
ideal_states = ['0' * n_qubits, '1' * n_qubits]
fidelity = sum(result.counts.get(s, 0) for s in ideal_states) / 4096

return {
'depth': circuit_depth,
'fidelity': fidelity,
'counts': result.counts
}

# Run analysis
depths = [0, 10, 20, 50, 100, 200]
results = []

for d in depths:
res = analyze_decoherence(d)
results.append(res)
print(f"Depth {d:3d}: Fidelity = {res['fidelity']:.4f}")

# Plot results
plt.figure(figsize=(10, 6))
plt.plot([r['depth'] for r in results], [r['fidelity'] for r in results], 'o-')
plt.xlabel('Circuit Depth')
plt.ylabel('GHZ State Fidelity')
plt.title('Decoherence Analysis')
plt.grid(True)
plt.savefig('decoherence_analysis.png')

Use Case: Quantum Machine Learning Research​

Quantum Kernel Methods​

from qcos import QCOSClient
import numpy as np
from sklearn.svm import SVC
from sklearn.datasets import make_moons

client = QCOSClient()

def quantum_kernel_circuit(x1: list, x2: list) -> str:
"""
Create circuit for computing quantum kernel between two points.
"""
n = len(x1)
qasm = f"""
OPENQASM 2.0;
include "qelib1.inc";
qreg q[{n}];
creg c[{n}];

// Encode x1
"""
for i, val in enumerate(x1):
qasm += f"ry({val * np.pi}) q[{i}];\n"

qasm += "\n// Entangle\n"
for i in range(n - 1):
qasm += f"cx q[{i}], q[{i+1}];\n"

# Inverse encoding for x2
qasm += "\n// Inverse encode x2\n"
for i in range(n - 1, -1, -1):
if i < n - 1:
qasm += f"cx q[{i}], q[{i+1}];\n"
for i, val in enumerate(x2):
qasm += f"ry({-val * np.pi}) q[{i}];\n"

qasm += "\nmeasure q -> c;\n"
return qasm

def compute_kernel_matrix(X: np.ndarray, shots: int = 1024) -> np.ndarray:
"""
Compute quantum kernel matrix for dataset X.
"""
n_samples = len(X)
kernel = np.zeros((n_samples, n_samples))

for i in range(n_samples):
for j in range(i, n_samples):
circuit = quantum_kernel_circuit(X[i].tolist(), X[j].tolist())
result = client.execute(qasm=circuit, shots=shots)

# Kernel value = probability of measuring |00...0>
zeros_state = '0' * len(X[i])
kernel[i, j] = result.counts.get(zeros_state, 0) / shots
kernel[j, i] = kernel[i, j]

return kernel

# Generate dataset
X, y = make_moons(n_samples=50, noise=0.1, random_state=42)
X = (X - X.mean(axis=0)) / X.std(axis=0) # Normalize

# Compute quantum kernel
print("Computing quantum kernel matrix...")
K = compute_kernel_matrix(X)

# Train SVM with quantum kernel
svm = SVC(kernel='precomputed')
svm.fit(K, y)

# Evaluate
accuracy = svm.score(K, y)
print(f"Training accuracy: {accuracy:.2%}")

Use Case: Variational Algorithm Benchmarking​

from qcos import QCOSClient
import numpy as np
from dataclasses import dataclass
from typing import List, Callable

client = QCOSClient()

@dataclass
class BenchmarkResult:
name: str
qubits: int
depth: int
parameters: int
iterations: int
final_cost: float
execution_time: float
shots_per_iter: int

def benchmark_ansatz(
name: str,
ansatz_generator: Callable[[List[float]], str],
n_params: int,
cost_function: Callable[[dict], float],
max_iterations: int = 100,
shots: int = 1024
) -> BenchmarkResult:
"""
Benchmark a variational ansatz.
"""
import time

# Initialize random parameters
params = np.random.uniform(-np.pi, np.pi, n_params)

start_time = time.time()

for iteration in range(max_iterations):
# Evaluate current parameters
circuit = ansatz_generator(params.tolist())
result = client.execute(qasm=circuit, shots=shots)
cost = cost_function(result.counts)

# Simple gradient estimation (parameter shift)
gradient = np.zeros(n_params)
for i in range(n_params):
params_plus = params.copy()
params_plus[i] += np.pi / 2
params_minus = params.copy()
params_minus[i] -= np.pi / 2

result_plus = client.execute(qasm=ansatz_generator(params_plus.tolist()), shots=shots)
result_minus = client.execute(qasm=ansatz_generator(params_minus.tolist()), shots=shots)

gradient[i] = (cost_function(result_plus.counts) - cost_function(result_minus.counts)) / 2

# Update parameters
learning_rate = 0.1
params -= learning_rate * gradient

if iteration % 10 == 0:
print(f" Iter {iteration}: cost = {cost:.6f}")

execution_time = time.time() - start_time

# Get circuit info
final_circuit = ansatz_generator(params.tolist())
depth = final_circuit.count('\n') # Approximate

return BenchmarkResult(
name=name,
qubits=4, # Extract from circuit
depth=depth,
parameters=n_params,
iterations=max_iterations,
final_cost=cost,
execution_time=execution_time,
shots_per_iter=shots
)

# Benchmark different ansΓ€tze
results = []

# Hardware-efficient ansatz
def hea(params):
return f"""
OPENQASM 2.0;
include "qelib1.inc";
qreg q[4];
creg c[4];
ry({params[0]}) q[0];
ry({params[1]}) q[1];
ry({params[2]}) q[2];
ry({params[3]}) q[3];
cx q[0], q[1];
cx q[2], q[3];
ry({params[4]}) q[0];
ry({params[5]}) q[1];
ry({params[6]}) q[2];
ry({params[7]}) q[3];
measure q -> c;
"""

def cost_fn(counts):
# Target: maximize |0000> probability
return 1 - counts.get('0000', 0) / sum(counts.values())

result = benchmark_ansatz("HEA", hea, 8, cost_fn, max_iterations=50)
results.append(result)

# Print benchmark table
print("\n" + "="*80)
print("BENCHMARK RESULTS")
print("="*80)
for r in results:
print(f"""
Ansatz: {r.name}
Qubits: {r.qubits}
Parameters: {r.parameters}
Iterations: {r.iterations}
Final Cost: {r.final_cost:.6f}
Total Time: {r.execution_time:.1f}s
Shots/Iter: {r.shots_per_iter}
""")

Publication Support​

Reproducibility Package​

Every QCOS execution includes:

result = client.execute(qasm=circuit, shots=1024)

# Reproducibility metadata
print(result.metadata)
# {
# 'qcos_version': '1.0.0',
# 'backend': 'cuStateVec',
# 'device': 'NVIDIA A100',
# 'seed': 42,
# 'timestamp': '2024-01-15T10:30:00Z',
# 'job_id': 'abc123',
# 'checksum': 'sha256:...'
# }

# Export for publication
result.export_reproducibility_package("experiment_data.zip")

Citation​

@software{qcos2024,
title = {QCOS: Quantum Circuit Optimization Service},
author = {SoftQuantus},
year = {2024},
url = {https://softquantus.com},
version = {1.0.0}
}

Integration with Research Tools​

Jupyter Notebooks​

# In Jupyter
from qcos import QCOSClient
from qcos.visualization import plot_histogram, plot_bloch_sphere

client = QCOSClient()

# Interactive widgets
from qcos.widgets import CircuitBuilder
builder = CircuitBuilder()
builder.display() # Interactive circuit builder

LaTeX Export​

# Export circuit as TikZ
result = client.execute(qasm=circuit, shots=1024)
tikz_code = result.to_tikz()

# Save for paper
with open('circuit.tex', 'w') as f:
f.write(tikz_code)

Student Resources​

Tutorial Series​

  1. Quantum Computing Basics
  2. Variational Algorithms
  3. Quantum Machine Learning
  4. Error Mitigation

Interactive Playground​

Try circuits directly in the browser:

πŸ‘‰ Launch Playground

Contact​

For academic partnerships and institutional licenses:

πŸ“§ academic@softquantus.com

Include:

  • Institution name
  • Research group/department
  • Estimated usage (jobs/month)
  • Research area