まぁ、おそらく完成しますね。ChatGPT先生のおかげです。
https://blueqat.com/yuichiro_minato2/6498e2ae-3261-426c-a9c9-62a6ebed5dac
https://blueqat.com/yuichiro_minato2/09ddb7e6-dfdf-4f26-912b-3cd2f611d5e9
最後にフロントとバックエンドを繋げてみます。BQM形式みたいなので書かれているので、それもフロントのQUBOから変換して繋げます。
あとは繋ぐだけで完成なので多分いけそうです。
データ変換が面倒なので、フロントでQUBOを作って、そのままバックエンドでQUBO実行したいです。
わし:
nealのsimulated annealing samplerをqubo 行列形式で実行するコードを教えてください
ChatGPT先生:
import dimod
import neal
QUBOの行列形式
Q = {(0,0): 1, (1,1): 1, (0,1): -2}
nealのSimulatedAnnealingSamplerインスタンスを作成
sampler = neal.SimulatedAnnealingSampler()
サンプリング実行
response = sampler.sample_qubo(Q)
解を取得
solution = response.first.sample
print(solution)
どうやらQUBO表現これで行けるようです。実際適当な二次元配列入れたらいけました。
最後にフロントで受け取った二次元配列をQUBOとしてサンプラーに入れてみます。
@application.route("/api", methods=["POST"])
def api():
data = request.get_json()
Q = data['inputText']
print(Q)
# Simulated Annealing samplerを呼び出して解を求める
sampler = neal.SimulatedAnnealingSampler()
response = sampler.sample_qubo(Q)
result = list(response.first.sample.values())
print(result)
result = [int(i) for i in result]
# 解をフロントに返す
return jsonify({"result": result})
これだと動かなかったのでQのところをきちんと二次元配列にする必要がありそうです。
わし:
pythonの文字列の二次元配列をpythonのlistに変更するにはどうすればいいですか
ChatGPT先生:
文字列の二次元配列をpythonのlistに変更するには、以下のようにjson.loads()関数を使うことができます。
import json
string_2d_array = '[["a", "b"], ["c", "d"]]'
list_2d_array = json.loads(string_2d_array)
print(list_2d_array)
Output: [['a', 'b'], ['c', 'd']]
これを参考にして、変更したところ、、、、
完成しました!
from flask import Flask, render_template, request, jsonify
import dimod
import neal
import json
application = Flask(__name__)
@application.route("/")
def home():
return render_template("index.html")
@application.route("/api", methods=["POST"])
def api():
data = request.get_json()
Q = data['inputText']
Q = json.loads(Q)
print(Q)
# Simulated Annealing samplerを呼び出して解を求める
sampler = neal.SimulatedAnnealingSampler()
response = sampler.sample_qubo(Q)
result = list(response.first.sample.values())
print(result)
result = [int(i) for i in result]
# 解をフロントに返す
return jsonify({"result": result})
if __name__ == "__main__":
application.run(debug=True)
ほとんど全くコード書いてないです。。。
ほぼコピペです。
QUBOを色々変更してみたところ。。。
人類オワタ \(^o^)/