Mapare
Urmărește videoclipul despre mapare realizat de Olivia Lanes sau deschide videoclipul într-o fereastră separată pe YouTube.
Introducere
În această lecție, ne vom concentra pe primul și adesea cel mai dificil pas în definirea unui program cuantic: maparea unei probleme pentru a fi rulată pe un calculator cuantic. Acest pas acoperă modul în care un utilizator pornește de la o problemă computațională și o traduce în ceva ce poate fi rezolvat pe un calculator cuantic.
În Lecțiile 2 și 3 ale acestui curs, am menționat că etapa de mapare este prima din cele patru etape totale ale cadrului Qiskit patterns. Din aceste lecții, poate îți amintești că scopul mapării este să traducă sau să rescrie o problemă computațională într-o funcție de cost sau o valoare de așteptare pe care o putem evalua folosind un calculator cuantic.
În Lecția 3 am discutat un exemplu concret cu Max-Cut, o problemă computațional dificilă, dar foarte comună, în optimizarea combinatorie. În acel exemplu, am parcurs mai mulți pași pentru a traduce problema inițială de graf într-una care putea fi rezolvată pe un calculator cuantic. Am transformat problema găsirii numărului maxim de tăieturi în graf într-o funcție de cost, am rescris acea funcție de cost ca un Hamiltonian și am pregătit o stare cuantică de probă a cărei stare fundamentală corespundea tăieturii maxime. În final, am construit un circuit cuantic care reprezenta starea cuantică de probă de interes și am adăugat porțile specifice pentru a permite stării să evolueze în timp. Această secvență de pași a făcut parte din mapare. Deși pașii exacți au fost unici pentru problema Max-Cut, aceeași procedură generală poate fi aplicată multor alte aplicații, cum ar fi chimia cuantică și simulările cuantice.
Maparea poate fi dificilă. Nu există o strategie universală pentru fiecare problemă în parte, deci poate fi intimidantă. În această lecție, vom analiza câteva considerații generale pentru mapare și apoi vom intra în detaliile unor exemple reprezentative pentru a demonstra diferitele moduri de a mapa o problemă pe un calculator cuantic.
Considerații generale
Deși strategia exactă pe care o folosești pentru a mapa o problemă pe un calculator cuantic depinde de problema în cauză, în general aceasta îndeplinește câteva lucruri principale.
În primul rând, este posibil să trebuiești să simplifici problema pentru a o face fezabilă. Acest lucru nu este unic pentru calculul cuantic – toate disciplinele științifice folosesc modele simplificate pentru a studia fenomenele care le interesează, ignorând detaliile irelevante. În fizică, există o expresie celebră care duce acest principiu la extrem: „presupune o vacă sferică." Adesea este prea dificil să descrii un sistem exact așa cum apare, dar putem face în schimb simplificări rezonabile care pot duce totuși la soluții utile. Câteva exemple despre cum am putea face asta în calculul cuantic sunt limitarea dimensiunii sau adâncimii circuitului prin alegerea unui ansatz eficient hardware, truncherea evoluțiilor de timp complexe sau neglijarea termenilor Hamiltonieni care contribuie puțin la energia finală a unei stări cuantice.
În al doilea rând, maparea implică scrierea problemei în așa fel încât un calculator cuantic să o poată înțelege. Adesea, asta presupune să răspunzi la aceste trei întrebări:
- Ce vor reprezenta qubiții noștri în modelul nostru?
- Este problema noastră continuă? Deoarece calculatoarele cuantice sunt digitale, dacă problema este continuă, va trebui să găsim o modalitate de a o discretiza.
- În ultimul rând, topologia problemei se aliniază cu topologia hardware-ului? Dacă nu, ar putea fi nevoie să implementăm câteva trucuri pentru a o face să funcționeze.
Să abordăm prima întrebare, care este în centrul multora dintre dificultățile legate de înțelegerea mapării: Ce poate reprezenta un qubit?
Qubiții pot fi folosiți pentru a reprezenta multe lucruri. Primul, și poate cel mai simplu, este un nod dintr-un graf. Grafurile sunt folosite pentru a arăta conectivitatea în multe tipuri diferite de probleme matematice, iar nodurile sunt un element fundamental care reprezintă un punct sau o entitate într-o rețea. În funcție de ce reprezintă întreaga rețea, acesta ar putea fi un oraș, o persoană sau un ferromagnet într-o rețea cristalină.
Qubiții pot fi folosiți și pentru a reprezenta bosoni și fermioni, deși voi avertiza că un singur qubit nu este exact egal cu un boson sau un fermion – este puțin mai complicat decât atât, după cum vom discuta mai departe în lecție.
Acum ajungem la exemple puțin mai complicate. Pentru aceste modele, nu mai are sens să vorbim în termeni de qubiți singulari; în schimb, avem nevoie de grupuri de qubiți pentru a reprezenta ceva fizic. De exemplu, un grup de qubiți, reprezentat aici pe o topologie hexagonală grea, poate fi folosit pentru a reprezenta locații geometrice ale aminoacizilor; lanțuri polimerice. Un alt exemplu este simularea împrăștierii hadronice în modele de fizică a energiilor înalte, care poate fi realizată prin simularea evoluției în timp a unui pachet de undă hadronic. În acest caz, un registru de qubiți poate fi folosit pentru a codifica diferite stări ale unui câmp cuantic; starea de vid a acelui câmp sau un pachet de undă care se propagă deasupra acelui vid.
Dar în acest moment am vorbit suficient de abstract despre provocarea din fața noastră. Să analizăm aceste exemple în detaliu.
Exemple de mapare
Max-Cut
Să începem cu primul nostru exemplu. Una dintre cele mai simple probleme de mapare este cea pe care am acoperit-o deja în detaliu: exemplul Max-Cut. În acea problemă, maparea a fost destul de ușoară pentru noi, deoarece un qubit era echivalent cu un nod din graful nostru.
Reamintește-ți că, pentru a mapa problema Max-Cut, am exprimat funcția de cost ca un Hamiltonian folosind formularea QUBO. O funcție de cost Hamiltonian este o funcție care codifică soluția optimă a problemei în starea fundamentală a Hamiltonianului. Pentru a construi Hamiltonianul de cost, am folosit clasa SparsePauliOp din Qiskit pentru a specifica conectivitatea grafului nostru, iar etapa de mapare la operatorii cuantici a fost finalizată. Iar circuitul cuantic a fost pur și simplu ansatz-ul QAOA. Pentru o recapitulare, consultă lecția QAOA la scară de utilitate, unde parcurgem toate acestea în mult mai mult detaliu.
În acea lecție, chiar și în exemplul de 100 de qubiți la scară de utilitate, conectivitatea grafului se potrivea deja cu topologia hardware-ului nostru superconductor. Deci nu a trebuit să ne preocupăm de cum să gestionăm topologii diferite. Dar nu este întotdeauna cazul. Dacă am fi avut un graf mai complicat sau mai dens conectat decât exemplele evidențiate până acum, ar fi trebuit să implementăm o serie de porți SWAP pentru a modifica conectivitatea efectivă a hardware-ului. Acest lucru este gestionat în al doilea pas al Qiskit patterns, transpilarea, dar ar trebui ținut minte chiar și în etapa de mapare.
Plierea proteinelor
Acum, hai să explorăm un exemplu modelat în articolul numit „Resource-efficient quantum algorithm for protein folding", scris de IBM® și colaboratori de la Universitatea din New South Wales.
Puțin context de biochimie: Proteinele sunt macromolecule compuse din lanțuri lungi de aminoacizi. Aceste lanțuri se pliau în structuri complexe care îndeplinesc o mare varietate de funcții biologice. Determinarea structurii unei proteine în spațiul tridimensional și înțelegerea relațiilor dintre structură și funcție sunt printre cele mai dificile probleme din biochimia actuală. Proteinele se pliau în structuri utile datorită interacțiunilor dintre aminoacizi. Pe măsură ce o structură se răsucește și se pliau, aminoacizii care sunt îndepărtați unii de alții de-a lungul lanțului pot ajunge să fie unul lângă altul și pot interacționa puternic.
Pentru a modela acest lucru pe un calculator cuantic, avem nevoie de un Hamiltonian care să descrie toate aceste interacțiuni dintre aminoacizi. Apoi, putem prezice structura finală găsind starea care va minimiza energia Hamiltonianului nostru. Aici, ne vom concentra pe modul în care lanțurile de aminoacizi pot fi modelate pe un calculator cuantic și pe modul în care putem obține distanțe inter-aminoacid pentru calculul energiilor de interacțiune. Astfel, vom fi adunat toate contribuțiile necesare la Hamiltonianul necesar pentru a-l simula pe un calculator cuantic.
În proteinele reale, aminoacizii pot ocupa un continuum de locații posibile. Cu toate acestea, vom folosi o simplificare și îi vom restrânge folosind un model de rețea, unde fiecare aminoacid ocupă un punct pe un grilaj. Aici, autorii au folosit o rețea tetraedrică. O scurtă notă: codificăm direcția muchiilor, nu nodurile în sine, ca în problema Max-Cut. Fiecare qubit reprezintă un posibil pas de-a lungul grilajului tetaedric. Rețineți că siturile adiacente au fost etichetate A sau B din cauza orientărilor lor diferite în rețea.
Lanțul proteic este reprezentat ca o serie de rotații sau direcții pe această rețea. Fiecare rotație dintre aminoacizi poate fi într-una din cele patru direcții, corespunzând muchiilor tetraedrului. Aceste patru rotații posibile sunt codificate folosind patru qubiți în stările 0001, 0010, 0100 sau 1000.

Să ne uităm la un exemplu în figura de mai sus. Să plasăm primul nostru aminoacid pe punctul etichetat „B", încercuit în roșu pe rețeaua noastră tetraedrică. Direcția de la primul aminoacid la al doilea este arbitrară, deoarece sistemul poate fi întotdeauna rotit pentru a face acea muchie să indice în orice direcție dorim. Prin urmare, putem plasa al doilea aminoacid pe punctul de dedesubtul primului, etichetat „A". Nu este la fel de ușor de observat, dar traseul de la al doilea la al treilea este, de asemenea, arbitrar. Toate cele trei alegeri ar rezulta în două muchii cu un unghi de aproximativ 109,5 grade între ele. Alegerea acestei a doua muchii determină pur și simplu orientarea proteinei noastre în spațiu. Prin urmare, fără pierdere de generalitate, putem alege ca primele două rotații să fie 0001 și 0010.
Cu aceste simplificări, configurația lanțului de aminoacizi este dată de această expresie: