OptMod-2017/Gyakorlat5

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== Ampl == * Modell leíró nyelv * Rengeteg megoldó használható vele (köztük ingyenesek és fizetõsek) * Van IDE változata, de mi parancssorból fogjuk haszná…”)
 
36. sor: 36. sor:
  
 
* feladat1.dat
 
* feladat1.dat
 
+
# Gyartasi feladat adat file
 +
 
 +
set Termek := kalap kabat kapanyel katicabogar;
 +
 
 +
param: DbPerOra MaxDb nyereseg :=
 +
kalap 200 6000 25
 +
kabat 140 4000 30
 +
kapanyel 250 5500 21
 +
katicabogar 180 3000 31;
 +
 
 +
param Oraszam := 40;
  
  
 
* feladat1.run
 
* feladat1.run
 +
# model fájl beolvasása
 +
model "feladat 1.mod";
 +
 
 +
# adat fájl beolvasása
 +
data "feladat 1.dat";
 +
 
 +
# megoldó kiválasztása
 +
option solver gurobi;
 +
 
 +
# ide jöhetnének különböző beállítások, például
 +
# option iterlim 10000;
 +
 
 +
solve;
 +
 
 +
# eredmény kiiratása, persze van lehetőség fájlba történő kiiratásra is
 +
display X.lb, X, X.ub, X.rc;
 +
 
 +
printf "\nDe ha bekapcsoljuk az egeszertekuseget:\n\n\n";
 +
 
 +
redeclare var X {j in Termek} integer >= 0;
 +
 
 +
solve;
 +
 
 +
display X.lb, X, X.ub;

A lap 2017. október 10., 10:10-kori változata

Ampl

  • Modell leíró nyelv
  • Rengeteg megoldó használható vele (köztük ingyenesek és fizetõsek)
  • Van IDE változata, de mi parancssorból fogjuk használni
  • Elterjedt, komolyabb modellezésre használják, mint az Excelt

Példa

Készítsünk három fájlt a következõ névvel és tartalommal:

  • feladat1.mod
# Gyartasi feladat modell file
 
# Termékek halmaza, adatfájltól függ, e felett indexelünk
set Termek;
 
# Beolvasandó paraméterek
param DbPerOra {j in Termek};
param Oraszam;
param nyereseg {j in Termek};
param MaxDb {j in Termek};
 
# X: mennyit gyartsunk a j. termekbol
var X {j in Termek} >= 0; 
# var X {j in Termek} integer >= 0;
# van "binary" kulcsszo is
 
# Célfüggvény
maximize Profit: sum {j in Termek} nyereseg[j] * X[j];
 
# Korlátok
subject to Ido: sum {j in Termek} ( 1 / DbPerOra[j] ) * X[j] <= Oraszam;
subject to Hatarok {j in Termek}: X[j] <= MaxDb[j];


  • feladat1.dat
# Gyartasi feladat adat file
 
set Termek := kalap kabat kapanyel katicabogar;
 
param:		DbPerOra 	MaxDb 	nyereseg :=
kalap 		200 		6000 	25
kabat 		140 		4000 	30
kapanyel 	250 		5500 	21
katicabogar 180 		3000 	31;
 
param Oraszam := 40;


  • feladat1.run
# model fájl beolvasása
model "feladat 1.mod";
 
# adat fájl beolvasása
data "feladat 1.dat";
 
# megoldó kiválasztása
option solver gurobi;
 
# ide jöhetnének különböző beállítások, például
# option iterlim 10000;
 
solve;
 
# eredmény kiiratása, persze van lehetőség fájlba történő kiiratásra is
display X.lb, X, X.ub, X.rc;
  
printf "\nDe ha bekapcsoljuk az egeszertekuseget:\n\n\n";
 
redeclare var X {j in Termek} integer >= 0;
 
solve;
 
display X.lb, X, X.ub;
Személyes eszközök