Ukratko

Najvažnije iz članka

  • Kvantno računarstvo koristi kubite koji mogu biti u superpoziciji (istovremeno 0 i 1) i spregnuti (povezani bez obzira na udaljenost), omogućujući eksponencijalno brže izračune za specifične probleme.
  • IBM-ov Qiskit je otvoreni SDK za kvantno programiranje, koji omogućuje stvaranje kvantnih sklopova, simulacije i pristup stvarnim kvantnim računalima.
  • Osnovni kvantni sklopovi mogu se izgraditi u Qiskitu korištenjem funkcija poput `QuantumCircuit()`, `h()` za superpoziciju (Hadamard vrata) i `cx()` za spregnuće (CNOT vrata).
  • Kvantni algoritmi su dizajnirani da koriste interferenciju za pojačavanje ispravnih rješenja i poništavanje pogrešnih, što je ključno za njihovu učinkovitost.
Sadržaj članka
  1. Što je Kvantno Računarstvo?
  2. 1. Superpozicija (Superposition)
  3. 2. Spregnuće (Entanglement)
  4. 3. Interferencija (Interference)
  5. Prednosti i Izazovi Kvantnog Računarstva
  6. Uvod u Qiskit
  7. Instalacija Qiskita
  8. Osnovne Komponente Qiskita
  9. Vaš Prvi Kvantni Program s Qiskitom
  10. Objašnjenje Koda:
  11. Izgradnja Spregnutih Stanja: Bellovo Stanje
  12. Objašnjenje Bellovog Koda:
  13. Korištenje Stvarnog Kvantnog Hardvera (IBM Quantum Experience)
  14. Zaključak
  15. Resursi za Daljnje Učenje

Kvantno računarstvo predstavlja paradigmu koja obećava revoluciju u načinu na koji rješavamo složene probleme, nadilazeći ograničenja klasičnih računala. Dok klasična računala manipuliraju bitovima koji mogu biti u stanju 0 ili 1, kvantna računala koriste kubite (kvantne bitove) koji mogu istovremeno biti u više stanja zahvaljujući fenomenima superpozicije i sprezanja (entanglement). Ova fundamentalna razlika otvara vrata za rješavanje problema koji su trenutno nerješivi, od razvoja novih materijala i lijekova do optimizacije složenih logističkih sustava i kriptografije.

U ovom opsežnom vodiču istražit ćemo temeljne koncepte kvantnog računarstva, objasniti kako kvantni fenomeni omogućuju njegovu moć i pružiti praktičan uvod u IBM-ov Qiskit framework. Qiskit je otvoreni softverski razvojni kit (SDK) koji omogućuje programiranje kvantnih računala i simulatore, čineći kvantno programiranje dostupnijim široj publici.

Što je Kvantno Računarstvo?

Kvantno računarstvo nije samo brža verzija klasičnog računarstva. To je potpuno novi pristup obradi informacija koji koristi principe kvantne mehanike. Tri ključna koncepta su u srcu kvantnog računarstva:

1. Superpozicija (Superposition)

U klasičnom računarstvu, bit može biti ili u stanju 0 ili u stanju 1. Kubit, s druge strane, može biti u superpoziciji oba stanja istovremeno. Zamislite to kao kovanicu koja se vrti u zraku – dok se vrti, ona je istovremeno i glava i pismo. Tek kada kovanica padne (ili kada se izmjeri kubit), ona se "kola" u jedno određeno stanje (0 ili 1).

Matematički, stanje kubita može se predstaviti kao linearna kombinacija osnovnih stanja |0⟩ i |1⟩:

|ψ⟩ = α|0⟩ + β|1⟩

gdje su α i β kompleksni brojevi, a |α|^2 + |β|^2 = 1. |α|^2 predstavlja vjerojatnost da će se kubit mjeriti kao 0, dok |β|^2 predstavlja vjerojatnost da će se mjeriti kao 1.

Superpozicija omogućuje kvantnim računalima da istovremeno obrađuju više mogućnosti, što je ključno za ubrzanje određenih tipova izračuna.

