{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "*This notebook is an exploration of the 0-1 knapsack problem as formulated by lecture 1 and 2 of MIT's 6.00.2x course.*\n", "\n", "
\n", "\n", "# The 0/1 Knapsack Problem\n", "\n", "The 0/1 Knapsack problem occurs whenever you want to maximize some value by selecting an optimal subset of items while obeying certain constraints. For example, a robber trying to figure out which items to steal; he can't take everything (too heavy) so he wants to maximize the amount of value he can take. Another formulation has an individual on a calorie-restricting diet; she wants to maximize the enjoyment from the food she eats while still staying beneath some set calorie limit.\n", "\n", "As an aside, it's called the \"0/1\" knapsack problem because it is discrete; the robber either takes an item or does not, food is either consumed or left untouched. The \"continuous\" knapsack problem is significantly easier to solve as you can just take as much as possible right up to the limit; for example, if the robber comes across a store of gold dust then he can just fill his bag as high as it can go.\n", "\n", "## Diet Scenario\n", "\n", "I will look at the diet scenario as it is the one covered by the course.\n", "\n", "> Dave is on a calorie-restricting diet that limits him to 750 calories per meal. He arrives at a restaurant and is trying to decide what to order. He assigns pleasure values to each food and makes note of their cost (in calories).\n", "\n", "**Simplification**: each item on the menu can only be ordered once.\n", "\n", "### Data\n", "\n", "Provided by the course.\n", "\n", "I'm going to try out [pandas](http://pandas.pydata.org/) for this." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read data from csv file\n", "data = pd.read_csv(\"food-value-calories.csv\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FoodValueCalories
0wine89123
1beer90154
2pizza95258
3burger100354
4fries90365
5cola79150
6apple5095
7donut10195
\n", "
" ], "text/plain": [ " Food Value Calories\n", "0 wine 89 123\n", "1 beer 90 154\n", "2 pizza 95 258\n", "3 burger 100 354\n", "4 fries 90 365\n", "5 cola 79 150\n", "6 apple 50 95\n", "7 donut 10 195" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the data \n", "# head() displays a default 5 elements. To view all, pass the total number of elements (is there a better way?)\n", "data.head(len(data))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ValueCalories
count8.0000008.000000
mean75.375000211.750000
std30.556447103.368619
min10.00000095.000000
25%71.750000143.250000
50%89.500000174.500000
75%91.250000282.000000
max100.000000365.000000
\n", "
" ], "text/plain": [ " Value Calories\n", "count 8.000000 8.000000\n", "mean 75.375000 211.750000\n", "std 30.556447 103.368619\n", "min 10.000000 95.000000\n", "25% 71.750000 143.250000\n", "50% 89.500000 174.500000\n", "75% 91.250000 282.000000\n", "max 100.000000 365.000000" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Compute some descriptive statistics\n", "data.describe()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Plot (because why not)\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "# Set style\n", "import matplotlib\n", "matplotlib.style.use('ggplot')" ] }, { "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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\ndjIzM9ut5J944ol2eV1/U07/Uk7/CoacwZARjM3ZLkVvs9moqKjw3K6oqMBms7XHW4mIiBftUvRX\nXHEFJSUllJWVUV9fT0FBAYmJie3xViIi4kXIM88884y/X9RqtdK7d29efvll1q9fzw033MDIkSP9\n/TZexcfHd/h7toZy+pdy+lcw5AyGjGBcznb5MFZERAKHzowVETE5Fb2IiMmp6EVETE5FLyJicir6\nDuZyuXj33XeNjmEaLpeLgoICo2N4VVpaSl1dHQA7duxg3bp1nDp1yuBUwa+mpsboCOf08ssv+7St\nvZlqPfrDhw+zcuVKKisrWbx4Md9//z3btm3jtttuMzqah9VqZffu3UbH8EltbS15eXkUFxdTW1vr\n2T579mwDUzVltVr56KOPSEpKMjrKOS1evJjMzExKS0t54403SExMZNmyZfzhD38wOloTwfA9B9i9\nezevvfYa1dXVvPrqqxw8eJDc3Fzuueceo6M18a+LObpcLvbv39/hOUx1RP/6669z5513EhISAsCl\nl14akEd7l112GQsWLGDjxo1s2bLF81+geeWVVzh27BjffPMNgwcPxuFw0KVLF6NjNTN06FA++ugj\nysvLOXnypOe/QGK1WgkJCWHr1q3cdNNNTJ8+HafTaXSsZoLle/7OO+8wd+5cunXrBjT+TH333XcG\np/pf2dnZzJgxg++//567776bu+++mxkzZnDPPfcwfPjwDs9jqiP62tpa+vXr12Sb1Rp4v8vq6uro\n1q0b//znP5tsHzFihEGJWlZaWkp6ejrbtm1j7NixjB49mnnz5hkdq5kzv8w/++wzzzaLxcIrr7xi\nVKRmQkJC2LRpE/n5+cyZMweAhoYGg1M1Fyzfc4CoqKgmtwPpZ33KlClMmTKF999/nzvvvNPoOOYq\n+m7dulFaWorFYgEaV9GMjIw0OFVzgfZn8Nmc+cuoa9eu/PDDD/Ts2ZPKykqDUzW3fPlyoyN4NXv2\nbP7nf/6HKVOmEBMTQ1lZGTfccIPRsZoJlu95r1692L17NxaLhfr6etatW0dsbKzRsZpJSEhg586d\nzbYPHjy4Q3OY6szYI0eO8MYbb7B79266du1KTEwMDz/8MDExMUZHayIYPksA2LBhAyNGjOCHH35g\nxYoVVFdXM23aNMaPH290tCZqamr45JNPKC8v57777qOkpITDhw9z7bXXGh2tidraWsrLy+nTp4/R\n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\nFuZkE0nlkwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data.plot(kind=\"bar\", x=\"Food\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tackling the Problem\n", "\n", "The objective is to find the set of menu items with the highest value while still amounting to less than or equal to 750 calories. For instance, Dave could pick:\n", "\n", "- wine\n", "\n", "- burger\n", "\n", "- donut\n", "\n", "Which has a total value of 234 and a total cost of 476 calories. This is a valid choice, but is not optimal.\n", "\n", "## Finding an Optimal Solution\n", "\n", "Finding an optimal solution is straightforward:\n", "\n", "1. Gather all possible sets of items\n", "\n", "2. Eliminate invalid sets (i.e. sets with calorie counts larger than 750)\n", "\n", "3. Sort the sets by value\n", "\n", "4. The first set in the sorted list of sets is the optimal solution\n", "\n", "### Implementation\n", "\n", "I am not familar enough with Pandas to use it properly, so I'm going to convert the data into a regular Python list." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "menu = data.values.tolist()\n", "menu" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Set constant\n", "CALORIE_LIMIT = 750" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def power_set(set_):\n", " \"\"\"Binary powerset algorithm.\"\"\"\n", " power_set = []\n", " \n", " power_cardinality = 2**len(set_)\n", " \n", " # the number of binary digits needed\n", " digit_count = len(set_)\n", " \n", " # setting up the formatting\n", " format_spec = '0' + str(digit_count) + 'b' \n", " \n", " for n in range(power_cardinality):\n", " subset = []\n", " \n", " binary_n = format(n, format_spec)\n", " \n", " # for every character in a binary number\n", " for i, char in enumerate(binary_n):\n", " if char == '1':\n", " # when char is 1, the element in set_ with matching index is present in the subset\n", " subset.append(set_[i])\n", " \n", " power_set.append(subset)\n", " \n", " return power_set" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[],\n", " [['donut', 10, 195]],\n", " [['apple', 50, 95]],\n", " [['apple', 50, 95], ['donut', 10, 195]],\n", " [['cola', 79, 150]],\n", " [['cola', 79, 150], ['donut', 10, 195]],\n", " [['cola', 79, 150], ['apple', 50, 95]],\n", " [['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['fries', 90, 365]],\n", " [['fries', 90, 365], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['apple', 50, 95]],\n", " [['fries', 90, 365], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['cola', 79, 150]],\n", " [['fries', 90, 365], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['burger', 100, 354]],\n", " [['burger', 100, 354], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['apple', 50, 95]],\n", " [['burger', 100, 354], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['cola', 79, 150]],\n", " [['burger', 100, 354], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['burger', 100, 354], ['fries', 90, 365]],\n", " [['burger', 100, 354], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['burger', 100, 354], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258]],\n", " [['pizza', 95, 258], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['apple', 50, 95]],\n", " [['pizza', 95, 258], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['cola', 79, 150]],\n", " [['pizza', 95, 258], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['fries', 90, 365]],\n", " [['pizza', 95, 258], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['burger', 100, 354]],\n", " [['pizza', 95, 258], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['burger', 100, 354], ['fries', 90, 365]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154]],\n", " [['beer', 90, 154], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['burger', 100, 354]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['fries', 90, 365]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['fries', 90, 365]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['burger', 100, 354]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123]],\n", " [['wine', 89, 123], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['burger', 100, 354]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['burger', 100, 354]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['burger', 100, 354]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]]]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The powerset is the list of all possible sets of items\n", "menu_power = power_set(menu)\n", "menu_power" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To help eliminate invalid sets, I'll write a function which calculates the sum of a given set." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def valid_choice(choice):\n", " \"\"\"(list) -> bool\n", " Given a list of chosen foods, return true if their total cost exceeds CALORIE_LIMIT\"\"\"\n", " total_cost = 0\n", " for food in choice:\n", " total_cost += food[2]\n", " \n", " return total_cost < CALORIE_LIMIT" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[],\n", " [['donut', 10, 195]],\n", " [['apple', 50, 95]],\n", " [['apple', 50, 95], ['donut', 10, 195]],\n", " [['cola', 79, 150]],\n", " [['cola', 79, 150], ['donut', 10, 195]],\n", " [['cola', 79, 150], ['apple', 50, 95]],\n", " [['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['fries', 90, 365]],\n", " [['fries', 90, 365], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['apple', 50, 95]],\n", " [['fries', 90, 365], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['cola', 79, 150]],\n", " [['fries', 90, 365], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['burger', 100, 354]],\n", " [['burger', 100, 354], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['apple', 50, 95]],\n", " [['burger', 100, 354], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['cola', 79, 150]],\n", " [['burger', 100, 354], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['burger', 100, 354], ['fries', 90, 365]],\n", " [['pizza', 95, 258]],\n", " [['pizza', 95, 258], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['apple', 50, 95]],\n", " [['pizza', 95, 258], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['cola', 79, 150]],\n", " [['pizza', 95, 258], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['fries', 90, 365]],\n", " [['pizza', 95, 258], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['pizza', 95, 258], ['burger', 100, 354]],\n", " [['pizza', 95, 258], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['beer', 90, 154]],\n", " [['beer', 90, 154], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['burger', 100, 354]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['pizza', 95, 258]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123]],\n", " [['wine', 89, 123], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['burger', 100, 354]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123], ['pizza', 95, 258]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['burger', 100, 354]],\n", " [['wine', 89, 123], ['beer', 90, 154]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['burger', 100, 354]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]]]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Collect valid sets\n", "valid_choices = []\n", "for choice in menu_power:\n", " if valid_choice(choice):\n", " valid_choices.append(choice)\n", "\n", "valid_choices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To help sort the valid choices by value, I'll write a function to calculate the total value of a given choice." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def total_value(choice):\n", " \"\"\"(list) -> int\n", " Given a list of foods, returns the sum of their values.\"\"\"\n", " total_value = 0\n", " for food in choice:\n", " total_value += food[1]\n", " return total_value" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The optimal menu choice is [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]]\n" ] } ], "source": [ "sorted_choices = sorted(valid_choices, key=total_value, reverse=True)\n", "\n", "print(\"The optimal menu choice is\", sorted_choices[0])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total value: 353\n" ] } ], "source": [ "print(\"Total value:\", total_value(sorted_choices[0]))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total cost: 685\n" ] } ], "source": [ "total_cost = 0\n", "for food in sorted_choices[0]:\n", " total_cost += food[2]\n", "\n", "print(\"Total cost:\", total_cost)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This was fun, but my implementation isn't the best. In the course, the data is converted into objects (e.g. there is a Food class). Hmm...I wonder what the best way to carry out this kind of analysis is? Maybe I'll look into this. *Moving on...*\n", "\n", "## Greedy Algorithms\n", "\n", "Finding the optimal solution is computationally expensive, just computing the powerset costs $O(2^n)$! This dataset is small enough that I can be as inefficient as I want, but this does not scale. Greedy algorithms offer a way to determine a \"good\" (but not optimal) solution in a lot less time.\n", "\n", "A greedy algorithm for the 0/1 knapsack problem is:\n", "\n", "```\n", "while knapsack is not full:\n", " put \"best\" available item into it\n", "```\n", "\n", "The definition of \"best\" is up for debate. It could mean:\n", "\n", "- highest value\n", "\n", "- lowest cost\n", "\n", "- highest ratio of value to cost (value/cost)\n", "\n", "### Implementation\n", "\n", "Fairly simple:\n", "\n", "1. Sort the data set by the criteria we think is \"best\"\n", "\n", "2. Loop through the sorted set, taking items until reaching the limit" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "menu" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['burger', 100, 354],\n", " ['pizza', 95, 258],\n", " ['beer', 90, 154],\n", " ['fries', 90, 365],\n", " ['wine', 89, 123],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sorted from highest to lowest value\n", "by_value = sorted(menu, key=lambda food: food[1], reverse=True)\n", "by_value" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['apple', 50, 95],\n", " ['wine', 89, 123],\n", " ['cola', 79, 150],\n", " ['beer', 90, 154],\n", " ['donut', 10, 195],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365]]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sorted from smallest to largest cost\n", "by_cost = sorted(menu, key=lambda food: food[2])\n", "by_cost" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['pizza', 95, 258],\n", " ['burger', 100, 354],\n", " ['fries', 90, 365],\n", " ['donut', 10, 195]]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sorted from greatest to least value/cost (i.e. best \"bang for your buck\")\n", "by_ratio = sorted(menu, key=lambda food: food[1]/food[2], reverse=True)\n", "by_ratio" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def order_to_limit(menu, criteria):\n", " \"\"\"(list, str) -> None\n", " Given a menu, orders as many items as possible (until reaching CALORIE_LIMIT).\n", " Prints the results.\"\"\"\n", " cost = 0\n", " value = 0\n", " ordered = []\n", " for food in menu:\n", " f_cost = food[2]\n", " f_value = food[1]\n", " f_name = food[0]\n", " \n", " # If the calorie cost + calories already consumed does not exceed limit\n", " if ((cost + f_cost) < CALORIE_LIMIT):\n", " # Order the food\n", " cost += f_cost\n", " value += f_value\n", " ordered.append(f_name)\n", " \n", " print(\"With {} criteria:\".format(criteria))\n", " print(\" food ordered:\", ordered)\n", " print(\" total calories:\", cost)\n", " print(\" total value:\", value)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "With VALUE criteria:\n", " food ordered: ['burger', 'pizza', 'wine']\n", " total calories: 735\n", " total value: 284\n", "\n", "With COST criteria:\n", " food ordered: ['apple', 'wine', 'cola', 'beer', 'donut']\n", " total calories: 717\n", " total value: 318\n", "\n", "With RATIO criteria:\n", " food ordered: ['wine', 'beer', 'cola', 'apple', 'donut']\n", " total calories: 717\n", " total value: 318\n" ] } ], "source": [ "# Run some computations, print the results\n", "order_to_limit(by_value, \"VALUE\")\n", "print()\n", "order_to_limit(by_cost, \"COST\")\n", "print()\n", "order_to_limit(by_ratio, \"RATIO\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For comparison,\n", "\n", "```\n", "Optimal solution:\n", " food ordered: ['wine', 'beer', 'pizza', 'cola']\n", " total calories: 685\n", " total value: 353\n", "```\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Though none of the greedy results matched the optimal solution, they were close. They are also far more efficient; $O(n \\log n)$, if I'm not mistaken.\n", "\n", "**tl;dr**: Dave should order wine, beer, pizza, and a cola. \n", "\n", "> **DAVE:** \"Three drinks and a pizza isn't a meal.\"\n", ">\n", "> **SCIENTIST:** \"FOOL! You should have been more specific with your constraints!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "# Extra Bits - Plotting the Search Space\n", "\n", "Remember the set of all possible *valid* orders? I think it would be neat to see visually.\n", "\n", "## The Data" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[],\n", " [['donut', 10, 195]],\n", " [['apple', 50, 95]],\n", " [['apple', 50, 95], ['donut', 10, 195]],\n", " [['cola', 79, 150]],\n", " [['cola', 79, 150], ['donut', 10, 195]],\n", " [['cola', 79, 150], ['apple', 50, 95]],\n", " [['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['fries', 90, 365]],\n", " [['fries', 90, 365], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['apple', 50, 95]],\n", " [['fries', 90, 365], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['cola', 79, 150]],\n", " [['fries', 90, 365], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['burger', 100, 354]],\n", " [['burger', 100, 354], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['apple', 50, 95]],\n", " [['burger', 100, 354], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['cola', 79, 150]],\n", " [['burger', 100, 354], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['burger', 100, 354], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['burger', 100, 354], ['fries', 90, 365]],\n", " [['pizza', 95, 258]],\n", " [['pizza', 95, 258], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['apple', 50, 95]],\n", " [['pizza', 95, 258], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['cola', 79, 150]],\n", " [['pizza', 95, 258], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['pizza', 95, 258], ['fries', 90, 365]],\n", " [['pizza', 95, 258], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['pizza', 95, 258], ['burger', 100, 354]],\n", " [['pizza', 95, 258], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['beer', 90, 154]],\n", " [['beer', 90, 154], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['burger', 100, 354]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['beer', 90, 154], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['pizza', 95, 258]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123]],\n", " [['wine', 89, 123], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['cola', 79, 150], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['fries', 90, 365], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['burger', 100, 354]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['burger', 100, 354], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['burger', 100, 354],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123], ['pizza', 95, 258]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['cola', 79, 150]],\n", " [['wine', 89, 123],\n", " ['pizza', 95, 258],\n", " ['cola', 79, 150],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['pizza', 95, 258], ['burger', 100, 354]],\n", " [['wine', 89, 123], ['beer', 90, 154]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['apple', 50, 95], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150], ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['cola', 79, 150], ['apple', 50, 95]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['cola', 79, 150],\n", " ['apple', 50, 95],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['fries', 90, 365], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['burger', 100, 354]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['burger', 100, 354],\n", " ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258]],\n", " [['wine', 89, 123],\n", " ['beer', 90, 154],\n", " ['pizza', 95, 258],\n", " ['donut', 10, 195]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['apple', 50, 95]],\n", " [['wine', 89, 123], ['beer', 90, 154], ['pizza', 95, 258], ['cola', 79, 150]]]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# From earlier\n", "valid_choices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Plan\n", "\n", "**x-axis**: The set ID (a meaningless number corresponding to an individual set in the list of sets).\n", "\n", "**y-axis**: Represents the numerical pleasure value for a particular set\n", "\n", "**Chart type**: Line\n", "\n", "## Data Prep\n", "\n", "So, I think I can achieve my goal by creating a list and filling each position with the total value of each list. Then convert to a pandas series. Finally, create the plot." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "summed_values = []\n", "\n", "for s in valid_choices:\n", " summed_values.append(total_value(s))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0 0\n", "1 10\n", "2 50\n", "3 60\n", "4 79\n", "5 89\n", "6 129\n", "7 139\n", "8 90\n", "9 100\n", "10 140\n", "11 150\n", "12 169\n", "13 179\n", "14 219\n", "15 100\n", "16 110\n", "17 150\n", "18 160\n", "19 179\n", "20 189\n", "21 229\n", "22 190\n", "23 95\n", "24 105\n", "25 145\n", "26 155\n", "27 174\n", "28 184\n", "29 224\n", " ... \n", "70 189\n", "71 199\n", "72 239\n", "73 268\n", "74 318\n", "75 184\n", "76 194\n", "77 234\n", "78 244\n", "79 263\n", "80 273\n", "81 313\n", "82 274\n", "83 284\n", "84 179\n", "85 189\n", "86 229\n", "87 239\n", "88 258\n", "89 268\n", "90 308\n", "91 318\n", "92 269\n", "93 319\n", "94 279\n", "95 329\n", "96 274\n", "97 284\n", "98 324\n", "99 353\n", "Length: 100, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summed_values = pd.Series(summed_values)\n", "summed_values" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nYgVxcXFYLBaWLVvm3fbs2bP09/ezcuVKIiIiSE5OpqCggMbGxlse72YzZ86kpqaGZcuWsXbtWqqr\nq5k5cyZ79uyhpqZGQSF+oZGFCJCQkMDAwACjo6N/Cwy73U58fLx3+caXbf31+Y3rLBaL9+dLly5h\nt9spLi72rnO73cybN++Wx7vZ1q1b6ezsZGhoiOjoaL799ltGRkZ49dVXefjhh3nttdfu6ruKjIfC\nQoSr/91HRkby008/kZeX513vcDhoaWlh1apVt9w3MTERq9VKeno6AL29vd7PLBYLSUlJ7N69e9y1\nbd++ncuXL/P222/z8ccfc/DgQfr7+3nhhRfGfUyRu6VpKBEgNjaWlStXUl1dTUtLCy6Xi56eHioq\nKjCbzbed6nnsscfYv38/g4ODWK1Wvv/+e+9nc+bMISYmhrq6OpxOJ263mz/++IO2tra7qu/cuXPe\nE9p/XREl4k8aWYhc8+yzzxIfH8/XX3/NxYsXiY2NJTc3l5dffpnIyMhb7vfcc8+xd+9eNm7ciNFo\nJD8/n4MHDwIQFhbGG2+8wVdffUVpaSkul4vU1FSef/75u6rtxoBob2/XqEL8Tu+zEBERnzQNJSIi\nPiksRETEJ4WFiIj4pLAQERGfFBYiIuKTwkJERHxSWIiIiE8KCxER8UlhISIiPv0/YuEyhzsPNdAA\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "value_plot = summed_values.plot()\n", "value_plot.set(xlabel=\"Order #\", ylabel=\"Total pleasure value\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Neat!\n", "\n", "## More Nonsense\n", "\n", "To get more experience with these tools, I want to do a bit more. I'm going to add total calorie cost to the plot." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def total_cost(choice):\n", " \"\"\"(list) -> int\n", " Given a list of foods, returns the sum of their costs.\"\"\"\n", " total_cost = 0\n", " for food in choice:\n", " total_cost += food[2]\n", " return total_cost" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[0,\n", " 195,\n", " 95,\n", " 290,\n", " 150,\n", " 345,\n", " 245,\n", " 440,\n", " 365,\n", " 560,\n", " 460,\n", " 655,\n", " 515,\n", " 710,\n", " 610,\n", " 354,\n", " 549,\n", " 449,\n", " 644,\n", " 504,\n", " 699,\n", " 599,\n", " 719,\n", " 258,\n", " 453,\n", " 353,\n", " 548,\n", " 408,\n", " 603,\n", " 503,\n", " 698,\n", " 623,\n", " 718,\n", " 612,\n", " 707,\n", " 154,\n", " 349,\n", " 249,\n", " 444,\n", " 304,\n", " 499,\n", " 399,\n", " 594,\n", " 519,\n", " 714,\n", " 614,\n", " 669,\n", " 508,\n", " 703,\n", " 603,\n", " 658,\n", " 412,\n", " 607,\n", " 507,\n", " 702,\n", " 562,\n", " 657,\n", " 123,\n", " 318,\n", " 218,\n", " 413,\n", " 273,\n", " 468,\n", " 368,\n", " 563,\n", " 488,\n", " 683,\n", " 583,\n", " 638,\n", " 733,\n", " 477,\n", " 672,\n", " 572,\n", " 627,\n", " 722,\n", " 381,\n", " 576,\n", " 476,\n", " 671,\n", " 531,\n", " 726,\n", " 626,\n", " 746,\n", " 735,\n", " 277,\n", " 472,\n", " 372,\n", " 567,\n", " 427,\n", " 622,\n", " 522,\n", " 717,\n", " 642,\n", " 737,\n", " 631,\n", " 726,\n", " 535,\n", " 730,\n", " 630,\n", " 685]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summed_costs = []\n", "\n", "for s in valid_choices:\n", " summed_costs.append(total_cost(s))\n", "\n", "summed_costs" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Total costTotal pleasure
000
119510
29550
329060
415079
534589
6245129
7440139
836590
9560100
10460140
11655150
12515169
13710179
14610219
15354100
16549110
17449150
18644160
19504179
20699189
21599229
22719190
2325895
24453105
25353145
26548155
27408174
28603184
29503224
.........
70477189
71672199
72572239
73627268
74722318
75381184
76576194
77476234
78671244
79531263
80726273
81626313
82746274
83735284
84277179
85472189
86372229
87567239
88427258
89622268
90522308
91717318
92642269
93737319
94631279
95726329
96535274
97730284
98630324
99685353
\n", "

100 rows × 2 columns

\n", "
" ], "text/plain": [ " Total cost Total pleasure\n", "0 0 0\n", "1 195 10\n", "2 95 50\n", "3 290 60\n", "4 150 79\n", "5 345 89\n", "6 245 129\n", "7 440 139\n", "8 365 90\n", "9 560 100\n", "10 460 140\n", "11 655 150\n", "12 515 169\n", "13 710 179\n", "14 610 219\n", "15 354 100\n", "16 549 110\n", "17 449 150\n", "18 644 160\n", "19 504 179\n", "20 699 189\n", "21 599 229\n", "22 719 190\n", "23 258 95\n", "24 453 105\n", "25 353 145\n", "26 548 155\n", "27 408 174\n", "28 603 184\n", "29 503 224\n", ".. ... ...\n", "70 477 189\n", "71 672 199\n", "72 572 239\n", "73 627 268\n", "74 722 318\n", "75 381 184\n", "76 576 194\n", "77 476 234\n", "78 671 244\n", "79 531 263\n", "80 726 273\n", "81 626 313\n", "82 746 274\n", "83 735 284\n", "84 277 179\n", "85 472 189\n", "86 372 229\n", "87 567 239\n", "88 427 258\n", "89 622 268\n", "90 522 308\n", "91 717 318\n", "92 642 269\n", "93 737 319\n", "94 631 279\n", "95 726 329\n", "96 535 274\n", "97 730 284\n", "98 630 324\n", "99 685 353\n", "\n", "[100 rows x 2 columns]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cost_value_data = pd.DataFrame({'Total pleasure': summed_values, 'Total cost': summed_costs})\n", "cost_value_data" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ndgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cvp = cost_value_data.plot()\n", "cvp.set(xlabel=\"Order #\", ylabel=\"Total value\")" ] } ], "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.1" } }, "nbformat": 4, "nbformat_minor": 2 }