Modelowanie w pakiecie ampl



Pobieranie 16.22 Kb.
Data04.05.2016
Rozmiar16.22 Kb.

Laboratorium BO v3u/2002

Modelowanie w pakiecie AMPL



Język AMPL

Język AMPL umożliwia wygodne definiowanie modelu w sposób podobny do zapisu stosowanego w literaturze.

Podstawowe słowa kluczowe: set, param, var, minimize, maximize, subject to.

set - definicje (deklaracje) zbiorów (indeksów)

param - definicje (deklaracje) stałych modelu

var - deklaracje zmienne modelu

minimize, maximize - określenie funkcji celu

subject to - ograniczenia

Ogólne zasady konstruowania modelu :


  • nazwy zmiennych - długość praktycznie dowolna, rozróżniane duże i małe litery.

  • każde wyrażenie zakończone jest średnikiem „ ; ”

  • komentarz zaczyna się od znaku „ # ” i jest do końca linii;

  • wyrażenie :

zapisuje się następująco:

{ i in N}: sum{j in M.} x[ i, j ] = y[ i ];



  • s
    Indeksy wierszy i kolumn
    posoby definiowania zmiennych tablicowych :
    param A:=

1 1

2 2


3 3 ;

param B :



1 2 3 4 :=

1 4 3 0 1

2 3 4 1 0

3 3 0 2 3;


param C default 0:=

[0,*] 1 4 2 7 3 6 4 10 5 13

[1,*] 3 3 4 7 5 10

[2,*] 3 1 4 5 5 8;




  • przykład definicji zbioru indeksów:

set N :=

(0,*) 1 2 3 4

(1,*) 3 4;

Przykład 1


Zadanie programowania liniowego
min x1+2x2+3x3

przy ograniczeniach:

-x1+x2+x3 = 5

12x1-9x2+9x3 >= 8

x1,x2,x3 >= 0


# zapis w języku AMPL plik *.mod
var x1 >=0;

var x2 >=0;

var x3 >=0;

minimize funkcja_celu:

x1+2*x2+3*x3;

# p.o.


subject to ograniczenie1:

-x1+x2+x3 = 5;

subject to ograniczenie2:

12*x1-9*x2+9*x3 >=8;



Ten sam przykład z zastosowaniem stałych modelu jako tablic jednowymiarowych.



# Plik *.mod
var x{1..3} >=0;

param A{1..3};

param B{1..3};

param C{1..3};


minimize funkcja_celu:

sum{i in 1..3} A[i]*x[i];

# p.o.

subject to ograniczenie1:



sum{i in 1..3} B[i]*x[i] = 5;

subject to ograniczenie2:

sum{i in 1..3} C[i]*x[i] >=8;


# Plik *.dat
param A:=

1 1


2 2

3 3 ;


param B:=

1 -1


2 1

3 1;


param C:=

1 12


2 -9

3 9;



Przykład 2


Opis zadania:

N studentów musi przed sesją przeczytać M. Książek. Każdy i-ty student potrzebuje na przeczytanie j-tej książki tij czasu. Książki mogą być czytane w dowolnej kolejności, przy czym w danej chwili tylko jedna osoba może czytać daną książkę i nie może czytać więcej niż jednej książki jednocześnie.


Przykładowe rozwiązanie:


# plik *.mod

set CZASY;

set KSIAZKI;

set STUDENCI;

param MAC_TIJ{i in STUDENCI, j in KSIAZKI}; # czasy czytania książek przez studentów

var v{b in CZASY, i in STUDENCI, j in KSIAZKI} >=0, <=1; # harmonogram czytania

var T_min;
minimize Czas_min:

T_min;
subject to Sesja{i in STUDENCI}:

sum{b in CZASY, j in KSIAZKI} v[b,i,j] <= T_min;

subject to JedenStudent{b in CZASY,j in KSIAZKI}:

sum{i in STUDENCI} v[b,i,j] <= 1;

subject to JednaKsiazka{b in CZASY, i in STUDENCI}:

sum{ j in KSIAZKI} v[b,i,j] <= 1;

subject to CalaKsiazka{ i in STUDENCI, j in KSIAZKI}:

sum{b in CZASY} v[b,i,j] = MAC_TIJ[i,j];


#plik *.dat

set CZASY:= 1 2 3 4 5 6 7 8 9 10 11 12;

set KSIAZKI:= 1 2 3 4;

set STUDENCI:= 1 2 3;

param MAC_TIJ :

1 2 3 4 :=

1 4 3 0 1

2 3 4 1 0



3 3 0 2 3;







©absta.pl 2016
wyślij wiadomość

    Strona główna