8 kuningattaren ongelma

8 kuningattaren ongelmassa tehtävänä on ratkaista miten 8 kuningatarta voi laittaa $8×8$ ruudun shakkilaudalle ilman että yksikään kuningatar uhkaisi toista. Tässä tehtävässä tutkitaan yleisen $N$ kuningattaren ongelman ratkaisua kvanttilaskennalla. Kvanttialgoritmin lisäksi artikkelin Lopussa esitetään myös perinteisin tietokoneen algoritmi $N$ kuningattaren ongelmaan.

Erilaisten ratkaisujen lukumäärä riippu $N$ muuttujan arvosta. Lisätietoa ongelmasta ja ratkaisujen lukumäärästä löydät Wikipediasta.

Shakissa kuningatar pystyy liikkumaan vaakasuunnassa, pystysuunnassa ja diagonaaleilla. Ongelman mukaan kaksi kuningatarta uhkaavat toisiaan, jos ne pystyvät liikkumaan toistensa paikalle yhdessä siirrossa.

Esimerkiksi seuraava asetelma on yksi kymmenestä ratkaisusta $N$ kuningattaren ongelmaan, kun $N = 5$:

Shakkilaudan tila esitetään $N×N$ matriisina, jossa luvut yksi ja nolla esittävät kuningatarta ja tyhjää ruutua vastaavasti.

Tehtävä 1

Etsi jokin ratkaisu 4 kuningattaren ongelmaan ja kirjoita vastauksesi matriisimuodossa seuraavaan koodilohkoon.

$N$ kuningattaren ongelman ratkaisun kriteerit

Seuraavien sääntöjen tulee pitää paikkansa, jotta kuningattarien asetelma on ratkaisu:

  1. Samalla rivillä voi olla korkeintaan yksi kuningatar
  2. Samalla sarakkeella voi olla korkeintaan yksi kuningatar
  3. Samalla diagonaalilla voi olla korkeintaan yksi kuningatar

Ensimmäinen kriteeri (rivit) voidaan ratkaista kubittien W-tilalla.

Rivillä on korkeintaan yksi kuningatar kuvataan W-tilan avulla

W-tila on lomittuneiden kubittien muodostama symmetrinen tila. W-tila on helppo muodostaa kahdella kubitilla Hadamard-portilla ja $CNOT$:illa, mutta kolmen kubitin W-tila vaatii esimerkiksi $R_y(\theta)$-porttia tai ohjattua Hadamardia. Esimerkiksi kolmen kubitin ollessa W-tilassa, kubittien mittaus antaa yhtä suurella todennäköisyydellä (33%) jonkin seuraavista vastauksista:

$$ 001 \\ 010 \\ 100 $$

Kolmen kubitin W-tila:

$$ \frac 1{\sqrt 3} (|001\rangle + |010\rangle + |100\rangle) $$

$N$ kubitin W-tila on siis superpositio $N$:stä kantatilasta, joissa vain yhdestä kubitista tulee mittaustulokseksi 1 ja muista 0.

Seuraavassa ohjelmassa on muodostettu kahden kubitin W-tila, eli tila

$$ \frac 1{\sqrt 2} (|01\rangle + |10\rangle ) $$

Suorita ohjelma ja tutki simulaation tuloksia.

Tuloksista havaitaan, että piiri tulokset ovat aina 01 tai 10. Kvanttipiirin määrittely selittää saadut tulokset. Kubitti 0 on Hadamard portin vaikutuksesta tilojen 0 ja 1 superpositiossa ja CNOT-portti aiheuttaa kubittien 0 ja 1 lomittumisen. Kubitti 0 on ohjaava kubitti ja kubitti 1 on kohde. Jos kubitin 0 tilaksi mitataan 1, se kääntää kohdekubitin tilan. Qiskitissä kubitin oletustila on kubittia määriteltäessä 0. Jos alkutilaksi halutaan 1, niin kubittia on operoitava X -portilla, mikä vastaa 180 asteen kiertoa x-akselin ympäri Blochin pallolla.

Tehtävä 2

Lisää kvanttipiiriin toiset kaksi kubittia ja muodosta niiden välille myös W-tila. Mittaa myös kubitit klassiseen rekisteriin.

Pylväsdiagrammissa olevat mittaustulokset luettuna ylhäältä alas (eli takaperin) vastaavat kubitteja ylhäältä alas.

