{ "cells": [ { "cell_type": "markdown", "id": "d1c7a815", "metadata": {}, "source": [ "# Violation Distribution (`distr_V`)" ] }, { "cell_type": "code", "execution_count": 16, "id": "167dd66d", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from itertools import product\n", "\n", "from pyxla import load_data, distr_v" ] }, { "cell_type": "markdown", "id": "99de5fa0", "metadata": {}, "source": [ "## Easy Knapsack\n", "\n", "- Large maximum weight\n", "- Weight and profit are uncorrelated" ] }, { "cell_type": "code", "execution_count": 2, "id": "82d04ec3", "metadata": {}, "outputs": [], "source": [ "# number of items\n", "n = 10\n", "l_bound = 0\n", "u_bound = 100" ] }, { "cell_type": "code", "execution_count": 37, "id": "e7394366", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 8, 77, 65, 43, 43, 85, 8, 69, 20, 9])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng = np.random.default_rng(seed=42)\n", "weights = rng.integers(l_bound, u_bound, size=10) \n", "weights" ] }, { "cell_type": "code", "execution_count": 38, "id": "c022a723", "metadata": {}, "outputs": [], "source": [ "# max weight\n", "max_weight = weights.sum() * 0.75" ] }, { "cell_type": "code", "execution_count": 39, "id": "ff8551d6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([52, 97, 73, 76, 71, 78, 51, 12, 83, 45])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "profits = rng.integers(l_bound, u_bound, size=10)\n", "profits" ] }, { "cell_type": "code", "execution_count": 40, "id": "cd992ed6", "metadata": {}, "outputs": [], "source": [ "binary_numbers = [p for p in product('01', repeat=n)]\n", "X = pd.DataFrame(binary_numbers).astype(int)" ] }, { "cell_type": "code", "execution_count": 41, "id": "eb096b22", "metadata": {}, "outputs": [], "source": [ "# compute profit\n", "def profit(x, profits):\n", " chosen = np.where(x == 1)\n", " return profits[chosen].sum()\n", "\n", "# compute violation\n", "def weight_violation(x, weights):\n", " chosen = np.where(x == 1)\n", " diff = weights[chosen].sum() - max_weight\n", " return diff if diff > 0 else 0" ] }, { "cell_type": "code", "execution_count": 42, "id": "42f6a678", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "f0", "rawType": "int64", "type": "integer" } ], "ref": "9a9552f1-0d35-4194-9b16-e1f4881d594d", "rows": [ [ "0", "0" ], [ "1", "45" ], [ "2", "83" ], [ "3", "128" ], [ "4", "12" ], [ "5", "57" ], [ "6", "95" ], [ "7", "140" ], [ "8", "51" ], [ "9", "96" ], [ "10", "134" ], [ "11", "179" ], [ "12", "63" ], [ "13", "108" ], [ "14", "146" ], [ "15", "191" ], [ "16", "78" ], [ "17", "123" ], [ "18", "161" ], [ "19", "206" ], [ "20", "90" ], [ "21", "135" ], [ "22", "173" ], [ "23", "218" ], [ "24", "129" ], [ "25", "174" ], [ "26", "212" ], [ "27", "257" ], [ "28", "141" ], [ "29", "186" ], [ "30", "224" ], [ "31", "269" ], [ "32", "71" ], [ "33", "116" ], [ "34", "154" ], [ "35", "199" ], [ "36", "83" ], [ "37", "128" ], [ "38", "166" ], [ "39", "211" ], [ "40", "122" ], [ "41", "167" ], [ "42", "205" ], [ "43", "250" ], [ "44", "134" ], [ "45", "179" ], [ "46", "217" ], [ "47", "262" ], [ "48", "149" ], [ "49", "194" ] ], "shape": { "columns": 1, "rows": 1024 } }, "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", "
f0
00
145
283
3128
412
......
1019626
1020510
1021555
1022593
1023638
\n", "

1024 rows × 1 columns

\n", "
" ], "text/plain": [ " f0\n", "0 0\n", "1 45\n", "2 83\n", "3 128\n", "4 12\n", "... ...\n", "1019 626\n", "1020 510\n", "1021 555\n", "1022 593\n", "1023 638\n", "\n", "[1024 rows x 1 columns]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F = pd.DataFrame()\n", "F['f0'] = X.apply(lambda x: profit(x, profits), axis=1)\n", "F" ] }, { "cell_type": "code", "execution_count": 43, "id": "a51a0bf4", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "v0", "rawType": "float64", "type": "float" } ], "ref": "b0e6da9a-fef9-4a2e-a404-172d09d721d6", "rows": [ [ "0", "0.0" ], [ "1", "0.0" ], [ "2", "0.0" ], [ "3", "0.0" ], [ "4", "0.0" ], [ "5", "0.0" ], [ "6", "0.0" ], [ "7", "0.0" ], [ "8", "0.0" ], [ "9", "0.0" ], [ "10", "0.0" ], [ "11", "0.0" ], [ "12", "0.0" ], [ "13", "0.0" ], [ "14", "0.0" ], [ "15", "0.0" ], [ "16", "0.0" ], [ "17", "0.0" ], [ "18", "0.0" ], [ "19", "0.0" ], [ "20", "0.0" ], [ "21", "0.0" ], [ "22", "0.0" ], [ "23", "0.0" ], [ "24", "0.0" ], [ "25", "0.0" ], [ "26", "0.0" ], [ "27", "0.0" ], [ "28", "0.0" ], [ "29", "0.0" ], [ "30", "0.0" ], [ "31", "0.0" ], [ "32", "0.0" ], [ "33", "0.0" ], [ "34", "0.0" ], [ "35", "0.0" ], [ "36", "0.0" ], [ "37", "0.0" ], [ "38", "0.0" ], [ "39", "0.0" ], [ "40", "0.0" ], [ "41", "0.0" ], [ "42", "0.0" ], [ "43", "0.0" ], [ "44", "0.0" ], [ "45", "0.0" ], [ "46", "0.0" ], [ "47", "0.0" ], [ "48", "0.0" ], [ "49", "0.0" ] ], "shape": { "columns": 1, "rows": 1024 } }, "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", "
v0
00.00
10.00
20.00
30.00
40.00
......
101937.75
102077.75
102186.75
102297.75
1023106.75
\n", "

1024 rows × 1 columns

\n", "
" ], "text/plain": [ " v0\n", "0 0.00\n", "1 0.00\n", "2 0.00\n", "3 0.00\n", "4 0.00\n", "... ...\n", "1019 37.75\n", "1020 77.75\n", "1021 86.75\n", "1022 97.75\n", "1023 106.75\n", "\n", "[1024 rows x 1 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "V = pd.DataFrame()\n", "V['v0'] = X.apply(lambda x: weight_violation(x, weights), axis=1)\n", "V" ] }, { "cell_type": "code", "execution_count": 44, "id": "886feecc", "metadata": {}, "outputs": [], "source": [ "easy_kp = {\n", " 'X': X,\n", " 'F': F,\n", " 'V': V,\n", " max: True\n", "}\n", "\n", "load_data(easy_kp)" ] }, { "cell_type": "code", "execution_count": 45, "id": "e8b593d2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({'v0_min': 0.0,\n", " 'v0_max': 106.75,\n", " 'v0_mean': 3.44970703125,\n", " 'v0_med': 0.0,\n", " 'v0_q1': 0.0,\n", " 'v0_q3': 0.0,\n", " 'v0_sd': 13.357994114263755,\n", " 'v0_skew': 4.768478928911753,\n", " 'v0_kurt': 24.55073996467836,\n", " 'v0_feas_rate': 0.896484375,\n", " 'overall_feas_rate': 0.896484375},\n", "
)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "distr_v(easy_kp)" ] }, { "cell_type": "markdown", "id": "875be2e6", "metadata": {}, "source": [ "## Hard knapsack\n", "\n", "- Small maximum weight\n", "- Weight and profit are correlated" ] }, { "cell_type": "code", "execution_count": 46, "id": "21771779", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 8, 8, 9, 20, 43, 43, 65, 69, 77, 85])" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# combination with repetition?\n", "rng = np.random.default_rng(seed=42)\n", "weights = rng.integers(l_bound, u_bound, size=10)\n", "weights.sort()\n", "weights" ] }, { "cell_type": "code", "execution_count": 47, "id": "8b19c5a6", "metadata": {}, "outputs": [], "source": [ "# max weight\n", "max_weight = (u_bound + l_bound) / 2" ] }, { "cell_type": "code", "execution_count": 48, "id": "d0998205", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([12, 45, 51, 52, 71, 73, 76, 78, 83, 97])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "profits = rng.integers(l_bound, u_bound, size=10)\n", "profits.sort()\n", "profits" ] }, { "cell_type": "code", "execution_count": 49, "id": "59bd1516", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "f0", "rawType": "int64", "type": "integer" } ], "ref": "5f304b9b-e0fe-4ac0-b33f-14c4bf10e07b", "rows": [ [ "0", "0" ], [ "1", "97" ], [ "2", "83" ], [ "3", "180" ], [ "4", "78" ], [ "5", "175" ], [ "6", "161" ], [ "7", "258" ], [ "8", "76" ], [ "9", "173" ], [ "10", "159" ], [ "11", "256" ], [ "12", "154" ], [ "13", "251" ], [ "14", "237" ], [ "15", "334" ], [ "16", "73" ], [ "17", "170" ], [ "18", "156" ], [ "19", "253" ], [ "20", "151" ], [ "21", "248" ], [ "22", "234" ], [ "23", "331" ], [ "24", "149" ], [ "25", "246" ], [ "26", "232" ], [ "27", "329" ], [ "28", "227" ], [ "29", "324" ], [ "30", "310" ], [ "31", "407" ], [ "32", "71" ], [ "33", "168" ], [ "34", "154" ], [ "35", "251" ], [ "36", "149" ], [ "37", "246" ], [ "38", "232" ], [ "39", "329" ], [ "40", "147" ], [ "41", "244" ], [ "42", "230" ], [ "43", "327" ], [ "44", "225" ], [ "45", "322" ], [ "46", "308" ], [ "47", "405" ], [ "48", "144" ], [ "49", "241" ] ], "shape": { "columns": 1, "rows": 1024 } }, "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", "
f0
00
197
283
3180
478
......
1019560
1020458
1021555
1022541
1023638
\n", "

1024 rows × 1 columns

\n", "
" ], "text/plain": [ " f0\n", "0 0\n", "1 97\n", "2 83\n", "3 180\n", "4 78\n", "... ...\n", "1019 560\n", "1020 458\n", "1021 555\n", "1022 541\n", "1023 638\n", "\n", "[1024 rows x 1 columns]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F = pd.DataFrame()\n", "F['f0'] = X.apply(lambda x: profit(x, profits), axis=1)\n", "F" ] }, { "cell_type": "code", "execution_count": 50, "id": "a8a20efa", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "v0", "rawType": "float64", "type": "float" } ], "ref": "fe828837-e4e8-4873-8e41-f8f458a35ffd", "rows": [ [ "0", "0.0" ], [ "1", "35.0" ], [ "2", "27.0" ], [ "3", "112.0" ], [ "4", "19.0" ], [ "5", "104.0" ], [ "6", "96.0" ], [ "7", "181.0" ], [ "8", "15.0" ], [ "9", "100.0" ], [ "10", "92.0" ], [ "11", "177.0" ], [ "12", "84.0" ], [ "13", "169.0" ], [ "14", "161.0" ], [ "15", "246.0" ], [ "16", "0.0" ], [ "17", "78.0" ], [ "18", "70.0" ], [ "19", "155.0" ], [ "20", "62.0" ], [ "21", "147.0" ], [ "22", "139.0" ], [ "23", "224.0" ], [ "24", "58.0" ], [ "25", "143.0" ], [ "26", "135.0" ], [ "27", "220.0" ], [ "28", "127.0" ], [ "29", "212.0" ], [ "30", "204.0" ], [ "31", "289.0" ], [ "32", "0.0" ], [ "33", "78.0" ], [ "34", "70.0" ], [ "35", "155.0" ], [ "36", "62.0" ], [ "37", "147.0" ], [ "38", "139.0" ], [ "39", "224.0" ], [ "40", "58.0" ], [ "41", "143.0" ], [ "42", "135.0" ], [ "43", "220.0" ], [ "44", "127.0" ], [ "45", "212.0" ], [ "46", "204.0" ], [ "47", "289.0" ], [ "48", "36.0" ], [ "49", "121.0" ] ], "shape": { "columns": 1, "rows": 1024 } }, "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", "
v0
00.0
135.0
227.0
3112.0
419.0
......
1019308.0
1020215.0
1021300.0
1022292.0
1023377.0
\n", "

1024 rows × 1 columns

\n", "
" ], "text/plain": [ " v0\n", "0 0.0\n", "1 35.0\n", "2 27.0\n", "3 112.0\n", "4 19.0\n", "... ...\n", "1019 308.0\n", "1020 215.0\n", "1021 300.0\n", "1022 292.0\n", "1023 377.0\n", "\n", "[1024 rows x 1 columns]" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "V = pd.DataFrame()\n", "V['v0'] = X.apply(lambda x: weight_violation(x, weights), axis=1)\n", "V" ] }, { "cell_type": "code", "execution_count": 51, "id": "a5a0b348", "metadata": {}, "outputs": [], "source": [ "hard_kp = {\n", " 'X': X,\n", " 'F': F,\n", " 'V': V,\n", " max: True\n", "}\n", "\n", "load_data(hard_kp)" ] }, { "cell_type": "code", "execution_count": 52, "id": "022b49ca", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({'v0_min': 0.0,\n", " 'v0_max': 377.0,\n", " 'v0_mean': 163.943359375,\n", " 'v0_med': 163.5,\n", " 'v0_q1': 106.0,\n", " 'v0_q3': 221.0,\n", " 'v0_sd': 80.36536019395639,\n", " 'v0_skew': 0.06657601903200383,\n", " 'v0_kurt': -0.5064531918475104,\n", " 'v0_feas_rate': 0.017578125,\n", " 'overall_feas_rate': 0.017578125},\n", "
)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "distr_v(hard_kp)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }