# Halmazok és paraméterek
set Mezo;        # Mező
set Malom;       # Malom
set Pekseg;      # Pékségek

param Buza {Mezo} >= 0;    # Mezőn termelt búza
param MalomKapacitas {Malom} >= 0;  # Malmok kapacitása
param TavolsagMezoMalom {Mezo, Malom} >= 0;   # Mező és malom közötti távolság
param TavolsagMalomPekseg {Malom, Pekseg} >= 0;   # Malom és pékség közötti távolság

param TeherautoKapacitas;      # Teherautó kapacitása (kg)
param OrlesArany;              # Őrlési arány (liszt/búza)
param UresFogyasztas;          # Üres teherautó fogyasztás (l/100 km)
param ValtozoFogyasztas;       # Változó fogyasztás (l/kg/100 km)
param Benzinar;                # Benzin ára (Ft/100 km)

# Változók
var SzallitasMezoMalom {Mezo, Malom} >= 0;  # Szállított búza mennyisége mezőről malomba
var SzallitasMalomPekseg {Malom, Pekseg} >= 0;  # Szállított liszt mennyisége malomból pékségbe

# Korlátozások

# Minden mezőről csak a termelt mennyiség szállítható
s.t. KeszletKorlatozas {m in Mezo}:
    sum {l in Malom} SzallitasMezoMalom[m, l] <= Buza[m];

# Malom kapacitásának figyelembevétele
s.t. MalomKapacitasKorlatozas {l in Malom}:
    sum {m in Mezo} SzallitasMezoMalom[m, l] <= MalomKapacitas[l];

# Őrlési arány figyelembevétele (malomból csak a megfelelő lisztmennyiséget lehet szállítani)
s.t. OrlesiAranyKorlatozas {l in Malom}:
    sum {p in Pekseg} SzallitasMalomPekseg[l, p] <= sum {m in Mezo} SzallitasMezoMalom[m, l] * OrlesArany;

# Költségfüggvény
minimize TeljesUzemanyagKoltseg:
    # Mezőről malmokba szállítás
    sum {m in Mezo, l in Malom} 
        (UresFogyasztas + ValtozoFogyasztas * SzallitasMezoMalom[m, l]) * TavolsagMezoMalom[m, l] * Benzinar
    + 
    # Malmokból pékségekbe szállítás
    sum {l in Malom, p in Pekseg} 
        (UresFogyasztas + ValtozoFogyasztas * SzallitasMalomPekseg[l, p]) * TavolsagMalomPekseg[l, p] * Benzinar;

# Adatok
data;
set Mezo :=	mezo1	mezo2	mezo3	mezo4;
set Malom :=	malom1	malom2;
set Pekseg :=	pek1	pek2	pek3;

param Buza :=
	mezo1	36526
	mezo2	12368
	mezo3	25634
	mezo4	9999;

param MalomKapacitas :=
	malom1	50000
	malom2	60000;

param TavolsagMezoMalom :	malom1	malom2 :=
	mezo1	201	79
	mezo2	174	143
	mezo3	107	102
	mezo4	130	21;

param TavolsagMalomPekseg :	pek1	pek2	pek3 :=
	malom1	184	98	60
	malom2	79	58	159;

param TeherautoKapacitas := 500;
param OrlesArany := 0.9;
param UresFogyasztas := 10;
param ValtozoFogyasztas := 0.006;
param Benzinar := 600;
end;
