File: whiskas.py

package info (click to toggle)
python-pulp 2.6.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 14,720 kB
  • sloc: python: 7,505; makefile: 16; sh: 16
file content (36 lines) | stat: -rw-r--r-- 1,492 bytes parent folder | download | duplicates (2)
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
"""
Example problem file that solves the whiskas blending problem
"""
import pulp

# initialise the model
whiskas_model = pulp.LpProblem("The Whiskas Problem", pulp.LpMinimize)
# make a list of ingredients
ingredients = ["chicken", "beef", "mutton", "rice", "wheat", "gel"]
# create a dictionary of pulp variables with keys from ingredients
# the default lower bound is -inf
x = pulp.LpVariable.dict("x_%s", ingredients, lowBound=0)

# cost data
cost = dict(zip(ingredients, [0.013, 0.008, 0.010, 0.002, 0.005, 0.001]))
# create the objective
whiskas_model += sum([cost[i] * x[i] for i in ingredients])

# ingredient parameters
protein = dict(zip(ingredients, [0.100, 0.200, 0.150, 0.000, 0.040, 0.000]))
fat = dict(zip(ingredients, [0.080, 0.100, 0.110, 0.010, 0.010, 0.000]))
fibre = dict(zip(ingredients, [0.001, 0.005, 0.003, 0.100, 0.150, 0.000]))
salt = dict(zip(ingredients, [0.002, 0.005, 0.007, 0.002, 0.008, 0.000]))

# note these are constraints and not an objective as there is a equality/inequality
whiskas_model += sum([protein[i] * x[i] for i in ingredients]) >= 8.0
whiskas_model += sum([fat[i] * x[i] for i in ingredients]) >= 6.0
whiskas_model += sum([fibre[i] * x[i] for i in ingredients]) <= 2.0
whiskas_model += sum([salt[i] * x[i] for i in ingredients]) <= 0.4

# problem is then solved with the default solver
whiskas_model.solve()

# print the result
for ingredient in ingredients:
    print("The mass of %s is %s grams per can" % (ingredient, x[ingredient].value()))