Fixstars Amplifyにてバイナリ変数を用いた簡単なコードが書けない
Q&A
Closed
解決したいこと
Fixstars Amplifyを使ったプログラミングをしています。
xをバイナリ変数として、行ごとに最も小さな数だったら1,それ以外はxが0になる簡単なコードだと思うのですが、何故かうまくいかず行き詰まっています。
解決方法を教えて下さい。
実行結果
{4: 0, 3: 0, 8: 0, 11: 0, 0: 0, 10: 0, 1: 0, 5: 0, 6: 0, 7: 0, 9: 0, 2: 0}
該当するソースコード
from amplify import BinarySymbolGenerator,sum_poly
# 4×3のデータ入力
data = [
[4, 100, 1],
[9, 3, 2],
[78, 42, 91],
[8, 50, 10]
]
# バイナリ変数を生成
gen = BinarySymbolGenerator()
x = gen.array(4,3)
# 目的関数
f = sum_poly(4, lambda i: sum_poly(3, lambda a: data[i][j] * x[i,j]))
# one-hot制約
g = sum_poly(4, lambda i:((sum_poly(3, lambda a:x[i,j]))-1)**2)
# 結合
model = f + g
# 実行
from amplify import Solver
from amplify.client import FixstarsClient
client = FixstarsClient()
client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #実際は正しいトークンを入れています
client.parameters.timeout = 1000 # タイムアウト1秒
solver = Solver(client)
result = solver.solve(model)
# 結果
if len(result) == 0:
raise RuntimeError("Any one of constraints is not satisfied.")
energy, values = result[0].energy, result[0].values
values
自分で試したこと
Fixstars Amplifyのサンプルコードなど参考にして本当に色々試しましたが、どこが問題なのかすら分からない状況です。よろしくお願いします。
0