2. Spregnuće (Entanglement)

Spregnuće je možda najmisterioznija karakteristika kvantne mehanike, koju je Einstein nazvao "sablasnom akcijom na daljinu" (spooky action at a distance). Dva ili više kubita su spregnuta kada je stanje jednog kubita inherentno povezano sa stanjem drugog, bez obzira na udaljenost između njih. Ako se izmjeri stanje jednog spregnutog kubita, trenutno se određuje i stanje drugog.

Na primjer, ako imate dva spregnuta kubita i izmjerite prvi kubit kao 0, odmah znate stanje drugog kubita (npr. da je 1), čak i ako su udaljeni svjetlosnim godinama. Spregnuće je resurs koji omogućuje kvantnim algoritmima da pronađu rješenja eksponencijalno brže od klasičnih algoritama.

3. Interferencija (Interference)

Kao valovi, kvantna stanja mogu interferirati. Kvantna interferencija je mehanizam kojim se vjerojatnosti određenih rezultata izračuna mogu pojačati (konstruktivna interferencija) ili poništiti (destruktivna interferencija). Kvantni algoritmi su dizajnirani tako da konstruktivno interferiraju s "ispravnim" rješenjima i destruktivno s "pogrešnim" rješenjima, čime se povećava vjerojatnost dobivanja ispravnog rezultata.

Ova tri principa – superpozicija, spregnuće i interferencija – zajedno omogućuju kvantnim računalima da istražuju ogroman broj mogućnosti istovremeno i pronađu rješenja puno učinkovitije od klasičnih računala za specifične probleme.

Prednosti i Izazovi Kvantnog Računarstva

Prednosti:

  • Rješavanje nerješivih problema: Potencijal za rješavanje problema koji su klasično prekomplicirani, poput simulacija molekula za razvoj lijekova, optimizacije logistike ili proboj kriptografije.
  • Eksponencijalno ubrzanje: Za određene algoritme, kvantna računala nude eksponencijalno ubrzanje u odnosu na klasična.
  • Nove paradigme: Otvara nova područja istraživanja i razvoja softvera i hardvera.

Izazovi:

  • Decoherencija: Kubiti su iznimno osjetljivi na smetnje iz okoline (temperatura, elektromagnetska polja), što uzrokuje gubitak kvantnih svojstava (decoherencija). To dovodi do pogrešaka.
  • Skalabilnost: Izgradnja kvantnih računala s velikim brojem stabilnih i međusobno povezanih kubita je izuzetno teška.
  • Korekcija pogrešaka: Razvoj učinkovitih metoda za korekciju pogrešaka je ključan za izgradnju tolerancije na pogreške u kvantnim računalima.
  • Programiranje: Kvantno programiranje zahtijeva drugačiji način razmišljanja i razumijevanje kvantnih principa.

Unatoč izazovima, napredak u polju kvantnog računarstva je impresivan, s tvrtkama poput IBM-a, Googlea, Intela i mnogih startupova koje ulažu značajna sredstva u istraživanje i razvoj.

Uvod u Qiskit

IBM Qiskit je otvoreni softverski razvojni kit za rad s kvantnim računalima na razini kruga, pulsa i algoritama. Qiskit je dizajniran da omogući korisnicima izgradnju kvantnih sklopova, pokretanje simulacija na lokalnom računalu ili pristupanje stvarnim kvantnim hardverima putem IBM Clouda.

Instalacija Qiskita

Qiskit se lako instalira putem pip naredbe:

pip install qiskit

Preporučuje se instalacija unutar virtualnog okruženja kako bi se izbjegli sukobi paketa.

Osnovne Komponente Qiskita

Qiskit se sastoji od nekoliko modula:

  • Terra: Jezgra Qiskita, pruža osnovne klase za kvantne sklopove, pulseve i rad s kvantnim podacima.
  • Aer: Simulatori za kvantna računala, omogućuju testiranje sklopova bez pristupa fizičkom hardveru, uključujući simulaciju šuma.
  • Ignis: Alati za karakterizaciju šuma i kvantne korekcije pogrešaka.
  • Aqua: Biblioteka kvantnih algoritama (Machine Learning, Optimization, Chemistry, Finance).

