model "Maximalny_tok"

uses "mmxprs"

declarations
	PocetUzlov: integer
	
end-declarations

initializations from 'max_tok.txt'
	PocetUzlov
end-initializations

declarations
    Uzly = 1..PocetUzlov
	Max_kap: array (RANGE,RANGE) of integer	!maximalna priepustnost usekov
	Tok: dynamic array(RANGE,RANGE) of mpvar
end-declarations

initializations from 'max_tok.txt'
	Max_kap
end-initializations

! vytvorime len premenne, ktore sa v modeli nachadzaju
forall(i in Uzly, j in Uzly | exists(Max_kap(i,j)) ) create(Tok(i,j))

! Ucelova funkcia - maximalizacia toku vychadzajuceho z uzla 1
Priepustnost:=sum (j in Uzly | exists(Max_kap(1,j)) ) Tok(1,j)-Tok(5,1)

! Zakon zachovania toku - medzilahle uzly
forall(j in 2..5) sum(i in Uzly | exists(Max_kap(i,j)) ) Tok(i,j) = (sum(i in Uzly | exists(Max_kap(j,i)) ) Tok(j,i))

! Obmedzenie velkosti toku
forall(i in Uzly, j in Uzly | exists(Max_kap(i,j)) ) Tok(i,j)<=Max_kap(i,j)

maximize(Priepustnost)

writeln("Max priepustnost: ",getobjval)
forall (i in Uzly, j in Uzly | getsol(Tok(i,j))>0 ) do
writeln ("ceste z: ",i," do ",j," ma: ",getsol(Tok(i,j))," priepustnost ")
end-do
end-model
