common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING

Nobisuke

Dekisugi


autoQAOA
DEEPSCORE

Overview
Service 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