Calmcode - cvxpy one: calories

Calories

1 2 3 4 5 6 7

This is the new problem definition with all the constraints;

import cvxpy as cp
import pandas as pd

df = pd.read_csv("/path/to/stigler.csv")
price = df['price_cents'].values

constraint_dict = {
    'protein_g': 70, 'calcium_g': 0.8, 'iron_mg': 12,
    'vitamin_a_iu': 5, 'calories': 2000,
    'vitamin_b1_mg': 1.8, 'vitamin_b2_mg': 2.7,
    'niacin_mg': 18, 'vitamin_c_mg': 75
}

x = cp.Variable(price.shape[0])
objective = cp.Minimize(cp.sum(price*x))

constraints = [x >= 0]
for key, value in constraint_dict.items():
    constraints.append(x * df[key] >= value)

prob = cp.Problem(objective, constraints)
prob.solve()

This is the pandas code at the bottom;

(df
.assign(assignment = x.value)
.sort_values(['assignment'], ascending=False)
.head(5))