Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. # MPSiS 2018/2019
  2. # Model UFAP, N/L
  3.  
  4. /* Number of vertexes, edges, dispositions */
  5. param V_count, integer, >= 0; #wierzcholki
  6. param E_count, integer, >= 0; #luki
  7. param D_count, integer, >= 0; #zapotrzebowanie
  8. param K_count, integer, >= 0;
  9.  
  10. /* Sets of vertexes, edges and dispositions */ #zbiory po ktorych iterujemy
  11. set V, default {1..V_count};
  12. set E, default {1..E_count};
  13. set D, default {1..D_count};
  14. set K, default {1..K_count}; #modularnosc
  15.  
  16. /* Zapotrzebowanie zwiazane z ruchem */ #macierze (tu akurat vektor)
  17. param h{d in D} >= 0; #vektor zawierajacy rozmiar zapotrzebowania
  18. param s{d in D} >= 0; #kazdemu zapotrzebowaniu przypiszemy wierzcholek gdzie startujemy
  19. param t{d in D} >= 0; #wezly docelowe
  20. param m{k in K} >= 0; #rozmiar modulu
  21. param g{k in K} >= 0; #koszt instalacji danego modulu
  22.  
  23. /* Aev, Bev as params */ #tu wystarcza wartosci binarne
  24. param A{e in E, v in V}, >= 0, default 0; #czy sie zaczyna
  25. param B{e in E, v in V}, >= 0, default 0; #czy sie konczy
  26.  
  27. /* Capacity */ #pojemnosc przypisana konkretnemu lukowi
  28. #param c{e in E} >= 0, default 5;
  29. #dla modularnosci wyrzucamy c
  30.  
  31. /* KSI xD */ #koszty uzycia jednostki na danym laczu
  32. param KSI{e in E} >= 0;
  33.  
  34. /* Decision variables */ #slowo klucz to "var" (var jest tylko przy zmiennych)
  35. var x{e in E, d in D} >= 0; #mowi nam to ile ruchu przesylamy w ramach zapotrzebowania na danym laczu
  36. var u{e in E, d in D}, binary; #dla niezbif.
  37. var f{e in E, k in K}, integer, >= 0; #modularnosc
  38.  
  39. /* Objective function 'z' */
  40. minimize z: sum{e in E} KSI[e]*(sum{d in D} x[e,d]);
  41. minimize z2: sum{e in E} KSI[e]*(sum{d in D} x[e,d]) + sum{e in E, k in K} g[k]*f[e,k]; #modularnosc
  42.  
  43. /* Constraints */
  44. s.t. c1{d in D, v in V : v == s[d]} : sum{e in E} (A[e,v]*x[e,d] - B[e,v]*x[e,d]) == h[d];
  45. #suma tego co wychodzi ze zrodla (nic nie wplywa wiec =0) rowna sie zapotrzebowaniu
  46. s.t. c2{d in D, v in V : v <> s[d] and v <> t[d]} : sum{e in E} (A[e,v]*x[e,d] - B[e,v]*x[e,d]) == 0;
  47. #prawo Kirchoffa dla wszytskich wezlow poza poczatkiem i koncem
  48. s.t. c3{d in D, v in V : v == t[d]} : sum{e in E} (A[e,v]*x[e,d] - B[e,v]*x[e,d]) == -h[d];
  49. #wszytsko to co wyplywa (pierwszy czlon to 0) minus to co wplywa ma wyniesc "minus" zapotrzebowanie
  50. #s.t. c4{e in E} : sum{d in D} x[e,d] <= c[e];
  51. #na danej krawedzi to co przechodzi nie moze byc wieksze od wolumenu
  52.  
  53. #dla niezbif:
  54. s.t. c5{d in D, v in V : v == s[d]} : sum{e in E} (A[e,v]*u[e,d]) <= 1;
  55. #wezel poczatkowy
  56. s.t. c6{d in D, v in V : v <> s[d] and v <> t[d]} : sum{e in E} (A[e,v]*u[e,d]) <= 1;
  57. s.t. c7{d in D, v in V : v <> s[d] and v <> t[d]} : sum{e in E} (B[e,v]*u[e,d]) <= 1;
  58. #wezly tranzytowe
  59. s.t. c8{d in D, v in V : v == t[d]} : sum{e in E} (B[e,v]*u[e,d]) <= 1;
  60. #wezel koncowy
  61. s.t. c9{d in D,e in E} : x[e,d] <= M*u[e,d];
  62. #jezeli na laczu e istnieje niezerowy ruch zapotrzebowania d to dla tego ruchu i dla tego zapotrzebowania wartosc u ma #sie ustawic na 1
  63.  
  64. #modularnosc:
  65. s.t. c10{e in E} : sum{d in D} x[e,d] <= sum{k in K} m[k]*f[e,k];
  66. #dla modularnosci komentujemy c4
  67.  
  68. printf{e in E, v in V} "A[%d,%d] = %d, B[%d,%d] = %d\n", e, v, A[e, v], e, v, B[e, v];
  69. printf{e in E} "KSI[%d] = %d, c[%d] = %d\n", e, KSI[e], e, c[e];
  70. printf{d in D} "s[%d] = %d, t[%d] = %d, h[%d] = %d\n", d, s[d], d, t[d], d, h[d];
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement