量子コンピューティングによる手続き型生成





本日は、FDG2020カンファレンスでIBMQuantumのJamesWoottonのスピーチを分析し、量子コンピューティングについてお話します。これは、潜在的に有望なテクノロジーですが、開発の現段階ではほとんど使用されていません。それでも、そのうちの1つは手続き型生成で見つかりました。



それをキュービットに実装する方法をさらに詳しく説明し、プログラムコードも示しましょう。









量子コンピューターとは何か、そしてそれらがどれほど役立つ可能性があるかから始めましょう。技術的な詳細には深く入り込まないようにしましょう。量子コンピューターは、デジタルコンピューターやアナログコンピューターとはまったく異なるコンピューティングモデルであることに言及しましょう。 quantaを使用して従来のソフトウェアを高速化するだけではありません。代わりに、プログラムを実装するためのまったく異なるアプローチと、それらを実行するための異なるハードウェアが必要です。







量子コンピューティングは、いつの日か、デジタルまたはアナログコンピューティングよりもはるかに効率的に特定のタスクを実行できるようになります。これにより、現在解決できない問題に対処できるようになります。何十年にもわたる研究の結果、手続き型生成の分野を含む、多くの可能なアプリケーションに関連してこれらの利点を最も効果的に実証する多くの量子アルゴリズムが特定されました。これらには、最適化、制約の満足度、グラフ分析などが含まれます。



量子コンピューティングを実行できるコンピューターを構築することは、それ自体が困難な作業であり、何年にもわたって作成されてきました。量子デバイスを記述するための重要なパラメータの1つは、キュービットの数です。実際、これらは同じビットですが、量子的な方法で実装されているため、通常の0と1よりも多くの状態があります。量子物理学のコンテキストでは、直交ベクトルのペアを使用してビット値を書き込むことができます:|0⟩と|1⟩。量子ビットの場合には、状態の説明は、複素振幅で補充され、C 0C 1の条件を満たし、:| c 0 | 2 + | c 1 | 2= 1であるため、キュービットc 0 |0⟩+ c 1 |1⟩の状態の数が多くなります。







フラッグシップアルゴリズムを実行するには、何千ものキュービットが必要ですが、これは今後数年間はありません。



現在、私たちは何千ものキュービットを持っておらず、1000を自由に使うことさえできません。正直なところ、100キュービットすらありません。現在利用可能な最大のデバイスは65キュービットです。これは、私たちが知っている最も興味深く効率的なアルゴリズムを実行するには十分ではありませんが、この数のキュービットでさえ、従来のコンピューターでは期待できない結果をもたらす可能性があります。これは、そのようなデバイスをエミュレートすることの複雑さによって証明されており、そのためには世界最大のスーパーコンピューターを借りる必要があります。



したがって、量子ハードウェアは私たちに独自の答えを提供するかもしれませんが、過去数十年にわたって、私たちは正しい質問をする方法を学びませんでした。したがって、私たちの現在の研究の主な目標は、これらのマシンで何か有用なことを行う方法をできるだけ早く理解しようとすることです。







約20キュービットからなる、より控えめな電力のデバイスもあります。また、最大15キュービットを使用する量子プログラムも、IBMによって無料で提供されました。さらに、彼らは量子プログラムの設計とテストを支援するためのエミュレーションソフトウェアを作成しました。また、50キュービットを超えるエミュレートは困難な計算タスクですが、ラップトップでも約20キュービットのエミュレートを問題なく処理できます。



すべての要素が合わさって、20キュービットがマイルストーンになります。実際の量子ハードウェアを使用しているか、そのエミュレーションを使用しているかに関係なく、このレベルの量子ソフトウェアを実行することはそれほど難しくありません。







では、これはすべて手続き型生成にとって何を意味するのでしょうか?対象としている3つの時代のどれかによって異なります。今日の時代は、数十キュービットしか提供できません。近い将来、デバイスに数百キュービットが含まれるようになる予定です。または遠い将来、1000キュービット以上が利用可能になるとき。



今日話をすると、たった20キュービットのパワーに焦点を合わせた量子ソフトウェアは、まだユニークなことは何もできません。エミュレーターで実行できるという事実は、量子ハードウェアさえ必要ないことを意味します。しかし、量子プログラムはまだ何か有用なことをすることができますか?実際のエンドユーザーに役立つ結果をもたらす20キュービットの量子プログラムを作成できますか?



20キュービットで本当に有用な結果を達成できる場合、この効果は時間の経過とともに増加し、計算能力が向上します。中期は、手続き型生成に効果的であるなど、量子コンピューティングのますます複雑な方法の研究の時代になるでしょう。量子の観点から考えていなかったら、おそらく考えられなかったであろうツールの作成に移ります。



しかし、自分より先に進まないようにしましょう。ユーティリティ拡大の時代への第一歩は、20キュービットの量子ソフトウェアでも有用であることを証明することです。これが私たちがすることです。







次に、いくつかの詳細を明確にします。



手続き型生成とは、何かを生成する必要があることを意味します。しかし、何ですか?



地形の生成が最も明白なので、それから始めましょう。



パーリンノイズは、手続き型地形生成のためのユビキタスツールです。しかし、それを作成する別の、はるかに複雑でない方法があります-ランダムなポイントのセットを使用し、その後にぼかしを入れます。このようなものの実装は、最初のステップでより達成可能な目標であるように思われたので、それを基礎として取り上げます。



