2021-11-23 20:13:27 +00:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"Exemple de modèle et résolution du problème de Fabrication du ciment"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2021-11-23 21:56:53 +00:00
|
|
|
"execution_count": 7,
|
2021-11-23 20:13:27 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stderr",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2021-11-23 21:56:53 +00:00
|
|
|
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "stderr",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"\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"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "stderr",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "stderr",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"\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"
|
2021-11-23 20:13:27 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"#importer les packages utiles\n",
|
2021-11-23 21:56:53 +00:00
|
|
|
"import Pkg;\n",
|
|
|
|
"Pkg.add(\"Cbc\")\n",
|
2021-11-23 20:13:27 +00:00
|
|
|
"Pkg.add(\"JuMP\")"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2021-11-23 21:56:53 +00:00
|
|
|
"execution_count": 8,
|
2021-11-23 20:13:27 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
2021-11-23 21:56:53 +00:00
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"Max 50 ciment[1] + 70 ciment[2]\n",
|
|
|
|
"Subject to\n",
|
|
|
|
" 40 ciment[1] + 12 ciment[2] ≤ 360.0\n",
|
|
|
|
" 20 ciment[1] + 30 ciment[2] ≤ 480.0\n",
|
|
|
|
" ciment[1] ≥ 0.0\n",
|
|
|
|
" ciment[2] ≥ 0.0\n",
|
|
|
|
"\n",
|
|
|
|
"Presolve 2 (0) rows, 2 (0) columns and 4 (0) elements\n",
|
|
|
|
"0 Obj -0 Dual inf 120 (2)\n",
|
|
|
|
"2 Obj 1137.5\n",
|
|
|
|
"Optimal - objective value 1137.5\n",
|
|
|
|
"Optimal objective 1137.5 - 2 iterations time 0.002\n"
|
2021-11-23 20:13:27 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"using Cbc\n",
|
|
|
|
"using JuMP\n",
|
|
|
|
"\n",
|
|
|
|
"# data\n",
|
|
|
|
"N = 2 # nombre de ciments disponibles\n",
|
|
|
|
"c = [50,70] # prix de vente par ciment\n",
|
|
|
|
"b = [360,480] # temps de disponibilité du four et de l'atelier\n",
|
|
|
|
"A = [40 12;20 30] # temps nécessaire de calcination (four) et de broyage (atelier) par ciment\n",
|
|
|
|
"\n",
|
|
|
|
"# set optimizer\n",
|
|
|
|
"model = Model(Cbc.Optimizer)\n",
|
|
|
|
"\n",
|
|
|
|
"# define variables\n",
|
|
|
|
"@variable(model, ciment[1:N] >= 0)\n",
|
|
|
|
"\n",
|
|
|
|
"# define objective function\n",
|
|
|
|
"@objective(model, Max, sum(c[i]*ciment[i] for i in 1:N))\n",
|
|
|
|
"\n",
|
|
|
|
"# define constraints\n",
|
|
|
|
"for i in 1:length(b)\n",
|
|
|
|
" @constraint(model, sum(A[i,j]*ciment[j] for j in 1:N) <= b[i])\n",
|
|
|
|
"end\n",
|
|
|
|
"\n",
|
|
|
|
"println(model)\n",
|
|
|
|
"\n",
|
|
|
|
"# run optimization\n",
|
2021-11-23 21:56:53 +00:00
|
|
|
"optimize!(model)"
|
2021-11-23 20:13:27 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2021-11-23 21:56:53 +00:00
|
|
|
"execution_count": 9,
|
2021-11-23 20:13:27 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"Solution obtenue:\n",
|
|
|
|
"\t benefice = 1137.5\n",
|
|
|
|
"\t quantite de ciment 1 = 5.249999999999999\n",
|
|
|
|
"\t quantite de ciment 2 = 12.5\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"# print solution\n",
|
|
|
|
"println(\"Solution obtenue:\")\n",
|
|
|
|
"println(\"\\t benefice = $(objective_value(model))\")\n",
|
|
|
|
"for i in 1:N\n",
|
|
|
|
" println(\"\\t quantite de ciment $i = $(value(ciment[i]))\")\n",
|
2021-11-23 21:56:53 +00:00
|
|
|
"end"
|
2021-11-23 20:13:27 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"metadata": {
|
|
|
|
"kernelspec": {
|
2021-11-23 21:56:53 +00:00
|
|
|
"display_name": "Julia 1.6.3",
|
2021-11-23 20:13:27 +00:00
|
|
|
"language": "julia",
|
2021-11-23 21:56:53 +00:00
|
|
|
"name": "julia-1.6"
|
2021-11-23 20:13:27 +00:00
|
|
|
},
|
|
|
|
"language_info": {
|
|
|
|
"file_extension": ".jl",
|
|
|
|
"mimetype": "application/julia",
|
|
|
|
"name": "julia",
|
2021-11-23 21:56:53 +00:00
|
|
|
"version": "1.6.3"
|
2021-11-23 20:13:27 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
|
|
|
"nbformat_minor": 4
|
|
|
|
}
|