This repository has been archived on 2021-10-31. You can view files and clone it, but cannot push or open issues or pull requests.
AICup/Lectures/Student_lecture 3.ipynb

256 lines
62 KiB
Plaintext
Raw Normal View History

2020-10-01 16:03:04 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
2020-11-22 19:40:02 +00:00
"## Third Lab\n",
"\n",
"What we are going to do today:\n",
"- Introduce two optimizers for local search methods\n",
"- Use the optimizer with the methods defined before"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This cell below is simply importing some useful stuff for later"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import glob\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"from time import time as t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Optimizers\n",
"### 2opt\n",
"As we saw last time, we have 12 problems and two have an optimal solution"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"from src.utils import compute_length\n",
"\n",
"\n",
"def step2opt(solution, matrix_dist, distance):\n",
" seq_length = len(solution) - 1\n",
" tsp_sequence = np.array(solution)\n",
" uncrosses = 0\n",
" # TODO\n",
" for i in range(1, seq_length - 1):\n",
" \n",
" # END TODO\n",
" return tsp_sequence, distance, uncrosses\n",
"\n",
"\n",
"def swap2opt(tsp_sequence, i, j):\n",
" # TODO\n",
" \n",
" # END TODO\n",
" return new_tsp_sequence\n",
"\n",
"\n",
"def gain(i, j, tsp_sequence, matrix_dist):\n",
" old_link_len = (matrix_dist[tsp_sequence[i], tsp_sequence[i - 1]] + matrix_dist[\n",
" tsp_sequence[j], tsp_sequence[j + 1]])\n",
" changed_links_len = (matrix_dist[tsp_sequence[j], tsp_sequence[i - 1]] + matrix_dist[\n",
" tsp_sequence[i], tsp_sequence[j + 1]])\n",
" return - old_link_len + changed_links_len\n",
"\n",
"\n",
"def loop2opt(solution, instance, max_num_of_uncrosses=10000):\n",
" matrix_dist = instance.dist_matrix\n",
" new_len = compute_length(solution, matrix_dist)\n",
" new_tsp_sequence = np.copy(np.array(solution))\n",
" uncross = 0\n",
" # TODO\n",
" \n",
" # END TODO"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's test it"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"#############################\n",
"name: eil76\n",
"nPoints: 76\n",
"best_sol: 538.0\n",
"exist optimal: True\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from src.io_tsp import ProblemInstance\n",
"example_problem = \"../problems/eil76.tsp\"\n",
"p_inst = ProblemInstance(example_problem)\n",
"p_inst.print_info()\n",
"p_inst.plot_data()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from src.TSP_solver import TSPSolver\n",
"from src.constructive_algorithms import (\n",
" random_method,\n",
" nearest_neighbor,\n",
" best_nearest_neighbor,\n",
" multi_fragment_mf\n",
")\n",
"\n",
"available_solvers = {\n",
" \"random\": random_method,\n",
" \"nn\":nearest_neighbor,\n",
" \"best_nn\":best_nearest_neighbor,\n",
" \"multi_fragment\": multi_fragment_mf\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"### solving with ['nn'] ####\n",
"Error the solution of nn for problem eil76 is not valid\n",
"best solution with len 680.0 \n",
"with a total time of 0.0 seconds\n",
"solution found has a 26.39 % gap\n",
"0.08463191986083984\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" 7.43 % gap\n",
"with 23 number of uncrossed edges\n"
]
}
],
"source": [
"solver = TSPSolver(\"nn\", p_inst, available_solvers)\n",
"start = t()\n",
"solver.compute_solution(return_value=False, verbose=True)\n",
"end = t()\n",
"\n",
"solver.plot_solution()\n",
"print(f\"best solution with len {solver.found_length} \\nwith a total time of {np.round(end - start, 5)} seconds\")\n",
"print(f\"solution found has a {solver.gap} % gap\")\n",
"\n",
"start = t()\n",
"solution, new_length, uncross = loop2opt(solver.solution, p_inst)\n",
"end = t()\n",
"print(end - start)\n",
"solver.method = \"nn folowed by 2 opt\"\n",
"\n",
"assert solver.pass_and_check_if_solution_is_valid(solution), \"Solution non valid\"\n",
"solver.solved = True\n",
"solver.solution = solution\n",
"solver.plot_solution()\n",
"solver._gap()\n",
"print(f\" {solver.gap} % gap\")\n",
"print(f\"with {uncross} number of uncrossed edges\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.5opt\n",
"We will see it in the next Lecture"
2020-10-01 16:03:04 +00:00
]
}
],
"metadata": {
"kernelspec": {
2020-11-22 19:40:02 +00:00
"display_name": "PyCharm (AI2020BsC)",
2020-10-01 16:03:04 +00:00
"language": "python",
2020-11-22 19:40:02 +00:00
"name": "pycharm-61970693"
2020-10-01 16:03:04 +00:00
},
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
2020-11-22 19:40:02 +00:00
}