量子ソフトウェアの基本要素である量子回路の形で高さマップをエンコードする方法を開発することから始めましょう。それらは、デジタルコンピューティングのブール回路モデルにいくらか類似しています。 Qubitは基本的に同じビットであり、計算の実行時に異なる変更が加えられます。







ピクセルの明るさの値が0から1の白黒画像を使用します。同様に、高さマップと間違えられる可能性があります。これらの高さマップを概略図としてエンコードする方法を学習したら、それらを管理できます。使用されるエンコーディングは、可能な限り多くのポイントを可能な限り少ないキュービットに圧縮することを目的としています。この方法では、便利で柔軟な制御を提供するための柔軟性があまりありません。同時に、回路のほとんどすべての変更は干渉効果を引き起こします。



私たちは主に、NOTゲートの部分的な形式と見なすことができる操作を使用します。通常のビットの場合、値を0から1に、またはその逆に変更しません。量子ゲートを使用すると、この要素をパラメータ化して、NOTの半分、4分の1、またはnキュービットの2n振幅のセットで表すことができるその他の部分部分を実行できる操作を実行できます 以下の関数は、元の画像を量子回路に変換します。







def height2circuit(height):
#   
L = max(max(height))+1
#  
grid = make_grid(L)
#    
n = 2*int(np.ceil(np.log(L)/np.log(2)))
#   
state = [0]*(2**n)
#    
H = 0
for bit string in grid:
(x,y) = grid[bit string]
if (x,y) in height:
h = height[x,y]
state[ int(bit string,2) ] = np.sqrt( h )
H += h
#  
for j,amp in enumerate(state):
state[ j ] = amp/np.sqrt(H)
#   
qc = QuantumCircuit(n,n)
qc.initialize(state,range(n))
#   Qiskit 
# qc.initialize( state, qc.qregs[0])
return qc


次に、反対のプロセスを実行する必要があります-量子回路を画像に変換します:



def circuit2height(qc):
#     
n = qc.num_qubits
grid = make_grid(int(2**(n/2)))
#     
ket = qi.Statevector(qc.data[0][0].params)
qc.data.pop(0)
#        
ket = ket.evolve(qc)
#   
p = ket.probabilities_dict()
#       
max_h = max( p.values() )
#      
height = {}
for bit string in p:
if bit string in grid:
height[grid[bit string]] = p[bit string]/max_h
return height


この操作をすべてのキュービットに適用すると、割合が増えるにつれて高さマップがどのように変化するかを確認できます。ぼかし効果のようなものが得られます。干渉効果が発生し、単純なぼかしでは実現できないパターンが作成されます。



上記の(a)の例では、一見任意に見える1つのポイントから始めます。徐々にぼやけ、干渉効果が重なっていきます。これにより、パターンが表示されます。この場合、(f)のチェッカーボードのようになります。この特定の結果は、私たちが始めた2つのピクセルと明確に関連しています。他のデータを出発点とすると、結果もまったく異なります。



Quantum Blurは、いくつかのゲームジャムで開発およびテストされています。これは主にテクスチャとレベルマップを生成するために使用されます。







これらのマップを生成した後、Perlinの高周波ノイズの量子アナログに使用します。



したがって、ここで、例の©のように、メインプロファイル(たとえば、島)を他の方法で作成します。次に、(a)のようにピクセルの初期セットが必要です。それを量子ぼかしして(b)のようなパターンを生成します。その後、それをメインプロファイルに適用して、最終的なランドスケープを作成します。



ここでは、2Dの例と、IBMQiskitBlocksチュートリアルゲームで使用された3Dレンダリングを見ることができます。草の種類や3Dレンダリングでの樹木の配置に関する情報などの詳細も、量子演算を使用して開発されています。









RGB画像は通常、3つの高さマップが整列しているため、これらの画像を操作することもできます。このように、オーバーレイを使用していくつかの奇妙な写真を簡単に作成できます。より困難ですが、より効果的です-画像のペアをエンコードし、それらの間にテレポーテーション効果を作成します。



量子テレポーテーションは、キュービット間で情報を転送します。したがって、同じサイズの2つのキュービットレジスタを取得し、それらの状態を変更するだけです。この操作を使用して、遷移アニメーションを作成してみましょう。







同様のコーディングのアイデアは、他の形式のデータにも使用できます。ウートンはそれを音楽で使おうとしました:





とマリオのレベル:





これが私たちにとって重要なもう2つの例です。そのうちの1つは、将来のゲームでの手続き型生成にこの方法を使用するゲームスタジオです。このプロジェクトにはSFの設定があり、量子法は本物の科学の味をもたらします。



また、アーティストのLibby Heaneyは、これらのアイデアのいくつかを彼女の作品の出発点として使用しました。





計算の量子的性質は、これらの両方の場合で強調されます。結果が、優れた線形代数だけでなく、アルゴリズム空間の量子領域から得られることがユーザーにとって重要です。







ここで説明する方法は、実際の量子ハードウェアよりもエミュレーションに適していますが、これはまもなく変更されます。実際、IBMで最大の量子デバイスの1つは、まったく異なる方法ではありますが、手続き型生成にも使用されています。



それまでの間、量子ブラー効果を自分で試すことができます。Python書かれていますが、Unity用のプラグインもあります。おそらく彼らはあなたに役立つでしょう。



記事全文へのリンク:こちら



All Articles