diff --git a/jastadd-mquat-benchmark/results/.gitignore b/jastadd-mquat-benchmark/results/.gitignore index 4da2c52ba7cf6cff45a5ef64dd0a3f1c4522826b..b60117a22d9f06d568c670cc8852bfeeab2b0746 100644 --- a/jastadd-mquat-benchmark/results/.gitignore +++ b/jastadd-mquat-benchmark/results/.gitignore @@ -1,5 +1,6 @@ * !.gitignore !jastadd-mquat-plots.ipynb +!vis_scenarios.ipynb !to-html.sh !fr diff --git a/jastadd-mquat-benchmark/results/jastadd-mquat-plots.ipynb b/jastadd-mquat-benchmark/results/jastadd-mquat-plots.ipynb index bdded81c25a5d39aa085864df26a9dcf08a78e29..ed4d32568649267edb91c91662050832377a0fb4 100644 --- a/jastadd-mquat-benchmark/results/jastadd-mquat-plots.ipynb +++ b/jastadd-mquat-benchmark/results/jastadd-mquat-plots.ipynb @@ -453,7 +453,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/jastadd-mquat-benchmark/results/vis_scenarios.ipynb b/jastadd-mquat-benchmark/results/vis_scenarios.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..cba9eeba50dd38d62d25c0da5548ba49fbdb7dc5 --- /dev/null +++ b/jastadd-mquat-benchmark/results/vis_scenarios.ipynb @@ -0,0 +1,1117 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: numpy in /home/rschoene/.local/lib/python3.6/site-packages\n", + "Requirement already satisfied: pandas in /home/rschoene/.local/lib/python3.6/site-packages\n", + "Requirement already satisfied: scipy in /home/rschoene/.local/lib/python3.6/site-packages\n", + "Requirement already satisfied: matplotlib in /home/rschoene/.local/lib/python3.6/site-packages\n", + "Requirement already satisfied: python-dateutil>=2 in /home/rschoene/.local/lib/python3.6/site-packages (from pandas)\n", + "Requirement already satisfied: pytz>=2011k in /usr/lib/python3.6/site-packages (from pandas)\n", + "Requirement already satisfied: cycler>=0.10 in /home/rschoene/.local/lib/python3.6/site-packages (from matplotlib)\n", + "Requirement already satisfied: six>=1.10 in /usr/lib/python3.6/site-packages (from matplotlib)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/lib/python3.6/site-packages (from matplotlib)\n" + ] + } + ], + "source": [ + "!pip3 install --user numpy pandas scipy matplotlib\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy as sp\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import colors as mcolors" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import glob" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ILP (Direct)', 'ILP (External)', 'Simple']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def toLabel(name):\n", + " if '-' in name:\n", + " tokens = name.split('-')\n", + " return '{} ({})'.format(tokens[0].upper(), tokens[1].title())\n", + " else:\n", + " return name.title()\n", + "\n", + "[toLabel(n) for n in ['ilp-direct', 'ilp-external', 'simple']]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "bar_width = 0.2\n", + "solver_names = ['ilp-direct', 'ilp-external', 'simple', 'mh-naive']\n", + "patterns = ['❌', '❌', '✔', '➖']\n", + "colors = [c[4:] for c in (sorted(mcolors.TABLEAU_COLORS.keys())) if 'dark'+c[4:] in mcolors.CSS4_COLORS]\n", + "colors.reverse()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def load(filename, show_head=False, name=None):\n", + " data = pd.read_csv(filename)\n", + " data['id'] = name or os.path.basename(os.path.splitext(filename)[0])\n", + " if show_head:\n", + " print(data.head())\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " when id tlc isc isd csc csd dep bi res \\\n", + "0 2018-06-07-16-49-57-992 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "1 2018-06-07-16-49-58-015 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "2 2018-06-07-18-04-42-518 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "3 2018-06-07-18-04-42-542 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "4 2018-06-07-18-04-42-568 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "\n", + " ... comp impl gen initObj name Gen Solved Obj \\\n", + "0 ... 1 1 23 226823.67 ilp-direct 17 2 226823.67 \n", + "1 ... 1 1 23 226823.67 ilp-external 0 22 226823.67 \n", + "2 ... 1 1 24 226823.67 ilp-direct 16 2 226823.67 \n", + "3 ... 1 1 24 226823.67 ilp-external 0 22 226823.67 \n", + "4 ... 1 1 0 226823.67 ilp-direct 0 0 226823.67 \n", + "\n", + " Valid TimeOut \n", + "0 True False \n", + "1 True False \n", + "2 True False \n", + "3 True False \n", + "4 True False \n", + "\n", + "[5 rows x 23 columns]\n" + ] + } + ], + "source": [ + "data = load('scenarios/0_trivial.csv', show_head=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>when</th>\n", + " <th>id</th>\n", + " <th>tlc</th>\n", + " <th>isc</th>\n", + " <th>isd</th>\n", + " <th>csc</th>\n", + " <th>csd</th>\n", + " <th>dep</th>\n", + " <th>bi</th>\n", + " <th>res</th>\n", + " <th>...</th>\n", + " <th>comp</th>\n", + " <th>impl</th>\n", + " <th>gen</th>\n", + " <th>initObj</th>\n", + " <th>name</th>\n", + " <th>Gen</th>\n", + " <th>Solved</th>\n", + " <th>Obj</th>\n", + " <th>Valid</th>\n", + " <th>TimeOut</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>2018-06-07-16-49-57-992</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>23</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-direct</td>\n", + " <td>17</td>\n", + " <td>2</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2018-06-07-16-49-58-015</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>23</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-external</td>\n", + " <td>0</td>\n", + " <td>22</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>2018-06-07-18-04-42-518</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>24</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-direct</td>\n", + " <td>16</td>\n", + " <td>2</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2018-06-07-18-04-42-542</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>24</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-external</td>\n", + " <td>0</td>\n", + " <td>22</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>2018-06-07-18-04-42-568</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-direct</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>2018-06-07-18-04-42-570</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-external</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>2018-06-07-18-04-42-576</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-direct</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>2018-06-07-18-04-42-578</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-external</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>2018-06-07-18-04-42-583</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-direct</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>2018-06-07-18-04-42-585</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-external</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>2018-06-07-18-04-42-590</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-direct</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>2018-06-07-18-04-42-592</td>\n", + " <td>0_trivial</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>1.0</td>\n", + " <td>...</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>226823.67</td>\n", + " <td>ilp-external</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>226823.67</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>12 rows × 23 columns</p>\n", + "</div>" + ], + "text/plain": [ + " when id tlc isc isd csc csd dep bi res \\\n", + "0 2018-06-07-16-49-57-992 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "1 2018-06-07-16-49-58-015 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "2 2018-06-07-18-04-42-518 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "3 2018-06-07-18-04-42-542 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "4 2018-06-07-18-04-42-568 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "5 2018-06-07-18-04-42-570 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "6 2018-06-07-18-04-42-576 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "7 2018-06-07-18-04-42-578 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "8 2018-06-07-18-04-42-583 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "9 2018-06-07-18-04-42-585 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "10 2018-06-07-18-04-42-590 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "11 2018-06-07-18-04-42-592 0_trivial 1 0 0 2 0 1 1 1.0 \n", + "\n", + " ... comp impl gen initObj name Gen Solved Obj \\\n", + "0 ... 1 1 23 226823.67 ilp-direct 17 2 226823.67 \n", + "1 ... 1 1 23 226823.67 ilp-external 0 22 226823.67 \n", + "2 ... 1 1 24 226823.67 ilp-direct 16 2 226823.67 \n", + "3 ... 1 1 24 226823.67 ilp-external 0 22 226823.67 \n", + "4 ... 1 1 0 226823.67 ilp-direct 0 0 226823.67 \n", + "5 ... 1 1 0 226823.67 ilp-external 0 2 226823.67 \n", + "6 ... 1 1 0 226823.67 ilp-direct 0 0 226823.67 \n", + "7 ... 1 1 0 226823.67 ilp-external 0 2 226823.67 \n", + "8 ... 1 1 0 226823.67 ilp-direct 0 0 226823.67 \n", + "9 ... 1 1 0 226823.67 ilp-external 0 2 226823.67 \n", + "10 ... 1 1 0 226823.67 ilp-direct 0 0 226823.67 \n", + "11 ... 1 1 0 226823.67 ilp-external 0 2 226823.67 \n", + "\n", + " Valid TimeOut \n", + "0 True False \n", + "1 True False \n", + "2 True False \n", + "3 True False \n", + "4 True False \n", + "5 True False \n", + "6 True False \n", + "7 True False \n", + "8 True False \n", + "9 True False \n", + "10 True False \n", + "11 True False \n", + "\n", + "[12 rows x 23 columns]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th></th>\n", + " <th>Gen</th>\n", + " <th>Solved</th>\n", + " </tr>\n", + " <tr>\n", + " <th>id</th>\n", + " <th>name</th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th rowspan=\"2\" valign=\"top\">0_trivial</th>\n", + " <th>ilp-direct</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ilp-external</th>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Gen Solved\n", + "id name \n", + "0_trivial ilp-direct 0 0\n", + " ilp-external 0 2" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[['id', 'name', 'Gen', 'Solved']].groupby(['id', 'name']).median()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th></th>\n", + " <th>Gen</th>\n", + " <th>Solved</th>\n", + " </tr>\n", + " <tr>\n", + " <th>id</th>\n", + " <th>name</th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th rowspan=\"2\" valign=\"top\">0_trivial</th>\n", + " <th>ilp-direct</th>\n", + " <td>5.5</td>\n", + " <td>0.666667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ilp-external</th>\n", + " <td>0.0</td>\n", + " <td>8.666667</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Gen Solved\n", + "id name \n", + "0_trivial ilp-direct 5.5 0.666667\n", + " ilp-external 0.0 8.666667" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[['id', 'name', 'Gen', 'Solved']].groupby(['id', 'name']).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "def add_gen_and_solve(ax, index, i, solver_name, df, suffix, printStatus=True):\n", + " dff = df[df['name'] == solver_name]\n", + " if dff.empty:\n", + " return\n", + " # check if all values in the 'Gen' column are not -1, i.e., this solver does use generation\n", + " does_generation = (df['Gen'] != -1).all()\n", + " if does_generation:\n", + " gen_value = df['Gen'].median()\n", + " print('%s has generation of %s' % (solver_name, gen_value))\n", + " ax.bar(index + i * bar_width, gen_value, bar_width,\n", + " #label=toLabel(solver_name) + \"[GEN]\",\n", + " color='dark' + colors[i])\n", + " else:\n", + " gen_value = 0\n", + " solv_value = df['Solved'].median()\n", + " solvBars = ax.bar(index + i * bar_width, solv_value, bar_width,\n", + " label=toLabel(solver_name),\n", + " bottom=gen_value,\n", + " color=colors[i])\n", + " return\n", + "\n", + " # old code ...\n", + " pattern_index = 2 * df.get(solver_name + 'Valid' + suffix) + df.get(solver_name + 'TimeOut' + suffix)\n", + " genTimes = df.get(solver_name + 'Gen' + suffix)\n", + " if genTimes is not None:\n", + " ax.bar(index + i * bar_width, genTimes, bar_width,\n", + " #label=toLabel(solver_name) + \"[GEN]\",\n", + " color='dark' + colors[i])\n", + " solvTimes = df.get(solver_name + 'Solved' + suffix)\n", + " solvBars = None\n", + " if solvTimes is not None:\n", + " solvBars = ax.bar(index + i * bar_width, solvTimes, bar_width,\n", + " label=toLabel(solver_name),\n", + " bottom=genTimes,\n", + " color=colors[i])\n", + " if printStatus and solvBars is not None:\n", + " for rect, pi in zip(solvBars, pattern_index):\n", + " height = rect.get_height()\n", + " #print(rect.get_y(), height)\n", + " ax.text(rect.get_x() + rect.get_width() / 2, max(5, rect.get_y() + height),\n", + " patterns[pi], fontname='symbola', \n", + " ha='center', va='bottom', color=colors[i])" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "def create_single(name, suffix='Hard'):\n", + " fig = plt.figure()\n", + " ax = fig.add_subplot(111)\n", + " data = load(name)\n", + " #index = np.arange(len(data.name))\n", + " index = np.arange(1)\n", + " for i, solver_name in enumerate(solver_names):\n", + " add_gen_and_solve(ax, index, i, solver_name, data, suffix, False)\n", + "\n", + " plt.xticks(rotation=90)\n", + " plt.title(\"Solving time for \" + name)\n", + " plt.xlabel('Solver')\n", + " plt.ylabel('Execution time [ms]')\n", + " plt.yscale(\"log\")\n", + "\n", + " plt.xticks(index + bar_width / len(solver_names), data.name.astype(str))\n", + " plt.legend()\n", + " plt.tight_layout()\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ilp-direct has generation of 0.0\n", + "ilp-external has generation of 0.0\n" + ] + }, + { + "data": { + "image/png": "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LcsRwUknncSsWbO22mfBggWZY12/fj3dunXLvH8eCjOKryUiYnZEnLf77rtXOhQzK6KI1n20kSFDhjTaN5U8peDaa69l5cqVTJgwodF9Ghx99NE8/PDDW8715ptv8txzz1FbW8vKlSuZP38+AGvXrmXTpk307NmTtWvXbnWO5557rtHRiG2pXSYoM7MiW7JkCf369dvyuPXWWzMdd/LJJ/Pggw9uVTZjxowtw8znz5/PfffdR+fOnZs9T9++fbnpppuYOnUqhx9+OGPHjmXx4sV07tyZW265hU9/+tMMHz6ck046ifXr1/M3f/M3LFq0aMsgCYD77ruPU089dcdegFaiptoz24PRo0eHZ9Q1s2effbZs30178aEPfYivfe1rDB48uGIxvPzyy0ybNo177rlnp8/V2Hsj6Q8RMbrcsa5BmZkVyFVXXcXKlSsrGsNf/vIXrrnmmorGAO10kISZWUdVW1tLbW1tRWNoGOVXaa5BmZlZITlBmZlZITlBmZlZIbXLPij/UNfMmvWzVp4iY1r7He3cnrXLGpR/qGtmRZPndBsjRoxgxIgRHHPMMc3GcPvtt7No0aKdfCbZNNyoduPGjYwbN45Nmza1+jXaZYIyM2uPdnS6jbq6Ourq6pg3b16z59+RBLWziaVz586MHz9+yw98W5MTlJlZG9uR6TZKXXTRRVx++eUA3HXXXYwbN4558+Zxxx13MGPGDEaMGMHSpUtZunQpEyZMYNSoURx//PFb7oI+ffp0LrjgAo466ig+//nPc9lll/Hxj3+cE044gYMPPphrr712y7UmTZrEqFGjGDp0KNddd12j8UyaNImZM2fu6MvRpHbZB2Vm1p61ZLqNhjugAwwdOpSZM2dy5ZVXMmbMGI4//ng+85nPMGfOHAYOHMjpp5/OaaedtuWGtOPHj+cHP/gBgwcP5rHHHuPCCy/k3nvvBaC+vp558+ZRU1PDZZddxuLFi7nvvvtYu3YttbW1fOpTn6JTp07ceOON7LXXXrz99tuMGTOGM888k969e28V47Bhw7bc3681OUGZmbWRHZluo7E7oHfv3p3rr7+ecePG8c1vfpOBAwdud65169Yxb948Jk+evKVsw4YNW5YnT55MTU3NlvVTTz2VLl260KVLF/bee29efvll+vXrx7XXXsttt90GwPLly3n++ee3S1A1NTV07tyZtWvX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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7fbab88a4ba8>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "create_single('scenarios/0_trivial.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [], + "source": [ + "def get_id(filename):\n", + " return int(os.path.basename(filename).split('_')[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "# merge csv files into one\n", + "def merge(*filenames):\n", + " result = pd.DataFrame(columns=['id', 'solver', 'gen', 'solve', 'valid', 'timeout'])\n", + " for filename in filenames:\n", + " print(filename)\n", + " # load the dateset of one scenario\n", + " df = load(filename)\n", + " if df.empty:\n", + " continue\n", + " # group by solver name, calculate mean for generation and solving time\n", + " # use reset_index to get \"normal\" dataframe back\n", + " df = df[['name', 'Gen', 'Solved', 'Valid', 'TimeOut']].groupby('name').mean().reset_index()\n", + " # rename columns\n", + " df = df.rename(index=str, columns={\"name\": \"solver\", \"Gen\": \"gen\",\n", + " \"Solved\": \"solve\", 'Valid': 'valid', 'TimeOut': 'timeout'})\n", + " # add id column with constant value equal to id of scenario\n", + " df['id'] = get_id(filename)\n", + " # append to result\n", + " result = result.append(df)\n", + " return result " + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "scenarios/0_trivial.csv\n", + "scenarios/1_small.csv\n", + "scenarios/2_small-many-hw.csv\n", + "scenarios/3_small-complex-sw.csv\n", + "scenarios/4_medium.csv\n", + "scenarios/5_medium-many-hw.csv\n", + "scenarios/6_medium-complex-sw.csv\n", + "scenarios/7_large.csv\n", + "scenarios/8_large-many-hw.csv\n", + "scenarios/9_large-complex-sw.csv\n", + "scenarios/10_huge.csv\n" + ] + }, + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gen</th>\n", + " <th>id</th>\n", + " <th>solve</th>\n", + " <th>solver</th>\n", + " <th>timeout</th>\n", + " <th>valid</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>5.500000</td>\n", + " <td>0</td>\n", + " <td>0.666667</td>\n", + " <td>ilp-direct</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>0.000000</td>\n", + " <td>0</td>\n", + " <td>8.666667</td>\n", + " <td>ilp-external</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>6.833333</td>\n", + " <td>1</td>\n", + " <td>0.000000</td>\n", + " <td>ilp-direct</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>1.666667</td>\n", + " <td>1</td>\n", + " <td>8.833333</td>\n", + " <td>ilp-external</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>7.666667</td>\n", + " <td>2</td>\n", + " <td>0.000000</td>\n", + " <td>ilp-direct</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3.500000</td>\n", + " <td>2</td>\n", + " <td>18.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>134.000000</td>\n", + " <td>3</td>\n", + " <td>5.666667</td>\n", + " <td>ilp-direct</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>59.833333</td>\n", + " <td>3</td>\n", + " <td>192.500000</td>\n", + " <td>ilp-external</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1583.166667</td>\n", + " <td>4</td>\n", + " <td>778017.333333</td>\n", + " <td>ilp-direct</td>\n", + " <td>0.833333</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>723.333333</td>\n", + " <td>4</td>\n", + " <td>801541.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>5442.166667</td>\n", + " <td>5</td>\n", + " <td>797046.333333</td>\n", + " <td>ilp-direct</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>-1.000000</td>\n", + " <td>5</td>\n", + " <td>-1.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>36913.500000</td>\n", + " <td>6</td>\n", + " <td>789360.333333</td>\n", + " <td>ilp-direct</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>-1.000000</td>\n", + " <td>6</td>\n", + " <td>-1.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>8528.666667</td>\n", + " <td>7</td>\n", + " <td>795679.500000</td>\n", + " <td>ilp-direct</td>\n", + " <td>1</td>\n", + " <td>0.166667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>-1.000000</td>\n", + " <td>7</td>\n", + " <td>-1.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>30775.166667</td>\n", + " <td>8</td>\n", + " <td>787172.166667</td>\n", + " <td>ilp-direct</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>-1.000000</td>\n", + " <td>8</td>\n", + " <td>-1.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>300019.000000</td>\n", + " <td>9</td>\n", + " <td>0.000000</td>\n", + " <td>ilp-direct</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>300649.000000</td>\n", + " <td>9</td>\n", + " <td>0.000000</td>\n", + " <td>ilp-external</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gen id solve solver timeout valid\n", + "0 5.500000 0 0.666667 ilp-direct False True\n", + "1 0.000000 0 8.666667 ilp-external False True\n", + "0 6.833333 1 0.000000 ilp-direct False True\n", + "1 1.666667 1 8.833333 ilp-external False True\n", + "0 7.666667 2 0.000000 ilp-direct False True\n", + "1 3.500000 2 18.000000 ilp-external False True\n", + "0 134.000000 3 5.666667 ilp-direct False True\n", + "1 59.833333 3 192.500000 ilp-external False True\n", + "0 1583.166667 4 778017.333333 ilp-direct 0.833333 1\n", + "1 723.333333 4 801541.000000 ilp-external 1 1\n", + "0 5442.166667 5 797046.333333 ilp-direct True True\n", + "1 -1.000000 5 -1.000000 ilp-external True False\n", + "0 36913.500000 6 789360.333333 ilp-direct True False\n", + "1 -1.000000 6 -1.000000 ilp-external True False\n", + "0 8528.666667 7 795679.500000 ilp-direct 1 0.166667\n", + "1 -1.000000 7 -1.000000 ilp-external 1 0\n", + "0 30775.166667 8 787172.166667 ilp-direct True False\n", + "1 -1.000000 8 -1.000000 ilp-external True False\n", + "0 300019.000000 9 0.000000 ilp-direct False False\n", + "1 300649.000000 9 0.000000 ilp-external False False" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged = merge(*sorted(glob.glob('scenarios/*.csv'), key=get_id))\n", + "merged" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}