{ "cells": [ { "cell_type": "markdown", "id": "a5803ac3", "metadata": { "tags": [ "COP", "complex", "difficult", "Count", "Intension", "objSum" ] }, "source": [ "# Problem *Pizza Voucher*" ] }, { "cell_type": "markdown", "id": "2d5ad1a3", "metadata": {}, "source": [ "From the Intelligent Systems CMPT 417 course at Simon Fraser University.\n", "The problem arises in the University College Cork student dorms.\n", "There is a large order of pizzas for a party, and many of the students have vouchers for acquiring discounts in purchasing pizzas. A voucher is a pair of numbers e.g. (2,4), which means if you pay for 2 pizzas then you can obtain for free up to 4 pizzas as long as they each cost no more than the cheapest of the $2$ pizzas you paid for. Similarly a voucher (3,2) means that if you pay for 3 pizzas you can get up to 2 pizzas for free as long as they each cost no more than the cheapest of the 3 pizzas you paid for. The aim is to obtain all the ordered pizzas for the least possible cost. Note that not all vouchers need to be used." ] }, { "attachments": { "pizza.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "dbd0695c", "metadata": {}, "source": [ "A Nice Pizza Slice. Image from [freesvg.org](https://freesvg.org/pizza-slice-vector-image) \n", "\"Pizza\"" ] }, { "cell_type": "markdown", "id": "717cf5c1", "metadata": {}, "source": [ "To build a COP (Constraint Optimization Problem) model, we need first to import the library PyCSP$^3$:" ] }, { "cell_type": "code", "execution_count": 1, "id": "b240c90f", "metadata": {}, "outputs": [], "source": [ "from pycsp3 import *" ] }, { "cell_type": "markdown", "id": "3006a069", "metadata": {}, "source": [ "Then, we need some data. For vouchers, we use named tuples." ] }, { "cell_type": "code", "execution_count": 2, "id": "e74aabf6", "metadata": {}, "outputs": [], "source": [ "prices = [50, 60, 90, 70, 80, 100, 20, 30, 40, 10] # prices of pizzas\n", " \n", "Voucher = namedtuple('Voucher', 'pay free')\n", "vouchers = [\n", " Voucher(1,2), Voucher(2,3), Voucher(1,1), Voucher(0,1), Voucher(2,1), \n", " Voucher(2,2), Voucher(3,3), Voucher(1,0), Voucher(3,2)\n", "] \n", "\n", "nPizzas, nVouchers = len(prices), len(vouchers)" ] }, { "cell_type": "markdown", "id": "1e2dc698", "metadata": {}, "source": [ "We can check the vouchers." ] }, { "cell_type": "code", "execution_count": 3, "id": "eee3bd3e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Voucher(pay=1, free=2), Voucher(pay=2, free=3), Voucher(pay=1, free=1), Voucher(pay=0, free=1), Voucher(pay=2, free=1), Voucher(pay=2, free=2), Voucher(pay=3, free=3), Voucher(pay=1, free=0), Voucher(pay=3, free=2)]\n" ] } ], "source": [ "print(vouchers)" ] }, { "cell_type": "markdown", "id": "c4b126d3", "metadata": {}, "source": [ "We start our COP model with an array $v$ of 10 variables (one per pizza). " ] }, { "cell_type": "code", "execution_count": 4, "id": "a93e4b22", "metadata": {}, "outputs": [], "source": [ "# v[i] is the voucher used for the ith pizza. 0 means that no voucher is used.\n", "# A negative (resp., positive) value i means that the ith pizza contributes\n", "# to the the pay (resp., free) part of voucher |i|.\n", "v = VarArray(size=nPizzas, dom=range(-nVouchers, nVouchers + 1))" ] }, { "cell_type": "markdown", "id": "af576a62", "metadata": {}, "source": [ "We can display (the structure of) the array as well as the domain of the first variable." ] }, { "cell_type": "code", "execution_count": 5, "id": "f15d98c5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Array of variable v [v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]]\n", "Domain of any variable: -9..9\n" ] } ], "source": [ "print(\"Array of variable v \", v)\n", "print(\"Domain of any variable: \", v[0].dom)" ] }, { "cell_type": "markdown", "id": "c5a33f15", "metadata": {}, "source": [ "To control the way vouchers are used, we need to be able to count for each voucher the number of times a pizza corrsponds to the pay or free part of this voucher. This is the reason why we introduce the two following arrays:" ] }, { "cell_type": "code", "execution_count": 6, "id": "1988133c", "metadata": {}, "outputs": [], "source": [ "# p[i] is the number of paid pizzas wrt the ith voucher\n", "p = VarArray(size=nVouchers, dom=lambda i: {0, vouchers[i].pay})\n", "\n", "# f[i] is the number of free pizzas wrt the ith voucher\n", "f = VarArray(size=nVouchers, dom=lambda i: range(vouchers[i].free + 1))" ] }, { "cell_type": "markdown", "id": "791d4c03", "metadata": {}, "source": [ "We can post two groups of constraints *Count* for computing the value of these variables." ] }, { "cell_type": "code", "execution_count": 7, "id": "944529a2", "metadata": {}, "outputs": [], "source": [ "satisfy(\n", " # counting paid pizzas\n", " [Count(v, value=-i - 1) == p[i] for i in range(nVouchers)],\n", "\n", " # counting free pizzas\n", " [Count(v, value=i + 1) == f[i] for i in range(nVouchers)]\n", ");" ] }, { "cell_type": "markdown", "id": "25d218fd", "metadata": {}, "source": [ "We can display the internal representation of the posted constraints; this way, although a little bit technical, we can see that the constraints are correctly formed (note that 'eq' stands for 'equal to')." ] }, { "cell_type": "code", "execution_count": 8, "id": "4d811aff", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-1], condition:(eq,p[0]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-2], condition:(eq,p[1]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-3], condition:(eq,p[2]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-4], condition:(eq,p[3]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-5], condition:(eq,p[4]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-6], condition:(eq,p[5]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-7], condition:(eq,p[6]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-8], condition:(eq,p[7]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[-9], condition:(eq,p[8]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[1], condition:(eq,f[0]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[2], condition:(eq,f[1]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[3], condition:(eq,f[2]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[4], condition:(eq,f[3]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[5], condition:(eq,f[4]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[6], condition:(eq,f[5]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[7], condition:(eq,f[6]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[8], condition:(eq,f[7]))\n", "count(list:[v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]], values:[9], condition:(eq,f[8]))\n" ] } ], "source": [ "print(posted())" ] }, { "cell_type": "markdown", "id": "87f7df7a", "metadata": {}, "source": [ "By calling the function *solve()*, we can check that the problem is satisfiable (SAT). We can also display the values assigned to the variables in the found solution by calling the function *value()*." ] }, { "cell_type": "code", "execution_count": 9, "id": "b2d646a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-9, -9, -9, -8, -7, -7, -7, -6, -6, -3]\n" ] } ], "source": [ "if solve() is SAT:\n", " print(values(v))" ] }, { "cell_type": "markdown", "id": "ccbf6aa7", "metadata": {}, "source": [ "In this solution, we only pay for pizzas while never benefiting from free ones. This is the moment to post the following objective:" ] }, { "cell_type": "code", "execution_count": 10, "id": "dcaede08", "metadata": {}, "outputs": [], "source": [ "minimize(\n", " # minimizing summed up costs of pizzas\n", " Sum((v[i] <= 0) * prices[i] for i in range(nPizzas)) \n", ");" ] }, { "cell_type": "markdown", "id": "2ad7b0fe", "metadata": {}, "source": [ "We can run again the solver, with this optimization task. Note that we need to check that the status returned by the solver is now OPTIMUM. " ] }, { "cell_type": "code", "execution_count": 11, "id": "559647b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Used vouchers: [6, 6, 3, 4, 5, 2, 1, 2, 2, 1]\n", "Overall cost: 0\n", " voucher 0: paid=0 free=2\n", " voucher 1: paid=0 free=3\n", " voucher 2: paid=0 free=1\n", " voucher 3: paid=0 free=1\n", " voucher 4: paid=0 free=1\n", " voucher 5: paid=0 free=2\n", " voucher 6: paid=0 free=0\n", " voucher 7: paid=0 free=0\n", " voucher 8: paid=0 free=0\n" ] } ], "source": [ "if solve() is OPTIMUM:\n", " print(\"Used vouchers: \", values(v))\n", " print(\"Overall cost: \", bound())\n", " for i in range(nVouchers):\n", " print(f\" voucher {i}: paid={p[i].value} free={f[i].value}\")" ] }, { "cell_type": "markdown", "id": "7b842cbe", "metadata": {}, "source": [ "We have a new problem: all pizzas are considered to be free. We need to control the fact that a pizza can only be free when some pizzas have been paid. We post a group of constraints *Intension*: " ] }, { "cell_type": "code", "execution_count": 12, "id": "72341bd7", "metadata": {}, "outputs": [], "source": [ "satisfy(\n", " # a voucher, if used, must contribute to have at least one free pizza.\n", " (f[i] == 0) == (p[i] != vouchers[i].pay) for i in range(nVouchers)\n", ");" ] }, { "cell_type": "markdown", "id": "cbc63c2b", "metadata": {}, "source": [ "We can display these last posted constraints:" ] }, { "cell_type": "code", "execution_count": 13, "id": "9ed4b0e6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "intension(function:iff(eq(f[0],0),ne(p[0],1)))\n", "intension(function:iff(eq(f[1],0),ne(p[1],2)))\n", "intension(function:iff(eq(f[2],0),ne(p[2],1)))\n", "intension(function:iff(eq(f[3],0),ne(p[3],0)))\n", "intension(function:iff(eq(f[4],0),ne(p[4],2)))\n", "intension(function:iff(eq(f[5],0),ne(p[5],2)))\n", "intension(function:iff(eq(f[6],0),ne(p[6],3)))\n", "intension(function:iff(eq(f[7],0),ne(p[7],1)))\n", "intension(function:iff(eq(f[8],0),ne(p[8],3)))\n" ] } ], "source": [ "print(posted(-1))" ] }, { "cell_type": "markdown", "id": "6328c4cd", "metadata": {}, "source": [ "After introducing the following auxiliary functions:" ] }, { "cell_type": "code", "execution_count": 14, "id": "4f276dc3", "metadata": {}, "outputs": [], "source": [ "def paid(i):\n", " return [prices[j] for j in range(nPizzas) if v[j].value == -i-1]\n", "\n", "def free(i):\n", " return [prices[j] for j in range(nPizzas) if v[j].value == i+1]" ] }, { "cell_type": "markdown", "id": "58ba8809", "metadata": {}, "source": [ "we run the solver as follows:" ] }, { "cell_type": "code", "execution_count": 15, "id": "a35618ff", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Used vouchers: [1, 1, 4, 7, 7, 7, -7, -7, -7, -1]\n", "Overall cost: 100\n", " voucher 0: paid=[10] free=[50, 60]\n", " voucher 1: paid=[] free=[]\n", " voucher 2: paid=[] free=[]\n", " voucher 3: paid=[] free=[90]\n", " voucher 4: paid=[] free=[]\n", " voucher 5: paid=[] free=[]\n", " voucher 6: paid=[20, 30, 40] free=[70, 80, 100]\n", " voucher 7: paid=[] free=[]\n", " voucher 8: paid=[] free=[]\n" ] } ], "source": [ "if solve() is OPTIMUM:\n", " print(\"Used vouchers: \", values(v))\n", " print(\"Overall cost: \", bound())\n", " for i in range(nVouchers):\n", " print(f\" voucher {i}: paid={paid(i)} free={free(i)}\")" ] }, { "cell_type": "markdown", "id": "1ba55bf4", "metadata": {}, "source": [ "One can see that the prizes of the free pizzas is greater than the prize of the paid pizzas. This is a problem we fix with a group of constraints *Intension*:" ] }, { "cell_type": "code", "execution_count": 16, "id": "408d30a8", "metadata": {}, "outputs": [], "source": [ "satisfy(\n", " # a free pizza obtained with a voucher must be cheaper than any pizza paid wrt this voucher\n", " imply(v[i] < 0, v[i] != -v[j]) for i in range(nPizzas) for j in range(nPizzas) \n", " if i != j and prices[i] < prices[j]\n", ");" ] }, { "cell_type": "markdown", "id": "37f4be17", "metadata": {}, "source": [ "With this last attempt, we obtain a valid optimal solution:" ] }, { "cell_type": "code", "execution_count": 17, "id": "d768a1c7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Used vouchers: [-2, -2, -1, 1, 1, 4, 2, 2, 2, 0]\n", "Overall cost: 210\n", " voucher 0: paid=[90] free=[70, 80]\n", " voucher 1: paid=[50, 60] free=[20, 30, 40]\n", " voucher 2: paid=[] free=[]\n", " voucher 3: paid=[] free=[100]\n", " voucher 4: paid=[] free=[]\n", " voucher 5: paid=[] free=[]\n", " voucher 6: paid=[] free=[]\n", " voucher 7: paid=[] free=[]\n", " voucher 8: paid=[] free=[]\n" ] } ], "source": [ "if solve() is OPTIMUM:\n", " print(\"Used vouchers: \", values(v))\n", " print(\"Overall cost: \", bound())\n", " for i in range(nVouchers):\n", " print(f\" voucher {i}: paid={paid(i)} free={free(i)}\")" ] }, { "cell_type": "markdown", "id": "df5edbe2", "metadata": {}, "source": [ "Finally, we give below the model in one piece. Here the data is expected to be given by the user (in a command line)." ] }, { "cell_type": "raw", "id": "e552e752", "metadata": { "raw_mimetype": "text/x-python" }, "source": [ "from pycsp3 import *\n", "\n", "prices, vouchers = data\n", "nPizzas, nVouchers = len(prices), len(vouchers)\n", "\n", "# v[i] is the voucher used for the ith pizza. 0 means that no voucher is used.\n", "# A negative (resp., positive) value i means that the ith pizza contributes \n", "# to the the pay (resp., free) part of voucher |i|.\n", "v = VarArray(size=nPizzas, dom=range(-nVouchers, nVouchers + 1))\n", "\n", "# p[i] is the number of paid pizzas wrt the ith voucher\n", "p = VarArray(size=nVouchers, dom=lambda i: {0, vouchers[i].pay})\n", "\n", "# f[i] is the number of free pizzas wrt the ith voucher\n", "f = VarArray(size=nVouchers, dom=lambda i: range(vouchers[i].free + 1))\n", "\n", "satisfy(\n", " # counting paid pizzas\n", " [Count(v, value=-i - 1) == p[i] for i in range(nVouchers)],\n", "\n", " # counting free pizzas\n", " [Count(v, value=i + 1) == f[i] for i in range(nVouchers)],\n", "\n", " # a voucher, if used, must contribute to have at least one free pizza.\n", " [(f[i] == 0) == (p[i] != vouchers[i].pay) for i in range(nVouchers)],\n", "\n", " # a free pizza obtained with a voucher must be cheaper than any pizza paid wrt this voucher\n", " [imply(v[i] < 0, v[i] != -v[j]) for i in range(nPizzas) for j in range(nPizzas) \n", " if i != j and prices[i] < prices[j]]\n", ")\n", "\n", "minimize(\n", " # minimizing summed up costs of pizzas\n", " Sum((v[i] <= 0) * prices[i] for i in range(nPizzas))\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.7.12" } }, "nbformat": 4, "nbformat_minor": 5 }