/ /リストの最小エントリを使用して合計を最大化する方法はありますか? -z3、z3py

リストからの最小エントリを使用して合計を最大化する方法はありますか? - z3、z3py

最大合計を構成するリストまたはベクトル内のエントリの最小数を見つけようとしています。それを見つける方法はありますか?私は次のように試みていますが、成功していません:

D=[[Real("d%s%s" % (i+1,j+1)) for j in range(input)] for i in range (input)]
dr=[D[i][j]== randint(1,5) for i in range (input) for j in range (input)]

G=[[Real("g%s%s" % (i+1,j+1)) for j in range(input)] for i in range (input)]
ge=[G[i][j]==randint(1,5) for i in range (input) for j in range (input)]

dSum = [Real("dSum%s" % (i+1)) for i in range(input)]
gSum = [Real("gSum%s" % (i+1)) for i in range(input)]



benefit = [B[i]==If(dSum[i]>=gSum[i],(dSum[i]-gSum[i]),(gSum[i]-dSum[i])) for i in range(input)]

opt = Optimize()
opt.add(dr)
opt.add(ge)
opt.add([dSum[i]==sum(D[i]) for i in range(input)])
opt.add([gSum[i]==sum(G[i]) for i in range(input)])
opt.add(benefit)
opt.add(sumVal==sum(B))

ここで私は助けが必要です:

opt.minimize(B(i) i in range (len(benefit))) #is it wrong?
opt.maximize(sumVal)

回答:

回答№1は1

私はあなたが意味したかもしれないと想像します:

for i in range(len(benefit)):
opt.minimize(B[i])

ただし、いくつかの理由により、現在の状態では質問に適切に回答できません。

1)あなたがしている自由変数は何ですか最大化/最小化?モデル内のすべての変数は、次の定義によって特定の定数値に完全に制約されているように思われます。 D そして G.

2)同時に最大化するように要求した場合、Z3はどのように動作すると思いますか sumVal 最小化 B[i]?仮に sumVal が最大ではない場合 B[i] 最小限ですか、またはその逆ですか?

3)定義していません B[i] または sumVal、あなたはこのようなものが欠けていますか?:

B=[Real("b%s" % (i+1)) for i in range (input)]
sumVal = Real("sumVal")