diff --git a/heldAndKarp.ipynb b/heldAndKarp.ipynb index 3907e9630960c50fca0d7e2550b8f5282778031c..d316978fddb7280334a598f44acebf1c886334d8 100644 --- a/heldAndKarp.ipynb +++ b/heldAndKarp.ipynb @@ -12,14 +12,6 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Precompiling Graphs [86223c79-3864-5bf0-83f7-82e725a168b6]\n", - "└ @ Base loading.jl:1260\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -32,16 +24,28 @@ "using LinearAlgebra\n", "using JuMP\n", "using Cbc\n", - "using Graphs\n", + "using LightGraphs\n", + "using GraphPlot\n", "\n", "println(\"Modules loaded\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "hk (generic function with 1 method)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "function hk(W)\n", " \n", @@ -55,18 +59,18 @@ " \n", " λ = zeros(n)\n", "\n", - " g = simple_graph(n-1, is_directed = false)\n", + " g = complete_graph(n-1)\n", " W_reduced = W[2:n,2:n]\n", " z = 0\n", " while z!=n # While not a tour\n", " \n", " # Minimum spanning tree (span_tree : st)\n", - " st = kruskal_minimum_spantree(g, W_reduced)[1]\n", - " \n", + " st = kruskal_mst(g, W_reduced)\n", + "\n", " # Connect vertex 1\n", - " m = Model(Cbc.Optimizer()) # PL(NE) Model\n", + " m = Model(Cbc.Optimizer) # PL(NE) Model\n", " \n", - " @variable(m, X[1:n, 1:n], Bin)\n", + " @variable(m, X[1:n,1:n], Bin)\n", " \n", " @objective(m, Min, \n", " 2*sum(λ[2:n]) + \n", @@ -74,7 +78,17 @@ " )\n", " \n", " @constraint(m, degreeRoot, sum(X[1,:]) == 2)\n", - " @constraint(m, spanningTree[u ∈ 2:n, v ∈ 2:n], X[u,v] == st[u,v])\n", + " for i ∈ 1:size(st, 1)\n", + " @constraint(m, X[src(st[i]), dst(st[i])] == 1)\n", + " end\n", + " #@constraint(m, spanningTree[i ∈ 1:size(st,1)], X[src(st[i]), dst(st[i])] == 1)\n", + " for u ∈ 1:n\n", + " for v ∈ 1:n\n", + " @constraint(m, X[u,v] == X[v,u])\n", + " end\n", + " end\n", + " \n", + " #@constraint(m, diagonalMatrix[u ∈ 1:n, v ∈ 1:n], X[u,v] == X[v,u])\n", " \n", " optimize!(m)\n", " \n", @@ -91,14 +105,97 @@ " # For the degree, we suppose a null diagonal, to be checked later on\n", " \n", " if z!=n # If not a tour, update\n", - " λ .= λ .+ 2.*(2.-D) # Experimenter d'autres règles\n", + " λ .= λ .+ 2 .* (2 .- D) # Experimenter d'autres règles\n", " end\n", " \n", " end\n", " \n", + " return value.(X)\n", " \n", "end" ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6×6 Array{Int64,2}:\n", + " 0 8 4 15 15 3\n", + " 8 0 5 15 2 15\n", + " 4 5 0 6 15 15\n", + " 15 15 6 0 5 3\n", + " 15 2 15 5 0 4\n", + " 3 15 15 3 4 0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "W = [\n", + " 0 8 4 15 15 3 ;\n", + " 8 0 5 15 2 15 ;\n", + " 4 5 0 6 15 15 ;\n", + " 15 15 6 0 5 3 ;\n", + " 15 2 15 5 0 4 ;\n", + " 3 15 15 3 4 0\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "S = hk(W)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "g = complete_graph(5)\n", + "gplot(g)\n", + "k = kruskal_mst(g, rand(5, 5))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for e in k\n", + " println(src(e), dst(e))\n", + "end\n", + "typeof(k)\n", + "for i ∈ 1:size(k,1)\n", + " println(src(k[i]), \" \", dst(k[i]))\n", + "end\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {