768 lines
51 KiB
Plaintext
768 lines
51 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# TP 2-3 : Branch-and-bound applied to a knapsack problem"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Initialisation (à faire une seule fois)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 48,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
|
|
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.6/Project.toml`\n",
|
|
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.6/Manifest.toml`\n",
|
|
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
|
|
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.6/Project.toml`\n",
|
|
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.6/Manifest.toml`\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import Pkg; \n",
|
|
"Pkg.add(\"GraphRecipes\"); Pkg.add(\"Plots\"); \n",
|
|
"using GraphRecipes, Plots #only used to visualize the search tree at the end of the branch-and-bound"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Récupération des données"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 49,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"readKnaptxtInstance (generic function with 1 method)"
|
|
]
|
|
},
|
|
"execution_count": 49,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"function readKnaptxtInstance(filename)\n",
|
|
" price=[]\n",
|
|
" weight=[]\n",
|
|
" KnapCap=[]\n",
|
|
" open(filename) do f\n",
|
|
" for i in 1:3\n",
|
|
" tok = split(readline(f))\n",
|
|
" if (tok[1] == \"ListPrices=\")\n",
|
|
" for i in 2:(length(tok)-1)\n",
|
|
" push!(price,parse(Int64, tok[i]))\n",
|
|
" end\n",
|
|
" elseif(tok[1] == \"ListWeights=\")\n",
|
|
" for i in 2:(length(tok)-1)\n",
|
|
" push!(weight,parse(Int64, tok[i]))\n",
|
|
" end\n",
|
|
" elseif(tok[1] == \"Capacity=\")\n",
|
|
" push!(KnapCap, parse(Int64, tok[2]))\n",
|
|
" else\n",
|
|
" println(\"Unknown read :\", tok)\n",
|
|
" end \n",
|
|
" end\n",
|
|
" end\n",
|
|
" capacity=KnapCap[1]\n",
|
|
" return price, weight, capacity\n",
|
|
"end"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Procédure d'application des tests de sondabilités TA, TO et TR pour le cas de la relaxation linéaire"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 50,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"TestsSondabilite_relaxlin (generic function with 1 method)"
|
|
]
|
|
},
|
|
"execution_count": 50,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"function TestsSondabilite_relaxlin(model2, x, varsbin, BestProfit, Bestsol)\n",
|
|
" TA, TO, TR = false, false, false\n",
|
|
" if (termination_status(model2) == MOI.INFEASIBLE)#Test de faisabilite\n",
|
|
" TA=true\n",
|
|
" println(\"TA\")\n",
|
|
" elseif (objective_value(model2) <= BestProfit) #Test d'optimalite\n",
|
|
" TO=true\n",
|
|
" println(\"TO\")\n",
|
|
" elseif ( prod(abs.([round.(v, digits=0) for v in value.(varsbin)]-value.(varsbin)) .<= fill(10^-5, size(varsbin))) \n",
|
|
" ) #Test de resolution\n",
|
|
" TR=true\n",
|
|
" println(\"TR\")\n",
|
|
" #if (value(benef) >= BestProfit)\n",
|
|
" if (objective_value(model2) >= BestProfit)\n",
|
|
" Bestsol = value.(x)\n",
|
|
" #BestProfit=value(benef)\n",
|
|
" BestProfit=objective_value(model2)\n",
|
|
" end\n",
|
|
" else\n",
|
|
" println(\"non sondable\")\n",
|
|
" end\n",
|
|
" TA, TO, TR, Bestsol, BestProfit\n",
|
|
"end"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Procédure de séparation et stratégie d'exploration permettant de se placer au prochain noeud à traiter"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 51,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"ExplorerAutreNoeud_relaxlin (generic function with 1 method)"
|
|
]
|
|
},
|
|
"execution_count": 51,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"function SeparerNoeud_relaxlin(varsshouldbebinary, listvars, listvals)\n",
|
|
" # le noeud est non-sondable. Appliquer le critère de séparation pour le séparer en sous-noeuds \n",
|
|
" # et choisir un noeud-fils le plus à gauche \n",
|
|
" \n",
|
|
" #find a fractionnal variable\n",
|
|
" i, var = 1, 0\n",
|
|
" while ((i <= length(varsshouldbebinary)) && (var==0))\n",
|
|
" #if (varsshouldbebinary[i] ∉ listvars)\n",
|
|
" if (abs(round(value(varsshouldbebinary[i]), digits=0) - value(varsshouldbebinary[i]) ) >= 10^-5)\n",
|
|
" var=varsshouldbebinary[i]\n",
|
|
" end\n",
|
|
" i+=1\n",
|
|
" end\n",
|
|
" \n",
|
|
" #=\n",
|
|
" #find most fractionnal variable ?\n",
|
|
" i, var, maxfrac = -1, 0, 0.0\n",
|
|
" for i in 1:length(varsshouldbebinary)\n",
|
|
" if (abs(round(value(varsshouldbebinary[i]), digits=0) - value(varsshouldbebinary[i]) ) >= maxfrac) \n",
|
|
" #if a variable is more fractinonal\n",
|
|
" var=varsshouldbebinary[i]\n",
|
|
" maxfrac=abs(round(value(varsshouldbebinary[i]), digits=0) - value(varsshouldbebinary[i]) )\n",
|
|
" #println(i, \" \", var, \" \", maxfrac)\n",
|
|
" end\n",
|
|
" end\n",
|
|
" =#\n",
|
|
" \n",
|
|
"\n",
|
|
" set_lower_bound(var,1.0)\n",
|
|
" set_upper_bound(var,1.0)\n",
|
|
"\n",
|
|
" push!(listvars,var) #stocker l'identite de la variable choisie pour la séparation\n",
|
|
" push!(listvals,1.0) #stocker la branche choisie, identifiee par la valeur de la variable choisie\n",
|
|
" listvars, listvals\n",
|
|
"end\n",
|
|
"\n",
|
|
"\n",
|
|
"function ExplorerAutreNoeud_relaxlin(listvars, listvals, listnodes)\n",
|
|
" #this node is sondable, go back to parent node then right child if possible\n",
|
|
" \n",
|
|
" stop=false\n",
|
|
" #check if we are not at the root node\n",
|
|
" if (length(listvars)>= 1)\n",
|
|
" #go back to parent node\n",
|
|
" var=pop!(listvars)\n",
|
|
" theval=pop!(listvals)\n",
|
|
" tmp=pop!(listnodes)\n",
|
|
" set_lower_bound(var,0.0)\n",
|
|
" set_upper_bound(var,1.0)\n",
|
|
"\n",
|
|
" #go to right child if possible, otherwise go back to parent\n",
|
|
" while ( (theval==0.0) && (length(listvars)>= 1))\n",
|
|
" var=pop!(listvars)\n",
|
|
" theval=pop!(listvals)\n",
|
|
" tmp=pop!(listnodes)\n",
|
|
" set_lower_bound(var,0.0) \n",
|
|
" set_upper_bound(var,1.0)\n",
|
|
" end\n",
|
|
" if theval==1.0\n",
|
|
" set_lower_bound(var,0.0)\n",
|
|
" set_upper_bound(var,0.0)\n",
|
|
" push!(listvars,var)\n",
|
|
" push!(listvals,0.0)\n",
|
|
" else\n",
|
|
" println(\"\\nFINISHED\")\n",
|
|
" stop=true\n",
|
|
" end\n",
|
|
" else\n",
|
|
" #the root node was sondable\n",
|
|
" println(\"\\nFINISHED\")\n",
|
|
" stop=true\n",
|
|
" end\n",
|
|
" listvars, listvals, listnodes, stop \n",
|
|
"end"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Création de la relaxation linéaire (= modèle associé au noeud 0): <span style=\"color:red\"> SECTION A SUPPRIMER !!!! </span>\n",
|
|
"\n",
|
|
"<span style=\"color:red\"> Cette section est à commenter/supprimer et remplacer par vos propres calculs de bornes supérieures et autres, par exemple basées sur les bornes 1 et 2 vues en cours, ou d'autres calculs de bornes de votre choix/conception validés au préalable par votre encadrant/e de TP </span>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 52,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
|
|
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.6/Project.toml`\n",
|
|
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.6/Manifest.toml`\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"Pkg.add(\"Clp\");\n",
|
|
"using JuMP, Clp"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 53,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"CreationModeleLP (generic function with 1 method)"
|
|
]
|
|
},
|
|
"execution_count": 53,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"function CreationModeleLP(price, weight, capacity)\n",
|
|
"# ROOT NODE\n",
|
|
" \n",
|
|
" model2 = Model(Clp.Optimizer) # set optimizer\n",
|
|
" set_optimizer_attribute(model2, \"LogLevel\", 0) #don't display anything during solve\n",
|
|
" set_optimizer_attribute(model2, \"Algorithm\", 4) #LP solver chosen is simplex\n",
|
|
"\n",
|
|
" # define x variables as CONTINUOUS (recall that it is not possible to define binary variables in Clp)\n",
|
|
" @variable(model2, 0 <= x[i in 1:4] <= 1)\n",
|
|
" varsshouldbebinary=[x[1] x[2] x[3] x[4]]\n",
|
|
"\n",
|
|
" # define objective function\n",
|
|
" @objective(model2, Max, sum(price[i]*x[i] for i in 1:4))\n",
|
|
"\n",
|
|
" # define the capacity constraint \n",
|
|
" @constraint(model2, sum(weight[i]*x[i] for i in 1:4) <= capacity)\n",
|
|
"\n",
|
|
" println(model2)\n",
|
|
"\n",
|
|
" return model2, x, varsshouldbebinary\n",
|
|
"end\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Boucle principale : résoudre la relaxation linéaire, appliquer les tests de sondabilité, identifier le prochain noeud, répéter."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 54,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"SolveKnapInstance (generic function with 1 method)"
|
|
]
|
|
},
|
|
"execution_count": 54,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"function SolveKnapInstance(filename)\n",
|
|
"\n",
|
|
" if (split(filename,\"/\")[end] != \"test.opb\")\n",
|
|
" println(\"This version of the code works only for the test instance !!!!\")\n",
|
|
" else\n",
|
|
" price, weight, capacity = readKnaptxtInstance(filename)\n",
|
|
" model2, x, varsshouldbebinary = CreationModeleLP(price, weight, capacity)\n",
|
|
" \n",
|
|
" #create the structure to memorize the search tree for visualization at the end\n",
|
|
" trParentnodes=Int64[] #will store orig node of arc in search tree\n",
|
|
" trChildnodes=Int64[] #will store destination node of arc in search tree\n",
|
|
" trNamenodes=[] #will store names of nodes in search tree\n",
|
|
" \n",
|
|
" #intermediate structure to navigate in the search tree\n",
|
|
" listvars=[]\n",
|
|
" listvals=[]\n",
|
|
" listnodes=[]\n",
|
|
"\n",
|
|
" BestProfit=-1\n",
|
|
" Bestsol=[]\n",
|
|
"\n",
|
|
" current_node_number=0\n",
|
|
" stop = false\n",
|
|
"\n",
|
|
" while (!stop)\n",
|
|
"\n",
|
|
" println(\"\\nNode number \", current_node_number, \": \\n-----\\n\", model2)\n",
|
|
"\n",
|
|
" #Update the search tree\n",
|
|
" push!(trNamenodes,current_node_number+1) \n",
|
|
" if (length(trNamenodes)>=2)\n",
|
|
" push!(trParentnodes,listnodes[end]+1) # +1 because the 1st node is \"node 0\"\n",
|
|
" push!(trChildnodes, current_node_number+1) # +1 because the 1st node is \"node 0\"\n",
|
|
" end\n",
|
|
" push!(listnodes, current_node_number)\n",
|
|
"\n",
|
|
"\n",
|
|
" print(\"Solve model2 to compute the bounds of the current node: start ... \")\n",
|
|
" status = optimize!(model2)\n",
|
|
" println(\"... end\")\n",
|
|
"\n",
|
|
" print(\"\\nSolution relax lin\"); \n",
|
|
" if (termination_status(model2) == MOI.INFEASIBLE)#(has_values(model2))\n",
|
|
" print(\" : NOT AVAILABLE (probably infeasible or ressources limit reached)\")\n",
|
|
" else\n",
|
|
" [print(\"\\t\", name(v),\"=\",value(v)) for v in all_variables(model2)] \n",
|
|
" end\n",
|
|
" println(\" \"); println(\"\\nPrevious Solution memorized \", Bestsol, \" with bestprofit \", BestProfit, \"\\n\")\n",
|
|
"\n",
|
|
" TA, TO, TR, Bestsol, BestProfit = TestsSondabilite_relaxlin(model2, x, varsshouldbebinary, BestProfit, Bestsol)\n",
|
|
"\n",
|
|
" is_node_sondable = TA || TO || TR\n",
|
|
"\n",
|
|
" if (!is_node_sondable)\n",
|
|
" listvars, listvals = SeparerNoeud_relaxlin(varsshouldbebinary, listvars, listvals)\n",
|
|
" else\n",
|
|
" listvars, listvals, listnodes, stop = ExplorerAutreNoeud_relaxlin(listvars, listvals, listnodes)\n",
|
|
" end\n",
|
|
"\n",
|
|
" current_node_number = current_node_number + 1\n",
|
|
" end\n",
|
|
"\n",
|
|
" println(\"\\n******\\n\\nOptimal value = \", BestProfit, \"\\n\\nOptimal x=\", Bestsol)\n",
|
|
"\n",
|
|
" return BestProfit, Bestsol, trParentnodes, trChildnodes, trNamenodes\n",
|
|
" end\n",
|
|
"\n",
|
|
"end\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Affichage du résultat final"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 55,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"\n",
|
|
"Node number 0: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.857142857142857\tx[2]=1.0\tx[3]=0.0\tx[4]=0.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized Any[] with bestprofit -1\n",
|
|
"\n",
|
|
"non sondable\n",
|
|
"\n",
|
|
"Node number 1: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 1.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=1.0\tx[2]=0.7500000000000001\tx[3]=0.0\tx[4]=0.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized Any[] with bestprofit -1\n",
|
|
"\n",
|
|
"non sondable\n",
|
|
"\n",
|
|
"Node number 2: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 1.0\n",
|
|
" x[2] ≥ 1.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin : NOT AVAILABLE (probably infeasible or ressources limit reached) \n",
|
|
"\n",
|
|
"Previous Solution memorized Any[] with bestprofit -1\n",
|
|
"\n",
|
|
"TA\n",
|
|
"\n",
|
|
"Node number 3: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 1.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 0.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=1.0\tx[2]=0.0\tx[3]=0.0\tx[4]=0.6 \n",
|
|
"\n",
|
|
"Previous Solution memorized Any[] with bestprofit -1\n",
|
|
"\n",
|
|
"non sondable\n",
|
|
"\n",
|
|
"Node number 4: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 1.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 1.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 0.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin : NOT AVAILABLE (probably infeasible or ressources limit reached) \n",
|
|
"\n",
|
|
"Previous Solution memorized Any[] with bestprofit -1\n",
|
|
"\n",
|
|
"TA\n",
|
|
"\n",
|
|
"Node number 5: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 1.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 1.0\n",
|
|
" x[2] ≤ 0.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 0.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=1.0\tx[2]=0.0\tx[3]=1.0\tx[4]=0.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized Any[] with bestprofit -1\n",
|
|
"\n",
|
|
"TR\n",
|
|
"\n",
|
|
"Node number 6: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.0\tx[2]=1.0\tx[3]=0.3333333333333332\tx[4]=1.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"non sondable\n",
|
|
"\n",
|
|
"Node number 7: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 1.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.0\tx[2]=1.0\tx[3]=1.0\tx[4]=0.6000000000000001 \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"non sondable\n",
|
|
"\n",
|
|
"Node number 8: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 1.0\n",
|
|
" x[4] ≥ 1.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.0\tx[2]=0.5\tx[3]=1.0\tx[4]=1.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"non sondable\n",
|
|
"\n",
|
|
"Node number 9: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 1.0\n",
|
|
" x[3] ≥ 1.0\n",
|
|
" x[4] ≥ 1.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin : NOT AVAILABLE (probably infeasible or ressources limit reached) \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"TA\n",
|
|
"\n",
|
|
"Node number 10: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 1.0\n",
|
|
" x[4] ≥ 1.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 0.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.0\tx[2]=0.0\tx[3]=1.0\tx[4]=1.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"TO\n",
|
|
"\n",
|
|
"Node number 11: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 1.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 1.0\n",
|
|
" x[4] ≤ 0.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.0\tx[2]=1.0\tx[3]=1.0\tx[4]=0.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"TO\n",
|
|
"\n",
|
|
"Node number 12: \n",
|
|
"-----\n",
|
|
"Max 42 x[1] + 40 x[2] + 12 x[3] + 25 x[4]\n",
|
|
"Subject to\n",
|
|
" 7 x[1] + 4 x[2] + 3 x[3] + 5 x[4] ≤ 10.0\n",
|
|
" x[1] ≥ 0.0\n",
|
|
" x[2] ≥ 0.0\n",
|
|
" x[3] ≥ 0.0\n",
|
|
" x[4] ≥ 0.0\n",
|
|
" x[1] ≤ 0.0\n",
|
|
" x[2] ≤ 1.0\n",
|
|
" x[3] ≤ 0.0\n",
|
|
" x[4] ≤ 1.0\n",
|
|
"\n",
|
|
"Solve model2 to compute the bounds of the current node: start ... ... end\n",
|
|
"\n",
|
|
"Solution relax lin\tx[1]=0.0\tx[2]=1.0\tx[3]=0.0\tx[4]=1.0 \n",
|
|
"\n",
|
|
"Previous Solution memorized [1.0, 0.0, 1.0, 0.0] with bestprofit 54.0\n",
|
|
"\n",
|
|
"TR\n",
|
|
"\n",
|
|
"FINISHED\n",
|
|
"\n",
|
|
"******\n",
|
|
"\n",
|
|
"Optimal value = 65.0\n",
|
|
"\n",
|
|
"Optimal x=[0.0, 1.0, 0.0, 1.0]\n",
|
|
"\n",
|
|
"******\n",
|
|
"\n",
|
|
"Optimal value = 65.0\n",
|
|
"\n",
|
|
"Optimal x=[0.0, 1.0, 0.0, 1.0]\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n<defs>\n <clipPath id=\"clip990\">\n <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n </clipPath>\n</defs>\n<path clip-path=\"url(#clip990)\" d=\"\nM0 1600 L2400 1600 L2400 0 L0 0 Z\n \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<defs>\n <clipPath id=\"clip991\">\n <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n </clipPath>\n</defs>\n<path clip-path=\"url(#clip990)\" d=\"\nM447.244 1552.76 L1952.76 1552.76 L1952.76 47.2441 L447.244 47.2441 Z\n \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<defs>\n <clipPath id=\"clip992\">\n <rect x=\"447\" y=\"47\" width=\"1507\" height=\"1507\"/>\n </clipPath>\n</defs>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1206.87,262.317 1206.11,271.046 1203.92,279.317 1200.39,287.164 1195.64,294.623 1189.77,301.725 1182.88,308.506 1175.09,314.998 1166.5,321.237 1157.22,327.255 \n 1147.35,333.087 1137,338.766 1126.28,344.327 1115.29,349.804 1104.14,355.229 1092.94,360.638 1081.79,366.063 1070.8,371.539 1060.08,377.1 1049.73,382.78 \n 1039.86,388.612 1030.57,394.63 1021.98,400.869 1014.19,407.361 1007.31,414.142 1001.44,421.244 996.683,428.702 993.156,436.55 990.962,444.821 990.207,453.55 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 990.207,453.55 990.303,464.517 990.58,475.71 991.027,487.11 991.628,498.703 992.371,510.471 993.242,522.397 994.228,534.464 995.315,546.657 996.49,558.958 \n 997.739,571.351 999.049,583.819 1000.41,596.345 1001.8,608.913 1003.21,621.505 1004.62,634.107 1006.04,646.699 1007.43,659.267 1008.78,671.793 1010.09,684.261 \n 1011.34,696.654 1012.52,708.955 1013.6,721.148 1014.59,733.215 1015.46,745.141 1016.2,756.909 1016.81,768.501 1017.25,779.902 1017.53,791.095 1017.63,802.062 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 990.207,453.55 989.616,464.256 987.897,474.896 985.136,485.477 981.414,496.001 976.816,506.475 971.425,516.903 965.324,527.29 958.597,537.64 951.327,547.959 \n 943.599,558.252 935.494,568.522 927.098,578.776 918.493,589.018 909.762,599.252 900.99,609.484 892.26,619.718 883.654,629.96 875.258,640.214 867.154,650.484 \n 859.425,660.777 852.155,671.096 845.428,681.446 839.328,691.833 833.936,702.261 829.338,712.734 825.616,723.259 822.855,733.839 821.136,744.48 820.545,755.186 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 820.545,755.186 819.994,764.197 818.391,773.092 815.816,781.882 812.345,790.573 808.056,799.175 803.028,807.696 797.339,816.145 791.065,824.529 784.285,832.859 \n 777.078,841.141 769.52,849.386 761.689,857.6 753.664,865.794 745.522,873.974 737.341,882.15 729.199,890.331 721.173,898.524 713.343,906.739 705.785,914.983 \n 698.577,923.265 691.797,931.595 685.524,939.98 679.834,948.428 674.806,956.949 670.518,965.551 667.047,974.243 664.471,983.032 662.869,991.928 662.317,1000.94 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 820.545,755.186 820.492,762.912 820.337,770.798 820.087,778.832 819.751,787.003 819.336,795.299 818.849,803.708 818.298,812.217 817.69,820.816 817.034,829.492 \n 816.336,838.233 815.604,847.028 814.846,855.864 814.069,864.73 813.28,873.614 812.488,882.504 811.7,891.388 810.923,900.254 810.164,909.09 809.433,917.885 \n 808.735,926.626 808.078,935.302 807.471,943.901 806.92,952.411 806.433,960.819 806.018,969.115 805.681,977.286 805.432,985.321 805.277,993.207 805.223,1000.93 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1206.87,262.317 1207.51,272.952 1209.39,283.458 1212.4,293.845 1216.46,304.121 1221.48,314.297 1227.37,324.382 1234.02,334.386 1241.37,344.318 1249.3,354.188 \n 1257.73,364.005 1266.58,373.779 1275.74,383.52 1285.14,393.237 1294.66,402.939 1304.24,412.637 1313.77,422.339 1323.16,432.056 1332.32,441.797 1341.17,451.571 \n 1349.6,461.388 1357.53,471.258 1364.88,481.19 1371.54,491.194 1377.42,501.279 1382.44,511.455 1386.5,521.731 1389.51,532.118 1391.39,542.624 1392.03,553.259 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1392.03,553.259 1392.63,561.673 1394.38,569.867 1397.18,577.858 1400.95,585.662 1405.62,593.295 1411.09,600.773 1417.28,608.113 1424.1,615.331 1431.47,622.443 \n 1439.31,629.466 1447.53,636.416 1456.05,643.308 1464.78,650.16 1473.64,656.987 1482.54,663.807 1491.39,670.634 1500.12,677.486 1508.64,684.378 1516.86,691.328 \n 1524.7,698.35 1532.07,705.463 1538.9,712.681 1545.09,720.021 1550.55,727.499 1555.22,735.132 1558.99,742.936 1561.8,750.927 1563.54,759.121 1564.14,767.535 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1564.14,767.535 1564.4,773.494 1565.14,779.483 1566.34,785.498 1567.96,791.538 1569.96,797.601 1572.3,803.685 1574.95,809.787 1577.88,815.905 1581.04,822.037 \n 1584.39,828.181 1587.92,834.334 1591.56,840.496 1595.3,846.662 1599.1,852.832 1602.91,859.003 1606.71,865.173 1610.44,871.339 1614.09,877.501 1617.62,883.654 \n 1620.97,889.798 1624.13,895.93 1627.06,902.048 1629.71,908.15 1632.05,914.234 1634.05,920.297 1635.67,926.337 1636.87,932.352 1637.61,938.341 1637.87,944.3 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1637.87,944.3 1638.22,956.993 1639.23,969.873 1640.85,982.926 1643.04,996.138 1645.75,1009.5 1648.92,1022.98 1652.51,1036.59 1656.47,1050.3 1660.74,1064.1 \n 1665.29,1077.98 1670.06,1091.92 1675,1105.9 1680.06,1119.92 1685.2,1133.97 1690.36,1148.02 1695.49,1162.06 1700.56,1176.08 1705.5,1190.07 1710.26,1204.01 \n 1714.81,1217.88 1719.09,1231.68 1723.04,1245.39 1726.63,1259 1729.8,1272.49 1732.51,1285.84 1734.7,1299.06 1736.32,1312.11 1737.33,1324.99 1737.68,1337.68 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1637.87,944.3 1637.61,956.506 1636.84,968.922 1635.6,981.531 1633.94,994.319 1631.88,1007.27 1629.47,1020.37 1626.74,1033.6 1623.74,1046.94 1620.49,1060.39 \n 1617.03,1073.92 1613.41,1087.53 1609.65,1101.18 1605.8,1114.88 1601.9,1128.6 1597.98,1142.32 1594.07,1156.04 1590.23,1169.74 1586.47,1183.39 1582.85,1196.99 \n 1579.39,1210.53 1576.14,1223.97 1573.13,1237.32 1570.4,1250.55 1567.99,1263.65 1565.94,1276.6 1564.27,1289.39 1563.04,1302 1562.27,1314.41 1562.01,1326.62 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1564.14,767.535 1564.71,776.677 1566.37,785.687 1569.04,794.576 1572.63,803.354 1577.08,812.029 1582.29,820.613 1588.18,829.114 1594.68,837.543 1601.71,845.908 \n 1609.17,854.22 1617,862.488 1625.12,870.723 1633.43,878.933 1641.87,887.129 1650.34,895.319 1658.78,903.515 1667.09,911.725 1675.21,919.96 1683.04,928.228 \n 1690.51,936.54 1697.53,944.906 1704.03,953.334 1709.92,961.835 1715.13,970.419 1719.58,979.095 1723.17,987.872 1725.84,996.761 1727.5,1005.77 1728.07,1014.91 \n \n \"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1392.03,553.259 1391.77,560.162 1391,567.123 1389.76,574.137 1388.1,581.201 1386.04,588.31 1383.63,595.46 1380.9,602.646 1377.89,609.865 1374.63,617.111 \n 1371.17,624.381 1367.55,631.67 1363.79,638.974 1359.94,646.289 1356.03,653.61 1352.1,660.934 1348.2,668.255 1344.35,675.57 1340.59,682.874 1336.96,690.164 \n 1333.5,697.433 1330.25,704.68 1327.24,711.898 1324.51,719.084 1322.09,726.234 1320.04,733.343 1318.37,740.407 1317.13,747.422 1316.36,754.382 1316.1,761.286 \n \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1222.85 262.317 L1214.86 248.477 L1198.88 248.477 L1190.88 262.317 L1198.88 276.158 L1214.86 276.158 L1222.85 262.317 L1222.85 262.317 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1222.85,262.317 1214.86,248.477 1198.88,248.477 1190.88,262.317 1198.88,276.158 1214.86,276.158 1222.85,262.317 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1006.19 453.55 L998.198 439.709 L982.216 439.709 L974.225 453.55 L982.216 467.39 L998.198 467.39 L1006.19 453.55 L1006.19 453.55 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1006.19,453.55 998.198,439.709 982.216,439.709 974.225,453.55 982.216,467.39 998.198,467.39 1006.19,453.55 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1033.61 802.062 L1025.62 788.222 L1009.63 788.222 L1001.64 802.062 L1009.63 815.903 L1025.62 815.903 L1033.61 802.062 L1033.61 802.062 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1033.61,802.062 1025.62,788.222 1009.63,788.222 1001.64,802.062 1009.63,815.903 1025.62,815.903 1033.61,802.062 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM836.527 755.186 L828.536 741.346 L812.554 741.346 L804.564 755.186 L812.554 769.027 L828.536 769.027 L836.527 755.186 L836.527 755.186 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 836.527,755.186 828.536,741.346 812.554,741.346 804.564,755.186 812.554,769.027 828.536,769.027 836.527,755.186 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM678.299 1000.94 L670.308 987.098 L654.326 987.098 L646.336 1000.94 L654.326 1014.78 L670.308 1014.78 L678.299 1000.94 L678.299 1000.94 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 678.299,1000.94 670.308,987.098 654.326,987.098 646.336,1000.94 654.326,1014.78 670.308,1014.78 678.299,1000.94 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM821.205 1000.93 L813.214 987.092 L797.233 987.092 L789.242 1000.93 L797.233 1014.77 L813.214 1014.77 L821.205 1000.93 L821.205 1000.93 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 821.205,1000.93 813.214,987.092 797.233,987.092 789.242,1000.93 797.233,1014.77 813.214,1014.77 821.205,1000.93 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1408.02 553.259 L1400.02 539.418 L1384.04 539.418 L1376.05 553.259 L1384.04 567.099 L1400.02 567.099 L1408.02 553.259 L1408.02 553.259 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1408.02,553.259 1400.02,539.418 1384.04,539.418 1376.05,553.259 1384.04,567.099 1400.02,567.099 1408.02,553.259 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1580.12 767.535 L1572.13 753.695 L1556.15 753.695 L1548.16 767.535 L1556.15 781.376 L1572.13 781.376 L1580.12 767.535 L1580.12 767.535 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1580.12,767.535 1572.13,753.695 1556.15,753.695 1548.16,767.535 1556.15,781.376 1572.13,781.376 1580.12,767.535 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1653.85 944.3 L1645.86 930.459 L1629.88 930.459 L1621.89 944.3 L1629.88 958.14 L1645.86 958.14 L1653.85 944.3 L1653.85 944.3 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1653.85,944.3 1645.86,930.459 1629.88,930.459 1621.89,944.3 1629.88,958.14 1645.86,958.14 1653.85,944.3 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1765.51 1337.68 L1751.6 1313.59 L1723.77 1313.59 L1709.86 1337.68 L1723.77 1361.78 L1751.6 1361.78 L1765.51 1337.68 L1765.51 1337.68 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1765.51,1337.68 1751.6,1313.59 1723.77,1313.59 1709.86,1337.68 1723.77,1361.78 1751.6,1361.78 1765.51,1337.68 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1589.83 1326.62 L1575.92 1302.52 L1548.09 1302.52 L1534.18 1326.62 L1548.09 1350.72 L1575.92 1350.72 L1589.83 1326.62 L1589.83 1326.62 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1589.83,1326.62 1575.92,1302.52 1548.09,1302.52 1534.18,1326.62 1548.09,1350.72 1575.92,1350.72 1589.83,1326.62 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1755.9 1014.91 L1741.99 990.815 L1714.16 990.815 L1700.25 1014.91 L1714.16 1039.01 L1741.99 1039.01 L1755.9 1014.91 L1755.9 1014.91 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1755.9,1014.91 1741.99,990.815 1714.16,990.815 1700.25,1014.91 1714.16,1039.01 1741.99,1039.01 1755.9,1014.91 \n \"/>\n<path clip-path=\"url(#clip992)\" d=\"\nM1343.93 761.286 L1330.01 737.188 L1302.19 737.188 L1288.27 761.286 L1302.19 785.383 L1330.01 785.383 L1343.93 761.286 L1343.93 761.286 Z\n \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n<polyline clip-path=\"url(#clip992)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n 1343.93,761.286 1330.01,737.188 1302.19,737.188 1288.27,761.286 1302.19,785.383 1330.01,785.383 1343.93,761.286 \n \"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1206.87\" cy=\"262.317\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"990.207\" cy=\"453.55\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1017.63\" cy=\"802.062\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"820.545\" cy=\"755.186\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"662.317\" cy=\"1000.94\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"805.223\" cy=\"1000.93\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1392.03\" cy=\"553.259\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1564.14\" cy=\"767.535\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1637.87\" cy=\"944.3\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1737.68\" cy=\"1337.68\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1562.01\" cy=\"1326.62\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1728.07\" cy=\"1014.91\" r=\"2\"/>\n<circle clip-path=\"url(#clip992)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1316.1\" cy=\"761.286\" r=\"2\"/>\n<path clip-path=\"url(#clip990)\" d=\"M1198.45 273.994 L1205.13 273.994 L1205.13 250.924 L1197.86 252.382 L1197.86 248.656 L1205.09 247.197 L1209.19 247.197 L1209.19 273.994 L1215.87 273.994 L1215.87 277.437 L1198.45 277.437 L1198.45 273.994 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M985.528 465.226 L999.808 465.226 L999.808 468.67 L980.606 468.67 L980.606 465.226 Q982.936 462.816 986.946 458.765 Q990.977 454.694 992.01 453.519 Q993.974 451.312 994.744 449.792 Q995.534 448.253 995.534 446.775 Q995.534 444.364 993.833 442.845 Q992.151 441.326 989.437 441.326 Q987.513 441.326 985.366 441.994 Q983.239 442.663 980.809 444.02 L980.809 439.888 Q983.28 438.896 985.427 438.389 Q987.574 437.883 989.356 437.883 Q994.055 437.883 996.851 440.232 Q999.646 442.582 999.646 446.511 Q999.646 448.375 998.937 450.056 Q998.248 451.717 996.405 453.985 Q995.899 454.573 993.184 457.388 Q990.47 460.183 985.528 465.226 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1021.34 800.877 Q1024.28 801.505 1025.92 803.49 Q1027.58 805.475 1027.58 808.392 Q1027.58 812.868 1024.5 815.319 Q1021.42 817.77 1015.75 817.77 Q1013.85 817.77 1011.82 817.385 Q1009.82 817.02 1007.67 816.271 L1007.67 812.321 Q1009.37 813.314 1011.4 813.82 Q1013.42 814.326 1015.63 814.326 Q1019.48 814.326 1021.48 812.807 Q1023.51 811.288 1023.51 808.392 Q1023.51 805.718 1021.63 804.219 Q1019.76 802.7 1016.42 802.7 L1012.9 802.7 L1012.9 799.338 L1016.58 799.338 Q1019.6 799.338 1021.2 798.143 Q1022.8 796.928 1022.8 794.659 Q1022.8 792.33 1021.14 791.094 Q1019.5 789.839 1016.42 789.839 Q1014.74 789.839 1012.81 790.203 Q1010.89 790.568 1008.58 791.337 L1008.58 787.692 Q1010.91 787.043 1012.94 786.719 Q1014.98 786.395 1016.78 786.395 Q1021.44 786.395 1024.16 788.522 Q1026.87 790.629 1026.87 794.234 Q1026.87 796.745 1025.43 798.487 Q1024 800.209 1021.34 800.877 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M823.178 743.631 L812.848 759.774 L823.178 759.774 L823.178 743.631 M822.105 740.066 L827.249 740.066 L827.249 759.774 L831.564 759.774 L831.564 763.177 L827.249 763.177 L827.249 770.306 L823.178 770.306 L823.178 763.177 L809.527 763.177 L809.527 759.227 L822.105 740.066 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M653.81 985.818 L669.872 985.818 L669.872 989.261 L657.557 989.261 L657.557 996.675 Q658.449 996.371 659.34 996.229 Q660.231 996.067 661.122 996.067 Q666.186 996.067 669.143 998.842 Q672.1 1001.62 672.1 1006.36 Q672.1 1011.24 669.062 1013.95 Q666.024 1016.65 660.494 1016.65 Q658.59 1016.65 656.605 1016.32 Q654.641 1016 652.534 1015.35 L652.534 1011.24 Q654.357 1012.23 656.302 1012.72 Q658.246 1013.2 660.413 1013.2 Q663.917 1013.2 665.963 1011.36 Q668.009 1009.52 668.009 1006.36 Q668.009 1003.2 665.963 1001.35 Q663.917 999.51 660.413 999.51 Q658.773 999.51 657.132 999.875 Q655.512 1000.24 653.81 1001.01 L653.81 985.818 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M805.578 999.302 Q802.823 999.302 801.203 1001.19 Q799.603 1003.07 799.603 1006.35 Q799.603 1009.61 801.203 1011.52 Q802.823 1013.4 805.578 1013.4 Q808.333 1013.4 809.933 1011.52 Q811.553 1009.61 811.553 1006.35 Q811.553 1003.07 809.933 1001.19 Q808.333 999.302 805.578 999.302 M813.7 986.481 L813.7 990.208 Q812.161 989.478 810.581 989.094 Q809.021 988.709 807.482 988.709 Q803.431 988.709 801.284 991.443 Q799.157 994.177 798.853 999.707 Q800.048 997.945 801.851 997.013 Q803.654 996.061 805.821 996.061 Q810.378 996.061 813.011 998.836 Q815.665 1001.59 815.665 1006.35 Q815.665 1011.01 812.91 1013.82 Q810.155 1016.64 805.578 1016.64 Q800.332 1016.64 797.557 1012.63 Q794.782 1008.6 794.782 1000.96 Q794.782 993.793 798.185 989.539 Q801.588 985.265 807.32 985.265 Q808.859 985.265 810.419 985.569 Q811.999 985.873 813.7 986.481 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1382.31 538.139 L1401.76 538.139 L1401.76 539.881 L1390.78 568.379 L1386.5 568.379 L1396.83 541.582 L1382.31 541.582 L1382.31 538.139 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1564.14 768.295 Q1561.22 768.295 1559.54 769.854 Q1557.88 771.414 1557.88 774.148 Q1557.88 776.883 1559.54 778.442 Q1561.22 780.002 1564.14 780.002 Q1567.06 780.002 1568.74 778.442 Q1570.42 776.862 1570.42 774.148 Q1570.42 771.414 1568.74 769.854 Q1567.08 768.295 1564.14 768.295 M1560.05 766.553 Q1557.41 765.905 1555.94 764.102 Q1554.48 762.299 1554.48 759.707 Q1554.48 756.081 1557.05 753.975 Q1559.64 751.868 1564.14 751.868 Q1568.66 751.868 1571.23 753.975 Q1573.8 756.081 1573.8 759.707 Q1573.8 762.299 1572.32 764.102 Q1570.86 765.905 1568.25 766.553 Q1571.21 767.242 1572.85 769.247 Q1574.51 771.252 1574.51 774.148 Q1574.51 778.544 1571.81 780.893 Q1569.14 783.243 1564.14 783.243 Q1559.14 783.243 1556.44 780.893 Q1553.77 778.544 1553.77 774.148 Q1553.77 771.252 1555.43 769.247 Q1557.09 767.242 1560.05 766.553 M1558.55 760.092 Q1558.55 762.441 1560.01 763.758 Q1561.49 765.074 1564.14 765.074 Q1566.77 765.074 1568.25 763.758 Q1569.75 762.441 1569.75 760.092 Q1569.75 757.742 1568.25 756.426 Q1566.77 755.109 1564.14 755.109 Q1561.49 755.109 1560.01 756.426 Q1558.55 757.742 1558.55 760.092 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1629.38 958.792 L1629.38 955.065 Q1630.92 955.794 1632.5 956.179 Q1634.08 956.564 1635.6 956.564 Q1639.65 956.564 1641.78 953.85 Q1643.93 951.115 1644.23 945.566 Q1643.06 947.308 1641.25 948.239 Q1639.45 949.171 1637.26 949.171 Q1632.73 949.171 1630.07 946.437 Q1627.44 943.682 1627.44 938.922 Q1627.44 934.264 1630.19 931.448 Q1632.95 928.633 1637.53 928.633 Q1642.77 928.633 1645.53 932.664 Q1648.3 936.674 1648.3 944.33 Q1648.3 951.48 1644.9 955.754 Q1641.52 960.007 1635.78 960.007 Q1634.25 960.007 1632.67 959.703 Q1631.09 959.399 1629.38 958.792 M1637.53 945.971 Q1640.28 945.971 1641.88 944.087 Q1643.5 942.203 1643.5 938.922 Q1643.5 935.661 1641.88 933.778 Q1640.28 931.874 1637.53 931.874 Q1634.77 931.874 1633.15 933.778 Q1631.55 935.661 1631.55 938.922 Q1631.55 942.203 1633.15 944.087 Q1634.77 945.971 1637.53 945.971 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1715.53 1349.36 L1722.22 1349.36 L1722.22 1326.29 L1714.95 1327.75 L1714.95 1324.02 L1722.18 1322.56 L1726.27 1322.56 L1726.27 1349.36 L1732.95 1349.36 L1732.95 1352.8 L1715.53 1352.8 L1715.53 1349.36 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1749.97 1325.26 Q1746.81 1325.26 1745.21 1328.38 Q1743.63 1331.47 1743.63 1337.71 Q1743.63 1343.93 1745.21 1347.05 Q1746.81 1350.15 1749.97 1350.15 Q1753.15 1350.15 1754.73 1347.05 Q1756.33 1343.93 1756.33 1337.71 Q1756.33 1331.47 1754.73 1328.38 Q1753.15 1325.26 1749.97 1325.26 M1749.97 1322.02 Q1755.05 1322.02 1757.72 1326.05 Q1760.42 1330.06 1760.42 1337.71 Q1760.42 1345.35 1757.72 1349.38 Q1755.05 1353.39 1749.97 1353.39 Q1744.88 1353.39 1742.19 1349.38 Q1739.52 1345.35 1739.52 1337.71 Q1739.52 1330.06 1742.19 1326.05 Q1744.88 1322.02 1749.97 1322.02 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1540.39 1338.29 L1547.08 1338.29 L1547.08 1315.22 L1539.81 1316.68 L1539.81 1312.96 L1547.04 1311.5 L1551.13 1311.5 L1551.13 1338.29 L1557.81 1338.29 L1557.81 1341.74 L1540.39 1341.74 L1540.39 1338.29 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1566.79 1338.29 L1573.47 1338.29 L1573.47 1315.22 L1566.2 1316.68 L1566.2 1312.96 L1573.43 1311.5 L1577.52 1311.5 L1577.52 1338.29 L1584.2 1338.29 L1584.2 1341.74 L1566.79 1341.74 L1566.79 1338.29 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1706.62 1026.59 L1713.31 1026.59 L1713.31 1003.52 L1706.04 1004.98 L1706.04 1001.25 L1713.27 999.793 L1717.36 999.793 L1717.36 1026.59 L1724.04 1026.59 L1724.04 1030.03 L1706.62 1030.03 L1706.62 1026.59 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1735.83 1026.59 L1750.11 1026.59 L1750.11 1030.03 L1730.91 1030.03 L1730.91 1026.59 Q1733.24 1024.18 1737.25 1020.13 Q1741.28 1016.06 1742.31 1014.88 Q1744.28 1012.67 1745.05 1011.16 Q1745.84 1009.62 1745.84 1008.14 Q1745.84 1005.73 1744.14 1004.21 Q1742.45 1002.69 1739.74 1002.69 Q1737.82 1002.69 1735.67 1003.36 Q1733.54 1004.03 1731.11 1005.38 L1731.11 1001.25 Q1733.58 1000.26 1735.73 999.752 Q1737.88 999.246 1739.66 999.246 Q1744.36 999.246 1747.15 1001.6 Q1749.95 1003.95 1749.95 1007.87 Q1749.95 1009.74 1749.24 1011.42 Q1748.55 1013.08 1746.71 1015.35 Q1746.2 1015.94 1743.49 1018.75 Q1740.77 1021.55 1735.83 1026.59 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1294.24 772.962 L1300.92 772.962 L1300.92 749.892 L1293.65 751.351 L1293.65 747.624 L1300.88 746.166 L1304.97 746.166 L1304.97 772.962 L1311.65 772.962 L1311.65 776.406 L1294.24 776.406 L1294.24 772.962 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip990)\" d=\"M1332.31 760.101 Q1335.25 760.729 1336.89 762.713 Q1338.55 764.698 1338.55 767.615 Q1338.55 772.091 1335.47 774.542 Q1332.4 776.993 1326.72 776.993 Q1324.82 776.993 1322.79 776.608 Q1320.79 776.244 1318.64 775.494 L1318.64 771.544 Q1320.34 772.537 1322.37 773.043 Q1324.39 773.55 1326.6 773.55 Q1330.45 773.55 1332.46 772.031 Q1334.48 770.511 1334.48 767.615 Q1334.48 764.941 1332.6 763.443 Q1330.73 761.924 1327.39 761.924 L1323.87 761.924 L1323.87 758.561 L1327.55 758.561 Q1330.57 758.561 1332.17 757.366 Q1333.77 756.151 1333.77 753.883 Q1333.77 751.553 1332.11 750.318 Q1330.47 749.062 1327.39 749.062 Q1325.71 749.062 1323.79 749.427 Q1321.86 749.791 1319.55 750.561 L1319.55 746.915 Q1321.88 746.267 1323.91 745.943 Q1325.95 745.619 1327.76 745.619 Q1332.42 745.619 1335.13 747.745 Q1337.84 749.852 1337.84 753.457 Q1337.84 755.969 1336.41 757.711 Q1334.97 759.432 1332.31 760.101 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /></svg>\n"
|
|
},
|
|
"execution_count": 55,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"BestProfit, Bestsol, trParentnodes, trChildnodes, trNamenodes = SolveKnapInstance(\"data/test.opb\")\n",
|
|
"println(\"\\n******\\n\\nOptimal value = \", BestProfit, \"\\n\\nOptimal x=\", Bestsol)\n",
|
|
"graphplot(trParentnodes, trChildnodes, names=trNamenodes, method=:tree)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Julia 1.6.3",
|
|
"language": "julia",
|
|
"name": "julia-1.6"
|
|
},
|
|
"language_info": {
|
|
"file_extension": ".jl",
|
|
"mimetype": "application/julia",
|
|
"name": "julia",
|
|
"version": "1.6.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|