フルオーダーメイド靴」のプレスリリースを行いました。足してみるかけてみるn個の量子ビットをm個またはm+2個を1にする(解決編)3個の量子ビットから1個または3個を1にする係数の求め方3個の量子ビットから0個または2個を1にする4個の量子ビットから1個または3個を1にする4個の量子ビットから0個または3個を1にする4個の量子ビットから1個または4個を1にする4個の量子ビットから0個または2個または4個を1にするまとめやることこれまでは「n個の量子ビットからm個を1にする」という条件設定ができればいろいろな問題が解ける!と思っていましたが、実際にいろいろなパズルを解こうとすると、それだけでは足りないことがわかりました。ここではD-waveマシンを使いこなすための多彩な条件設定を学びます。実行環境WinPython3.6をおすすめしています。Colaboratoryが利用可能です。dwave-ocean-sdkインポートします。DWaveSampler基本となる共通コードn個の量子ビットを用意する3つの量子ビットを用意するコマンドは次のとおりでした。Binary('q2')D-waveでサンプリングしまくるその後、条件式を設定してサンプリングしまくる部分のコードはこちらです。occurrence))おさらいn個の量子ビットからm個を1にする「3個の量子ビットから2個を1にする」は次のとおりでした。=3通りが出力されています。してこの設定でうまくいくのかを考えます。H(ハミルトニアン)は量子ビット全体のエネルギー値みたいなものです。q0~q2はそれぞれ0か1をとります。D-waveは、Hがもっとも低くなるq0~q2の組み合わせを探すためのマシンです。4を取りうることがわかります。4になるのは、q0~q2のうち0個が1のときですから、上記の設定では「3個の量子ビットから2個を1にする」組み合わせが得られるのです。q2」と置くと、xはまさに「いくつを1にしたいか」を表しています。2)**2」と書けます。2が最適解であることが明確にわかります。よって「3個の量子ビットから2個を1にする」が得られるというわけです。n個の量子ビットからm個またはm+1個を1にする「3個の量子ビットから1個または2個を1にする」は次のとおりでした。=6通りが出力されています。1.5)**2のグラフを見てみます。2が最適解であることがわかります。よって「3個の量子ビットから1個または2個を1にする」ができるのです。n個の量子ビットを全部1または全部0にする「3個の量子ビットから0個または3個を1にする」はどうすればよいでしょうか。さっきの式にマイナスを付けてみます。Occurrence:390できました。3におけるエネルギー値がもっとも低いからです。n個の量子ビットをm個またはm+2個を1にする(失敗編)ここからが本番です。「3個の量子ビットから1個または3個を1にする」はどうすればよいでしょうか。2)**2これは「2個を1にする」やつなので、実行するまでもなくダメです。Occurrence:350これも「2個を1にする」になってしまいました。2で落ち込むからです。2次関数はどんなに足しても2次関数ですので、足す方法では不可能です。かけてみるかけてみたらどうでしょうか?理論上はこれでいけるはずです。Occurrence:97あれ、いろいろおかしいです。量子ビットは3個しか用意していないのに4個に増えています。解も実行するたびに滅茶苦茶な結果になります。9も同様にダメでした。3で落ち込んでいるのに、なぜうまく行かないのでしょうか。25.0}「q0*q2」という謎の補助ビットを用意してくれていることがわかりました。1]しか得られなかったということです。(実行するたびに変わります)「1個または3個」とは程遠い結果になりました。D-waveマシンはハードウェアの都合上、2量子ビットよりも多くの相互作用を扱うことができません。その場合には補助ビットを用意する必要がありますが、単にHに条件式を入れる方式ではうまいことやってくれないということが分かりました。n個の量子ビットをm個またはm+2個を1にする(解決編)3個の量子ビットから1個または3個を1にする泣く泣く、日本最大の(もしかしたら世界最大の?)量子コンピュータのオンラインコミュニティであるSlack「Blueqat(クリックで参加)」で有識者に助けを求めました。こちらの記事の方法でできるかもよ、と教えていただきました。Occurrence:683これで「3個の量子ビットから1個または3個を1にする」ができました。q2で、右側の2つが補助ビットです。条件式は、2つの補助ビットを巧みに使って2次より大きな相互作用が現れないようにしてあります。係数の求め方この魔法のような係数の求め方は、先程の記事を参考にさせていただきました。Colaboratoryでの実行を強く推奨します。ローカルの実行環境にpipしようとすると既存のパッケージ環境がなんか破壊されます(破壊されました)。RUNTIME」を押します。Vartype.BINARY)これが係数です。空気を読んで対応させてください。どんな計算を行っているかはまったく分かりません。感謝の思いを込めて、スペシャルなコードを公開させていただきます。↑の「空気を読んで対応させてください」という面倒な作業を自動的にやってくれるコードです。+(4.0*aux1)+(6.0*q0)+(-2.0*q1)+(6.0*q2)+(-4.0*aux0*aux1)+(-4.0*aux0*q0)+(4.0*aux0*q1)+(-4.0*aux0*q2)+(-4.0*aux1*q0)+(4.0*aux1*q1)+(-4.0*aux1*q2)+(-4.0*q0*q1)+(4.0*q0*q2)+(-4.0*q1*q2)+(2.0)結果をコピペすればそのまま条件式として使えます。+(-4.0*aux0)+(10.0*q0)+(-6.0*q1)+(-6.0*q2)+(-4.0*aux0*aux1)+(-4.0*aux0*q0)+(4.0*aux0*q1)+(4.0*aux0*q2)+(-4.0*aux1*q0)+(4.0*aux1*q1)+(4.0*aux1*q2)+(-4.0*q0*q1)+(-4.0*q0*q2)+(4.0*q1*q2)+(8.0)D-waveマシンに投げます。Occurrence:6・・・できています、魔法です。4個の量子ビットから1個または3個を1にする同様に係数を求めました。=8通りが出てきます。まじかよ!4個の量子ビットから0個または3個を1にする応答エラー4個の量子ビットから1個または4個を1にする応答エラー4個の量子ビットから0個または2個または4個を1にする期待した出力が得られませんでした。まとめn個の量子ビットについて、できる(と思われる)ことはこちらです。n個の量子ビットからm個を1にするn個の量子ビットからm個またはm+1個を1にするn個の量子ビットを全部1または全部0にする一般に、以下はできない(と思われる)。k≠m+1)ただし、次に限って成功しました。3個の量子ビットから1個または3個を1にする3個の量子ビットから0個または2個を1にする4個の量子ビットから1個または3個を1にするこれらの限られた手札を使って、様々な最適化問題やパズル問題にチャレンジしていきたいと思います。Slack、勉強会、Twitterをよろしくお願いします質問やコメントはSlackでお気軽にSlackに参加する勉強会でコードを配布していますconnpassを見るTwitterでも情報を発信していますTwitterをフォローする量子コンピュータ最適化量子コンピュータこの記事を書いた人Yasuda博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。半額弁当の時間帯を知り尽くしている。量子コンピュータの使い方を検索すると、だいたい数式ばかり出てきて憤死します。20-2では、GAでテント・アンド・ツリーというパズルを解きました。20-2はGAでテント・アンド・ツリーの大規模な問題を解きました。前回はD-waveの設定を一つ一つ手書きして、小さなパズル問題を解きました。数式を使わずにD-waveマシンの使い方を学ぶ2019/10/272020/01/16vcoptはこちらチュートリアル仕様書プレミアムパッケージフォローする質問やコメントはSlackでお気軽にSlackに参加する勉強会でコードを配布していますconnpassを見るTwitterでも情報を発信していますTwitterをフォローするタイトルとURLをコピーしました。