fin de TP de métaprog mdr

This commit is contained in:
Laureηt 2021-12-09 12:03:00 +01:00
parent 35c0adfcfc
commit a5fdac8a7a
2 changed files with 21 additions and 120 deletions

View file

@ -12,6 +12,6 @@ while len(result) > 0:
knap = result.pop()[:-4]
victime = machines[i % len(machines)]
i+=1
cmd = f"""ssh lfainsin@{victime} -o "ConnectTimeout 3" -o "StrictHostKeyChecking no" "cd 2A/RO/tp2/ && tmux new-session -d 'julia test.jl {knap}.opb > {knap}.stdout'" """
cmd = f"""ssh lfainsin@{victime} -o "ConnectTimeout 3" -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" "cd 2A/RO/tp2/ && tmux new-session -d 'julia test.jl {knap}.opb > {knap}.stdout'" """
print(cmd)
os.system(cmd)

View file

@ -2042,12 +2042,16 @@
"\n",
"## Notre implémentation\n",
"\n",
"Pour l'implémentation de notre `branch and bound`, nous avons gardé la même même architecture que celle du sujet. Nous avons simplement ré-écrit les fonctions qui calculent la valeur objectif et la valeur de la capacité. \\\n",
"Pour l'implémentation de notre `branch and bound`, nous avons gardé la même même architecture que celle du sujet. Nous avons simplement ré-écrit les fonctions qui calculent la valeur objectif et la valeur de la capacité.\n",
"\n",
"Notre vecteur de décision $x$ est tel que $x\\in\\{-1,0,1\\}^n$ avec $n$ le nombre d'objets disponibles. $1$ et $0$ représente, respectivement, un objet non-pris ou non-pris. La valeur $-1$ représente un objet ou la décision n'a pas encore été faite.\n",
"Dans la fonction `Objetive`, si la valeur est a $-1$, on fait comme-ci elle était à $1$ pourcalculer une borne supérieur. Dans la fonction `Constraints` les $-1$ sont concidéré comme des $0$ pour avoir une borne inférieur de notre problème. \\\n",
"Dans la fonction `Objetive`, si la valeur est a $-1$, on fait comme-ci elle était à $1$ pourcalculer une borne supérieur. Dans la fonction `Constraints` les $-1$ sont concidéré comme des $0$ pour avoir une borne inférieur de notre problème.\n",
"\n",
"<br>\n",
"Pour l'exploration et la création de noeud, nous faisons une exploration des noeuds avec le plus de $1$ en premier. \\\n",
"Lorsque nous arrivons sur un noeud, nous l'enlevons de la pile des noeuds. Nous calculons ensuite si il est \"trivial\" ou si il dépasse déjà l'une des bornes ou si il est divisible. Dans le cas ou il est \"trivial\", nous calculons sa valeur et remplaçons la meilleure valeur si nécessaire. Dans le cas ou il dépasse une borne, nous l'abandonnons. Et enfin, si il est séparable, nous le séparons en deux en ajoutant la pile des noeuds les deux sous noeuds. \\\n",
"Pour l'exploration et la création de noeud, nous faisons une exploration des noeuds avec le plus de $1$ en premier.\n",
"\n",
"Lorsque nous arrivons sur un noeud, nous l'enlevons de la pile des noeuds. Nous calculons ensuite si il est \"trivial\" ou si il dépasse déjà l'une des bornes ou si il est divisible. Dans le cas ou il est \"trivial\", nous calculons sa valeur et remplaçons la meilleure valeur si nécessaire. Dans le cas ou il dépasse une borne, nous l'abandonnons. Et enfin, si il est séparable, nous le séparons en deux en ajoutant la pile des noeuds les deux sous noeuds.\n",
"\n",
"Exemple : $[(0,-1,-1)]$ -> $[(0,0,-1) ; (0,1,-1)]$\n",
"\n",
"## Justification de nos résultats\n",
@ -2056,125 +2060,22 @@
"\n",
"## Analyse\n",
"\n",
"```\n",
"lfainsin@bonite:~/2A/RO/tp2$ time julia test.jl data/weakly_correlated/knapPI_2_50_1000_1_-1396.opb\n",
"---data/weakly_correlated/knapPI_2_50_1000_1_-1396.opb---\n",
"Capacity = 995\n",
"Number of objects = 50\n",
"Expected optimal value = 1396\n",
"Maximum number of nodes = 1125899906842624\n",
"Nous avaons réalisé les calcules de deux manières différentes :\n",
"\n",
"Node n°96: BestProfit = 825\n",
"Node n°169: BestProfit = 844\n",
"Node n°243: BestProfit = 919\n",
"Node n°297: BestProfit = 943\n",
"Node n°1126: BestProfit = 946\n",
"Node n°1224: BestProfit = 1030\n",
"Node n°1456: BestProfit = 1045\n",
"Node n°2960: BestProfit = 1105\n",
"Node n°3342: BestProfit = 1120\n",
"Node n°4596: BestProfit = 1126\n",
"Node n°6129: BestProfit = 1207\n",
"Node n°10462: BestProfit = 1212\n",
"Node n°24382: BestProfit = 1278\n",
"Node n°418695: BestProfit = 1288\n",
"Node n°422566: BestProfit = 1308\n",
"Node n°436804: BestProfit = 1329\n",
"Node n°443759: BestProfit = 1337\n",
"Node n°446051: BestProfit = 1352\n",
"Node n°916081: BestProfit = 1360\n",
"Node n°1044425: BestProfit = 1396\n",
"- La première fois, nous mettions a jour les coordonnées de $x$ dans l'ordre des indices.\n",
"\n",
"--------------------------------------------------\n",
"Expected optimal value = 1396\n",
"Optimal value = 1396\n",
"Optimal x = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]\n",
"Maximum number of nodes = 1125899906842624\n",
"Nodes explored = 3053865\n",
"- La deuxième fois, nous avons d'abbord trié les vecteurs `weight` et `price` par leur rapport $prix / poids$. Cela revient a mettre a jour les coordonnées de $x$ dans l'ordre du meilleur rapport $prix / poids$. (NB : le vecteur résultat n'est pas ré-ordonné comme l'était les `price` et `weight` initialement)\n",
"\n",
"real 0m29,301s\n",
"user 0m29,372s\n",
"sys 0m0,809s\n",
"```\n",
"\n",
"```\n",
"lfainsin@bonite:~/2A/RO/tp2$ time julia test.jl data/weakly_correlated/knapPI_2_50_1000_1_-1396.opb\n",
"---data/weakly_correlated/knapPI_2_50_1000_1_-1396.opb---\n",
"Capacity = 995\n",
"Number of objects = 50\n",
"Expected optimal value = 1396\n",
"Maximum number of nodes = 1125899906842624\n",
"\n",
"Node n°93: BestProfit = 487\n",
"Node n°175: BestProfit = 626\n",
"Node n°293: BestProfit = 705\n",
"Node n°544: BestProfit = 810\n",
"Node n°1671: BestProfit = 815\n",
"Node n°1871: BestProfit = 836\n",
"Node n°2019: BestProfit = 872\n",
"Node n°2074: BestProfit = 886\n",
"Node n°3204: BestProfit = 918\n",
"Node n°4406: BestProfit = 950\n",
"Node n°4708: BestProfit = 952\n",
"Node n°4770: BestProfit = 978\n",
"Node n°8898: BestProfit = 990\n",
"Node n°9214: BestProfit = 1049\n",
"Node n°18160: BestProfit = 1059\n",
"Node n°18616: BestProfit = 1095\n",
"Node n°25906: BestProfit = 1099\n",
"Node n°27015: BestProfit = 1104\n",
"Node n°27130: BestProfit = 1119\n",
"Node n°27585: BestProfit = 1121\n",
"Node n°28076: BestProfit = 1125\n",
"Node n°43768: BestProfit = 1132\n",
"Node n°44203: BestProfit = 1134\n",
"Node n°59004: BestProfit = 1142\n",
"Node n°59465: BestProfit = 1144\n",
"Node n°59964: BestProfit = 1148\n",
"Node n°65923: BestProfit = 1154\n",
"Node n°66110: BestProfit = 1156\n",
"Node n°71779: BestProfit = 1186\n",
"Node n°71992: BestProfit = 1188\n",
"Node n°73054: BestProfit = 1190\n",
"Node n°73127: BestProfit = 1197\n",
"Node n°73146: BestProfit = 1241\n",
"Node n°152150: BestProfit = 1249\n",
"Node n°154060: BestProfit = 1251\n",
"Node n°179062: BestProfit = 1260\n",
"Node n°181638: BestProfit = 1261\n",
"Node n°181907: BestProfit = 1281\n",
"Node n°192060: BestProfit = 1298\n",
"Node n°202348: BestProfit = 1330\n",
"Node n°203862: BestProfit = 1341\n",
"Node n°206773: BestProfit = 1351\n",
"Node n°399253: BestProfit = 1365\n",
"Node n°619338: BestProfit = 1375\n",
"Node n°619695: BestProfit = 1377\n",
"Node n°842654: BestProfit = 1394\n",
"Node n°844341: BestProfit = 1396\n",
"\n",
"--------------------------------------------------\n",
"Expected optimal value = 1396\n",
"Optimal value = 1396\n",
"Optimal x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1]\n",
"Maximum number of nodes = 1125899906842624\n",
"Nodes explored = 846447\n",
"\n",
"real 0m4,348s\n",
"user 0m4,480s\n",
"sys 0m0,747s\n",
"```\n",
"\n",
"Nous avaons réalisé les calcules de deux manières différentes : \\\n",
"La première fois, nous mettions a jour les coordonnées de $x$ dans l'ordre des indices. \\\n",
"La deuxième fois, nous avons d'abbord trié les vecteurs `weight` et `price` par leur rapport $prix / poids$. Cela revient a mettre a jour les coordonnées de $x$ dans l'ordre du meilleur rapport $prix / poids$. (NB : le vecteur résultat n'est pas ré-ordonné comme l'était les `price` et `weight` initialement) \\\n",
"<br>\n",
"Pour le fichier `weakly_correlated/knapPI_2_50_1000_1_-1396`, nous avons comparé les résultats :\n",
"```\n",
"| Valeurs | Sans tri | Avec tri |\n",
"| :- | :- | :- |\n",
"| :------------- | :------- | :------- |\n",
"| Optimal value | 1396 | 1396 |\n",
"| user | 29.372s | 4.480s |\n",
"| Nodes explored | 3053865 | 846447 |\n"
"| Temps | 29.372 s | 4.480 s |\n",
"| Nodes explored | 3053865 | 846447 |\n",
"```\n",
"\n",
"\n"
]
},
{