ajout
This commit is contained in:
commit
5e2d153d9e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
solveurGLPK
|
132
docs/rapport.md
Normal file
132
docs/rapport.md
Normal file
|
@ -0,0 +1,132 @@
|
|||
# Rapport de TP de Recherche Opérationnelles
|
||||
|
||||
<u>Instructions:</u>
|
||||
- Ce qui à motivé votre choix de format (lp ou mod/dat) de la modélisation
|
||||
- Quelques détails sur les points clés et non triviaux de votre modélisation (ce que représentent vos variables de décisions, une contrainte élaborée...)
|
||||
- Une courte argumentation de l’adéquation du résultat avec l’instance résolue (la solution obtenue fait-elle sens dans le contexte défini par l’énoncé ?)
|
||||
- Quelques éléments d’analyse, par exemple :
|
||||
- Pour PL : Les matrices de ces exemples sont-elles creuses ? (Dans la pratique, il est fréquent qu’une contrainte ne rassemble que de 5 à 10 variables.)
|
||||
|
||||
## Exercice 1 : Des voitures
|
||||
|
||||
```bash
|
||||
glpsol --lp exo1/voitures.lp -o exo1/voitures.sol
|
||||
```
|
||||
|
||||
- Nous avons choisi d'utiliser un `.lp` pour résoudre ce problème puisque celui-ci est simple et ses données ne changent pas.
|
||||
- Voici comment nous avons choisi de modéliser le problème:
|
||||
- `nS` $\in \N$ modélise le nombre de voiture Standard produit par semaine.
|
||||
- `nL` $\in \N$ modélise le nombre de voiture de Luxe produit par semaine.
|
||||
- On cherche à maximiser `Benefice`.
|
||||
- `CapaciteParking` modélise la surface maximale du parking.
|
||||
- `TempsTravail` modélise le temps de travail maximal de employés.
|
||||
- `LimiteLuxe` limite le nombre de voiture de Luxe produisable.
|
||||
- On obtient comme solution: `nS` = 645 et `nL` = 426. Ce resultat est cohérent.
|
||||
|
||||
## Exercice 2 : Gestion de personnel
|
||||
|
||||
```bash
|
||||
glpsol -m exo2/personnel.mod -d exo2/personnel.dat -o exo2/personnel.sol
|
||||
```
|
||||
|
||||
- Nous avons choisi de modéliser ce problème en utilisant un `.mod` et un `.dat` puisque l'input de matrices de se fait plus simplement dans un `.dat`. De plus, il est dépendant de N donc il est suceptible d'évoluer doncs seul le fichier `.dat` sera à modifier car le fichier `.mod` est plus général.
|
||||
- Voici comment nous avons choisi de modéliser le problème:
|
||||
- $($`perm`$)_{i,j} \in M_2(\{0,1\})$ modélise l'association d'un travail à une personne.
|
||||
- `perm` modélise les association qui doivent être uniques ; donc c'est une matrice de permutation. (ie. chaque ligne et chaque colonne ne doit contenir un seul 1)
|
||||
- Pour les données que l'on a fournis, on obtient la solution :
|
||||
$\left(
|
||||
\begin{array}{cccc}
|
||||
1 & 0 & 0 & 0 \\
|
||||
0 & 0 & 1 & 0 \\
|
||||
0 & 1 & 0 & 0 \\
|
||||
0 & 0 & 0 & 1
|
||||
\end{array}
|
||||
\right)$
|
||||
|
||||
Cette solution est bien la meilleur solution car chaque personne est associé au travail ou il est le plus efficace en vu des paramètres que nous avions posés.
|
||||
|
||||
## Exercice 3 : En bourse
|
||||
|
||||
```bash
|
||||
glpsol --lp exo3/bourse.lp -o exo3/bourse.sol
|
||||
```
|
||||
|
||||
- Nous avons choisi d'utiliser un `.lp` pour résoudre ce problème puisque celui-ci est simple et ses données ne changent pas.
|
||||
- Voici comment nous avons choisi de modéliser le problème:
|
||||
- `p1` modélise le produit financier n°1: *Crédits commerciaux*
|
||||
- `p2` modélise le produit financier n°2: *Obligations de sociétés*
|
||||
- `p3` modélise le produit financier n°3: *Stocks d'Or*
|
||||
- `p4` modélise le produit financier n°4: *Stocks de Platine*
|
||||
- `p5` modélise le produit financier n°5: *Titres hypotécaires*
|
||||
- `p6` modélise le produit financier n°6: *Prếts de construction*
|
||||
- On cherche à maximiser `Interets`.
|
||||
- `SommeP` contraint d'investir l'ensemble du budget.
|
||||
- `InvestissementProduit_i` limite l'investissement dans un même produit à 25%.
|
||||
- `Risque` limite le risque global de l'investisement à 2,0.
|
||||
- `MetauxPrecieuxMin` contraint d'investir au moins 30% dans les métaux précieux.
|
||||
- `CreditsMin` contraint d'investir au moins 45% dans les crédits commerciaux et obligations.
|
||||
- On obtient comme solution:
|
||||
- `p1` = 0.2
|
||||
- `p2` = 0.25
|
||||
- `p3` = 0.107692
|
||||
- `p4` = 0.192308
|
||||
- `p5` = 0.25
|
||||
- `p6` = 0
|
||||
|
||||
## Exercice 4 : En optimisation pour l'e-commerce
|
||||
|
||||
```bash
|
||||
glpsol -m exo4/ecommerce.mod -d exo4/ecommerce.dat -o exo4/ecommerce.sol
|
||||
```
|
||||
|
||||
- Nous avons choisi de modéliser ce problème en utilisant un `.mod` et un `.dat` puisque l'input de matrices de se fait plus simplement dans un `.dat`. De plus, il est dépendant de N donc il est suceptible d'évoluer doncs seul le fichier `.dat` sera à modifier car le fichier `.mod` est plus général.
|
||||
- Voici comment nous avons choisi de modéliser le problème:
|
||||
- $($`coef`$)_{i,j,k} \in M_3(\R_+)$ modélise l'association d'un trvail à une personne.
|
||||
- Chaque coefficient de `coef` doit être compris entre 0 et 1 puisque ce sont des proportions.
|
||||
- La somme des coefficients de `coef` selon l'axe k doit faire 1.
|
||||
- La répartions des commandes ne doit pas dépasser la limite des stocks.
|
||||
- On obtient la solution : (C'est la répartition de chaque fluides de chaque commande sur chaque magasin)
|
||||
$
|
||||
\left(
|
||||
\begin{array}{c}
|
||||
\left(
|
||||
\begin{array}{c}
|
||||
3/4 \\
|
||||
1/4 \\
|
||||
0
|
||||
\end{array}
|
||||
\right) &
|
||||
\left(
|
||||
\begin{array}{c}
|
||||
1 \\
|
||||
0 \\
|
||||
0
|
||||
\end{array}
|
||||
\right) \\
|
||||
\left(
|
||||
\begin{array}{c}
|
||||
1 \\
|
||||
0 \\
|
||||
0
|
||||
\end{array}
|
||||
\right) &
|
||||
\left(
|
||||
\begin{array}{c}
|
||||
1/3 \\
|
||||
1/3 \\
|
||||
1/3
|
||||
\end{array}
|
||||
\right)
|
||||
\end{array}
|
||||
\right)
|
||||
$
|
||||
|
||||
Cette solution est bien la meilleur solution car chaque personne est associé au travail ou il est le plus efficace en vu des paramètres que nous avions posés.
|
||||
|
||||
## Exercice bonus : Des composants
|
||||
|
||||
```bash
|
||||
glpsol -m exobonus/bonus.mod -d exobonus/bonus.dat -o exobonus/bonus.sol
|
||||
```
|
||||
|
||||
marche pas mais on a cherché `;(`
|
28
exemple/DataCimentAll.dat.txt
Executable file
28
exemple/DataCimentAll.dat.txt
Executable file
|
@ -0,0 +1,28 @@
|
|||
# Autres donnŽes possibles pour
|
||||
# le probl<62>me de fabrication
|
||||
# de ciment
|
||||
|
||||
data;
|
||||
|
||||
set CIMENTS :=
|
||||
11
|
||||
22;
|
||||
|
||||
set MACHINES :=
|
||||
Four2
|
||||
Broyeuse2;
|
||||
|
||||
param dureefab: 11 22 :=
|
||||
Four2 40 12
|
||||
Broyeuse2 20 30;
|
||||
|
||||
param capacite :=
|
||||
Four2 360
|
||||
Broyeuse2 480;
|
||||
|
||||
param benefparciment :=
|
||||
11 500
|
||||
22 700;
|
||||
|
||||
end;
|
||||
|
39
exemple/ModelCiment.mod.txt
Executable file
39
exemple/ModelCiment.mod.txt
Executable file
|
@ -0,0 +1,39 @@
|
|||
# GLPK model file created by SUN for RO teaching
|
||||
|
||||
|
||||
############################### Model ###############################
|
||||
|
||||
|
||||
############################### Sets ###############################
|
||||
|
||||
set CIMENTS;
|
||||
|
||||
set MACHINES;
|
||||
|
||||
################### Variables ###################
|
||||
|
||||
var Q{i in CIMENTS}, >=0;
|
||||
# or binary ?;
|
||||
|
||||
################### Constants: Data to load #########################
|
||||
|
||||
param benefparciment{i in CIMENTS};
|
||||
|
||||
param capacite{i in MACHINES};
|
||||
|
||||
param dureefab{i in MACHINES, j in CIMENTS};
|
||||
|
||||
################### Constraints ###################
|
||||
|
||||
|
||||
s.t. RespectCapaciteDeChaqueMachine{j in MACHINES}:
|
||||
sum{i in CIMENTS} dureefab[j,i] * Q[i] = capacite[j];
|
||||
|
||||
|
||||
###### Objective ######
|
||||
|
||||
maximize BeneficeTotal:
|
||||
sum{i in CIMENTS} Q[i]* benefparciment[i];
|
||||
|
||||
|
||||
end;
|
66
exemple/ModelCimentwithData.mod.txt
Executable file
66
exemple/ModelCimentwithData.mod.txt
Executable file
|
@ -0,0 +1,66 @@
|
|||
# GLPK model file created by SUN for RO teaching
|
||||
|
||||
|
||||
############################### Model ###############################
|
||||
|
||||
|
||||
|
||||
############################### Sets ###############################
|
||||
|
||||
set CIMENTS;
|
||||
|
||||
set MACHINES;
|
||||
|
||||
################### Variables ###################
|
||||
|
||||
var Q{i in CIMENTS}, >=0;
|
||||
# or binary ?;
|
||||
|
||||
################### Constants: Data to load #########################
|
||||
|
||||
param benefparciment{i in CIMENTS};
|
||||
|
||||
param capacite{i in MACHINES};
|
||||
|
||||
param dureefab{i in MACHINES, j in CIMENTS};
|
||||
|
||||
################### Constraints ###################
|
||||
|
||||
|
||||
s.t. RespectCapaciteDeChaqueMachine{j in MACHINES}:
|
||||
sum{i in CIMENTS} dureefab[j,i] * Q[i] <= capacite[j];
|
||||
|
||||
|
||||
###### Objective ######
|
||||
|
||||
maximize BeneficeTotal:
|
||||
sum{i in CIMENTS} Q[i]* benefparciment[i];
|
||||
|
||||
#end;
|
||||
|
||||
|
||||
#default data
|
||||
|
||||
data;
|
||||
|
||||
set CIMENTS :=
|
||||
1
|
||||
2;
|
||||
|
||||
set MACHINES :=
|
||||
Four
|
||||
Broyeuse;
|
||||
|
||||
param dureefab: 1 2 :=
|
||||
Four 40 12
|
||||
Broyeuse 20 30;
|
||||
|
||||
param capacite :=
|
||||
Four 360
|
||||
Broyeuse 480;
|
||||
|
||||
param benefparciment :=
|
||||
1 50
|
||||
2 70;
|
||||
|
||||
end;
|
10
exemple/PbCiment.lp.txt
Executable file
10
exemple/PbCiment.lp.txt
Executable file
|
@ -0,0 +1,10 @@
|
|||
\* Problem: Fabrication de ciment *\
|
||||
|
||||
Maximize
|
||||
Benefice: + 50 Q1 + 70 Q2
|
||||
|
||||
Subject To
|
||||
CapaciteduFour: + 40 Q1 + 12 Q2 <= 360
|
||||
CapacitedeBroyage: + 20 Q1 + 30 Q2 <= 480
|
||||
|
||||
End
|
21
exo1/voitures.lp
Normal file
21
exo1/voitures.lp
Normal file
|
@ -0,0 +1,21 @@
|
|||
\* Problème : Des voitures *\
|
||||
\* nS modélise le nombre de voiture Standard produit par semaine *\
|
||||
\* nL modélise le nombre de voiture de Luxe produit par semaine *\
|
||||
|
||||
\* On cherche à maximiser le bénéfice de l'usine *\
|
||||
Maximize
|
||||
Benefice: + 10000 nL + 9000 nS
|
||||
|
||||
\* Les voitures sont garées sur un parking, on ne prend pas en compte les contraintes géométriques *\
|
||||
\* L'équipe peut fournir 60 heures de travail par semaine *\
|
||||
\* L'usine ne peut produire plus de 800 voitures de luxe *\
|
||||
Subject To
|
||||
CapaciteParking: + 10 nL + 20 nS <= 15000
|
||||
TempsTravail: + 6 nL + 5 nS <= 6000
|
||||
LimiteLuxe: nL <= 800
|
||||
|
||||
Integer
|
||||
nL
|
||||
nS
|
||||
|
||||
End
|
30
exo1/voitures.sol
Normal file
30
exo1/voitures.sol
Normal file
|
@ -0,0 +1,30 @@
|
|||
Problem:
|
||||
Rows: 3
|
||||
Columns: 2 (2 integer, 0 binary)
|
||||
Non-zeros: 5
|
||||
Status: INTEGER OPTIMAL
|
||||
Objective: Benefice = 10284000 (MAXimum)
|
||||
|
||||
No. Row name Activity Lower bound Upper bound
|
||||
------ ------------ ------------- ------------- -------------
|
||||
1 CapaciteParking
|
||||
14970 15000
|
||||
2 TempsTravail 6000 6000
|
||||
3 LimiteLuxe 645 800
|
||||
|
||||
No. Column name Activity Lower bound Upper bound
|
||||
------ ------------ ------------- ------------- -------------
|
||||
1 nL * 645 0
|
||||
2 nS * 426 0
|
||||
|
||||
Integer feasibility conditions:
|
||||
|
||||
KKT.PE: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
KKT.PB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
End of output
|
27
exo2/personnel.dat
Normal file
27
exo2/personnel.dat
Normal file
|
@ -0,0 +1,27 @@
|
|||
# Données associé au problème de gestionnaire de personnel pour N = 4
|
||||
|
||||
data;
|
||||
|
||||
# Nom des différentes personnes
|
||||
set PERSONNELS :=
|
||||
p1
|
||||
p2
|
||||
p3
|
||||
p4;
|
||||
|
||||
# Nom des différents travaux
|
||||
set TRAVAUX :=
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
t4;
|
||||
|
||||
# Cout de chaque travail réalisé par chaque personne
|
||||
param Cout: p1 p2 p3 p4 :=
|
||||
t1 1 2 3 4
|
||||
t2 2 3 1 4
|
||||
t3 2 1 3 4
|
||||
t4 4 2 3 1;
|
||||
|
||||
end;
|
||||
|
33
exo2/personnel.mod
Normal file
33
exo2/personnel.mod
Normal file
|
@ -0,0 +1,33 @@
|
|||
############################ Model ##################################
|
||||
|
||||
|
||||
############################ Sets ##################################
|
||||
|
||||
set PERSONNELS;
|
||||
|
||||
set TRAVAUX;
|
||||
|
||||
######################### Variables ################################
|
||||
|
||||
var perm{i in TRAVAUX, j in PERSONNELS}, binary;
|
||||
|
||||
################## Constants: Data to load #########################
|
||||
|
||||
param Cout{i in TRAVAUX, j in PERSONNELS};
|
||||
|
||||
######################## Constraints ###############################
|
||||
|
||||
# Chaque Travail doit être affecté a une unique Personne
|
||||
s.t. RespectUnTravailParPersonne{i in TRAVAUX}:
|
||||
sum{j in PERSONNELS} perm[i,j] = 1;
|
||||
|
||||
# Chaque Personne doit être affectée à un unique Travail
|
||||
s.t. RespectUnePersonneParTravail{j in PERSONNELS}:
|
||||
sum{i in TRAVAUX} perm[i,j] = 1;
|
||||
|
||||
######################## Objective #################################
|
||||
|
||||
minimize CoutTotal:
|
||||
sum{i in TRAVAUX, j in PERSONNELS} Cout[i, j] * perm[i, j];
|
||||
|
||||
end;
|
57
exo2/personnel.sol
Normal file
57
exo2/personnel.sol
Normal file
|
@ -0,0 +1,57 @@
|
|||
Problem: personnel
|
||||
Rows: 9
|
||||
Columns: 16 (16 integer, 16 binary)
|
||||
Non-zeros: 48
|
||||
Status: INTEGER OPTIMAL
|
||||
Objective: CoutTotal = 4 (MINimum)
|
||||
|
||||
No. Row name Activity Lower bound Upper bound
|
||||
------ ------------ ------------- ------------- -------------
|
||||
1 RespectUnTravailParPersonne[t1]
|
||||
1 1 =
|
||||
2 RespectUnTravailParPersonne[t2]
|
||||
1 1 =
|
||||
3 RespectUnTravailParPersonne[t3]
|
||||
1 1 =
|
||||
4 RespectUnTravailParPersonne[t4]
|
||||
1 1 =
|
||||
5 RespectUnePersonneParTravail[p1]
|
||||
1 1 =
|
||||
6 RespectUnePersonneParTravail[p2]
|
||||
1 1 =
|
||||
7 RespectUnePersonneParTravail[p3]
|
||||
1 1 =
|
||||
8 RespectUnePersonneParTravail[p4]
|
||||
1 1 =
|
||||
9 CoutTotal 4
|
||||
|
||||
No. Column name Activity Lower bound Upper bound
|
||||
------ ------------ ------------- ------------- -------------
|
||||
1 perm[t1,p1] * 1 0 1
|
||||
2 perm[t1,p2] * 0 0 1
|
||||
3 perm[t1,p3] * 0 0 1
|
||||
4 perm[t1,p4] * 0 0 1
|
||||
5 perm[t2,p1] * 0 0 1
|
||||
6 perm[t2,p2] * 0 0 1
|
||||
7 perm[t2,p3] * 1 0 1
|
||||
8 perm[t2,p4] * 0 0 1
|
||||
9 perm[t3,p1] * 0 0 1
|
||||
10 perm[t3,p2] * 1 0 1
|
||||
11 perm[t3,p3] * 0 0 1
|
||||
12 perm[t3,p4] * 0 0 1
|
||||
13 perm[t4,p1] * 0 0 1
|
||||
14 perm[t4,p2] * 0 0 1
|
||||
15 perm[t4,p3] * 0 0 1
|
||||
16 perm[t4,p4] * 1 0 1
|
||||
|
||||
Integer feasibility conditions:
|
||||
|
||||
KKT.PE: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
KKT.PB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
End of output
|
34
exo3/bourse.lp
Normal file
34
exo3/bourse.lp
Normal file
|
@ -0,0 +1,34 @@
|
|||
\* Problème: En Bourse *\
|
||||
\* p1 modélise le produit financier n°1: Crédits commerciaux *\
|
||||
\* p2 modélise le produit financier n°2: Obligations de sociétés *\
|
||||
\* p3 modélise le produit financier n°3: Stocks d'Or *\
|
||||
\* p4 modélise le produit financier n°4: Stocks de Platine *\
|
||||
\* p5 modélise le produit financier n°5: Titres hypotécaires *\
|
||||
\* p6 modélise le produit financier n°6: Prếts de construction *\
|
||||
|
||||
\* On cherche à maximiser les intérêts de DELTA *\
|
||||
Maximize
|
||||
Interets: + 0.07 p1 + 0.10 p2 + 0.19 p3 + 0.12 p4 + 0.8 p5 + 0.14 p6
|
||||
|
||||
\* Les varibales sont des proportions donc la somme vaut 1 *\
|
||||
\* Les variables doivent respecter la limite de 25% *\
|
||||
\* Le risque total doit être inférieur à 2.0 *\
|
||||
\* Il doit y avoir au moins 30% de l'investissement qui est placé dans les métaux précieux *\
|
||||
\* Au moins 45% des investissements doivent être placés dans les crédits commerciaux *\
|
||||
Subject To
|
||||
SommeP: + 1 p1 + 1 p2 + 1 p3 + 1 p4 + 1 p5 + 1 p6 = 1
|
||||
|
||||
InvestissementProduit1 : + 1 p1 <= 0.25
|
||||
InvestissementProduit2 : + 1 p2 <= 0.25
|
||||
InvestissementProduit3 : + 1 p3 <= 0.25
|
||||
InvestissementProduit4 : + 1 p4 <= 0.25
|
||||
InvestissementProduit5 : + 1 p5 <= 0.25
|
||||
InvestissementProduit6 : + 1 p6 <= 0.25
|
||||
|
||||
Risque: + 1.7 p1 + 1.2 p2 + 3.7 p3 + 2.4 p4 + 2.0 p5 + 2.9 p6 <= 2.0
|
||||
|
||||
MetauxPrecieuxMin: + 1 p3 + 1 p4 >= 0.3
|
||||
CreditsMin: + 1 p1 + 1 p2 >= 0.45
|
||||
|
||||
|
||||
End
|
55
exo3/bourse.sol
Normal file
55
exo3/bourse.sol
Normal file
|
@ -0,0 +1,55 @@
|
|||
Problem:
|
||||
Rows: 10
|
||||
Columns: 6
|
||||
Non-zeros: 22
|
||||
Status: OPTIMAL
|
||||
Objective: Interets = 0.2825384615 (MAXimum)
|
||||
|
||||
No. Row name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 SommeP NS 1 1 = -0.00923077
|
||||
2 InvestissementProduit1
|
||||
B 0.2 0.25
|
||||
3 InvestissementProduit2
|
||||
NU 0.25 0.25 0.0569231
|
||||
4 InvestissementProduit3
|
||||
B 0.107692 0.25
|
||||
5 InvestissementProduit4
|
||||
B 0.192308 0.25
|
||||
6 InvestissementProduit5
|
||||
NU 0.25 0.25 0.701538
|
||||
7 InvestissementProduit6
|
||||
B 0 0.25
|
||||
8 Risque NU 2 2 0.0538462
|
||||
9 MetauxPrecieuxMin
|
||||
B 0.3 0.3
|
||||
10 CreditsMin NL 0.45 0.45 -0.0123077
|
||||
|
||||
No. Column name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 p1 B 0.2 0
|
||||
2 p2 B 0.25 0
|
||||
3 p3 B 0.107692 0
|
||||
4 p4 B 0.192308 0
|
||||
5 p5 B 0.25 0
|
||||
6 p6 NL 0 0 -0.00692308
|
||||
|
||||
Karush-Kuhn-Tucker optimality conditions:
|
||||
|
||||
KKT.PE: max.abs.err = 2.22e-16 on row 8
|
||||
max.rel.err = 4.44e-17 on row 8
|
||||
High quality
|
||||
|
||||
KKT.PB: max.abs.err = 5.55e-17 on row 9
|
||||
max.rel.err = 4.27e-17 on row 9
|
||||
High quality
|
||||
|
||||
KKT.DE: max.abs.err = 2.78e-17 on column 3
|
||||
max.rel.err = 1.98e-17 on column 3
|
||||
High quality
|
||||
|
||||
KKT.DB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
End of output
|
43
exo4/ecommerce.dat
Normal file
43
exo4/ecommerce.dat
Normal file
|
@ -0,0 +1,43 @@
|
|||
# Données associé au problème de l'e-commerce
|
||||
|
||||
data;
|
||||
|
||||
# Les demandes
|
||||
set DEMANDES :=
|
||||
d1
|
||||
d2;
|
||||
|
||||
# Les fluides
|
||||
set FLUIDES :=
|
||||
f1
|
||||
f2;
|
||||
|
||||
# Les magasins
|
||||
set MAGASINS :=
|
||||
m1
|
||||
m2
|
||||
m3;
|
||||
|
||||
# Fluides demandés par commande
|
||||
param fluidesParCommandes: f1 f2 :=
|
||||
d1 2 0
|
||||
d2 1 3;
|
||||
|
||||
# Stocks de fluides par magasin
|
||||
param stockMagasin: f1 f2 :=
|
||||
m1 2.5 1
|
||||
m2 1 2
|
||||
m3 2 1;
|
||||
|
||||
# Coûts unitares par entrepôt
|
||||
param coutUnitaires: f1 f2 :=
|
||||
m1 1 1
|
||||
m2 2 3
|
||||
m3 3 2;
|
||||
|
||||
# Coûts d'exédition d'un colis entre chaque paire (demande, magasin)
|
||||
param coutExpedition: m1 m2 m3 :=
|
||||
d1 1 0 0
|
||||
d2 0 2 1;
|
||||
|
||||
end;
|
44
exo4/ecommerce.mod
Normal file
44
exo4/ecommerce.mod
Normal file
|
@ -0,0 +1,44 @@
|
|||
############################ Model ##################################
|
||||
|
||||
############################ Sets ##################################
|
||||
|
||||
set DEMANDES;
|
||||
|
||||
set FLUIDES;
|
||||
|
||||
set MAGASINS;
|
||||
|
||||
######################### Variables ################################
|
||||
|
||||
var coef{i in DEMANDES, j in FLUIDES, k in MAGASINS}, >=0;
|
||||
|
||||
################## Constants: Data to load #########################
|
||||
|
||||
param fluidesParCommandes{i in DEMANDES, j in FLUIDES};
|
||||
|
||||
param stockMagasin{k in MAGASINS, j in FLUIDES};
|
||||
|
||||
param coutUnitaires{k in MAGASINS, j in FLUIDES};
|
||||
|
||||
param coutExpedition{i in DEMANDES, k in MAGASINS};
|
||||
|
||||
######################## Constraints ###############################
|
||||
|
||||
# Les proportions doivent être comprises entre 0 et 1
|
||||
s.t. ProportionZeroUn{i in DEMANDES, j in FLUIDES, k in MAGASINS}:
|
||||
coef[i, j, k] <= 1;
|
||||
|
||||
# La somme des proportions doit faire 1
|
||||
s.t. ProportionTotalUn{i in DEMANDES, j in FLUIDES}:
|
||||
sum{k in MAGASINS} coef[i, j, k] = 1;
|
||||
|
||||
# La répartions des commandes ne doit pas dépasser la limite des stocks
|
||||
s.t. RespectDesStocks{j in FLUIDES, k in MAGASINS}:
|
||||
sum{i in DEMANDES} coef[i, j, k] * fluidesParCommandes[i, j] <= stockMagasin[k, j];
|
||||
|
||||
######################## Objective #################################
|
||||
|
||||
minimize CoutTotal:
|
||||
sum{i in DEMANDES, j in FLUIDES, k in MAGASINS} (coutUnitaires[k, j] * coef[i, j, k] + coef[i, j, k] * coutExpedition[i, k]);
|
||||
|
||||
end;
|
101
exo4/ecommerce.sol
Normal file
101
exo4/ecommerce.sol
Normal file
|
@ -0,0 +1,101 @@
|
|||
Problem: ecommerce
|
||||
Rows: 23
|
||||
Columns: 12
|
||||
Non-zeros: 45
|
||||
Status: OPTIMAL
|
||||
Objective: CoutTotal = 5.25 (MINimum)
|
||||
|
||||
No. Row name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 ProportionZeroUn[d1,f1,m1]
|
||||
B 0.75 1
|
||||
2 ProportionZeroUn[d1,f1,m2]
|
||||
B 0.25 1
|
||||
3 ProportionZeroUn[d1,f1,m3]
|
||||
B 0 1
|
||||
4 ProportionZeroUn[d1,f2,m1]
|
||||
B 1 1
|
||||
5 ProportionZeroUn[d1,f2,m2]
|
||||
B 0 1
|
||||
6 ProportionZeroUn[d1,f2,m3]
|
||||
B 0 1
|
||||
7 ProportionZeroUn[d2,f1,m1]
|
||||
NU 1 1 -0.5
|
||||
8 ProportionZeroUn[d2,f1,m2]
|
||||
B 0 1
|
||||
9 ProportionZeroUn[d2,f1,m3]
|
||||
B 0 1
|
||||
10 ProportionZeroUn[d2,f2,m1]
|
||||
B 0.333333 1
|
||||
11 ProportionZeroUn[d2,f2,m2]
|
||||
B 0.333333 1
|
||||
12 ProportionZeroUn[d2,f2,m3]
|
||||
B 0.333333 1
|
||||
13 ProportionTotalUn[d1,f1]
|
||||
NS 1 1 = 2
|
||||
14 ProportionTotalUn[d1,f2]
|
||||
NS 1 1 = 1
|
||||
15 ProportionTotalUn[d2,f1]
|
||||
NS 1 1 = 2
|
||||
16 ProportionTotalUn[d2,f2]
|
||||
NS 1 1 = 3
|
||||
17 RespectDesStocks[f1,m1]
|
||||
NU 2.5 2.5 -0.5
|
||||
18 RespectDesStocks[f1,m2]
|
||||
B 0.5 1
|
||||
19 RespectDesStocks[f1,m3]
|
||||
B 0 2
|
||||
20 RespectDesStocks[f2,m1]
|
||||
NU 1 1 -0.666667
|
||||
21 RespectDesStocks[f2,m2]
|
||||
B 1 2
|
||||
22 RespectDesStocks[f2,m3]
|
||||
NU 1 1 -0.333333
|
||||
23 CoutTotal B 5.25
|
||||
|
||||
No. Column name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 coef[d1,f1,m1]
|
||||
B 0.75 0
|
||||
2 coef[d1,f1,m2]
|
||||
B 0.25 0
|
||||
3 coef[d1,f1,m3]
|
||||
NL 0 0 1
|
||||
4 coef[d1,f2,m1]
|
||||
B 1 0
|
||||
5 coef[d1,f2,m2]
|
||||
NL 0 0 2
|
||||
6 coef[d1,f2,m3]
|
||||
NL 0 0 1
|
||||
7 coef[d2,f1,m1]
|
||||
B 1 0
|
||||
8 coef[d2,f1,m2]
|
||||
B 0 0
|
||||
9 coef[d2,f1,m3]
|
||||
NL 0 0 1
|
||||
10 coef[d2,f2,m1]
|
||||
B 0.333333 0
|
||||
11 coef[d2,f2,m2]
|
||||
B 0.333333 0
|
||||
12 coef[d2,f2,m3]
|
||||
B 0.333333 0
|
||||
|
||||
Karush-Kuhn-Tucker optimality conditions:
|
||||
|
||||
KKT.PE: max.abs.err = 4.44e-16 on row 20
|
||||
max.rel.err = 1.48e-16 on row 20
|
||||
High quality
|
||||
|
||||
KKT.PB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
KKT.DE: max.abs.err = 0.00e+00 on column 0
|
||||
max.rel.err = 0.00e+00 on column 0
|
||||
High quality
|
||||
|
||||
KKT.DB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
End of output
|
77
exo4/ecommerce2.sol
Normal file
77
exo4/ecommerce2.sol
Normal file
|
@ -0,0 +1,77 @@
|
|||
Problem: ecommerce
|
||||
Rows: 11
|
||||
Columns: 12
|
||||
Non-zeros: 33
|
||||
Status: OPTIMAL
|
||||
Objective: CoutTotal = 5.25 (MINimum)
|
||||
|
||||
No. Row name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 ProportionTotalUn[d1,f1]
|
||||
NS 1 1 = 2
|
||||
2 ProportionTotalUn[d1,f2]
|
||||
NS 1 1 = 1
|
||||
3 ProportionTotalUn[d2,f1]
|
||||
NS 1 1 = 2
|
||||
4 ProportionTotalUn[d2,f2]
|
||||
NS 1 1 = 3
|
||||
5 RespectDesStocks[f1,m1]
|
||||
NU 2.5 2.5 -0.5
|
||||
6 RespectDesStocks[f1,m2]
|
||||
B 0.5 1
|
||||
7 RespectDesStocks[f1,m3]
|
||||
B 0 2
|
||||
8 RespectDesStocks[f2,m1]
|
||||
NU 1 1 -0.666667
|
||||
9 RespectDesStocks[f2,m2]
|
||||
B 1 2
|
||||
10 RespectDesStocks[f2,m3]
|
||||
NU 1 1 -0.333333
|
||||
11 CoutTotal B 5.25
|
||||
|
||||
No. Column name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 coef[d1,f1,m1]
|
||||
B 0.75 0 1
|
||||
2 coef[d1,f1,m2]
|
||||
B 0.25 0 1
|
||||
3 coef[d1,f1,m3]
|
||||
NL 0 0 1 1
|
||||
4 coef[d1,f2,m1]
|
||||
B 1 0 1
|
||||
5 coef[d1,f2,m2]
|
||||
NL 0 0 1 2
|
||||
6 coef[d1,f2,m3]
|
||||
NL 0 0 1 1
|
||||
7 coef[d2,f1,m1]
|
||||
NU 1 0 1 -0.5
|
||||
8 coef[d2,f1,m2]
|
||||
B 0 0 1
|
||||
9 coef[d2,f1,m3]
|
||||
NL 0 0 1 1
|
||||
10 coef[d2,f2,m1]
|
||||
B 0.333333 0 1
|
||||
11 coef[d2,f2,m2]
|
||||
B 0.333333 0 1
|
||||
12 coef[d2,f2,m3]
|
||||
B 0.333333 0 1
|
||||
|
||||
Karush-Kuhn-Tucker optimality conditions:
|
||||
|
||||
KKT.PE: max.abs.err = 4.44e-16 on row 8
|
||||
max.rel.err = 1.48e-16 on row 8
|
||||
High quality
|
||||
|
||||
KKT.PB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
KKT.DE: max.abs.err = 0.00e+00 on column 0
|
||||
max.rel.err = 0.00e+00 on column 0
|
||||
High quality
|
||||
|
||||
KKT.DB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
End of output
|
101
exo4/ecommerce3.sol
Normal file
101
exo4/ecommerce3.sol
Normal file
|
@ -0,0 +1,101 @@
|
|||
Problem: ecommerce
|
||||
Rows: 23
|
||||
Columns: 12
|
||||
Non-zeros: 45
|
||||
Status: OPTIMAL
|
||||
Objective: CoutTotal = 8 (MINimum)
|
||||
|
||||
No. Row name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 ProportionZeroUn[d1,f1,m1]
|
||||
B 0.75 1
|
||||
2 ProportionZeroUn[d1,f1,m2]
|
||||
B 0.25 1
|
||||
3 ProportionZeroUn[d1,f1,m3]
|
||||
B 0 1
|
||||
4 ProportionZeroUn[d1,f2,m1]
|
||||
B 1 1
|
||||
5 ProportionZeroUn[d1,f2,m2]
|
||||
B 0 1
|
||||
6 ProportionZeroUn[d1,f2,m3]
|
||||
B 0 1
|
||||
7 ProportionZeroUn[d2,f1,m1]
|
||||
NU 1 1 -3
|
||||
8 ProportionZeroUn[d2,f1,m2]
|
||||
B 0 1
|
||||
9 ProportionZeroUn[d2,f1,m3]
|
||||
B 0 1
|
||||
10 ProportionZeroUn[d2,f2,m1]
|
||||
B 0.333333 1
|
||||
11 ProportionZeroUn[d2,f2,m2]
|
||||
B 0.333333 1
|
||||
12 ProportionZeroUn[d2,f2,m3]
|
||||
B 0.333333 1
|
||||
13 ProportionTotalUn[d1,f1]
|
||||
NS 1 1 = 2
|
||||
14 ProportionTotalUn[d1,f2]
|
||||
NS 1 1 = 2
|
||||
15 ProportionTotalUn[d2,f1]
|
||||
NS 1 1 = 4
|
||||
16 ProportionTotalUn[d2,f2]
|
||||
NS 1 1 = 5
|
||||
17 RespectDesStocks[f1,m1]
|
||||
NU 2.5 2.5 < eps
|
||||
18 RespectDesStocks[f1,m2]
|
||||
B 0.5 1
|
||||
19 RespectDesStocks[f1,m3]
|
||||
B 0 2
|
||||
20 RespectDesStocks[f2,m1]
|
||||
NU 1 1 -1.33333
|
||||
21 RespectDesStocks[f2,m2]
|
||||
B 1 2
|
||||
22 RespectDesStocks[f2,m3]
|
||||
NU 1 1 -0.666667
|
||||
23 CoutTotal B 8
|
||||
|
||||
No. Column name St Activity Lower bound Upper bound Marginal
|
||||
------ ------------ -- ------------- ------------- ------------- -------------
|
||||
1 coef[d1,f1,m1]
|
||||
B 0.75 0
|
||||
2 coef[d1,f1,m2]
|
||||
B 0.25 0
|
||||
3 coef[d1,f1,m3]
|
||||
NL 0 0 1
|
||||
4 coef[d1,f2,m1]
|
||||
B 1 0
|
||||
5 coef[d1,f2,m2]
|
||||
NL 0 0 1
|
||||
6 coef[d1,f2,m3]
|
||||
NL 0 0 < eps
|
||||
7 coef[d2,f1,m1]
|
||||
B 1 0
|
||||
8 coef[d2,f1,m2]
|
||||
NL 0 0 < eps
|
||||
9 coef[d2,f1,m3]
|
||||
B 0 0
|
||||
10 coef[d2,f2,m1]
|
||||
B 0.333333 0
|
||||
11 coef[d2,f2,m2]
|
||||
B 0.333333 0
|
||||
12 coef[d2,f2,m3]
|
||||
B 0.333333 0
|
||||
|
||||
Karush-Kuhn-Tucker optimality conditions:
|
||||
|
||||
KKT.PE: max.abs.err = 4.44e-16 on row 20
|
||||
max.rel.err = 1.48e-16 on row 20
|
||||
High quality
|
||||
|
||||
KKT.PB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
KKT.DE: max.abs.err = 0.00e+00 on column 0
|
||||
max.rel.err = 0.00e+00 on column 0
|
||||
High quality
|
||||
|
||||
KKT.DB: max.abs.err = 0.00e+00 on row 0
|
||||
max.rel.err = 0.00e+00 on row 0
|
||||
High quality
|
||||
|
||||
End of output
|
18
exobonus/bonus.dat
Normal file
18
exobonus/bonus.dat
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Données associé au problème de gestionnaire de personnel pour N = 4
|
||||
|
||||
data;
|
||||
|
||||
set POSITIONS :=
|
||||
p1
|
||||
p2
|
||||
p3
|
||||
p4;
|
||||
|
||||
param Distances: p1 p2 p3 p4 :=
|
||||
p1 0 1 2 3
|
||||
p2 1 0 1 2
|
||||
p3 2 1 0 1
|
||||
p4 3 2 1 0;
|
||||
|
||||
end;
|
||||
|
59
exobonus/bonus.mod
Normal file
59
exobonus/bonus.mod
Normal file
|
@ -0,0 +1,59 @@
|
|||
#
|
||||
# 0 1 2 3 5
|
||||
# 1 0 1 2 3
|
||||
# 2 1 0 1 2
|
||||
# 3 2 1 0 1
|
||||
# 4 3 2 1 0
|
||||
#
|
||||
# 0 1 0 0 0
|
||||
# 0 0 1 0 0
|
||||
# 1 0 0 0 0
|
||||
# 0 0 0 0 1
|
||||
# 0 0 0 1 0
|
||||
#
|
||||
# 0 0 0 1 0
|
||||
# 0 0 1 0 0
|
||||
# 0 0 0 0 1
|
||||
# 0 1 0 0 0
|
||||
# 1 0 0 0 0
|
||||
#
|
||||
# 4 2 3 5 1
|
||||
#
|
||||
|
||||
# GLPK model file created by SUN for RO teaching
|
||||
|
||||
|
||||
############################### Model ###############################
|
||||
|
||||
|
||||
############################### Sets ###############################
|
||||
|
||||
set POSITIONS;
|
||||
|
||||
################### Variables ###################
|
||||
|
||||
var cycle{i in POSITIONS, j in POSITIONS}, binary;
|
||||
|
||||
################### Constants: Data to load #########################
|
||||
|
||||
param Distances{i in POSITIONS, j in POSITIONS};
|
||||
|
||||
################### Constraints ###################
|
||||
|
||||
# Matrice de permutation
|
||||
s.t. RespectUnTravailParPersonne{i in POSITIONS}:
|
||||
sum{j in POSITIONS} cycle[i, j] = 1;
|
||||
s.t. RespectUnePersonneParTravail{j in POSITIONS}:
|
||||
sum{i in POSITIONS} cycle[i, j] = 1;
|
||||
|
||||
# Pas de sous cycle
|
||||
s.t. SousCycle1{(i in POSITIONS, j in POSITIONS):(i <= j and i < 4)}:
|
||||
sum{k in POSITIONS, l in POSITIONS: i <= k <= j, i <= l <= j} cycle[k, l] <= (j - i + 1);
|
||||
|
||||
|
||||
###### Objective ######
|
||||
|
||||
minimize CoutTotal:
|
||||
sum{i in TRAVAUX, j in PERSONNELS} Cout[i, j] * cycle[i, j];
|
||||
|
||||
end;
|
22
script.sh
Normal file
22
script.sh
Normal file
|
@ -0,0 +1,22 @@
|
|||
mkdir solveurGLPK
|
||||
cd solveurGLPK
|
||||
mkdir sources
|
||||
cd sources
|
||||
|
||||
wget ftp://ftp.gnu.org/gnu/glpk/glpk-5.0.tar.gz
|
||||
tar -xzvf glpk-5.0.tar.gz
|
||||
cd glpk-5.0
|
||||
|
||||
./configure --disable-shared
|
||||
make
|
||||
#make --jobs=4
|
||||
make check
|
||||
|
||||
cd ../..
|
||||
mkdir executables
|
||||
cp sources/glpk-5.0/examples/glpsol executables/.
|
||||
cp sources/glpk-5.0/doc/glpk.pdf executables/.
|
||||
cp sources/glpk-5.0/doc/gmpl.pdf executables/.
|
||||
|
||||
cd executables
|
||||
./glpsol --help
|
Loading…
Reference in a new issue