diff --git a/NotProgramming/ERPM/RUDNICKI_ERPM_HW.pdf b/NotProgramming/ERPM/RUDNICKI_ERPM_HW.pdf new file mode 100644 index 00000000..3f4636e9 Binary files /dev/null and b/NotProgramming/ERPM/RUDNICKI_ERPM_HW.pdf differ diff --git a/NotProgramming/ERPM/a_irp (1).pdf b/NotProgramming/ERPM/a_irp (1).pdf new file mode 100644 index 00000000..9375bf36 Binary files /dev/null and b/NotProgramming/ERPM/a_irp (1).pdf differ diff --git a/NotProgramming/ERPM/c_irp.pdf b/NotProgramming/ERPM/c_irp.pdf new file mode 100644 index 00000000..994cf8de Binary files /dev/null and b/NotProgramming/ERPM/c_irp.pdf differ diff --git a/NotProgramming/ERPM/e_irp_g.pdf b/NotProgramming/ERPM/e_irp_g.pdf new file mode 100644 index 00000000..50ab8b28 Binary files /dev/null and b/NotProgramming/ERPM/e_irp_g.pdf differ diff --git a/NotProgramming/ERPM/e_irp_m.pdf b/NotProgramming/ERPM/e_irp_m.pdf new file mode 100644 index 00000000..663df9b2 Binary files /dev/null and b/NotProgramming/ERPM/e_irp_m.pdf differ diff --git a/NotProgramming/ERPM/fsm_control_subsystem.pdf b/NotProgramming/ERPM/fsm_control_subsystem.pdf new file mode 100644 index 00000000..30cc7e80 Binary files /dev/null and b/NotProgramming/ERPM/fsm_control_subsystem.pdf differ diff --git a/NotProgramming/ERPM/generalSystemStructure.pdf b/NotProgramming/ERPM/generalSystemStructure.pdf new file mode 100644 index 00000000..b0e74a72 Binary files /dev/null and b/NotProgramming/ERPM/generalSystemStructure.pdf differ diff --git a/NotProgramming/ERPM/r_irp_k.pdf b/NotProgramming/ERPM/r_irp_k.pdf new file mode 100644 index 00000000..13e76114 Binary files /dev/null and b/NotProgramming/ERPM/r_irp_k.pdf differ diff --git a/NotProgramming/MOM/1glpk.mod b/NotProgramming/MOM/1glpk.mod deleted file mode 100644 index c8f332df..00000000 --- a/NotProgramming/MOM/1glpk.mod +++ /dev/null @@ -1,21 +0,0 @@ -set BudynkiNaStart; -set Budynki; -set Elektrownie; - -param p{i in BudynkiNaStart, j in Budynki}; - -var f{i in BudynkiNaStart, j in Budynki}, >= 0; - -maximize Q: sum {i in Budynki, e in Elektrownie} f[i,e]; - -subject to - Ogr_1{i in BudynkiNaStart, j in Budynki}: - f[i,j] >= 0; - Ogr_2{i in BudynkiNaStart, j in Budynki}: - f[i,j] <= p[i,j]; - Ogr_3{n in Budynki}: - sum {i in Budynki} f[n,i] <= sum {j in BudynkiNaStart} f[j,n]; - -solve; -display {i in Budynki, j in Budynki: f[i,j] > 0}: f[i,j]; -display: Q; \ No newline at end of file diff --git a/NotProgramming/MOM/data_2.dat b/NotProgramming/MOM/data_2.dat new file mode 100644 index 00000000..7c34ab51 --- /dev/null +++ b/NotProgramming/MOM/data_2.dat @@ -0,0 +1,43 @@ +data; + +set Samochody := s1, s2, s3, s4, s5, s6, s7; + +set Ladowarki := l1, l2, l3, l4; + +param E := +s1 l1 6 s1 l2 6 s1 l3 6 s1 l4 6 +s2 l1 6 s2 l2 6 s2 l3 6 s2 l4 6 +s3 l1 6 s3 l2 6 s3 l3 6 s3 l4 6 +s4 l1 6 s4 l2 6 s4 l3 6 s4 l4 6 +s5 l1 6 s5 l2 6 s5 l3 6 s5 l4 6 +s6 l1 6 s6 l2 6 s6 l3 6 s6 l4 6 +s7 l1 6 s7 l2 6 s7 l3 6 s7 l4 6 ; + +param D := +s1 l1 4 s1 l2 2 s1 l3 2 s1 l4 1 +s2 l1 6 s2 l2 3 s2 l3 3 s2 l4 1.5 +s3 l1 1 s3 l2 0.5 s3 l3 0.5 s3 l4 0.25 +s4 l1 8 s4 l2 4 s4 l3 4 s4 l4 2 +s5 l1 10 s5 l2 5 s5 l3 5 s5 l4 2.5 +s6 l1 18 s6 l2 9 s6 l3 9 s6 l4 4.5 +s7 l1 12 s7 l2 6 s7 l3 6 s7 l4 3; + +param O := +s1 10 +s2 10 +s3 12 +s4 14 +s5 12 +s6 12 +s7 10; + +param Z := +s1 25 +s2 25 +s3 50 +s4 100 +s5 25 +s6 50 +s7 100; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/glpk.dat b/NotProgramming/MOM/glpk.dat new file mode 100644 index 00000000..7dc2d404 --- /dev/null +++ b/NotProgramming/MOM/glpk.dat @@ -0,0 +1,43 @@ +data; + + set Samochody := s1, s2, s3, s4, s5; + + set Ladowarki := l1, l2, l3; +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l + param E{s in Samochody, l in Ladowarki}; +# Czas ladowania samochodu s na ladowarce l + param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s + param O{s in Samochody}; +# Zysk z realizacji kursu przez samoch骴 s + param Z{s in Samochody}; + + param E := + s1 l1 0 s1 l2 0 s1 l3 0 + s2 l1 0 s2 l2 0 s2 l3 0 + s3 l1 0 s3 l2 0 s3 l3 0 + s4 l1 0 s4 l2 0 s4 l3 0 + s5 l1 2 s5 l2 2 s5 l3 2; + + param D := + s1 l1 4 s1 l2 4 s1 l3 8 + s2 l1 1 s2 l2 1 s2 l3 2 + s3 l1 5 s3 l2 5 s3 l3 10 + s4 l1 3 s4 l2 3 s4 l3 6 + s5 l1 6 s5 l2 6 s5 l3 12; + + param O := + s1 8 + s2 5 + s3 6 + s4 4 + s5 9; + + param Z := + s1 100 + s2 10 + s3 200 + s4 20 + s5 330; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/glpkKod2.mod b/NotProgramming/MOM/glpkKod2.mod new file mode 100644 index 00000000..11ca1d71 --- /dev/null +++ b/NotProgramming/MOM/glpkKod2.mod @@ -0,0 +1,122 @@ +# 1. Zbiory +set Samochody; +set Ladowarki; + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l +param E{s in Samochody, l in Ladowarki}; +# Czas ladowania samochodu s na ladowarce l +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s +param O{s in Samochody}; +# Zysk z realizacji kursu przez samoch骴 s +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s na ladowarce l +var u{s in Samochody, l in Ladowarki}, >= 0, <= 24; +# zmienna binarna okreslajaca czy kurs zostanie wykonany +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samoch骴 i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajaca czy samoch骴 s jest ladowany jako pierwszy na ladowarce l +var p{s in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajacy czy samoch骴 s jest ladowany na ladowarce l +var k{s in Samochody, l in Ladowarki}, binary; +var z{i in Samochody, l in Ladowarki}, >= 0, <= 24; +var x{i in Samochody, j in Samochody, l in Ladowarki}, >= 0, <= 24; +var a{i in Samochody, l in Ladowarki}, >= 0, <= 24; +# a = (u[s, l] + D[s, l]) * k[s, l] +# Funkcja celu +maximize Q: sum {s in Samochody} y[s]*Z[s]; + +# Ograniczenia +subject to + # Samoch骴 nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody, l in Ladowarki}: + u[s,l] >= E[s, l]; + # Samoch骴 moze byc ladowany maksymalnie na jednej ladowarce + Ogr_2{s in Samochody}: + sum {l in Ladowarki} k[s, l] = y[s]; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. + Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: (i != j)}: + z[i,l] >= x[i, j, l]; + # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) + Ogr_4{i in Samochody, l in Ladowarki}: + v[i, i, l] = 0; + # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) + # Samoch骴 realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu + Ogr_5{s in Samochody}: + sum {l in Ladowarki} a[s, l] <= O[s]; + # (u[s, l] + D[s, l]) * k[s, l] <= O[s]; + Ogr_6{j in Samochody}: + sum {i in Samochody, l in Ladowarki} v[i, j, l] <= 1; + Ogr_7{i in Samochody}: + sum {j in Samochody, l in Ladowarki} v[i, j, l] <= 1; + # Samoch骴 musi byc albo ladowany jako pierwszy albo byc kt髍yms w kolejnosci ladowania albo nie byc w og髄e ladowanym. + Ogr_8{j in Samochody, l in Ladowarki}: + p[j, l] + sum {i in Samochody} v[i, j, l] = k[j, l]; + # Samoch骴 w danej kolejnosci, moze byc tylko raz na wszystkich ladowarkach + Ogr_9{l in Ladowarki}: + sum {s in Samochody} p[s, l] <= 1; + ### Linearyzacja z + Ogr_z1{i in Samochody, l in Ladowarki}: + z[i,l] <= 24*k[i,l]; + Ogr_z2{i in Samochody, l in Ladowarki}: + z[i,l] <= u[i,l]; + Ogr_z3{i in Samochody, j in Samochody, l in Ladowarki}: + z[i,l] >= u[i,l]-24*(1-k[i,l]); + ### Linearyzacja x + Ogr_x1{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] <= 24*v[i, j, l]; + Ogr_x2{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] <= (u[j,l] + D[j, l]); + Ogr_x3{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] >= (u[j,l] + D[j, l])-24*(1-v[i, j, l]); + ### Linearyzacja a + Ogr_a1{s in Samochody, l in Ladowarki}: + a[s, l] <= 24*k[s, l]; + Ogr_a2{s in Samochody, l in Ladowarki}: + a[s, l] <= (u[s, l] + D[s, l]); + Ogr_a3{s in Samochody, l in Ladowarki}: + a[s, l] >= (u[s, l] + D[s, l]) - 24*(1-k[s, l]); + +solve; +display Q; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s, l]; + +data; + +set Samochody := s1, s2, s3, s4, s5; + +set Ladowarki := l1, l2, l3; + +param E := +s1 l1 0 s1 l2 0 s1 l3 0 +s2 l1 0 s2 l2 0 s2 l3 0 +s3 l1 0 s3 l2 0 s3 l3 0 +s4 l1 0 s4 l2 0 s4 l3 0 +s5 l1 2 s5 l2 2 s5 l3 2; + +param D := +s1 l1 4 s1 l2 4 s1 l3 8 +s2 l1 1 s2 l2 1 s2 l3 2 +s3 l1 5 s3 l2 5 s3 l3 10 +s4 l1 3 s4 l2 3 s4 l3 6 +s5 l1 6 s5 l2 6 s5 l3 12; + +param O := +s1 8 +s2 5 +s3 6 +s4 4 +s5 9; + +param Z := +s1 100 +s2 10 +s3 200 +s4 20 +s5 330; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja.mod b/NotProgramming/MOM/implementacja.mod new file mode 100644 index 00000000..4005ba1c --- /dev/null +++ b/NotProgramming/MOM/implementacja.mod @@ -0,0 +1,122 @@ +# 1. Zbiory +set Samochody; +set Ladowarki; + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l +param E{s in Samochody, l in Ladowarki}; +# Czas ladowania samochodu s na ladowarce l +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s +param O{s in Samochody}; +# Zysk z realizacji kursu przez samoch骴 s +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s +var u{s in Samochody}, >= 0, <= 24; +# zmienna binarna okreslajaca czy kurs zostanie wykonany +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samoch骴 i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajaca czy samoch骴 s jest ladowany jako pierwszy na ladowarce l +var p{s in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajacy czy samoch骴 s jest ladowany na ladowarce l +var k{s in Samochody, l in Ladowarki}, binary; +var z{i in Samochody, l in Ladowarki}, >= 0, <= 24; +var x{i in Samochody, j in Samochody, l in Ladowarki}, >= 0, <= 24; +var a{i in Samochody, l in Ladowarki}, >= 0, <= 24; +# a = (u[s, l] + D[s, l]) * k[s, l] +# Funkcja celu +maximize Q: sum {s in Samochody} y[s]*Z[s]; + +# Ograniczenia +subject to + # Samoch骴 nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody, l in Ladowarki}: + u[s,l] >= E[s, l]; + # Samoch骴 moze byc ladowany maksymalnie na jednej ladowarce + Ogr_2{s in Samochody}: + sum {l in Ladowarki} k[s, l] = y[s]; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. + Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: (i != j)}: + z[i,l] >= x[i, j, l]; + # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) + Ogr_4{i in Samochody, l in Ladowarki}: + v[i, i, l] = 0; + # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) + # Samoch骴 realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu + Ogr_5{s in Samochody}: + sum {l in Ladowarki} a[s, l] <= O[s]; + # (u[s, l] + D[s, l]) * k[s, l] <= O[s]; + Ogr_6{j in Samochody}: + sum {i in Samochody, l in Ladowarki} v[i, j, l] <= 1; + Ogr_7{i in Samochody}: + sum {j in Samochody, l in Ladowarki} v[i, j, l] <= 1; + # Samoch骴 musi byc albo ladowany jako pierwszy albo byc kt髍yms w kolejnosci ladowania albo nie byc w og髄e ladowanym. + Ogr_8{j in Samochody, l in Ladowarki}: + p[j, l] + sum {i in Samochody} v[i, j, l] = k[j, l]; + # Samoch骴 w danej kolejnosci, moze byc tylko raz na wszystkich ladowarkach + Ogr_9{l in Ladowarki}: + sum {s in Samochody} p[s, l] <= 1; + ### Linearyzacja z + Ogr_z1{i in Samochody, l in Ladowarki}: + z[i,l] <= 24*k[i,l]; + Ogr_z2{i in Samochody, l in Ladowarki}: + z[i,l] <= u[i,l]; + Ogr_z3{i in Samochody, j in Samochody, l in Ladowarki}: + z[i,l] >= u[i,l]-24*(1-k[i,l]); + ### Linearyzacja x + Ogr_x1{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] <= 24*v[i, j, l]; + Ogr_x2{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] <= (u[j,l] + D[j, l]); + Ogr_x3{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] >= (u[j,l] + D[j, l])-24*(1-v[i, j, l]); + ### Linearyzacja a + Ogr_a1{s in Samochody, l in Ladowarki}: + a[s, l] <= 24*k[s, l]; + Ogr_a2{s in Samochody, l in Ladowarki}: + a[s, l] <= (u[s, l] + D[s, l]); + Ogr_a3{s in Samochody, l in Ladowarki}: + a[s, l] >= (u[s, l] + D[s, l]) - 24*(1-k[s, l]); + +solve; +display Q; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s, l]; + +data; + +set Samochody := s1, s2, s3, s4, s5; + +set Ladowarki := l1, l2, l3; + +param E := +s1 l1 0 s1 l2 0 s1 l3 0 +s2 l1 0 s2 l2 0 s2 l3 0 +s3 l1 0 s3 l2 0 s3 l3 0 +s4 l1 0 s4 l2 0 s4 l3 0 +s5 l1 2 s5 l2 2 s5 l3 2; + +param D := +s1 l1 4 s1 l2 4 s1 l3 8 +s2 l1 1 s2 l2 1 s2 l3 2 +s3 l1 5 s3 l2 5 s3 l3 10 +s4 l1 3 s4 l2 3 s4 l3 6 +s5 l1 6 s5 l2 6 s5 l3 12; + +param O := +s1 8 +s2 5 +s3 6 +s4 4 +s5 9; + +param Z := +s1 100 +s2 10 +s3 200 +s4 20 +s5 330; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja2.mod b/NotProgramming/MOM/implementacja2.mod new file mode 100644 index 00000000..a9f7c363 --- /dev/null +++ b/NotProgramming/MOM/implementacja2.mod @@ -0,0 +1,72 @@ +set Z; +set S; set S1; set S2; +set G1; +set H1; +set P; set P2; +set O2; +set D; +set W; +set N; set Nz; set Nw; set Nzw; + +param r{w in W}; +param u{i in N, j in N}; +param m{p in P, d in D}; + +var f{i in N, j in N}, >= 0, integer; #a +var a1, >= 0, integer; #e +var a2, >= 0, integer; #f +var a3, >= 0, integer; #g +var a4, >= 0, integer; #h +var bp1, >= 0, integer; +var cp1, >= 0, <=337, integer; #m +var cp2, >= 0, integer; +var co2, >= 0, integer; +var e, >= 0, <=1, integer; +var l, >= 0, integer; + +maximize Q: (sum {i in N, w in W} r[w] * f[i,w]) +- 10 * (sum {z in Z, s1 in S1} f[z,s1]) - 9 * (sum {z in Z, s2 in S2} f[z,s2]) ++ 3 * a1 + 2 * a2 - 2 * a3 - 4 * a4 - 1070 * cp1 - 730 * bp1 +- 1500 * (cp2 + co2) - 2 * 200 * l - 43 * (sum {s2 in S2, o2 in O2} f[s2,o2]); + +subject to +Ogr_a_c_d{i in N, j in N}: + f[i,j] <= u[i,j]; +Ogr_b{k in Nzw}: + sum {i in Nz} f[k,i] = sum {j in Nw} f[j,k]; +Ogr_i{z in Z, s1 in S1}: + a1 <= f[z,s1] - 2056; +Ogr_j{z in Z, s1 in S1}: + a2 <= f[z,s1] - 4834; +Ogr_k{z in Z, s2 in S2}: + a3 >= f[z,s2] - 1968; +Ogr_l{z in Z, s2 in S2}: + a4 >= f[z,s2] - 4417; +Ogr_n: + bp1 <= cp1; +Ogr_o{s1 in S1, g1 in G1}: + cp1 >= f[s1,g1] / 20; +Ogr_p{s1 in S1, h1 in H1}: + bp1 >= f[s1,h1] / 14; +Ogr_q{s2 in S2, p2 in P2}: + cp2 >= f[s2,p2] / 25; +Ogr_r: + sum {i in N, p in P} f[i,p] <= 13600; +Ogr_s{p in P, d in D}: + (sum {i in N} f[i,p]) * m[p,d] = f[p,d]; +Ogr_t: + l >= (sum {i in N, p in P} f[i,p])/200; +Ogr_u{s2 in S2, o2 in O2}: + co2 >= f[s2,o2] / 25; +Ogr_v{s2 in S2, o2 in O2}: + f[s2,o2] <= 6000 * e; +Ogr_w{s2 in S2, o2 in O2}: + f[s2,o2] - 2000 * e >= 0; +Ogr_x{w in W}: + sum {i in N} f[i,w] >= 4250; + +solve; +display {i in N, j in N: f[i,j] > 0}: f[i,j]; +display: a1; display: a2; display: a3; display: a4; display: bp1; +display: cp1; display: cp2; display: co2; display: +e; display: l; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja3.mod b/NotProgramming/MOM/implementacja3.mod new file mode 100644 index 00000000..9a47eebc --- /dev/null +++ b/NotProgramming/MOM/implementacja3.mod @@ -0,0 +1,96 @@ +# 1. Zbiory +set Samochody; +set Ladowarki; + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l +param E{s in Samochody}; +# Czas ladowania samochodu s na ladowarce l +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s +param O{s in Samochody}; +# Zysk z realizacji kursu przez samoch骴 s +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s +var u{s in Samochody}, >= 0, <= 24; +# zmienna binarna okreslajaca czy kurs zostanie wykonany +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samoch骴 i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody}, binary; +# zmienna binarna okreslajacy czy samoch骴 s jest ladowany na ladowarce l +var k{s in Samochody, l in Ladowarki}, binary; +# Funkcja celu +maximize Q: sum {s in Samochody} y[s]*Z[s]; + +# Ograniczenia +subject to + # Samoch骴 nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody}: + u[s] >= E[s] * y[s]; + # Samoch骴 moze byc ladowany maksymalnie na jednej ladowarce + Ogr_2{s in Samochody}: + sum {l in Ladowarki} k[s, l] = y[s]; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. + Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: i != j}: + u[i] + 24 * (1 - v[i, j]) >= (u[j] + D[j, l] * v[i, j]); + # ??? + Ogr_4{i in Samochody, j in Samochody, l in Ladowarki: i != j}: + v[i, j] + v[j, i] >= k[i, l] + k[j, l] - 1; + # Samoch骴 realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu + Ogr_6{s in Samochody}: + u[s] + sum {l in Ladowarki} (D[s, l] * k[s, l]) <= O[s] * y[s]; + # Ladowanie samochodu nie bedzie nastepowalo po ladowaniu dowolnego samochodu wiecej niz raz na danej ladowarce + #Ogr_7_temp{j in Samochody}: + # sum {i in Samochody} v[i, j] <= 1; + # Ladowanie samochodu nie bedzie poprzedzalo ladowania dowolnego samochodu wiecej niz raz na danej ladowarce + #Ogr_8_temp{i in Samochody}: + # sum {j in Samochody} v[i, j] <= 1; + Ogr_temp: + u['s4'] = 0; + Ogr_temp_2: + k['s4', 'l2'] = 1; + +solve; +display Q; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s]; +display {s in Samochody}: y[s]; +display {i in Samochody, j in Samochody: v[i, j] > 0}: v[i, j]; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l]; + +data; + +set Samochody := s1, s2, s3, s4, s5; + +set Ladowarki := l1, l2, l3; + +param E := +s1 0 +s2 0 +s3 0 +s4 0 +s5 2; + +param D := +s1 l1 4 s1 l2 4 s1 l3 8 +s2 l1 1 s2 l2 1 s2 l3 2 +s3 l1 5 s3 l2 5 s3 l3 10 +s4 l1 3 s4 l2 3 s4 l3 6 +s5 l1 6 s5 l2 6 s5 l3 12; + +param O := +s1 8 +s2 5 +s3 6 +s4 4 +s5 8; + +param Z := +s1 100 +s2 10 +s3 200 +s4 20 +s5 330; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja_gold.mod b/NotProgramming/MOM/implementacja_gold.mod new file mode 100644 index 00000000..e1fe0c08 --- /dev/null +++ b/NotProgramming/MOM/implementacja_gold.mod @@ -0,0 +1,125 @@ +# 1. Zbiory +set Samochody; +set Ladowarki; + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l +param E{s in Samochody, l in Ladowarki}; +# Czas ladowania samochodu s na ladowarce l +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s +param O{s in Samochody}; +# Zysk z realizacji kursu przez samochd s +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s na ladowarce l +var u{s in Samochody, l in Ladowarki}, >= 0, <= 24; +# zmienna binarna okreslajaca czy kurs zostanie wykonany +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samochd i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajaca czy samochd s jest ladowany jako pierwszy na ladowarce l +var p{s in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajacy czy samochd s jest ladowany na ladowarce l +var k{s in Samochody, l in Ladowarki}, binary; +var z{i in Samochody, l in Ladowarki}, >= 0, <= 24; +var x{i in Samochody, j in Samochody, l in Ladowarki}, >= 0, <= 24; +var a{i in Samochody, l in Ladowarki}, >= 0, <= 24; +# a = (u[s, l] + D[s, l]) * k[s, l] +# Funkcja celu +maximize Q: sum {s in Samochody} y[s]*Z[s]; + +# Ograniczenia +subject to + # Samochd nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody, l in Ladowarki}: + u[s,l] >= E[s, l]; + # Samochd moze byc ladowany maksymalnie na jednej ladowarce + Ogr_2{s in Samochody}: + sum {l in Ladowarki} k[s, l] = y[s]; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. + Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: (i != j)}: + z[i,l] >= x[i, j, l]; + # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) + Ogr_4{i in Samochody, l in Ladowarki}: + v[i, i, l] = 0; + # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) + # Samochd realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu + Ogr_5{s in Samochody}: + sum {l in Ladowarki} a[s, l] <= O[s]; + # (u[s, l] + D[s, l]) * k[s, l] <= O[s]; + Ogr_6{j in Samochody}: + sum {i in Samochody, l in Ladowarki} v[i, j, l] <= 1; + Ogr_7{i in Samochody}: + sum {j in Samochody, l in Ladowarki} v[i, j, l] <= 1; + # Samochd musi byc albo ladowany jako pierwszy albo byc ktryms w kolejnosci ladowania albo nie byc w ogle ladowanym. + Ogr_8{j in Samochody, l in Ladowarki}: + p[j, l] + sum {i in Samochody} v[i, j, l] = k[j, l]; + # Samochd w danej kolejnosci, moze byc tylko raz na wszystkich ladowarkach + Ogr_9{l in Ladowarki}: + sum {s in Samochody} p[s, l] <= 1; + ### Linearyzacja z + Ogr_z1{i in Samochody, l in Ladowarki}: + z[i,l] <= 24*k[i,l]; + Ogr_z2{i in Samochody, l in Ladowarki}: + z[i,l] <= u[i,l]; + Ogr_z3{i in Samochody, j in Samochody, l in Ladowarki}: + z[i,l] >= u[i,l]-24*(1-k[i,l]); + ### Linearyzacja x + Ogr_x1{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] <= 24*v[i, j, l]; + Ogr_x2{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] <= (u[j,l] + D[j, l]); + Ogr_x3{i in Samochody, j in Samochody, l in Ladowarki}: + x[i, j, l] >= (u[j,l] + D[j, l])-24*(1-v[i, j, l]); + ### Linearyzacja a + Ogr_a1{s in Samochody, l in Ladowarki}: + a[s, l] <= 24*k[s, l]; + Ogr_a2{s in Samochody, l in Ladowarki}: + a[s, l] <= (u[s, l] + D[s, l]); + Ogr_a3{s in Samochody, l in Ladowarki}: + a[s, l] >= (u[s, l] + D[s, l]) - 24*(1-k[s, l]); + +solve; +display Q; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s, l]; +display {s in Samochody}: y[s]; +display {i in Samochody, j in Samochody, l in Ladowarki: v[i, j, l] > 0}: v[i, j, l]; +display {s in Samochody, l in Ladowarki}: k[s, l]; + +data; + +set Samochody := s1, s2, s3, s4, s5; + +set Ladowarki := l1, l2, l3; + +param E := +s1 l1 0 s1 l2 0 s1 l3 0 +s2 l1 0 s2 l2 0 s2 l3 0 +s3 l1 0 s3 l2 0 s3 l3 0 +s4 l1 0 s4 l2 0 s4 l3 0 +s5 l1 2 s5 l2 2 s5 l3 2; + +param D := +s1 l1 4 s1 l2 4 s1 l3 8 +s2 l1 1 s2 l2 1 s2 l3 2 +s3 l1 5 s3 l2 5 s3 l3 10 +s4 l1 3 s4 l2 3 s4 l3 6 +s5 l1 6 s5 l2 6 s5 l3 12; + +param O := +s1 8 +s2 5 +s3 6 +s4 4 +s5 9; + +param Z := +s1 100 +s2 10 +s3 200 +s4 20 +s5 330; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja_temp.mod b/NotProgramming/MOM/implementacja_temp.mod new file mode 100644 index 00000000..f85ce7ac --- /dev/null +++ b/NotProgramming/MOM/implementacja_temp.mod @@ -0,0 +1,94 @@ +# 1. Zbiory +set Samochody; +set Ladowarki; + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l [x] +param E{s in Samochody}; +# Czas ladowania samochodu s na ladowarce l [x] +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s [x] +param O{s in Samochody}; +# Zysk z realizacji kursu przez samochd s [x] +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s na ladowarce l [x] +var u{s in Samochody}, >= 0, <= 24; +# zmienna binarna okreslajaca czy kurs zostanie wykonany [x] +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samochd i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody}, binary; +# zmienna binarna okreslajacy czy samochd s jest ladowany na ladowarce l [x] +var k{s in Samochody, l in Ladowarki}, binary; +# a = (u[s, l] + D[s, l]) * k[s, l] +# Funkcja celu [x] +maximize Q: sum {s in Samochody} y[s]*Z[s]; + +# Ograniczenia +subject to + # Samoch骴 nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. [x] + Ogr_1{s in Samochody, l in Ladowarki}: + u[s] >= E[s] * y[s]; + # Samoch骴 moze byc ladowany maksymalnie na jednej ladowarce [x] + Ogr_2{s in Samochody}: + sum {l in Ladowarki} k[s, l] = y[s]; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. [x] + Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: i != j}: + u[i] + 2400 * (1 - v[i, j]) >= (u[j] + D[j, l] * v[i, j]) - 4800 * (1 - k[j, l]); + Ogr_4{i in Samochody, j in Samochody, l in Ladowarki: i != j}: + v[i, j] + v[j, i] >= k[i, l] + k[j, l] - 1; + # Samoch骴 realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu [x] + Ogr_5{s in Samochody}: + u[s] + sum {l in Ladowarki} (D[s, l] * k[s, l]) <= O[s] * y[s]; + +solve; +display Q; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s]; +#display {s in Samochody}: y[s]; +display {i in Samochody, j in Samochody: v[i, j] > 0}: v[i, j]; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l]; + +data; + +set Samochody := s1, s2, s3, s4, s5, s6, s7; + +set Ladowarki := l1, l2, l3, l4; + +param E := +s1 6 +s2 6 +s3 6 +s5 6 +s4 6 +s6 6 +s7 6; + +param D := +s1 l1 4 s1 l2 2 s1 l3 2 s1 l4 1 +s2 l1 6 s2 l2 3 s2 l3 3 s2 l4 1.5 +s3 l1 1 s3 l2 0.5 s3 l3 0.5 s3 l4 0.25 +s4 l1 8 s4 l2 4 s4 l3 4 s4 l4 2 +s5 l1 10 s5 l2 5 s5 l3 5 s5 l4 2.5 +s6 l1 18 s6 l2 9 s6 l3 9 s6 l4 4.5 +s7 l1 12 s7 l2 6 s7 l3 6 s7 l4 3; + +param O := +s1 10 +s2 10 +s3 12 +s4 14 +s5 12 +s6 12 +s7 10; + +param Z := +s1 25 +s2 25 +s3 50 +s4 100 +s5 25 +s6 50 +s7 100; + +end; diff --git a/NotProgramming/MOM/report_two/MOM_SPRAWOZDANIE_2_RUDNICKI_307585.pdf b/NotProgramming/MOM/report_two/MOM_SPRAWOZDANIE_2_RUDNICKI_307585.pdf new file mode 100644 index 00000000..f04fd818 Binary files /dev/null and b/NotProgramming/MOM/report_two/MOM_SPRAWOZDANIE_2_RUDNICKI_307585.pdf differ diff --git a/NotProgramming/MOM/report_two/mom2.drawio.pdf b/NotProgramming/MOM/report_two/mom2.drawio.pdf new file mode 100644 index 00000000..7110ed5a Binary files /dev/null and b/NotProgramming/MOM/report_two/mom2.drawio.pdf differ diff --git a/NotProgramming/MOM/report_two/plikdat.dat b/NotProgramming/MOM/report_two/plikdat.dat new file mode 100644 index 00000000..992da431 --- /dev/null +++ b/NotProgramming/MOM/report_two/plikdat.dat @@ -0,0 +1,41 @@ +data; +set Z := z; +set S := s1, s2; +set S1 := s1; +set S2 := s2; +set G1 := g1; +set P := p1, p2; +set P2 := p2; +set O2 := o2; +set D := d1, d2; +set W := w1, w2; +set N := z, s1, s2, g1, p1, p2, o2, d1, d2, w1, w2; +set Nz := s1, s2, g1, p1, p2, o2, d1, d2, w1, w2; +set Nw := z, s1, s2, g1, p1, p2, o2, d1, d2; +set Nzw := s1, s2, g1, p1, p2, o2, d1, d2; +param r := w1 467 w2 480; +param u := +z z 0 z s1 12000 z s2 8000 z g1 0 z p1 0 +z p2 0 z o2 0 z d1 0 z d2 0 z w1 0 z w2 0 +s1 z 0 s1 s1 0 s1 s2 0 s1 g1 99999 s1 p1 0 +s1 p2 0 s1 o2 0 s1 d1 0 s1 d2 0 s1 w1 0 s1 w2 0 +s2 z 0 s2 s1 0 s2 s2 0 s2 g1 0 s2 p1 0 +s2 p2 99999 s2 o2 99999 s2 d1 0 s2 d2 0 s2 w1 0 s2 w2 0 +g1 z 0 g1 s1 0 g1 s2 0 g1 g1 0 g1 p1 99999 +g1 p2 0 g1 o2 0 g1 d1 0 g1 d2 0 g1 w1 0 g1 w2 0 +p1 z 0 p1 s1 0 p1 s2 0 p1 g1 0 p1 p1 0 +p1 p2 0 p1 o2 0 p1 d1 99999 p1 d2 99999 p1 w1 0 p1 w2 0 +p2 z 0 p2 s1 0 p2 s2 0 p2 g1 0 p2 p1 0 +p2 p2 0 p2 o2 0 p2 d1 99999 p2 d2 99999 p2 w1 0 p2 w2 0 +o2 z 0 o2 s1 0 o2 s2 0 o2 g1 0 o2 p1 0 +o2 p2 0 o2 o2 0 o2 d1 0 o2 d2 0 o2 w1 0 o2 w2 99999 +d1 z 0 d1 s1 0 d1 s2 0 d1 g1 0 d1 p1 0 +d1 p2 0 d1 o2 0 d1 d1 0 d1 d2 0 d1 w1 99999 d1 w2 0 +d2 z 0 d2 s1 0 d2 s2 0 d2 g1 0 d2 p1 0 +d2 p2 0 d2 o2 0 d2 d1 0 d2 d2 0 d2 w1 0 d2 w2 99999 +w1 z 0 w1 s1 0 w1 s2 0 w1 g1 0 w1 p1 0 +w1 p2 0 w1 o2 0 w1 d1 0 w1 d2 0 w1 w1 0 w1 w2 0 +w2 z 0 w2 s1 0 w2 s2 0 w2 g1 0 w2 p1 0 +w2 p2 0 w2 o2 0 w2 d1 0 w2 d2 0 w2 w1 0 w2 w2 0; +param m := p1 d1 0.1 p1 d2 0.9 p2 d1 0.1 p2 d2 0.9; +end; \ No newline at end of file diff --git a/NotProgramming/MOM/report_two/plikmod.mod b/NotProgramming/MOM/report_two/plikmod.mod new file mode 100644 index 00000000..bb98c656 --- /dev/null +++ b/NotProgramming/MOM/report_two/plikmod.mod @@ -0,0 +1,115 @@ +# 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; \ No newline at end of file diff --git a/NotProgramming/MOM/report_two/report_two.tex b/NotProgramming/MOM/report_two/report_two.tex new file mode 100644 index 00000000..9c1c33da --- /dev/null +++ b/NotProgramming/MOM/report_two/report_two.tex @@ -0,0 +1,363 @@ +\documentclass[12pt]{article} +\usepackage[polish]{babel} +\usepackage{float} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{pdfpages} +\usepackage[T1]{fontenc} % Add this line + \title{Sprawozdanie z projektu 2, MOM} + \author{Krzysztof Rudnicki, 307585} + \date{\today} +\begin{document} +\maketitle +\section{Parametry} +z - stan pocz膮tkowy \\ +S - zakupione surowce (S = \{S1, S2\}) \\ +G1 - surowiec S1 za艂adowany do wagon贸w \\ +P - surowce w przygotowywalni (P = \{P1, P2\}) \\ +O2 - surowiec S2 w zak艂adzie obr贸bki cieplnej \\ +D - p贸艂produkty (D = \{D1, D2\}) \\ +W - wyroby (W = \{W1, W2\}) \\ +N - stany surowc贸w/p贸艂produkt贸w/wyrob贸w (zakupione surowce, surowce w przechowalni, surowce w zak艂adzie obr贸bki cieplnej, p贸艂produkty, wyroby) \\ +$r_w$ - cena sprzeda偶y wyrobu $w[\frac{1}{t}]$ \\ +$u_{ij}$ - przepustowo艣c przep艂ywu ze stanu i do stanu j[t] \\ +$m_{pd}$ - mno偶nik definiuj膮cy przep艂yw ze stanu 'surowiec w przygotowalni p' do stanu 'p贸艂produkt d' + +\section{Zmienne decyzyjne} +$f_{ij}$ = przep艂yw pomi臋dzy stanem i a stanem j [t] \\ +\section{Zmienne pomocnicze} +$a_1$ - liczba zakupionego surowca S1 powy偶ej 2387 ton [t] \\ +$a_2$ - liczba zakupionego surowca S1 powy偶ej 6659 ton [t] \\ +$b_1$ - liczba zakupionego surowca S2 powy偶ej 2090 ton [t] \\ +$b_2$ - liczba zakupionego surowca S2 powy偶ej 4349 ton [t] \\ +$c_{P1}$ - liczba wagon贸w transportuj膮cych surowiec S1 do przygotowalni \\ +$e_{P2}$ - liczba ci臋偶ar贸wek transportuj膮cych surowiec S2 do przygotowalni \\ +$e_{O2}$ - liczba ci臋偶ar贸wek transportuj膮cyhc surowiec S2 do zak艂adu obr贸bki cieplnej \\ +$g_1$ - zmienna binarna przyjmuj膮ca warto艣膰 1 gdy przep艂yw ze stanu "zakupiony surowiec S2" (S2) do stanu "surowiec S2 w zak艂adzie obr贸bki cieplnej" (O2) jest wi臋kszy ni偶 2000 ton i mniejszy ni偶 4000 ton \\ +$g_2$ - zmienna binarna przyjmuj膮ca warto艣膰 1 gdy przep艂yw ze stanu "zakupiony surowiec S2" (S2) do stanu "surowiec S2 w zak艂adzie obr贸bki cieplnej" (O2) jest wi臋kszy ni偶 4000 ton i mniejszy ni偶 6000 ton \\ +l - liczba pracownik贸w zatrudnionych w przygotowalni +\section{Funkcja celu} +\begin{align*} +Q &= max[Zysk - Koszt] \\ +&= max[\sum_{i \in N, w \in W} r_w + f_{iw} \\ +&- (19f_{zS1} - 5a_1 - 4a_2 + 11f_{zS2} + 2b_1 + 2b_2 \\ +&+ 1290c_{P1} + 1500e_{P2} +1500e_{O2} + 160l + 10000g_1 + 40000g_2)] +\end{align*} + +\section{Ograniczenia} +\subsection{Og贸lne} +Przep艂yw musi by膰 nieujemny oraz mniejszy przepustowo艣ci +\begin{equation} +0 \leq f_{ij} \leq u_{ij}, \qquad (i,j) \in N \\ +\end{equation} +Wszystko co przyp艂yne艂o do stanu k musi stamt膮d "odp艂yn膮膰" +\begin{equation} +\sum_{i \in N \backslash \{z\}} f_{ki} = \sum_{i \in N \backslash \{W\}} f_{jk}, \qquad k \in N \backslash \{z, W\} +\end{equation} + +\subsection{Dost臋pne surowce} +Nie mo偶emy kupi膰 wi臋cej surowca S1 ni偶聽jest dost臋pne +\begin{equation} +f_{zS1} \leq 12000 +\end{equation} +Nie mo偶emy kupi膰 wi臋cej surowca S2 ni偶聽jest dost臋pne +\begin{equation} +f_{zS2} \leq 8000 +\end{equation} + +\subsection{Koszt zakupu surowc贸w} +Nie mo偶emy kupi膰 mniej ni偶 0 surowc贸w +\begin{equation} +a_1 \geq 0 +\end{equation} +\begin{equation} +a_2 \geq 0 +\end{equation} +\begin{equation} +b_1 \geq 0 +\end{equation} +\begin{equation} +b_2 \geq 0 +\end{equation} +Ograniczamy ile ton ponad dany limit kupili艣my +\begin{equation} +a_1 \leq f_{zS1} - 2387 +\end{equation} +liczba powy偶ej 2056 ton +\begin{equation} +a_2 \leq f_{zS1} - 6659 +\end{equation} +liczba powy偶ej 2056 ton +\begin{equation} +b_1 \leq f_{zS2} - 2090 +\end{equation} +liczba powy偶ej 2056 ton +\begin{equation} +b_2 \leq f_{zS2} - 4349 +\end{equation} +\subsection{Transport surowca S1 do przygotowalni} +wagon mo偶e przetransportowa膰 maks. 18 ton surowca S1 +\begin{equation} +b_{P1} \geq [\frac{ f_{S1, G1} }{18}] +\end{equation} +\subsection{Transport surowca S2 do przygtowalni} +ci臋偶ar贸wka mo偶e przetransportowa膰 maks. 25 ton surowca S2 +\begin{equation} +c_{P2} \geq [ \frac{ f_{S2, P2} }{ 25 } ] +\end{equation} +\subsection{Praca przygotowalni} +Przygotowalnia nie mo偶e mie膰 wi臋cej surowc贸w ni偶 przepustowo艣ci +\begin{equation} +\sum_{i \in N, p \in P} f_{ip} \leq 16000 +\end{equation} +ilo艣膰 p贸艂produkt贸w w zale偶no艣ci od surowca +\begin{equation} +(\sum_{i \in N} f_{ip}) m_{pd} = f_{pd}, \qquad i \in N, p \in P, d \in D +\end{equation} +\subsection{Koszt pracy przygotowalni} +3 pracownik贸w mo偶e obs艂ugiwa膰 maksymalnie 150 ton ca艂kowitej ilo艣ci przerabianych surowc贸w +\begin{equation} +l \geq [ \frac{ \sum_{i\in N, p \in P} f_{ip} }{150} ] +\end{equation} +\subsection{Transport S2 do zak艂adu obr贸bki cieplnej} +ci臋偶ar贸wka mo偶e przetransportowa膰 maks. 25 ton surowca S2 +\begin{equation} +c_{O2} \geq [\frac{ f_{S2, O2} }{25}] +\end{equation} +\subsection{Praca zak艂adu obr贸bki cieplnej} +ilo艣膰 surowca S2 w zak艂adzie obr贸bki cieplnej nie mo偶e by膰聽wi臋ksza od 6000 +\begin{equation} +f_{S2, O2} \leq 6000 +\end{equation} +\subsection{Minimalna dostarczona ilo艣膰 wyrob贸w} +Zgodnie z umow膮 musimy dostarczy膰 przynajmniej 5000 ton wyrob贸w +\begin{equation} +\sum_{i \in N f_{iw}} \geq 5000, \qquad w \in W +\end{equation} +\subsection{Maksymalna liczba wagonow} +Na jedna lokomotyw臋, nie mo偶e przypada膰 wi臋cej ni偶 12 wagon贸w +\begin{equation} +12wl \geq c_{P1} +\end{equation} + +\section{Model sieciowy} +\includepdf{mom2.drawio.pdf} + +\section{Implementacja modelu} +\begin{lstlisting}[caption= plik mod] +# 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; +\end{lstlisting} + +\begin{lstlisting}[caption= plik dat] +data; +set Z := z; +set S := s1, s2; +set S1 := s1; +set S2 := s2; +set G1 := g1; +set P := p1, p2; +set P2 := p2; +set O2 := o2; +set D := d1, d2; +set W := w1, w2; +set N := z, s1, s2, g1, p1, p2, o2, d1, d2, w1, w2; +set Nz := s1, s2, g1, p1, p2, o2, d1, d2, w1, w2; +set Nw := z, s1, s2, g1, p1, p2, o2, d1, d2; +set Nzw := s1, s2, g1, p1, p2, o2, d1, d2; +param r := w1 467 w2 480; +param u := +z z 0 z s1 12000 z s2 8000 z g1 0 z p1 0 +z p2 0 z o2 0 z d1 0 z d2 0 z w1 0 z w2 0 +s1 z 0 s1 s1 0 s1 s2 0 s1 g1 99999 s1 p1 0 +s1 p2 0 s1 o2 0 s1 d1 0 s1 d2 0 s1 w1 0 s1 w2 0 +s2 z 0 s2 s1 0 s2 s2 0 s2 g1 0 s2 p1 0 +s2 p2 99999 s2 o2 99999 s2 d1 0 s2 d2 0 s2 w1 0 s2 w2 0 +g1 z 0 g1 s1 0 g1 s2 0 g1 g1 0 g1 p1 99999 +g1 p2 0 g1 o2 0 g1 d1 0 g1 d2 0 g1 w1 0 g1 w2 0 +p1 z 0 p1 s1 0 p1 s2 0 p1 g1 0 p1 p1 0 +p1 p2 0 p1 o2 0 p1 d1 99999 p1 d2 99999 p1 w1 0 p1 w2 0 +p2 z 0 p2 s1 0 p2 s2 0 p2 g1 0 p2 p1 0 +p2 p2 0 p2 o2 0 p2 d1 99999 p2 d2 99999 p2 w1 0 p2 w2 0 +o2 z 0 o2 s1 0 o2 s2 0 o2 g1 0 o2 p1 0 +o2 p2 0 o2 o2 0 o2 d1 0 o2 d2 0 o2 w1 0 o2 w2 99999 +d1 z 0 d1 s1 0 d1 s2 0 d1 g1 0 d1 p1 0 +d1 p2 0 d1 o2 0 d1 d1 0 d1 d2 0 d1 w1 99999 d1 w2 0 +d2 z 0 d2 s1 0 d2 s2 0 d2 g1 0 d2 p1 0 +d2 p2 0 d2 o2 0 d2 d1 0 d2 d2 0 d2 w1 0 d2 w2 99999 +w1 z 0 w1 s1 0 w1 s2 0 w1 g1 0 w1 p1 0 +w1 p2 0 w1 o2 0 w1 d1 0 w1 d2 0 w1 w1 0 w1 w2 0 +w2 z 0 w2 s1 0 w2 s2 0 w2 g1 0 w2 p1 0 +w2 p2 0 w2 o2 0 w2 d1 0 w2 d2 0 w2 w1 0 w2 w2 0; +param m := p1 d1 0.1 p1 d2 0.9 p2 d1 0.1 p2 d2 0.9; +end; +\end{lstlisting} + +\section{Wyniki} +Model z takimi ograniczeniami \textbf{nie znajduje} rozwi膮zania \\ +Problemem jest tu ogranicznie m贸wi膮ce o tym 偶e nale偶y dostaczy膰 co najmniej \textbf{5000} ton \textbf{ka偶dego} produktu \\ +To ograniczenie jest niewykonywalne gdy偶 nawet zak艂adaj膮c dostarczenie maksymalnej liczby ton surowc贸w (12000 + 8000 = 20000) ton, i ignoruj膮c ograniczenie przepustowo艣膰i przygotowalni 16000 ton, nie jeste艣my w stanie wytworzy膰聽wystarczaj膮co p贸艂produktu D1 aby wytworzy膰 wystarczaj膮co wyrobu W1 \\ +gdyby艣my ca艂o艣膰聽dost臋pnych surowc贸w (znowu, ignoruj膮c przepustowo艣膰 przygotowalni), zu偶yli na wytwarzanie tylko i wy艂膮cznie p贸艂produktu D1 z kt贸rego potem uzyskujemy wyr贸b W1, otrzymaliby艣my: +\[ (12000 + 8000) * 0.1 = 20000 * 0.1 = 2000 \] +maksymalna liczba ton wyrobu W1 kt贸r膮 mo偶emy uzyska膰, ignoruj膮c przepustowo艣膰 przygotowywalni oraz wymagania dotycz膮ce W2 wynosi 2000 ton, czyli mniej ni偶 5000 wymaganych ton \\ +W zwi膮zku z tym wyniki przedstawione ni偶ej dotycz膮c膮 przypadku w kt贸rym \textbf{ignorujemy} ograniczenie zwi膮zane z minimaln膮 liczb膮 ton ka偶dego produktu kt贸ry musimy dostarczy膰 (ograniczenie 20) \\ +\begin{figure}[H] +\caption{} +\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|} +\hline + & z & S1 & S2 & G1 & P1 & P2 & O2 & D1 & D2 & W1 & W2 \\ +\hline +z & 0 & 12000 & 8000 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ +\hline +S1 & 0 & 0 & 0 & 12000 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ +\hline +S2 & 0 & 0 & 0 & 0 & 0 & 2000 & 6000 & 0 & 0 & 0 & 0 \\ +\hline +G1 & 0 & 0 & 0 & 0 & 12000 & 0 & 0 & 0 & 0 & 0 & 0 \\ +\hline +P1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1200 & 10800 & 0 & 0 \\ +\hline +P2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 200 & 1800 & 0 & 0 \\ +\hline +O2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 6000 \\ +\hline +D1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1400 & 0 \\ +\hline +D2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 12600 \\ +\hline +W1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ +\hline +W2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ +\hline + +\end{tabular} +\end{figure} + +\[ a_1 = 9613 \] +\[ a_2 = 5341 \] +\[ b_1 = 5910 \] +\[ b_2 = 3651 \] +\[ w_1 = 56 \] +\[ c_{P1} = 667 \] +\[ e_{P2} = 80 \] +\[ e_{O2} = 240 \] +\[ e_1 = 0 \] +\[ e_2 = 0 \] +\[ l = 94 \] +Ponownie, wyniki powy偶ej s膮 prawdziwe wy艂膮cznie dla przypadku w kt贸rym \textbf{ignorujemy ograniczenie numer 20} + +\end{document} \ No newline at end of file