Guest User

Untitled

a guest
Feb 20th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. include "globals.mzn";
  2.  
  3. int: n;
  4. int: k;
  5. int: EndTime;
  6. int: ConstTime;
  7. array[1..n] of var 0..EndTime: Begins;
  8. array[1..n] of var 0..EndTime: Ends;
  9. array[1..n] of 0..EndTime: Durations;
  10. array[1..n] of var 0..EndTime: NeedEnds;
  11. array[1..n] of var 0..1: TimeCondition;
  12. array[1..n] of 0..EndTime: Start_time;
  13. array[1..k] of 0..EndTime: B;
  14. array[1..k] of 0..EndTime: E;
  15. array[1..n] of var 0..1: NeedCh;
  16.  
  17. array[1..n] of var 1..n: x;
  18.  
  19. array[1..n] of 0..EndTime: FirstTime;
  20. array[1..n,1..n] of 0..EndTime: Time;
  21. % No overlapping
  22. predicate no_overlap(var int:s1, var int:d1, var int:z1, int:h1, var int:s2, var int:d2, var int:z2, int:h2) =
  23. s1 + d1 + z1 + h1 <= s2 / s2 + d2 + z2 + h2 <= s1;
  24.  
  25. predicate in_interval(var int:c, int:k,
  26. var int:b,
  27. var int:s,
  28. array[int] of var int:B_int,
  29. array[int] of var int:E_int) =
  30. (let {
  31. array[1..k] of var 0..1: res,
  32. int: i = 1
  33. } in
  34. forall(i in 1..k) (res[i] = (if (b >=B_int[i]
  35. / b+s <=E_int[i]) / c = 0
  36. then 1 else 0 endif ))
  37. /
  38. sum(res) > 0);
  39.  
  40. % general constraints
  41. constraint
  42. all_different(x)
  43. /
  44. forall(i in 1..n) (Ends[x[i]] = Begins[x[i]] + ConstTime + Start_time[x[i]] + Durations[x[i]])
  45. /
  46. forall(i,j in 1..n where i < j) (
  47. no_overlap(Begins[x[i]], Durations[x[i]], Start_time[x[i]], ConstTime, Begins[x[j]], Durations[x[j]], Start_time[x[j]], ConstTime)
  48. /
  49. forall(i in 1..n) (in_interval(NeedCh[x[i]], k, Begins[x[i]]+ConstTime, Start_time[x[i]], B, E))
  50. /
  51. forall(i in 1..n) (TimeCondition[x[i]] = (NeedEnds[x[i]] >= Ends[x[i]]))
  52. )
  53. ;
  54.  
  55. solve :: int_search(x ++ Begins, first_fail,
  56. indomain_split,
  57. complete) maximize sum(i in 1..n) (TimeCondition[i]);
  58.  
  59. output [
  60. " [A1, A2, A3, A4n",
  61. "x: ", show(x), "n",
  62. "Begins: ", show(Begins), "n",
  63. "First time: ", show(FirstTime), "n",
  64. "Start times: ", show(Start_time), "n",
  65. "Durations: ", show(Durations), "n",
  66. "Ends: ", show(Ends), "n",
  67. "Need: ", show(NeedEnds), "n",
  68. "TimeCondition: ", show(TimeCondition), "n",
  69. ];
  70.  
  71.  
  72. n = 4;
  73. k = 1;
  74. Durations = [6,5,10,7];
  75. NeedEnds = [20,20,10,30];
  76. EndTime = 40000000000;
  77. Start_time = [1,2,1,4];
  78. B = [100];
  79. E = [200];
  80. NeedCh = [0,0,0,0];
  81. ConstTime = 5;
  82. %[A1, A2, A3, A4
  83. FirstTime = [1, 2, 3, 4];
  84.  
  85. Time = [| 0, 12, 13, 14, %A1
  86. | 21, 0, 23, 24, %A2
  87. | 31, 32, 0, 34, %A3
  88. | 41, 42, 43, 0|]; %A4
Add Comment
Please, Sign In to add comment