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')