WUT_Computer_Science/NotProgramming/MOM/report_two/plikmod.mod

115 lines
3.2 KiB
Modula-2
Raw Normal View History

2024-01-15 18:46:40 +01:00
# PARAMETRY
# Stan poczatkowy
set Z;
# Zakupione surowce, s1 i s2
set S; set S1; set S2;
# Surowiec S1 zaladowany do wagonow
set G1;
# Surowce w przygotowywalni
set P; set P1; set P2;
# Surowiec S2 w zakladzie obrobki cieplnej
set O2;
# Polprodukty
set D; set D1; set D2;
# Wyroby
set W; set W1; set W2;
# Stany surowcow, zakupione, wyroby, obrobka cieplna
set N; set Nz; set Nw; set Nzw;
# Cena sprzedazy wyrobu
param r{w in W};
# Przepustowosc przeplwyu z jednego stanu do drugiego
param u{i in N, j in N};
# Mnoznik definijujacy przepwy ze stanu surowiec
# w przygotowalni do stanu polprodukt
param m{p in P, d in D};
# ZMIENNE DECYZYJNE
# przeplyw pomiedzy stanem i a stanem j
var f{i in N, j in N}, >= 0, integer; # Ograniczenie 1
# Zmienne pomocnicze
# liczba zakupionego surowca S1 powyzej 2387 ton
var a1, >= 0, integer; # Ograniczenie 5
# liczba zakupionego surowca S1 powyzej 6659 ton
var a2, >= 0, integer; # Ograniczenie 6
# liczba zakupionego surowca S2 powyzej 2090 ton
var b1, >= 0, integer; # Ograniczenie 7
# liczba zakupionego surowca S2 powyzej 4349 ton
var b2, >= 0, integer; # Ograniczenie 8
# liczba wynajetych lokomotyw
var wl, >= 0, integer;
# liczba wagonow transportujacych surowiec S1 do przygotowalni
var cp1, >= 0, integer;
# liczba ciezarowek transportujacych surowiec S2 do przygotowalni
var ep2, >= 0, integer;
# liczba ciezarowek transportujacych surowiec S2
# do zakladu obrobki cieplnej
var eo2, >= 0, integer;
var e1, >= 0, <=1, integer;
var e2, >= 0, <=1, integer;
# Liczba pracownikow
var l, >= 0, integer;
maximize Q: (sum {i in N, w in W} r[w] * f[i,w])
- (19* (sum {z in Z, s1 in S1} f[z, s1] )
- 5*a1
- 4*a2
+ 11* sum {z in Z, s2 in S2} (f[z, s2])
+ 2*b1
+ 2*b2
+ 1290*cp1
+ 1500*ep2
+ 1500*eo2
+ 160*l
+ 10000*e1
+ 40000*e2);
# OGRANICZENIA
subject to
# Ogolne i Dostepne surowce
Ogr_1_3_4{i in N, j in N}:
f[i,j] <= u[i,j];
Ogr_2{k in Nzw}:
sum {i in Nz} f[k,i] = sum {j in Nw} f[j,k];
# Koszt zakupu surowcow
Ogr_9{z in Z, s1 in S1}:
a1 <= f[z,s1] - 2387;
Ogr_10{z in Z, s1 in S1}:
a2 <= f[z,s1] - 6659;
Ogr_11{z in Z, s2 in S2}:
b1 >= f[z,s2] - 2090;
Ogr_l2{z in Z, s2 in S2}:
b2 >= f[z,s2] - 4349;
# Transport surowca S1
Ogr_13{s1 in S1, g1 in G1}:
cp1 >= f[s1,g1] / 18;
# Transport surowca S2
Ogr_14{s2 in S2, p2 in P2}:
ep2 >= f[s2,p2] / 25;
# Praca przygotowalni
Ogr_15:
sum {i in N, p in P} f[i,p] <= 16000;
Ogr_16{p in P, d in D}:
(sum {i in N} f[i,p]) * m[p,d] = f[p,d];
# Koszt pracy przygotowalni
Ogr_17:
l >= (sum {i in N, p in P} f[i,p])/150;
# Transprot S2 do obrobki cieplnej
Ogr_18{s2 in S2, o2 in O2}:
eo2 >= f[s2,o2] / 25;
# Praca zakladu obrobki cieplnej
Ogr_19{s2 in S2, o2 in O2}:
f[s2,o2] <= 6000;
# Minimalna dostarczona ilosc wyrobow
Ogr_20{w in W}:
sum {i in N} f[i,w] >= 5000;
# Na jedna lokomotywe przypada co najwyzej 12 wagonow
Ogr_21:
12 * wl >= cp1;
solve;
display {i in N, j in N: f[i,j] > 0}: f[i,j];
display: a1; display: a2; display: b1; display: b2; display: wl;
display: cp1; display: ep2; display: eo2; display:
e1; display: l;