GNU MathProg Language

Modell

Deklarációk

A modell leírásának legalapvetőbb egységei az adatszerkezetek deklarációi.

param

A param kulcsszóval paramétert deklaráhatunk (Nahát!). Egydimenziós esetben ez egy skalárt jelent, több dimenzióban pedig tömböt deklarálhatunk. A paraméternek kötelező nevet adni, megadható index, valamint opcionálisan az alábbi attribútumokat fűzhetjük hozzá:

Példák:

param n default 0; # egyszerű definíció alapértelmezett értékkel param i := 20, integer, >= 0, <= 100; # egész, korlátokkal param month symbolic default 'May' in {'Mar', 'Apr', 'May'}; # String típusú, értelmezési tartománnyal param profit{product, month}; # Többdimenziós

set

A set kulcsszóval halmazt deklaráhatunk. A halmaz alapvető tulajdonságai hasonlók a paraméteréhez, az opcionális attribútumai:

Példák:

set V; # egyszerű halmaz definíció set E within V cross V; # halmaz definíció szuperhalmazzal set points{1..k} dimen 2 # rendezett 2-esek halmaza

var

A var kulcsszóval változót deklaráhatunk. A változó minden esetben szám, egy dimenzióban skalár, több dimenzióban skalárok tömbje. A változó opcionális paraméterei:

Példák:

var x >= 0; # Egyszerű, pozítív változó (lebegőpontos) var y{I,J}; # Kétdimenziós skalár-tömb var make{p in prd}, integer, >= commit[p], <= market[p]; # egész értékű változó korlátokkal

Feltételek

A modellhez feltételeket a subject to, subj to, s.t., ε kulcsszavak valamelyikével adhatunk. A feltételeknek kötelező nevet, valamint egy kifejezést megadni. Opcionálisan adhatók meg futóindexek, és alsó-felső korlát kifejezések

s.t. r: x + y + z, >= 0, <= 1; # Alsó és felső korlát x+y+z értékére subject to balance{i in raw, t in 1..T}: store[i,t+1] - store[i,t] - sum{j in prd} units[i,j] * make[j,t]; # == 0

Célfüggvény

A minimize / maximize kulcsszavakkal adhatjuk meg a modell célfüggvényét. A solver mindig csak az első célfüggvényre fog optimalizálni! A célfüggvénynek adnunk kell egy nevet és egy lineáris kifejezést

minimize cost: sum{i in 1..k, j in 1..n} f[i,j] * x[i,j]; # Minimalizáljuk f és x szorzatösszegét!