2つの団変数
- 団代数には、反対称化可能行列Bによって定まる2通りの変化様式がある
- それぞれの変化様式には、x変数とy変数と呼ばれる有理式が対応する
- 団変数の変化
- n変数の団(クラスター)で変化するものとする
- Bはnxn行列
- 今、n個のうちk番目に関する変化をさせるものとする
- x変数の変化は以下の通り
- のとき
- のとき
- y変数の変化は以下の通り
- のとき
- のとき
- ここでという対応を入れることにする
- ただし、このBは団変数(B,x),(B,y)が変化するときに、x,yとともに変化するBとする
- このようなは、xを変化させて、そこからBの変化したものを使ってyを計算しても
- yから、yの変化ルールで変化させても、どちらも同じ変化がえられるという
- このの定義については、複数の文書にあたったが、Bが変化していることに言及している場合が少なく、紛らわしい
- 明記してある資料としてはこちらの52ページがある
- はっきりさせるためには、のとき、のように、y,x,Bのすべてに "'"をつけること
expression(1) expression(((x2 * x3^3 + 1)/x1)^-1/(x1 * ((x2^-1 * x3^-3)^-1 + 1)^-1)) expression(((x2 * x3^3 + 1)/x1)^-3/(x1^3 * ((x2^-1 * x3^-3)^-1 + 1)^-3))
三角形分割の箙
- 昨日の記事で団代数についてメモしている
- 団代数の適用例として多角形の三角形分割がある
- 多角形も頂点と辺でできており、箙も頂点と辺でできているので、どういう対応になっているのかがわからないとこんがらがる
- 以下はその関係についての簡単なメモ
- 多角形の三角形分割と箙の関係
- 多角形を三角形分割する。いくつもやり方があるが、ある一つの三角形分割を取り出す
- すべての辺(多角形の辺と、三角形分割で引いた辺とを合わせたすべて)を頂点とみなす
- 頂点とみなした辺について、三角形を反時計回りに回ることとすると、辺接続関係を表す有向グラフができる。これがこの三角形分割に対する箙
- 今、この辺接続関係有向グラフのうち、引き直しが可能なのは、三角形分割に際して引いた辺。オリジナルの多角形の辺は変更できない
- 三角分割辺を引き直すにあたって、一本ずつ引き直すことにする
- その引き直しは、その辺が対角線となっている四角形についての引き直しである
- このような引き直しは必ずできるし、一通りの引き直しができる
- このように、ある箙について、引き直しが可な辺があり、その辺のそれぞれの、引き直しのやり方は一通りある。引き直した結果、辺の数は変わらず、三角形分割の別バージョンが生成される
- このときの、反時計回り辺接続の箙を作ると、引き直しに選んだ辺について、上述の箙変形ルールになっている
団代数(cluster algebra)
- こちらが資料
- 団代数という代数がある
- 応用が面白いという
- ちょっと面倒くさいので、自分がわかりにくかった点を補強しながら、説明文を書いておく
- 団代数は、面倒臭い規則によって定められる「変数(団変数)」の整数係数線形和のこと
- この「変数(団変数)」というのは、ある変数のセット(これが団・クラスタの由来)の有理式で表される
- 有理式で表されるものたちを扱いたいので、元となる変数のセットは、代数的に独立で可換であることを仮定すると都合がよく、そのようになっている
- この基本となる変数のセットは、ある規則で、別の変数のセットに対応付けられる
- 別の変数のセットへの対応付けは、1個以上ある
- その対応付けは、変数のセットの構成要素の数だけある
- 別の変数のセットへの対応付けは、ある一つの構成要素x構成要素の正方行列によって規定される
- その正方行列は、反対称化可能行列によって定まる
- つまり、「団代数」は、ある変数のセット と、ある反対称化可能行列 とを定めることで定義できるものである
- 少し話を複雑にするのは、このには、グラフが対応することである
- そのグラフは、箙(クイバー)と呼ばれる有向グラフである
- また、は複数の団代数のセットを、別のセットにまとめて変化させる変化規則を定めているが、自体も、その変化規則によって、別の行列に対応付けることができる
- 対応付けは、変数セットの構成要素の数だけある
- それぞれの対応付けは新たな正方行列を生成するが、それも箙になっている
- この「変数(団変数)」というのは、ある変数のセット(これが団・クラスタの由来)の有理式で表される
- さらに複雑になる話があるが、それは、上記を理解したうえで、考えるのがよい
- が定める規則として、同じく、変数セットの構成要素の数だけの変化規則を別に定めることができる
- その変化規則によって、別の変数セットとその変化生成変数セットが集合をなす
- この2つの変化規則には、対応関係があって、その結果生じる変数セットとその構成要素間に、特別な対応関係がある
- その対応関係は、双対関係にあるらしい
- 以下は、理解を確かめるためのRコードとその箙
- 左上の箙を、ノード1,2,3の順に選んで、変化箙を左下、右上、右下に描図
- 変化箙は
- (1)選んだノードへの接続辺の向きを変える
- (2) それ以外の接続関係は、選んだノードkが絡んでいなければ変化させない。選んだノードi,jが両方絡んでいれば、i->kの有向辺がP本(P>=0)、k -> j 有向辺がQ本(Q>=0)のとき、PQ本のi->j有向辺を加える。その上で、i-j間の行ったり来たりはキャンセルする
- この計算は、選んだノードがk番目として、行列のk行とk列の操作。追加辺の数は、k行とk列の非負化ベクトルのouter()積が作る、Bと同サイズの行列として計算できる。i-j間の行ったり来たりは、元の行列に増分を加算することで計算できる
> B [,1] [,2] [,3] [1,] 0 -1 2 [2,] 1 0 -1 [3,] -2 1 0 # 変化したB. [,1] [,2] [,3] [1,] 0 1 -2 [2,] -1 0 1 [3,] 2 -1 0 [,1] [,2] [,3] [1,] 0 1 1 [2,] -1 0 1 [3,] -1 -1 0 [,1] [,2] [,3] [1,] 0 1 -2 [2,] -1 0 1 [3,] 2 -1 0
ぱらぱらめくる『高校数学からはじめる量子コンピュータ』
- こちらに本の資料
- 第1章 量子コンピュータへの誘い
- 第2章 1量子ビットの世界
- 第3章 1量子ビットの量子回路
- 第4章 2量子ビットの世界
- 第5章 2量子ビットの量子回路
- 第6章 量子プログラミング・入門編
- 第7章 量子プログラミング・実機編
- Appendix
第1章 量子コンピュータへの誘い
第2章 1量子ビットの世界
- 量子ビットは、複素数の組で、2つの複素数の絶対値の二乗の和が1
- 古典ビットは0か1か。それをと書くことにすると、と表せる
- 複素ベクトルの内積をと書くことにすると
- と書ける
- 量子ビットを測定すると、|0>または|1>が得られる。それぞれが得られる確率がである
- 古典コンピュータでは、0,1の値を変化させる。コンピュータの内部的には、AND, OR, XORなどの基礎的演算ですべてのプログラムは動いている
- 量子コンピュータでは、量子状態を発展させる。このとき、状態発展なので、測定して得られる確率が全部で1、を守るような発展をすることが必要で、そのような発展がユニタリ発展
- 具体的にはユニタリ行列によって状態ベクトル(重ね合わせ)は発展する
- ユニタリ行列は
- 古典コンピュータでは、0,1の値を取って、0,1の値を返す基礎演算を電子回路で作成した
- 量子コンピュータでは、ユニタリ発展をハードウェアとして実装する
- 量子状態の区別。量子状態は、確率を測定してみて、初めてわかるもの(らしい)。したがって、測定して確率情報を得ることで状態についての知識が得られる。確率情報が同じだが、異なる量子状態は区別できない。ある状態では確率が同じだが、ユニタリ発展させると確率が変わるような量子状態は、ユニタリ発展させてみることで区別が可能になる。他方、ユニタリ発展させても、区別できないような異なる量子状態というものも存在する。ある量子状態に絶対値1の複素数をかけてできる量子状態は、この「区別できない量子状態」である
- RにQuantumOpsというパッケージがある。それを使って、上記のことをやってみる。資料はこちら
# install.packages("QuantumOps") library(QuantumOps) k1 <- ket(1,2) k1 # |k1|^2 = 1に標準化される k2 <- ket(1i, 2*1i) k2 # k1と同じになる。c(1i,2*1i) = 1i * (1,2) であり、絶対値1の複素数(この場合は1i)をかけてできる量子状態は区別できないことに対応する
-
- Multi-qubit Kets
- 要素で作ることができる
- Multi-qubit Kets
ket(1,1,3,1)
-
-
- qubitsのテンソル積でもできる
-
k1 <- ket(0,1) k2 <- ket(1,1) k1k2 <- tensor(k1,k2) k1k2 k1k2k2 <- tensor(k1k2,k2) k1k2k2 # tensor()関数はqubitsを3個以上も取れる tensor(k1,k2,k2)
-
-
- Dirac 記法(のような)も用意されている
-
dirac(k1) dirac(k1k2) dirac(k1k2k2)
> dirac(k1k2) [1] "0.707|10> + 0.707|11>" > dirac(k1) [1] "1|1>" > dirac(k1k2) [1] "0.707|10> + 0.707|11>" > dirac(k1k2k2) [1] "0.5|100> + 0.5|101> + 0.5|110> + 0.5|111>"
-
-
- input registerの情報に基づき、target registerの値を変える。RのQuantumOpsパッケージのUf()関数の仕様確認は→こちらの記事で
-
第3章 1量子ビットの量子回路
- 量子回路にはユニタリ発展に相当するユニタリ行列を配置する。入力と出力を持つ
- 量子回路からの測定は、量子回路から、古典回路に値をコピーする、という形式で表す
- RのQuantmuOpsパッケージでは、I(),X(),Y(),Z(),H(),R(),S(),T()という、1量子ビット用の演算関数が用意されている。その演算の行列表示は
X
-
- のようにすると、関数の中身が見られる
第6章 量子プログラミング・入門編
- QiskitをローカルPCで実行する環境を作る
- こちらに従って、Anacondaインストール後に
- Windows10のスタートアップメニューからAnaconda promptを立ち上げ、そこで
conda create -n myHoge python=3 activate myHoge
-
- すると、プロンプトにmyHogeに入っている、と見える。そのうえで
pip install qiskit
-
- 長くかかるが…。終わったら
pip install qiskit-terra[visualization]
-
- これで準備ができたはず
- そのまま、myHogeのプロンプトで、
jupyter notebook
-
- とjupyter notebookを起動し、新しい、python3 ノートを開けば
import qiskit
-
- がきちんと(ちょっとロードに時間がかかるが)回る
- Macではターミナルから
conda create -n myHoge python=3 activate myHoge pip install qiskit pip install qiskit-terra[visualization] jupyter notebook
-
- とする
- というわけで準備ができたので、本のサイト(こちら)のjupyter notebookをダウンロードして、この環境で開けばなぞれる
第7章 量子プログラミング・実機編
- IBMのサイトに行って、そのアカウントにTokenを使ってローカルからアクセスして…というのは、本が書かれた時から仕様変更があるらしく、難航
- それよりはIBMのサイト上で遊ぶのがよいかも
- いずれにしてもtutorialはこちら
- 本物の量子コンピュータで実行すると、ノイズが入るとのこと