Piirin ylin kubitti vastaa ensimmäisen rivin ensimmäistä ruutua ja alin vastaa viimeisen rivin viimeistä ruutua, joten mittaustulokset kuvataan matriisiksi näin:

$$ abcd \mapsto \begin{bmatrix} d && c \\ b && a \end{bmatrix} $$

Seuraavalla koodilohkolla voit visualisoida tulokset shakkilaudalla. Kiinnitä huomiota montako kuningatarta laudalla on, ja kuinka monta on per rivi. Tarkoituksena olisi huomata, että rivit ovat toisistaan riippumattomia, mutta kuningattaria on vain yksi per rivi eli yhteensä kaksi.

Kuvien yläpuolelle on kirjoitettu mittaustulokset jotka näkyvät myös pylväsdiagrammissa.

Esimerkiksi oikean alakulman tulos $1010$ kuvataan matriisiksi

$$ 1010 \mapsto \begin{bmatrix} 0 && 1 \\ 0 && 1 \end{bmatrix} $$

Koska rivit on muodostettu kahdesta kahden kubitin välisestä W tilasta, ja W-tilojen välillä ei ole kytkentää eli lomittumista, niin rivit ovat vielä toisistaan riippumattomia. Molemmilla riveillä on korkeintaan 1 kuningatar.

Ancillat eli apukubitit

Kvanttipiirissä apukubitit auttavat tekemään monimutkaisempia operaatioita usealla kubitilla. Apukubitteja käytetään todella laajasti eri käyttötarkoituksiin ja niitä voidaan käyttää saamaan epäsuoraa mittaustietoa kubiteista. Apukubitteja voidaan esimerkiksi flipata "virallisten" kubittien toimesta ohjatulla $X$-portilla, eli $CX$:llä.

Sarakkeet: $CX$-portti

Ohjattu $X$-portti pyörittää kohdekubittia 180° X-akselin ympäri, jos ohjaava kubitti on tilassa 1.

Toisin kuin tietyllä rivillä olevat kuningattaret, jotka muodostavat W-tilan, sarakkeella olevat kuningattaret eivät ole lomittuneet. Voisimme tehdä koko shakkilaudan kokoisen lomittuneen tilan, jossa myös sarakkeilla voi olla korkeintaan yksi kuningatar, mutta tämä vaatii erittäin paljon portteja lisää.

Apukubittia voidaan käyttää laskemaan onko sarakkeella parillinen vai pariton määrä kuningattaria tekemällä $X$ pyörityksiä yhtä monta kuin kuningattaria on.

Tehtävä 3

Lue seuraava koodi, suorita ohjelma ja tutki simulaation tuloksia. Shakkilautojen yläpuolella on col-apukubittien mittaustulokset $[\text{col}_0, \text{col}_1, ...]$. Muuta $N = 3$ ja selitä miten apukubittien mittauksesta voidaan mitata sarakekriteerin täyttävät kuningatarasetelmat.

Kun jokaisella pystyrivillä on tasan 1 kuningatar, niin silloin pystyrivit ovat kunnossa. Tämä toteutettiin ancilla apukubittien avulla. Jos sarakkeella eli pystyrivillä 0, niin jollain toisella sarakkeella on 2 kpl kuningattaria.

Toffoli-portti $CCX$

Toffoli-portti on ohjattu $CX$-portti, eli kahdella kubitilla ohjattu $X$-portti. Toffoli-portin symboli on:

toffoli

Toffoli-portti siis pyörittää kohdekubittia 180°, jos molemmat ohjaavat kubitit ovat $1$ tilassa. Sen unitaarinen matriisi on esimerkiksi

$$ \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \end{bmatrix} $$

Huomaa että matriisin tarkka arvo riippuu kubittien järjestyksestä. Toffolin kontrollikubittien järjestyksellä ei ole merkitystä

Esimerkkejä portin toiminnasta:

$$ CCX |{000}\rangle = |{000}\rangle \\ CCX |{011}\rangle = |{011}\rangle \\ CCX |{101}\rangle = |{101}\rangle \\ CCX |{110}\rangle = |{111}\rangle \\ CCX |{111}\rangle = |{110}\rangle \\ $$

Voidaan huomata, että kohdekubitin (kolmannen) tila muuttuu ainoastaan ohjaavien kubittien (kahden ensimmäisen) ollessa $|1\rangle$.

Miten Toffoli-portti luodaan?

