common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


autoQAOA
Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

Juliaでシミュレーテッドアニーリング

Yuichiro Minato

2020/12/08 19:35

#Julia

blueqat.comにログインすると簡単にJulia環境が使えるので、早速使ってSAを書いてみます。今回は簡単なイジングモデルのハミルトニアンをSA+メトロポリス法で解いてみたいと思います。

今回は適当にコスト関数を設定して解いてみたいと思います。シミュレーテッドアニーリングで、ランダムからスタートし、エネルギーを評価して少しずつ温度を下げていき、T=0.02になったら終了としてみます。

#適当なコスト関数を設定。今回は8変数使いました。
function energy(a)
  return a[1]*a[2]-2*a[2]*a[3]+3*a[1]-4*a[4]-5*a[5]+6*a[6]*a[5]+5*a[6]-a[7]+a[8]+a[7]*a[2]
end

#変数の数
N = 8
#初期温度
T = 100
#減衰
r = 0.99
#終了温度
Tf = 0.02
#温度あたりのイテレーションの数
ite = 10

#全て1で初期化
q = ones(N)
println("qinit = ",q)

#エネルギーを表示
println("Einit = ",energy(q))

#温度が終了温度以上の場合、
while T > Tf

for i=1:ite
    x = rand(1:N)
    qq = copy(q)
    qq[x] *= -1

#エネルギー差を計算

dx = energy(qq) - energy(q)

#評価

if exp(dx/T) < rand()
      q = copy(qq)
    end
  end

#温度を下げる
  T *= r
end

#最終温度、もとまった変数の値、エネルギーの値を表示
println()
println("Tfinal = ",T)
println("q = ",q)
println("E = ",energy(q))

これを実行することで、

qinit = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
Einit = 5.0

Tfinal = 0.01989046877970967
q = [-1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0]
E = -27.0

このような形で、初期全て1だった変数の値が、最後最小エネルギー-27に落ち着きました。

多分実行もはやかった気がします。

感想

簡単な例題を選んでしまったので、あまりpythonとの違いは感じませんでした。意外と慣れてなくても簡単にかけたので安心しました。次回はもう少し難しい例題をやってみたいと思います。

© 2025, blueqat Inc. All rights reserved