top of page

Linguaggi di programmazione per il Quantum Computing: un viaggio tra Qiskit, Cirq, Q#, ed altri meno famosi.


Il post che segue esplora come diversi linguaggi di programmazione per il quantum computing affrontano lo stesso problema — l’implementazione della Quantum Fourier Transform (QFT) — con approcci differenti sia a livello sintattico che filosofico.


La scelta del linguaggio quantistico da adottare dipende da diversi fattori: le esigenze specifiche del progetto, il livello di astrazione desiderato, il tipo di hardware target e la familiarità con l’ecosistema di riferimento.


Partendo dal mio post precedente sulla QFT, mi concentro qui sull’implementazione minimalista di questo algoritmo, così da evidenziare le differenze tra i linguaggi più utilizzati.


Prima, però, una nota importante: le “porte logiche” nel quantum computing sono astrazioni di complesse interazioni fisiche che manipolano lo stato dei qubit — interazioni che coinvolgono laser, microonde, campi magnetici, temperature criogeniche, ecc. In questo contesto, la QFT rappresenta un algoritmo fondamentale e altamente simbolico, ideale per confrontare gli approcci dei vari framework quantistici.


📌 Struttura comune degli esempi:

  1. Creazione di uno stato indeterminato (Hadamard)

  2. Applicazione della QFT

  3. Misurazione (collasso della funzione d’onda)

Gli esempi sono volutamente semplici per mettere in risalto le differenze strutturali tra i linguaggi, più che le performance o le funzionalità avanzate.


🔹 1. Qiskit (by IBM)

Qiskit è probabilmente il framework più diffuso. Basato su Python e sviluppato da IBM, permette di costruire, simulare ed eseguire circuiti quantistici sia in simulazione che su hardware reale IBM Quantum. È modulare: consente di lavorare a basso livello, ma offre anche strumenti avanzati per quantum machine learning e chimica quantistica.

📌 Punto di forza: Ottima documentazione e una community molto attiva📌 Ideale per: Sviluppatori Python, studenti, ricercatori accademici

from qiskit import QuantumCircuit, Aer, execute
from qiskit.circuit.library import QFT

qc = QuantumCircuit(3, 3)
qc.h([0, 1, 2])
qc.append(QFT(3), [0, 1, 2])
qc.measure([0, 1, 2], [0, 1, 2])

sim = Aer.get_backend('qasm_simulator')
result = execute(qc, sim, shots=1024).result()
print(result.get_counts())

🔸 2. Cirq (by Google)

Cirq, sviluppato da Google, è anch’esso basato su Python ma con un focus più marcato sull’esecuzione di algoritmi su dispositivi NISQ (Noisy Intermediate-Scale Quantum). È molto vicino all’hardware e offre grande controllo sulle operazioni quantistiche.

📌 Punto di forza: Controllo granulare sui circuiti📌 Ideale per: Ricercatori, sviluppatori orientati agli esperimenti su hardware reale

import cirq
import numpy as np

qubits = [cirq.LineQubit(i) for i in range(3)]
circuit = cirq.Circuit()
circuit.append(cirq.H.on_each(*qubits))

def qft_cirq(qs):
    n = len(qs)
    c = cirq.Circuit()
    for i in range(n):
        c.append(cirq.H(qs[i]))
        for j in range(i+1, n):
            angle = np.pi / (2 ** (j - i))
            c.append(cirq.CZ(qs[j], qs[i])**(angle / np.pi))
    return c

circuit += qft_cirq(qubits)
circuit.append(cirq.measure(*qubits, key='result'))

sim = cirq.Simulator()
result = sim.run(circuit, repetitions=1000)
print(result.histogram(key='result'))

🔹 3. Q# (by Microsoft)

Q# è un linguaggio quantistico standalone, parte del Quantum Development Kit di Microsoft. Non è un’estensione di un linguaggio classico, ma è progettato specificamente per la programmazione quantistica, con un forte sistema di tipi e supporto integrato per concetti come entanglement e misurazioni.

📌 Punto di forza: Linguaggio nativo quantistico, tipizzazione forte📌 Ideale per: Sviluppatori .NET, team enterprise, integrazione con Azure Quantum

operation QFTExample() : Result[] {
    use q = Qubit[3];
    ApplyToEach(H, q);
    QFT(q);
    mutable results = new Result[3];
    for (i in 0..2) {
        set results w/= i <- M(q[i]);
    }
    ResetAll(q);
    return results;
}

🔸 4. Ocean (by D-Wave)

Ocean è un insieme di tool progettati per lavorare con i computer quantistici ad annealing di D-Wave, focalizzati su problemi di ottimizzazione combinatoria. Non usa porte logiche né implementa direttamente algoritmi come la QFT, ma possiamo costruire esempi concettualmente affini.

📌 Punto di forza: Eccellente per problemi di ottimizzazione📌 Ideale per: Aziende e casi d’uso industriali

from dwave.system import DWaveSampler, EmbeddingComposite
from dimod import BinaryQuadraticModel

bqm = BinaryQuadraticModel({}, {('a', 'b'): -1}, 0.0, 'BINARY')
sampler = EmbeddingComposite(DWaveSampler())
sampleset = sampler.sample(bqm, num_reads=1000)
print(sampleset.aggregate())

🔹 5. PennyLane (by Xanadu)

PennyLane è un framework orientato all’apprendimento automatico quantistico e agli algoritmi ibridi quantum-classical. Supporta back-end multipli come Qiskit, Cirq, Braket, ecc. e consente di costruire modelli differenziabili.

📌 Punto di forza: Focus su quantum machine learning📌 Ideale per: Ricercatori in AI quantistica, sviluppatori ibridi

import pennylane as qml
from pennylane import numpy as np

dev = qml.device("default.qubit", wires=3, shots=1000)

@qml.qnode(dev)
def circuit():
    for i in range(3):
        qml.Hadamard(wires=i)
    qml.templates.QFT(wires=[0, 1, 2])
    return qml.sample(qml.PauliZ(0)), qml.sample(qml.PauliZ(1)), qml.sample(qml.PauliZ(2))

res = circuit()
print(res)

⚙️ Altri strumenti emergenti

  • Amazon Braket: piattaforma che consente di utilizzare diversi linguaggi e back-end tramite AWS.

  • QuTiP: potente toolkit per la simulazione di sistemi quantistici aperti, molto usato in ambito accademico.


 
 
 

Comments


bottom of page