-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdietmodel.py
47 lines (36 loc) · 1.28 KB
/
dietmodel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/python
# Copyright 2018, Gurobi Optimization, LLC
# Solve the classic diet model. This file implements
# a function that formulates and solves the model,
# but it contains no model data. The data is
# passed in by the calling program. Run example 'diet2.py',
# 'diet3.py', or 'diet4.py' to invoke this function.
from gurobipy import *
def solve(categories, minNutrition, maxNutrition, foods, cost,
nutritionValues):
# Model
m = Model("diet")
# Create decision variables for the foods to buy
buy = m.addVars(foods, name="buy")
# The objective is to minimize the costs
m.setObjective(buy.prod(cost), GRB.MINIMIZE)
# Nutrition constraints
m.addConstrs(
(quicksum(nutritionValues[f, c] * buy[f] for f in foods)
== [minNutrition[c], maxNutrition[c]]
for c in categories), "_")
def printSolution():
if m.status == GRB.Status.OPTIMAL:
print('\nCost: %g' % m.objVal)
print('\nBuy:')
buyx = m.getAttr('x', buy)
for f in foods:
if buy[f].x > 0.0001:
print('%s %g' % (f, buyx[f]))
else:
m.computeIIS()
m.write("m.ilp")
print('No solution')
# Solve
m.optimize()
printSolution()