Za početak, najviše ćemo koristiti qiskit.QuantumCircuit za izgradnju sklopova i qiskit.providers.aer.AerSimulator za njihovu simulaciju.

Vaš Prvi Kvantni Program s Qiskitom

Započnimo s jednostavnim primjerom: stvaranje superpozicije koristeći Hadamard vrata.

import qiskit
from qiskit import QuantumCircuit, transpile
from qiskit.providers.aer import AerSimulator
from qiskit.visualization import plot_histogram

# 1. Stvaranje kvantnog sklopa
# Kreiramo sklop s jednim kubitom i jednim klasičnim bitom
# Klasični bit nam treba za spremanje rezultata mjerenja
circuit = QuantumCircuit(1, 1)

# 2. Primjena Hadamard vrata (H-gate)
# Hadamard vrata stavljaju kubit u superpoziciju
circuit.h(0) # Primjenjujemo H-gate na kubit 0

# 3. Mjerenje kubita
# Mjerimo kubit 0 i pohranjujemo rezultat u klasični bit 0
circuit.measure(0, 0)

# Prikaz sklopa (opcionalno)
print("\nKvantni sklop:")
print(circuit.draw())

# 4. Simulacija sklopa
# Koristimo AerSimulator za lokalnu simulaciju
simulator = AerSimulator()

# Transpile - optimizira sklop za ciljni backend (simulator u ovom slučaju)
compiled_circuit = transpile(circuit, simulator)

# Izvršavamo sklop 1024 puta
job = simulator.run(compiled_circuit, shots=1024)

# Dohvaćanje rezultata
result = job.result()
counts = result.get_counts(compiled_circuit)

# 5. Prikaz rezultata
print("\nRezultati mjerenja (counts):", counts)
plot_histogram(counts).show()

Objašnjenje Koda:

  • QuantumCircuit(1, 1): Stvara kvantni sklop s jednim kubitom i jednim klasičnim bitom. Broj kubita je prvi argument, broj klasičnih bitova je drugi.
  • circuit.h(0): Primjenjuje Hadamard vrata na kubit s indeksom 0. To stavlja kubit 0 u jednaku superpoziciju stanja |0⟩ i |1⟩ (50% šanse za 0, 50% za 1).
  • circuit.measure(0, 0): Mjeri stanje kubita 0 i sprema rezultat u klasični bit 0. Mjerenje je ono što "kola" superpoziciju u jedno određeno stanje.
  • simulator = AerSimulator(): Inicijalizira lokalni kvantni simulator.
  • transpile(circuit, simulator): Optimizira kvantni sklop za odabrani simulator (ili stvarni hardver). Ovo je važan korak za učinkovito izvođenje.
  • job = simulator.run(compiled_circuit, shots=1024): Pokreće sklop na simulatoru 1024 puta. shots parametar određuje koliko puta se mjerenje izvodi kako bi se dobila statistika vjerojatnosti.
  • result.get_counts(compiled_circuit): Dohvaća rezultate mjerenja, obično kao rječnik gdje su ključevi binarni stringovi (rezultati mjerenja klasičnih bitova), a vrijednosti su broj ponavljanja tog rezultata.
  • plot_histogram(counts).show(): Prikazuje histogram rezultata, vizualizirajući distribuciju izmjerenih stanja.

Kada pokrenete ovaj kod, očekujete da će rezultati counts biti otprilike { '0': 512, '1': 512 } (ili slične vrijednosti), što odražava približno 50% vjerojatnosti za svako stanje zbog superpozicije.

Izgradnja Spregnutih Stanja: Bellovo Stanje

Bellova stanja su najjednostavnija i najpoznatija spregnuta stanja. Stvaranje Bellovog stanja |Φ⁺⟩ = (|00⟩ + |11⟩) / √2 je klasičan primjer spregnuća.

import qiskit
from qiskit import QuantumCircuit, transpile
from qiskit.providers.aer import AerSimulator
from qiskit.visualization import plot_histogram

