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))