cobra-chan
@cobra-chan

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Fixstars Amplifyにてバイナリ変数を用いた簡単なコードが書けない

解決したいこと

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

No Answers yet.

Your answer might help someone💌