{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import cvxpy as cvx\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exploratory data analysis"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"items = pd.read_csv('breakfast_items.csv', index_col='item')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" energy | \n",
" fat | \n",
" saturated_fat | \n",
" carbs | \n",
" sugar | \n",
" fibre | \n",
" protein | \n",
" salt | \n",
" cost | \n",
"
\n",
" \n",
" item | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Almonds | \n",
" 5.8700 | \n",
" 0.4900 | \n",
" 0.0370 | \n",
" 0.0950 | \n",
" 0.0390 | \n",
" 0.1200 | \n",
" 0.2100 | \n",
" 0.0000 | \n",
" 0.010000 | \n",
"
\n",
" \n",
" Bananas | \n",
" 1.0300 | \n",
" 0.0030 | \n",
" 0.0010 | \n",
" 0.2320 | \n",
" 0.2090 | \n",
" 0.0110 | \n",
" 0.0120 | \n",
" 0.0001 | \n",
" 0.000760 | \n",
"
\n",
" \n",
" Blueberries, frozen | \n",
" 0.4480 | \n",
" 0.0020 | \n",
" 0.0000 | \n",
" 0.0910 | \n",
" 0.0910 | \n",
" 0.0150 | \n",
" 0.0090 | \n",
" 0.0000 | \n",
" 0.005000 | \n",
"
\n",
" \n",
" Cashews | \n",
" 5.8169 | \n",
" 0.4385 | \n",
" 0.0778 | \n",
" 0.2689 | \n",
" 0.0591 | \n",
" 0.0330 | \n",
" 0.1822 | \n",
" 0.0003 | \n",
" 0.011000 | \n",
"
\n",
" \n",
" Corn flakes | \n",
" 3.8639 | \n",
" 0.0114 | \n",
" 0.0030 | \n",
" 0.8515 | \n",
" 0.0661 | \n",
" 0.0253 | \n",
" 0.0761 | \n",
" 0.0068 | \n",
" 0.001933 | \n",
"
\n",
" \n",
" Granola | \n",
" 4.2980 | \n",
" 0.1340 | \n",
" 0.0490 | \n",
" 0.6410 | \n",
" 0.1890 | \n",
" 0.0680 | \n",
" 0.0980 | \n",
" 0.0003 | \n",
" 0.002000 | \n",
"
\n",
" \n",
" Greek yogurt, 0% fat | \n",
" 0.5700 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
" 0.0400 | \n",
" 0.0400 | \n",
" 0.0000 | \n",
" 0.1030 | \n",
" 0.0010 | \n",
" 0.005500 | \n",
"
\n",
" \n",
" Greek yogurt, full fat | \n",
" 0.9600 | \n",
" 0.0500 | \n",
" 0.0360 | \n",
" 0.0380 | \n",
" 0.0380 | \n",
" 0.0000 | \n",
" 0.0900 | \n",
" 0.0010 | \n",
" 0.005500 | \n",
"
\n",
" \n",
" Honey | \n",
" 3.2611 | \n",
" 0.0001 | \n",
" 0.0001 | \n",
" 0.8100 | \n",
" 0.8100 | \n",
" 0.0001 | \n",
" 0.0050 | \n",
" 0.0010 | \n",
" 0.005294 | \n",
"
\n",
" \n",
" Milk, semi-skimmed | \n",
" 0.4980 | \n",
" 0.0180 | \n",
" 0.0110 | \n",
" 0.0480 | \n",
" 0.0480 | \n",
" 0.0000 | \n",
" 0.0360 | \n",
" 0.0011 | \n",
" 0.000708 | \n",
"
\n",
" \n",
" Milk, whole | \n",
" 0.6400 | \n",
" 0.0360 | \n",
" 0.0230 | \n",
" 0.0470 | \n",
" 0.0470 | \n",
" 0.0000 | \n",
" 0.0320 | \n",
" 0.0014 | \n",
" 0.000708 | \n",
"
\n",
" \n",
" Raisins | \n",
" 2.9320 | \n",
" 0.0040 | \n",
" 0.0019 | \n",
" 0.6930 | \n",
" 0.6930 | \n",
" 0.0200 | \n",
" 0.0210 | \n",
" 0.0015 | \n",
" 0.003200 | \n",
"
\n",
" \n",
" Wheat biscuits | \n",
" 3.5800 | \n",
" 0.0200 | \n",
" 0.0060 | \n",
" 0.6800 | \n",
" 0.0440 | \n",
" 0.1000 | \n",
" 0.1200 | \n",
" 0.0028 | \n",
" 0.002851 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" energy fat saturated_fat carbs sugar fibre \\\n",
"item \n",
"Almonds 5.8700 0.4900 0.0370 0.0950 0.0390 0.1200 \n",
"Bananas 1.0300 0.0030 0.0010 0.2320 0.2090 0.0110 \n",
"Blueberries, frozen 0.4480 0.0020 0.0000 0.0910 0.0910 0.0150 \n",
"Cashews 5.8169 0.4385 0.0778 0.2689 0.0591 0.0330 \n",
"Corn flakes 3.8639 0.0114 0.0030 0.8515 0.0661 0.0253 \n",
"Granola 4.2980 0.1340 0.0490 0.6410 0.1890 0.0680 \n",
"Greek yogurt, 0% fat 0.5700 0.0000 0.0000 0.0400 0.0400 0.0000 \n",
"Greek yogurt, full fat 0.9600 0.0500 0.0360 0.0380 0.0380 0.0000 \n",
"Honey 3.2611 0.0001 0.0001 0.8100 0.8100 0.0001 \n",
"Milk, semi-skimmed 0.4980 0.0180 0.0110 0.0480 0.0480 0.0000 \n",
"Milk, whole 0.6400 0.0360 0.0230 0.0470 0.0470 0.0000 \n",
"Raisins 2.9320 0.0040 0.0019 0.6930 0.6930 0.0200 \n",
"Wheat biscuits 3.5800 0.0200 0.0060 0.6800 0.0440 0.1000 \n",
"\n",
" protein salt cost \n",
"item \n",
"Almonds 0.2100 0.0000 0.010000 \n",
"Bananas 0.0120 0.0001 0.000760 \n",
"Blueberries, frozen 0.0090 0.0000 0.005000 \n",
"Cashews 0.1822 0.0003 0.011000 \n",
"Corn flakes 0.0761 0.0068 0.001933 \n",
"Granola 0.0980 0.0003 0.002000 \n",
"Greek yogurt, 0% fat 0.1030 0.0010 0.005500 \n",
"Greek yogurt, full fat 0.0900 0.0010 0.005500 \n",
"Honey 0.0050 0.0010 0.005294 \n",
"Milk, semi-skimmed 0.0360 0.0011 0.000708 \n",
"Milk, whole 0.0320 0.0014 0.000708 \n",
"Raisins 0.0210 0.0015 0.003200 \n",
"Wheat biscuits 0.1200 0.0028 0.002851 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"items"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bar plot of energy per gram"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"items['energy'].sort_values(ascending=False).plot.bar(color='darkblue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bar plot of cost per gram"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"items['cost'].sort_values(ascending=False).plot.bar(color='darkblue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bar plot of energy per pound sterling"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"(items['energy'] / items['cost']).sort_values(ascending=False).plot.bar(color='darkblue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Modelling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define the decisions variables representing the amounts (in gram) for each product."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"x = cvx.Variable(items.shape[0], nonneg=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define some constraints on energy and nutrients."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"total_energy = 2500 / 4\n",
"max_fat = total_energy * 0.35 / 9\n",
"max_saturated_fat = total_energy * 0.11 / 9\n",
"max_carbs = total_energy * 0.5 / 4\n",
"max_sugar = total_energy * 0.05 / 4\n",
"min_fibre = 30 / 4\n",
"min_protein = 70 * 0.75 / 4\n",
"max_salt = 6 / 4"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"constraints = [\n",
" cvx.sum(x * items['energy']) == total_energy,\n",
" cvx.sum(x * items['fat']) <= max_fat,\n",
" cvx.sum(x * items['saturated_fat']) <= max_saturated_fat,\n",
" cvx.sum(x * items['carbs']) <= max_carbs,\n",
" cvx.sum(x * items['sugar']) <= max_sugar,\n",
" cvx.sum(x * items['fibre']) >= min_fibre,\n",
" cvx.sum(x * items['protein']) >= min_protein,\n",
" cvx.sum(x * items['salt']) <= max_salt,\n",
"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define and solve the problem of minimising total cost subject to `constraints`."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"problem = cvx.Problem(cvx.Minimize(cvx.sum(x * items['cost'])), constraints)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.7130557905033648"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"problem.solve()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Check the solution."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" quantity | \n",
"
\n",
" \n",
" item | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Wheat biscuits | \n",
" 108.20 | \n",
"
\n",
" \n",
" Almonds | \n",
" 39.84 | \n",
"
\n",
" \n",
" Honey | \n",
" 0.56 | \n",
"
\n",
" \n",
" Raisins | \n",
" 0.54 | \n",
"
\n",
" \n",
" Bananas | \n",
" 0.30 | \n",
"
\n",
" \n",
" Blueberries, frozen | \n",
" 0.14 | \n",
"
\n",
" \n",
" Greek yogurt, 0% fat | \n",
" 0.07 | \n",
"
\n",
" \n",
" Milk, semi-skimmed | \n",
" 0.07 | \n",
"
\n",
" \n",
" Milk, whole | \n",
" 0.06 | \n",
"
\n",
" \n",
" Greek yogurt, full fat | \n",
" 0.04 | \n",
"
\n",
" \n",
" Granola | \n",
" 0.03 | \n",
"
\n",
" \n",
" Cashews | \n",
" 0.00 | \n",
"
\n",
" \n",
" Corn flakes | \n",
" 0.00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" quantity\n",
"item \n",
"Wheat biscuits 108.20\n",
"Almonds 39.84\n",
"Honey 0.56\n",
"Raisins 0.54\n",
"Bananas 0.30\n",
"Blueberries, frozen 0.14\n",
"Greek yogurt, 0% fat 0.07\n",
"Milk, semi-skimmed 0.07\n",
"Milk, whole 0.06\n",
"Greek yogurt, full fat 0.04\n",
"Granola 0.03\n",
"Cashews 0.00\n",
"Corn flakes 0.00"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame({'quantity': np.round(x.value, 2)}, index=items.index).sort_values('quantity', ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" energy | \n",
" 625.308915 | \n",
"
\n",
" \n",
" fat | \n",
" 21.698219 | \n",
"
\n",
" \n",
" saturated_fat | \n",
" 2.129709 | \n",
"
\n",
" \n",
" carbs | \n",
" 78.308307 | \n",
"
\n",
" \n",
" sugar | \n",
" 7.239679 | \n",
"
\n",
" \n",
" fibre | \n",
" 15.619396 | \n",
"
\n",
" \n",
" protein | \n",
" 21.387913 | \n",
"
\n",
" \n",
" salt | \n",
" 0.304647 | \n",
"
\n",
" \n",
" cost | \n",
" 0.713290 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" value\n",
"energy 625.308915\n",
"fat 21.698219\n",
"saturated_fat 2.129709\n",
"carbs 78.308307\n",
"sugar 7.239679\n",
"fibre 15.619396\n",
"protein 21.387913\n",
"salt 0.304647\n",
"cost 0.713290"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame({'value': x.value @ items}, index=items.columns)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}