Advertisement
Guest User

Untitled

a guest
May 29th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. /*********************************************
  2. * OPL 12.6.1.0 Model
  3. * Author: afro
  4. * Creation Date: 25-05-2016 at 21:23:31
  5. *********************************************/
  6.  
  7. // liczba zadań
  8. int n = ...;
  9. // liczba typów zasobów
  10. int p = ...;
  11.  
  12.  
  13. // zbiór zadań
  14. range Tasks = 1..n;
  15. // zbiór zasobów
  16. range Resources = 1..p;
  17.  
  18. // czas wykonania każdego zadania
  19. int time[Tasks] = ...;
  20. // liczba jednostek czasu
  21. int nT = sum(t in Tasks) time[t];
  22. // limit każdego z zasobów
  23. int N[Resources] = ...;
  24. // liczba zasobów potrzebna do wykonania każdego zadania
  25. int res[Tasks][Resources] = ...;
  26. // macierz ograniczeń oparta na grafie, w wierszach są zadania,
  27. //które muszą zostać wykonane najpierw
  28. int cM[Tasks][Tasks] = ...;
  29.  
  30. // zbiór jednostek czasu
  31. range MaxTime = 1..nT;
  32.  
  33.  
  34. // czas rozpoczęcia zadania
  35. dvar float sT[Tasks];
  36. // binarny grafik reprezentujacy wykonywane zadania w jednostce czasu
  37. dvar boolean schedule[Tasks][MaxTime];
  38. // czas zakończenia zadania
  39. //dvar int eT[Tasks];
  40. // zasoby potrzebne w jednostce czasu
  41. //dvar int ResInTime[Resources][MaxTime];
  42.  
  43.  
  44. minimize max(t in Tasks) (sT[t] + time[t]);
  45. subject to {
  46.  
  47. forall(t in Tasks)
  48. first:
  49. // ustalenie kolejności na podstawie grafu
  50. sT[t] == (max(cT in Tasks) (cM[t,cT]*(sT[cT] + time[cT])));
  51.  
  52. forall(t in Tasks)
  53. second:
  54. // ustawienie jedynek na przedziale start time - end time
  55. (sum(tU in MaxTime) ((schedule[t][tU] == 1) && (tU >= sT[t]) && (tU <= (sT[t] + time[t])))) == time[t];
  56.  
  57.  
  58. forall(t in Tasks)
  59. third1:
  60. // powiązanie sT ze schedule
  61. (max(tU in MaxTime) (tU*schedule[t][tU]) - time[t]) == sT[t];
  62.  
  63. forall(t in Tasks)
  64. third2:
  65. // powiązanie eT ze schedule
  66. (max(tU in MaxTime) (tU*schedule[t][tU])) == (sT[t] + time[t]);
  67.  
  68. forall(tU in MaxTime)
  69. {
  70. third3:
  71. // ograniczenie zasobów, sumowanie zasobów kolumnami
  72. forall(r in Resources)
  73. {
  74. // bezpośrednie ograniczenie zasobów, bez przypisania do zmiennej
  75. // dla 32 kończy się, dla 31 i mniej się nie kończy
  76. // ogólne ograniczenie to N[r]
  77. (sum(t in Tasks) (schedule[t][tU]*res[t][r])) <= 34;
  78. }
  79. };
  80.  
  81. }
  82.  
  83. execute {
  84. writeln("Hello ", sT[8] + time[8]);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement