有没有办法使用列表中的最小条目最大化总和?

时间:2016-08-10 19:48:57

标签: 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 个答案:

答案 0 :(得分:1)

我想你可能意味着:

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

但是,由于以下几个原因,您的问题无法在当前状态下得到妥善回答:

1)您最大化/最小化的自由变量是什么?在我看来,模型中的所有变量都完全受限于DG的定义的特定常量值。

2)当您要求Z3同时最大化sumVal并最小化B[i]时,您对Z3的行为如何?如果在sumVal最小时B[i]不是最大值,反之亦然,那该怎么办?

3)您尚未定义B[i]sumVal,您是否遗漏了这样的内容?:

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