{
"cells": [
{
"cell_type": "markdown",
"id": "4bbaa6f7",
"metadata": {},
"source": [
"# Survival Analysis for MIP Solver Running Time\n",
"\n",
"Inspired by the recent activity in open-source MIP solvers ([HiGHS](https://highs.dev/) is becoming stable after the 1.0 release and many users submitting bug reports, [SCIP](https://scipopt.org/index.php#news) has become open-source software), I wanted to revisit some folklore about running times.\n",
"\n",
"When solving difficult problems, in particular, when running computational experiments, we have to choose a timelimit to tell the solver when to give up solving the problem (that is finding a solution and proving its optimality). If the timelimit is chosen too small, many instances will not be solved within it and therefore we can not compare the running time between different solvers or settings. But if we set the timelimit to long, we might waste computational resources while waiting for a result that never comes.\n",
"\n",
"I remember the rule of thumb:\n",
"\n",
"> If the problem is not solved within an hours, it will also not be solved after four hours (or later).\n",
"\n",
"Let's see if we can use some data and [survival analysis](https://en.wikipedia.org/wiki/Survival_analysis) to confirm this rule."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "80d499b6",
"metadata": {},
"outputs": [],
"source": [
"from lifelines import KaplanMeierFitter\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0b7695ca",
"metadata": {},
"outputs": [],
"source": [
"def make_ax():\n",
" fig = plt.figure(figsize=(12, 9))\n",
" ax = fig.subplots()\n",
" return ax"
]
},
{
"cell_type": "markdown",
"id": "307d05af",
"metadata": {},
"source": [
"## Data Prep\n",
"\n",
"We use running time data from the [Mittelmann benchmarks](http://plato.la.asu.edu/bench.html) on the [MIPLIB](http://miplib.zib.de/) set of benchmark instances, a set of representative difficult MIP instances.\n",
"\n",
"From the solver comparison, we only look at the open-source solvers still in active development: HiGHS and SCIP.\n",
"The timelimit was set as 2 hours (7200 seconds), which we use as our window of observation. The tables contain either the time to optimality (solved instance) or some exceptional status (either timout or an error). We interpret all exceptions as [right-censored](https://en.wikipedia.org/wiki/Survival_analysis#Censoring) data."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "00ccff48",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" Runtime Finished\n",
"Solver Instance \n",
"HiGHS 30n20b8 537.0 1\n",
" 50v-10 5508.0 1\n",
" academictimetablesmall 7200.0 0\n",
" air05 22.0 1\n",
" app1-1 23.0 1"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Identify the instances that have been solved properly within the time limit.\n",
"# The others are right-censored, that is, we don't know how long it would have taken to solve them,\n",
"# including cases with an error status.\n",
"times[\"Finished\"] = 1 * (times[\"Runtime\"] < 7200)\n",
"times.head()"
]
},
{
"cell_type": "markdown",
"id": "cbd6244b",
"metadata": {},
"source": [
"## Kaplan-Meier Estimate\n",
"\n",
"We apply the [Kaplan-Meier](https://en.wikipedia.org/wiki/Kaplan%E2%80%93Meier_estimator) estimate to draw survival curves for each solver.\n",
"\n",
"These show the probability that an instance has survived for some time (ie, has not yet been solved to optimality), together with a 95% confidence interval.\n",
"\n",
"Note that the curves (one for each solver) start at 100% for time 0 and decrease monotonically. The curves stop at 7200s (the time limit set) but have not reached 0%, because of some instances that have not been solved.\n",
"\n",
"We can see a steep decline in the first few minutes, while the curves flattens to a long tail, as predicted by our rule of thumb."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d50a29ff",
"metadata": {},
"outputs": [],
"source": [
"def kaplan_meier(solver, ax=None):\n",
" kmf = KaplanMeierFitter()\n",
" kmf.fit(\n",
" times.loc[solver][\"Runtime\"],\n",
" event_observed=times.loc[solver][\"Finished\"],\n",
" label=solver,\n",
" )\n",
" return kmf.plot_survival_function(ax=ax)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9e024608",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAIWCAYAAABdvevgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABANUlEQVR4nO3de5Sc9X3n+c9XrZZaSC2p0Q3TjVrClgWyBYK0sQ1jC0XmIgfDbGwHjPck9mKz8RgvM4yzKzY2ccThjMeTw+7MCQlRPIzHezYmMTubkT1g4uWasQyhZWSEUGSEhKKWAd1ardalUV9++0fV03pUqq5+quq51FO/9+ucPqp6urrqp+dE5Otvf76/nznnBAAAAPhmStYLAAAAALJAIQwAAAAvUQgDAADASxTCAAAA8BKFMAAAALxEIQwAAAAvTc3qg+fPn++WLFmS1ccDAADAE1u2bDnknFtQej2zQnjJkiXq7e3N6uMBAADgCTPbW+460QgAAAB4iUIYAAAAXqIQBgAAgJcyywgDAACgfsPDw+rr69PQ0FDWS8lcW1uburq61NraGun1FMIAAAA51tfXp/b2di1ZskRmlvVyMuOc0+HDh9XX16elS5dG+hmiEQAAADk2NDSkefPmeV0ES5KZad68eVV1ximEAQAAcs73IjhQ7X2gEAYAAEBdZs2addbz733ve7rrrrskSQ8//LC+//3vj3/vwQcf1CWXXKKVK1fq8ssv1z333KPh4WFJhXMmDh06NP7aZ599VjfddJMk6Z133tFNN92kyy+/XCtWrNAnP/nJutdNRhgAAACJ+f3f//3xxw8//LD+7u/+Ti+88ILmzp2r06dP68EHH9SpU6cmHXC77777dN111+nuu++WJL3yyit1r41CGAAAAIn51re+pVmzZunrX/+6HnjgAT3//POaO3euJGnatGlav359pPd56623dP31148/v+yyy+peG4UwAABAk/jjH23Xa78+Fut7rrhwtv7oUx+o+JpTp05p1apV48+PHDmim2+++azXHDt2TMePH590R4c1a9aopaVFknT8+HFdcsklkqSvfvWruvXWW/Wnf/qn+sQnPqEvfvGLuvDCC2v4G51BRhgAAAB1mTFjhrZu3Tr+tWHDhkl/5sknn9SqVau0ZMkSbd68efz6M888M/4+3/3ud8ev33DDDdq9e7e+/OUv6x//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\n",
"text/plain": [
"