Toffoli-portti voidaan luoda muiden porttien yhdistelmänä. Suorita seuraava koodilohko, joka luo yhtä Toffoli-porttia vastaavan piirin ja tulostaa sen unitaarisen matriisin.

Huomaa, että matriisi ei ole sama kuin aikaisemmin mainittu Toffolin matriisi. Tämä johtuu sittä, että qiskit listaa kubitit alhaalta ylös, eli ensimmäinen kubitti onkin kohdekubitti. Vaikka matriisi ei ole sama, on tämäkin matriisi Toffolin yksi matriisiesitys.

Tuloksista voidaan huomata, että Toffolin, joka on kolmen kubitin operaatio, voi esittää piirillä, joka koostuu vain yhden ja kahden kubitin operaatioista.

Diagonaalit: $CCX$-portti

Toffoli-portilla voimme ratkaista ongelmamme viimeisen osan: onko samalla diagonaalilla korkeintaan yksi kuningatar? Esimerkiksi $2×2$ shakkilaudalla kaikki diagonaaleilla olevat ruutuparit voidaan piirtää seuraavasti:

Eli kubitit $\text{row0}_0$ ja $\text{row1}_1$ muodostavat yhden diagonaaliparin ja $\text{row1}_0$ ja $\text{row0}_1$ muodostavat toisen. Nämä voidaan tarkistaa kahdella Toffolilla ja kahdella apukubitilla

Tehtävä 4

Seuraavaan kvanttipiiriin on lisätty puuttuva Toffoli, joka flippaa $\text{diag}_1$-apukubitin jos yllä olevan kuvan pinkillä diagonaalilla on kaksi kuningatarta.

Kuvista voidaan huomata, että kuningatarten ollessa samalla diagonaalilla jokin apukubitti flipataan tilaan 1. Diagonaalikriteeri vaatisi siis että kaikista apukubiteista saadaan mittaukseksi 0.

Diagonaalien optimointi

$3×3$ shakkilaudalla diagonaalit näyttävät tältä:

diagonals31 diagonals32 diagonals33

Kuvissa eri väreillä on esitetty diagonaaliparit, jotka voidaan yksiselitteisesti yhdistää samaan apukubittiin. Esimerkiksi sinivihreä kulmasta-kulmaan kuvan diagonaaliparit voidaan asettaa flippaamaan sama kubitti, sillä W-tilan takia samalla rivillä ei voi olla kahta kuningatarta, joten kubitti ei ikinä flippaa takaisin tilaan jossa diagonaalikonfliktia ei olisi.

Alla olevassa koodissa kvanttipiirissä flipataan diag-kubitit $X$-portilla, jotta tulos 1 vastaa oikeaa ratkaisua. Tämä on tavallaan turhaa, koska voisimme flipata klassisen tuloksen jälkikäteen ja säästää portteja.

Tehtävä 5

Suorita seuraava N-kuningattaren kvanttialgoritmi, kun $N = 3$ ja totea lopputuloksista, että vastauksia ei ole. Muuta sitten $N = 4$ ja etsi lopputuloksista asetelma jonka yllä mitatut apukubitit ovat tilassa $[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]$. Jos et löydä kyseistä asetelmaa, voit laittaa solution_filter muuttujan päälle.

Kirjoita tähän montako ratkaisua N kuningattaren ongelmaan on:

$N=2$: 0 ratkaisua

$N=3$: Vastaus: 0 ratkaisua

$N=4$: vastaus 2, jotka ovat toistensa peilikuvia, eli erilaisia ratkaisuja on 1

Lisämateriaalia

Kvanttipiirin simulointi

Oletko kokeillut mitä käy kun laitat $N = 5$?

Neljän kuningattaren kvanttipiiri vaatii 26 kubittia, joka vaatii noin yhden gigatavun verran keskusmuistia tilavektorin esittämiselle. Viiden kuningattaren kvanttipiiri vaatisi 40 kubittia. 40 kubitin tilavektori vaatii yli 17 teratavua keskusmuistia!

Klassinen algoritmi

N-kuningattaren klassinen ratkaisualgoritmi on eksponentiaalisesti hitaampi kuin yllä oleva kvanttialgoritmi. Klassisella tietokoneella ei pysty yli 30 kuningattaren ongelmaa ratkaisemaan järkevässä ajassa. On myös huomattava, että kvanttitietokoneella algoritmi vaatii erittäin paljon tarkkoja ja monimutkaisia portteja W-tilan luomiseksi.