diff --git a/heldAndKarp_fluff.ipynb b/heldAndKarp_fluff.ipynb index e17c96bbb5b003132f9c950d427ef065d693ff6a..974f593dbc0a0aa7db8fd6ccf648774efd7a3919 100644 --- a/heldAndKarp_fluff.ipynb +++ b/heldAndKarp_fluff.ipynb @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -41,7 +41,7 @@ "connect_v1! (generic function with 1 method)" ] }, - "execution_count": 10, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -74,7 +74,40 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "adj_to_graph (generic function with 1 method)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function adj_to_graph(adj, n)\n", + " \n", + " t = SimpleGraph(n)\n", + " \n", + " for i in 1:n\n", + " for j in i:n\n", + " if adj[i, j] == 1\n", + " add_edge!(t, i, j)\n", + " end\n", + " end\n", + " end\n", + " \n", + " return t\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -83,7 +116,7 @@ "hk2 (generic function with 1 method)" ] }, - "execution_count": 24, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -107,8 +140,10 @@ " \n", " k = 0\n", " X = falses(n, n)\n", + " \n", + " converge = false\n", "\n", - " while z!=sum(W .* S) && k < 10 # While not a tour\n", + " while !converge && k < 10 # While not a tour\n", " k+=1\n", " print(z, \" \")\n", " \n", @@ -142,13 +177,16 @@ " end\n", " connect_v1!(X, W1, n)\n", " \n", + " one_tree = adj_to_graph(X)\n", + " \n", " z = 2*sum(λ[2:n]) + sum((W[u,v] - λ[u] - λ[v])*X[u,v] for u ∈ 1:n for v ∈ 1:u)\n", " \n", " #@constraint(m, spanningTree[i ∈ 1:size(st,1)], X[src(st[i]), dst(st[i])] == 1)\n", " \n", " D = [sum(X[u,:]) for u ∈ 1:n]\n", "\n", - " if z!=sum(W .* X)/2 # If not a tour, update\n", + " if is_cyclic(one_tree) # If not a tour, update\n", + " converge = true\n", " λ .= λ .+ 2 .* (2 .- D) # Experimenter d'autres règles\n", " end\n", " \n", @@ -163,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -178,7 +216,7 @@ " 3 15 15 3 4 0" ] }, - "execution_count": 4, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -196,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 34, "metadata": { "tags": [] }, @@ -205,37 +243,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "-1 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n", - "25.0 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n", - "sommes des poids des arêtes :25.0\n" + "-1 LightGraphs.SimpleGraphs.SimpleEdge{Int64}[Edge 1 => 4, Edge 3 => 5, Edge 4 => 5, Edge 1 => 2]\n" ] }, { - "data": { - "text/plain": [ - "(Bool[0 1 … 0 1; 1 0 … 1 0; … ; 0 1 … 0 1; 1 0 … 1 0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" + "ename": "LoadError", + "evalue": "MethodError: no method matching adj_to_graph(::BitArray{2})\nClosest candidates are:\n adj_to_graph(::Any, !Matched::Any) at In[31]:1", + "output_type": "error", + "traceback": [ + "MethodError: no method matching adj_to_graph(::BitArray{2})\nClosest candidates are:\n adj_to_graph(::Any, !Matched::Any) at In[31]:1", + "", + "Stacktrace:", + " [1] hk2(::Array{Int64,2}) at ./In[32]:56", + " [2] top-level scope at In[34]:1", + " [3] include_string(::Function, ::Module, ::String, ::String) at ./loading.jl:1091" + ] } ], "source": [