# Stvaranje sklopa s dva kubita i dva klasična bita
bell_circuit = QuantumCircuit(2, 2)

# 1. Postavljanje prvog kubita u superpoziciju
bell_circuit.h(0) # Kubit 0 je sada u superpoziciji

# 2. Primjena CNOT vrata (Controlled-NOT)
# CNOT vrata flipaju stanje drugog kubita ako je prvi kubit u stanju |1⟩
bell_circuit.cx(0, 1) # Controlled-NOT: kontrolni kubit 0, ciljni kubit 1

# 3. Mjerenje oba kubita
bell_circuit.measure([0, 1], [0, 1]) # Mjeri kubit 0 u klasični bit 0, kubit 1 u klasični bit 1

# Prikaz sklopa
print("\nBellov sklop:")
print(bell_circuit.draw())

# 4. Simulacija sklopa
simulator = AerSimulator()
compiled_bell_circuit = transpile(bell_circuit, simulator)
job_bell = simulator.run(compiled_bell_circuit, shots=1024)
result_bell = job_bell.result()
counts_bell = result_bell.get_counts(compiled_bell_circuit)

# 5. Prikaz rezultata
print("\nRezultati Bellovog stanja (counts):", counts_bell)
plot_histogram(counts_bell).show()

Objašnjenje Bellovog Koda:

  • QuantumCircuit(2, 2): Dva kubita, dva klasična bita.
  • bell_circuit.h(0): Prvi kubit se postavlja u superpoziciju, stvarajući stanje (|0⟩ + |1⟩) / √2 na kubitu 0, dok je kubit 1 ostao u |0⟩. Kombinirano stanje je (|00⟩ + |10⟩) / √2.
  • bell_circuit.cx(0, 1): Ovo su Controlled-NOT vrata. Ona uvjetovano flipaju stanje drugog kubita (ciljnog, 1) ako je prvi kubit (kontrolni, 0) u stanju |1⟩.
    • Ako je kubit 0 u |0⟩, CNOT ne radi ništa na kubitu 1. Stanje ostaje |00⟩.
    • Ako je kubit 0 u |1⟩, CNOT flipa kubit 1 iz |0⟩ u |1⟩. Stanje postaje |11⟩. Kao rezultat, početno stanje (|00⟩ + |10⟩) / √2 postaje (|00⟩ + |11⟩) / √2, što je Bellovo stanje.
  • bell_circuit.measure([0, 1], [0, 1]): Mjeri oba kubita. Zbog spregnuća, uvijek ćete mjeriti ili 00 ili 11, s približno jednakom vjerojatnošću.

Kada se pokrene ovaj kod, očekuje se da će counts_bell biti otprilike { '00': 512, '11': 512 }. Nikada nećete vidjeti rezultate poput 01 ili 10, što je izravan dokaz spregnuća. Mjerenje jednog kubita odmah određuje stanje drugog.

Korištenje Stvarnog Kvantnog Hardvera (IBM Quantum Experience)

Qiskit ne služi samo za simulacije. IBM-ovi kvantni procesori dostupni su javnosti putem IBM Quantum Experience platforme. Da biste ih koristili, potreban vam je IBM Q račun i API token.

  1. Prijavite se na IBM Quantum Experience: https://quantum-computing.ibm.com/

  2. Generirajte API token: Idite na svoj profil i kopirajte API token.

  3. Spremite API token:

    from qiskit_ibm_provider import IBMProvider
    
    # Spremite svoj API token jednom. Pokreni samo jednom.
    # IBMProvider.save_account(token='YOUR_API_TOKEN')
    

    Napomena: API token se automatski sprema na vaš lokalni disk. Ne morate ga spremati svaki put kad pokrenete skriptu.

  4. Učitajte svoj račun i odaberite backend:

    from qiskit_ibm_provider import IBMProvider
    from qiskit import QuantumCircuit, transpile
    from qiskit.visualization import plot_histogram
    
    # Učitajte svoj IBM Q račun (ako ste ga prethodno spremili)
    provider = IBMProvider()
    
    # Popis dostupnih backenda (kvantnih računala i simulatora)
    # print(provider.backends())
    
    # Odaberite backend (npr. 'ibm_lagos' ili neki drugi dostupni sustav s manje poslova u redu čekanja)
    # Možete koristiti .least_busy() za odabir najmanje zauzetog dostupnog kvantnog sustava
    # ili navesti specifično kao 'ibm_oslo' ako znate točno koji želite
    
    # backend = provider.get_backend('ibmq_qasm_simulator') # Za simulaciju na IBM Cloudu
    backend = provider.get_backend('ibm_oslo') # Primjer stvarnog kvantnog hardvera
    
    print(f"Koristim backend: {backend.name}")
    
    # Sada možete pokrenuti svoj bell_circuit (ili bilo koji drugi sklop) na ovom backendu
    # U ovom primjeru reći ćemo da je to Bellov sklop iz prethodnog primjera
    # (pretpostavljamo da je 'bell_circuit' definiran ranije)
    bell_circuit = QuantumCircuit(2, 2)
    bell_circuit.h(0)
    bell_circuit.cx(0, 1)
    bell_circuit.measure([0, 1], [0, 1])
    
    # Optimizacija sklopa za odabrani kvantni hardver
    transpiled_circuit = transpile(bell_circuit, backend)
    
    # Pokretanje posla na stvarnom hardveru
    job = backend.run(transpiled_circuit, shots=1024)
    print(f"Job ID: {job.job_id()}")
    print("Provjerite status na IBM Quantum Experience: ", job.url())
    
    # Dohvaćanje rezultata (može potrajati ovisno o redu čekanja hardvera)
    result = job.result()
    counts = result.get_counts(transpiled_circuit)
    
    print("\nRezultati sa stvarnog kvantnog hardvera:", counts)
    plot_histogram(counts).show()
    

Prilikom korištenja stvarnog hardvera, rezultati će pokazivati i neke 01 i 10 brojače, što je rezultat šuma i pogrešaka kvantnog računala. To je trenutna stvarnost NISQ (Noisy Intermediate-Scale Quantum) ere.

Zaključak

Kvantno računarstvo je polje koje se brzo razvija, s potencijalom da transformira brojne industrije. Razumijevanje osnovnih koncepata superpozicije, spregnuća i interferencije ključno je za početak. IBM Qiskit pruža moćan i pristupačan alat za istraživanje ovih koncepata, od lokalnih simulacija do interakcije sa stvarnim kvantnim hardverom.

Iako smo tek na početku kvantne ere, praktičnim eksperimentiranjem s Qiskitom možete steći dragocjeno iskustvo i razumijevanje koje će biti sve važnije u budućnosti računarstva. Putovanje u svijet kvantnog računarstva je fascinantno i puno obećanja – a Qiskit je vaš ulaz u taj svijet.

Resursi za Daljnje Učenje

Za dublje razumijevanje kvantnog računarstva i naprednije koncepte, preporučuju se sljedeći resursi:

  • Qiskit Documentation: Službena dokumentacija Qiskita je izvanredan izvor informacija za sve razine korisnika.
  • IBM Quantum Learning: Platforma s edukativnim materijalima, interaktivnim tutorialima i vježbama.
  • Quantum Katas: Skup vježbi u Pythonu koje pomažu u učenju kvantnog programiranja.
  • Nielsen & Chuang, "Quantum Computation and Quantum Information": Klasična referentna knjiga za dubinsko teorijsko razumijevanje kvantnog računarstva.

Nastavite eksperimentirati, postavljati pitanja i istraživati – budućnost računarstva je kvantna, a vi ste sada dio nje!

Izvori i dodatno čitanje

  1. IBM Qiskit Documentation
  2. IBM Quantum Experience
  3. Nielsen & Chuang - Quantum Computation and Quantum Information
  4. Quantum Katas
B
Uredništvo portala

BAJT

Službeni autorski profil redakcije portala BAJT. Sadržaj priprema i provjerava uredništvo portala.