我试图在列表或向量中找到构成最大总和的最小条目数。有没有办法找到它?我尝试如下但不成功:
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)
答案 0 :(得分:1)
我想你可能意味着:
for i in range(len(benefit)):
opt.minimize(B[i])
但是,由于以下几个原因,您的问题无法在当前状态下得到妥善回答:
1)您最大化/最小化的自由变量是什么?在我看来,模型中的所有变量都完全受限于D
和G
的定义的特定常量值。
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')