diff --git a/Projet_algo.ipynb b/Projet_algo.ipynb index ec4dffc..bd84c61 100644 --- a/Projet_algo.ipynb +++ b/Projet_algo.ipynb @@ -148,8 +148,7 @@ "id": "a6d398fa", "metadata": {}, "source": [ - "$x_{ijk}$​ : variable binaire qui vaut 1 si le camion $k$ se déplace de la ville $i$ à la ville $j$, et 0 sinon.
\n", - "$t_{ik}$​ : le moment où le camion $k$ arrive à la ville $i$." + "$x_{ijk}$​ : variable binaire qui vaut 1 si le camion $k$ se déplace de la ville $i$ à la ville $j$, et 0 sinon." ] }, { @@ -167,7 +166,7 @@ "id": "56652859", "metadata": {}, "source": [ - "Minimiser $Z=max_{⁡k∈K}t_{0k}​$" + "$$\\min \\sum_{k∈K} \\sum_{⁡i∈V} \\sum_{⁡j∈V} d_{ij} x_{ijk} $$" ] }, { @@ -176,29 +175,17 @@ "id": "a1465000", "metadata": {}, "source": [ - "### Contraintes et modèle mathématique du VRP:\n", + "### Contraintes du VRP:\n", "\n", - "L'objectif est de minimiser la distance totale parcourue :\n", + "- Chaque ville est visitée une fois et une seule fois :\n", + "$$\\sum_{⁡k \\in K} \\sum_{⁡j \\in V} x_{ijk} = 1, \\forall i \\in V, i \\ne 0$$\n", "\n", - "$$\\min \\sum_{k∈K} \\sum_{⁡i∈V} \\sum_{⁡j∈V} d_{ij} x_{ijk} $$\n", + "- Si un camion visite une ville, il doit en sortir :\n", + "$$\\sum_{i \\in V} x_{ijk} = \\sum_{j \\in V} x_{ijk}, \\forall k \\in K, \\forall i \\in V, \\forall j \\in V $$\n", + "
\n", "\n", - "Chaque ville est visitée une fois et une seule fois : $$\\sum_{⁡k∈K} \\sum_{⁡j∈V} x_{ijk} = 1, ∀i \\in V∖ \\{0\\}$$\n", - "\n", - "Si un camion se déplace de la ville ii à la ville $j$, alors le moment d'arrivée à la ville $j$ doit être plus grand que le moment d'arrivée à la ville $i$ plus le temps de trajet : $$t_{ik}​+d_{ij}​ \\leq t_{jk}​+M(1−x_{ijk}​),∀i,j \\in V,i \\ne j,∀k \\in K$$\n", - "\n", - "Les contraintes de flux pour garantir que si un camion entre dans une ville, il doit également en sortir :\n", - "$$i \\in V,i \\ne j∑​xijk​=i∈V,i \\ne j∑​xjik​=yjk​,∀j∈V,∀k∈K$$\n", - "\n", - "Les $t_{ik}$ doivent être continues :\n", - "\n", - "$t_{ik}\\le 0 $\n", - "\n", - "\n", - "\n", - "\n", - "### Dans le cas ou l'on veut rajouter les contraintes de fenêtres de livraison (Time Windows)\n", - "Les fenêtres de temps de livraison doivent être respectées : $$a_i​ \\leq t_{ik}​ \\leq b_i​, ∀i \\in V∖ \\{0 \\},∀k \\in K$$\n", - "\n" + "- Contrainte d'élimination des sous-tournées (afin de garantir que chaque camion effectue une tournée complète) :\n", + "$$\\sum_{i \\in S, j \\notin S} x_{ijk} \\geq 1, \\forall k \\in K, \\forall \\; sous-ensemble \\; S \\; de \\; V, 0 \\in S, S \\ne V $$" ] }, { @@ -207,7 +194,30 @@ "id": "7670fdf4-884c-4352-83fa-eed0c8b50074", "metadata": {}, "source": [ - "# Initialisation de la matrice" + "# Algorithme de résolution" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "45133ac2", + "metadata": {}, + "source": [ + "## Import des bibliothèques nécessaires" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "794657d7", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random, time, math\n", + "from tests.clustering import split_tour_across_clusters" ] }, {