Commit 624d2195 authored by Aliaume Lopez's avatar Aliaume Lopez

Ajout images

parent 03d1592f
......@@ -125,7 +125,7 @@ logging.basicConfig(filename='approximations_run.log',
datefmt='%m/%d/%Y %I:%M:%S %p')
# Choix du fichier test
filename = "eil101"
filename = "tsp225"
probleme = read_tsp_file ("problemes/{}.tsp".format (filename))
graphe = probleme["GRAPH"]
......
......@@ -16,6 +16,33 @@ import mincut
import numpy as np
import scipy.optimize as scopt
import cvxpy as cvx
def minim(A_eq,b_eq, c, A_in = [], b_in = []):
A_eq = np.array (A_eq)
b_eq = np.array (b_eq)
c = np.array (c)
m,n = A_eq.shape
assert(n == len(c) and (m==len(b_eq)))
x = cvx.Variable(n)
objective = cvx.Minimize(cvx.sum_entries(c*x))
if(A_in == []):
constraints = [0 <= x, A_eq*x == b_eq]
else:
constraints = [0 <= x, A_eq*x == b_eq, A_in*x >= b_in]
prob = cvx.Problem(objective, constraints)
opt = prob.solve()
s = prob.status
valx = np.copy(x.value)
valx = np.array(np.transpose(valx)[0])
return({"status":s,"opt":opt,"x":valx})
def subsets(l):
"""
Retourne l'ensemble de sous ensembles
......@@ -333,8 +360,13 @@ def algorithme_separation (graphe, filename="default_separation_dual", maxiter=1
# On se demande si on a une bonne solution ou non
# logging.debug ("Solve dual problem")
# res2 = minim (A,b, [ - y for y in c ])
res1 = vrai_simplexe (A1,b1,c1)
res2 = vrai_simplexe (A,b, [ -y for y in c ])
logging.debug ("Dual value : {}".format (-1 * res2["fun"]))
print ("{} - {}".format (res1["fun"], -1 * res2["fun"]))
logging.debug ("CHECK if good primal solution")
edge_to_add = trouve_arete_a_ajouter (n,e_s,w,A,b,c,graphe, res2["x"])
logging.debug ("EDGE to add : {}".format (edge_to_add))
......@@ -387,7 +419,7 @@ def algorithme_separation (graphe, filename="default_separation_dual", maxiter=1
if __name__ == '__main__':
filename = "burma14"
filename = "ch150"
# initialisation du loggeur
logging.basicConfig(filename='dual_run.log',
level=logging.DEBUG,
......
......@@ -315,6 +315,10 @@ def algorithme_separation(graphe, filename="default_separation_output",epsilon =
return value,convert_to_edges (graphe, sol)
def primal_dual (graphe, filename="primal_dual", epsilon=0.0001):
pass
def test(filename):
"""
Un test de l'algorithme
......@@ -372,4 +376,4 @@ def test_separation_on_file (filename):
test_separation_on_file("hk48")
test_separation_on_file("tsp225")
......@@ -523,6 +523,28 @@ Implémenté dans NetworkX.
\end{frame}
\begin{frame}
\frametitle{Exemple d'historique}
\begin{exampleblock}{Sur un problème avec 225 points}
\begin{figure}
\centering
\begin{overlayarea}{6cm}{4cm}
\only<1>{\includegraphics[width=7cm]{../images/0CVX_tsp225_simple_1.png}}
\only<2>{\includegraphics[width=7cm]{../images/0CVX_tsp225_simple_11.png}}
\only<3>{\includegraphics[width=7cm]{../images/0CVX_tsp225_simple_21.png}}
\only<4>{\includegraphics[width=7cm]{../images/0CVX_tsp225_simple_31.png}}
\only<5>{\includegraphics[width=7cm]{../images/0CVX_tsp225_simple_41.png}}
\only<6>{\includegraphics[width=7cm]{../images/0CVX_tsp225_separationfinie.png}}
\only<7>{\includegraphics[width=7cm]{../images/0CVX_tsp225_approxPL.png}}
\only<8>{\includegraphics[width=7cm]{../images/00_APPROX_tsp225_approx2_2opt.png}}
\only<9>{\includegraphics[width=7cm]{../images/00_APPROX_tsp225_glouton_2opt.png}}
\end{overlayarea}
\caption{Le problème tsp225 de valeur optimale $3919$}
\end{figure}
\end{exampleblock}
\end{frame}
\begin{frame}
plus de résultats
\end{frame}
......@@ -536,7 +558,7 @@ Implémenté dans NetworkX.
\begin{equation} \label{eqn:dual}
\boxed{
\begin{array}{rll}
\textrm{Maximiser} & \displaystyle- \sum_{uv \in E'} \lambda_{1,uv} x_{uv} - 2 \sum_{u \in V} \nu_u + 2 \sum_{S \in W} \lambda_{3,S} \\
\textrm{Maximiser} & \displaystyle- \sum_{uv \in E'} \lambda_{1,uv} - 2 \sum_{u \in V} \nu_u + 2 \sum_{S \in W} \lambda_{3,S} \\
\textrm{Avec} & \lambda_1 \geq 0 \\
& \lambda_2 \geq 0 \\
& \lambda_3 \geq 0 \\
......@@ -564,14 +586,14 @@ Avec $D_{E'}$ la matirce d'incidence du graphe restreint à $E'$, et $G_{E'}$ la
En pratique~: on ajoute toutes les arêtes.
\begin{exampleblock}{Algorithme dual suivi de primal}
\begin{enumerate}
\item Calcul d'un sous ensemble $E'$ d'arête qui donne
une minoration avec la méthode du dual
\item Calcul d'une borne inférieure de plus
en plus précise en utilisant le primal
sur l'ensemble $E'$ d'arêtes
\end{enumerate}
Boucle~:
\begin{enumerate}
\item Calcul d'un sous ensemble $E'$ d'arête qui donne
une minoration avec la méthode du dual
\item Calcul d'une contrainte de \emph{sous-tour}
à ajouter via le calcul du primal
\end{enumerate}
\end{exampleblock}
\end{frame}
......
......@@ -512,7 +512,7 @@ L'expression du dual est alors simplement~:
\begin{equation} \label{eqn:dual}
\boxed{
\begin{array}{rll}
\textrm{max} & \displaystyle- \sum_{uv \in E'} \lambda_{1,uv} x_{uv} - 2 \sum_{u \in V} \nu_u + 2 \sum_{S \in W} \lambda_{3,S} \\
\textrm{max} & \displaystyle- \sum_{uv \in E'} \lambda_{1,uv} - 2 \sum_{u \in V} \nu_u + 2 \sum_{S \in W} \lambda_{3,S} \\
& \lambda_1 \geq 0 \\
& \lambda_2 \geq 0 \\
& \lambda_3 \geq 0 \\
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment