from IPython.core.display import HTML
HTML(open("styles/custom.css", "r").read())
import pandas as pd
req = {
'A' : [700, 10000],
'C' : [700, 10000],
'B1': [700, 10000],
'B2': [700, 10000]}
display(pd.DataFrame(req.values(), index = req.keys(), columns = ['n_min', 'n_max']))
nutr = {
'BEF' : {'A': 60, 'C': 20, 'B1': 10, 'B2': 15},
'CHK' : {'A': 8, 'C': 0, 'B1': 20, 'B2': 20},
'FSH' : {'A': 8, 'C': 10, 'B1': 15, 'B2': 10},
'HAM' : {'A': 40, 'C': 40, 'B1': 35, 'B2': 10},
'MCH' : {'A': 15, 'C': 35, 'B1': 15, 'B2': 15},
'MTL' : {'A': 70, 'C': 30, 'B1': 15, 'B2': 15},
'SPG' : {'A': 25, 'C': 50, 'B1': 25, 'B2': 15},
'TUR' : {'A': 60, 'C': 20, 'B1': 15, 'B2': 10}}
display(pd.DataFrame.from_dict(nutr).transpose())
price ={'BEF' : ['Beef', 3.19],
'CHK' : ['Chicken', 2.59],
'FSH' : ['Fish', 2.29],
'HAM' : ['Ham', 2.89],
'MCH' : ['Macaroni & Cheese', 1.89],
'MTL' : ['Meat Loaf', 1.99],
'SPG' : ['Spaghetti', 1.99],
'TUR' : ['Turkey', 2.49]}
display(pd.DataFrame(price.values(), index = price.keys(), columns = ['food','price']))
%%script glpsol -m /dev/stdin -o /dev/stdout
var xBEF >= 0;
var xCHK >= 0;
var xFSH >= 0;
var xHAM >= 0;
var xMCH >= 0;
var xMTL >= 0;
var xSPG >= 0;
var xTUR >= 0;
minimize Total_Cost:
3.19*xBEF + 2.59*xCHK + 2.29*xFSH + 2.89*xHAM
+ 1.89*xMCH + 1.99*xMTL + 1.99*xSPG + 2.49*xTUR;
subject to A:
700 <= 60*xBEF + 8*xCHK + 8*xFSH + 40*xHAM
+ 15*xMCH + 70*xMTL + 25*xSPG + 60*xTUR <= 10000;
subject to C:
700 <= 20*xBEF + 0*xCHK + 10*xFSH + 40*xHAM
+ 35*xMCH + 30*xMTL + 50*xSPG + 20*xTUR <= 10000;
subject to B1:
700 <= 10*xBEF + 20*xCHK + 15*xFSH + 35*xHAM
+ 15*xMCH + 15*xMTL + 25*xSPG + 15*xTUR <= 10000;
subject to B2:
700 <= 15*xBEF + 20*xCHK + 10*xFSH + 10*xHAM
+ 15*xMCH + 15*xMTL + 15*xSPG + 10*xTUR <= 10000;
end;
%%script glpsol -m /dev/stdin -o /dev/stdout --out output
set FOODS := {'BEF','CHK','FSH','HAM','MCH','MTL','SPG','TUR'};
var x{FOODS} >= 0;
minimize Total_Cost:
3.19*x['BEF'] + 2.59*x['CHK'] + 2.29*x['FSH'] + 2.89*x['HAM']
+ 1.89*x['MCH'] + 1.99*x['MTL'] + 1.99*x['SPG'] + 2.49*x['TUR'];
subject to A:
700 <= 60*x['BEF'] + 8*x['CHK'] + 8*x['FSH'] + 40*x['HAM']
+ 15*x['MCH'] + 70*x['MTL'] + 25*x['SPG'] + 60*x['TUR'] <= 10000;
subject to C:
700 <= 20*x['BEF'] + 0*x['CHK'] + 10*x['FSH'] + 40*x['HAM']
+ 35*x['MCH'] + 30*x['MTL'] + 50*x['SPG'] + 20*x['TUR'] <= 10000;
subject to B1:
700 <= 10*x['BEF'] + 20*x['CHK'] + 15*x['FSH'] + 35*x['HAM']
+ 15*x['MCH'] + 15*x['MTL'] + 25*x['SPG'] + 15*x['TUR'] <= 10000;
subject to B2:
700 <= 15*x['BEF'] + 20*x['CHK'] + 10*x['FSH'] + 10*x['HAM']
+ 15*x['MCH'] + 15*x['MTL'] + 15*x['SPG'] + 10*x['TUR'] <= 10000;
end;
%%script glpsol -m /dev/stdin -o /dev/stdout --out output
set FOODS;
set NUTRS;
param price{FOODS} >= 0;
param n_min{NUTRS} >= 0;
param n_max{NUTRS} >= 0;
var x{FOODS} >= 0;
minimize Total_Cost: sum {f in FOODS} price[f]*x[f];
subject to A:
n_min['A'] <= 60*x['BEF'] + 8*x['CHK'] + 8*x['FSH'] + 40*x['HAM']
+ 15*x['MCH'] + 70*x['MTL'] + 25*x['SPG'] + 60*x['TUR'] <= n_max['A'];
subject to C:
n_min['C'] <= 20*x['BEF'] + 0*x['CHK'] + 10*x['FSH'] + 40*x['HAM']
+ 35*x['MCH'] + 30*x['MTL'] + 50*x['SPG'] + 20*x['TUR'] <= n_max['C'];
subject to B1:
n_min['B1'] <= 10*x['BEF'] + 20*x['CHK'] + 15*x['FSH'] + 35*x['HAM']
+ 15*x['MCH'] + 15*x['MTL'] + 25*x['SPG'] + 15*x['TUR'] <= n_max['B1'];
subject to B2:
n_min['B2'] <= 15*x['BEF'] + 20*x['CHK'] + 10*x['FSH'] + 10*x['HAM']
+ 15*x['MCH'] + 15*x['MTL'] + 15*x['SPG'] + 10*x['TUR'] <= n_max['B2'];
data;
param : FOODS : price :=
BEF 3.19
CHK 2.59
FSH 2.29
HAM 2.89
MCH 1.89
MTL 1.99
SPG 1.99
TUR 2.49;
param : NUTRS : n_min n_max :=
A 700 10000
C 700 10000
B1 700 10000
B2 700 10000;
end;
%%script glpsol -m /dev/stdin -o /dev/stdout --out output
set FOODS;
set NUTRS;
param price{FOODS} >= 0;
param n_min{NUTRS} >= 0;
param n_max{NUTRS} >= 0;
param a{FOODS,NUTRS} >= 0;
var x{FOODS} >= 0;
minimize Total_Cost: sum {f in FOODS} price[f]*x[f];
subject to n_req {n in NUTRS}:
n_min[n] <= sum {f in FOODS} a[f,n] * x[f] <= n_max[n];
data;
param : FOODS : price :=
BEF 3.19
CHK 2.59
FSH 2.29
HAM 2.89
MCH 1.89
MTL 1.99
SPG 1.99
TUR 2.49;
param : NUTRS : n_min n_max :=
A 700 10000
C 700 10000
B1 700 10000
B2 700 10000;
param a : A C B1 B2 :=
BEF 60 20 10 15
CHK 8 0 20 20
FSH 8 10 15 10
HAM 40 40 35 10
MCH 15 35 15 15
MTL 70 30 15 15
SPG 25 50 25 15
TUR 60 20 15 10;
end;
%%script glpsol -m /dev/stdin -o output.txt -y display.txt --out output
set FOODS;
set NUTRS;
param price{FOODS} >= 0;
param x_min{FOODS} >= 0;
param x_max{FOODS} >= 0;
param n_min{NUTRS} >= 0;
param n_max{NUTRS} >= 0;
param a{FOODS,NUTRS} >= 0;
var x{f in FOODS} >= 0;
minimize Total_Cost: sum {f in FOODS} price[f]*x[f];
subject to n_req {n in NUTRS}:
n_min[n] <= sum {f in FOODS} a[f,n] * x[f] <= n_max[n];
solve;
printf "\nMinimum Cost Diet = %6.2f $/week.\n\n", Total_Cost;
table results {f in FOODS} OUT "CSV" "output.csv" "Table":
f ~ Food,
x[f] ~ Quantity,
price[f] ~ Price;
data;
param : FOODS : price :=
BEF 3.19
CHK 2.59
FSH 2.29
HAM 2.89
MCH 1.89
MTL 1.99
SPG 1.99
TUR 2.49;
param : NUTRS : n_min n_max :=
A 700 10000
C 700 10000
B1 700 10000
B2 700 10000;
param a : A C B1 B2 :=
BEF 60 20 10 15
CHK 8 0 20 20
FSH 8 10 15 10
HAM 40 40 35 10
MCH 15 35 15 15
MTL 70 30 15 15
SPG 25 50 25 15
TUR 60 20 15 10;
end;
print output
print(open('output.txt').read())
print(open('display.txt').read())
import pandas
df = pandas.read_csv('output.csv')
display(df)
df['Quantity'].plot(kind='bar').set_xticklabels(df['Food']);
%%script glpsol -m /dev/stdin -o display.txt --out output
set FOODS;
set NUTRS;
param price{FOODS} >= 0;
param x_min{FOODS} >= 0;
param x_max{FOODS} >= 0;
param n_min{NUTRS} >= 0;
param n_max{NUTRS} >= 0;
param a{FOODS,NUTRS} >= 0;
var x{f in FOODS} integer >= x_min[f], <= x_max[f];
minimize Total_Cost: sum {f in FOODS} price[f]*x[f];
subject to n_req {n in NUTRS}:
n_min[n] <= sum {f in FOODS} a[f,n] * x[f] <= n_max[n];
solve;
printf "\nMinimum Cost Diet = %6.2f $/week.\n\n", Total_Cost;
table results {f in FOODS} OUT "CSV" "output.csv" "Table":
f ~ Food,
x[f] ~ Quantity,
price[f] ~ Price;
data;
param : FOODS : price x_min x_max :=
BEF 3.19 2 30
CHK 2.59 2 30
FSH 2.29 2 30
HAM 2.89 2 30
MCH 1.89 2 30
MTL 1.99 2 30
SPG 1.99 2 30
TUR 2.49 2 30;
param : NUTRS : n_min n_max :=
A 700 10000
C 700 10000
B1 700 10000
B2 700 10000
NA 0 40000
CAL 16000 24000;
param a : A C B1 B2 NA CAL :=
BEF 60 20 10 15 938 295
CHK 8 0 20 20 2180 770
FSH 8 10 15 10 945 440
HAM 40 40 35 10 278 430
MCH 15 35 15 15 1182 315
MTL 70 30 15 15 896 400
SPG 25 50 25 15 1329 370
TUR 60 20 15 10 1397 450;
end;
print output
print(open('display.txt').read())
import pandas
df = pandas.read_csv('output.csv')
display(df)
df['Quantity'].plot(kind='bar').set_xticklabels(df['Food']);