-2

I am trying to find minimum number of entries in a list or vector which constitute maximum sum. Is there a way to find it? I am trying as follows but not success:

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

here is where I need help:

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

1 Answers1

1

I imagine you might have meant:

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

However, your question can't be properly answered in its current state for several reasons:

1) What are the free variables that you are maximizing/minimizing over? It seems to me that all the variables in your model are completely constrained to specific constant values by your definitions of D and G.

2) How do you expect Z3 to behave when you ask it to simultaneously maximize sumVal and minimize B[i]? What if sumVal is not maximal when B[i] is minimal or vice-versa?

3) You haven't defined B[i] or sumVal, are you missing something like this?:

B=[Real('b%s' % (i+1)) for i in range (input)]
sumVal = Real('sumVal')
Douglas B. Staple
  • 10,510
  • 8
  • 31
  • 58