Z3 有没有一种方法可以使用列表中的最小条目来最大化总和?
我试图在列表或向量中找到构成最大和的最小条目数。有办法找到它吗?我尝试了以下方法,但没有成功:Z3 有没有一种方法可以使用列表中的最小条目来最大化总和?,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
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)
我想你的意思可能是:
for i in range(len(benefit)):
opt.minimize(B[i])
但是,您的问题在当前状态下无法正确回答,原因如下:
1) 你最大化/最小化的自由变量是什么?在我看来,模型中的所有变量都被D
和G
的定义完全限制为特定的常量值
2) 当您要求Z3同时最大化sumVal
和最小化B[i]
时,您希望它的行为如何?当B[i]
最小或反之亦然时,如果sumVal
不是最大值该怎么办
3) 您尚未定义B[i]
或sumVal
,是否缺少类似的内容
B=[Real('b%s' % (i+1)) for i in range (input)]
sumVal = Real('sumVal')