Traceback (most recent call last):
File "my_projects/MyKnapsack.py", line 40, in <module>
main()
File "my_projects/MyKnapsac.py", line 27, in main
solver.Maximize(solver.Sum(values[i] * x[i]) for i in range(num_items))
File "/Library/Python/2.7/site-packages/ortools-5.0.3919-py2.7-macosx-10.6-intel.egg/ortools/linear_solver/pywraplp.py", line 326, in Maximize
coeffs = expr.GetCoeffs()
AttributeError: 'generator' object has no attribute 'GetCoeffs'
make: *** [rpy] Error 1
I have no clue what is going on. I am new to OR tools and python.
I am trying to build a simple program to solve Integer programming (decision variable is either 0 or 1).
Please let me know what went wrong with my code (this is a simple knapsack problem). I appreciate in advance:
from __future__ import print_function
from ortools.linear_solver import pywraplp
def main():
# Instantiate a mixed-integer solver, naming it SolveIntegerProblem.
solver = pywraplp.Solver('SolveIntegerProblem',
pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)
#value data
values = [100,20,50,25,50,75]
weight = [200,70,20,25,30,150]
maxweight = 350
#create variables
x = {}
num_items = len(values)
for i in range(num_items):
x[i] = solver.IntVar(0,1, 'x[%i]' % (i))
#constraints
solver.Add(solver.Sum([weight[i] * x[i] for i in range(num_items)]) <= maxweight)
#objective
solver.Maximize(solver.Sum(values[i] * x[i]) for i in range(num_items))
sol = solver.Solve()
print('Total Cost = ', solver.Objective().value())
print()
for i in range(num_items):
if x[i].solution_value() > 0:
print('Weight', i, ' Cost = ', values[i])
print()
print("Time = ", solver.WallTime(), "milliseconds")
if __name__ == '__main__':
main()
from __future__ import print_functionfrom ortools.linear_solver import pywraplp
def main():
# Instantiate a mixed-integer solver, naming it SolveIntegerProblem. solver = pywraplp.Solver('SolveIntegerProblem', pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING) #value data values = [100,20,50,25,50,75] weight = [200,70,20,25,30,150] maxweight = 350 #create variables
x = {}
num_items = len(values) for i in range(num_items): x[i] = solver.IntVar(0,1, 'x[%i]' % (i))
#constraints c = solver.Constraint(-solver.infinity(), maxweight, 'c') for i in range(num_items): c.SetCoefficient(x[i], weight[i]) #solver.Add(solver.Sum([weight[i] * x[i] for i in range(num_items)]) <= maxweight)
#objective objective = solver.Objective() objective.SetCoefficient(x[i], values[i]) objective.SetMaximization() #solver.Maximize(solver.Sum(values[i] * x[i]) for i in range(num_items))
sol = solver.Solve()
print('Total Cost = ', solver.Objective().Value()) print() for i in range(num_items): if x[i].solution_value() > 0: print('Weight', i, ' Cost = ', values[i]) print() print("Time = ", solver.WallTime(), "milliseconds")
if __name__ == '__main__': main()