Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. from gurobipy import *
  2. import numpy as np
  3. import csv
  4.  
  5. # Parameters needed are:
  6. (1) the total number of jobs (n). Here I denote it by "NumofJobs"
  7. (2) the total number of machines (m). Here I denote it by "NumofMachines"
  8. (3) the processing times. Here I use a numpy matrix: "Tasktime[r, j]" : p_{r,j}
  9.  
  10.  
  11. # Building the model:
  12. m = Model ("Wilson")
  13.  
  14.  
  15. # Generating variables:
  16. z = {}
  17. for j in range(NumofJobs):
  18. for i in range(NumofJobs):
  19. z[j, i] = m.addVar(vtype=GRB.BINARY)
  20.  
  21. s = {}
  22. for r in range(NumofMachines):
  23. for j in range(NumofJobs):
  24. s[r, j] = m.addVar(vtype=GRB.CONTINUOUS)
  25.  
  26. m.update()
  27.  
  28.  
  29. # Generating constraints:
  30. for i in range(NumofJobs):
  31. m.addConstr(quicksum(z[j, i] for j in range(NumofJobs)) == 1)
  32.  
  33. for j in range(NumofJobs):
  34. m.addConstr(quicksum(z[j, i] for i in range(NumofJobs)) == 1)
  35.  
  36. m.addConstr(s[0, 0] == 0)
  37.  
  38. for i in range(NumofJobs - 1):
  39. m.addConstr(s[0, i] + quicksum((Tasktime[0, j]) * z[j, i] for j in range(NumofJobs)) == s[0, i + 1])
  40.  
  41. for r in range(NumofMachines - 1):
  42. m.addConstr(s[r, 0] + quicksum((Tasktime[r, j]) * z[j, 0] for j in range(NumofJobs)) == s[r + 1, 0])
  43.  
  44. for r in range(NumofMachines - 1):
  45. for i in range(1, NumofJobs):
  46. m.addConstr(s[r, i] + quicksum(Tasktime[r, j] * z[j, i] for j in range(NumofJobs)) <= s[r + 1, i])
  47.  
  48. for r in range(1, NumofMachines):
  49. for i in range(NumofJobs - 1):
  50. m.addConstr(s[r, i] + quicksum(Tasktime[r, j] * z[j, i] for j in range(NumofJobs)) <= s[r, i + 1])
  51.  
  52.  
  53. # Setting the objective function:
  54. m.setObjective(s[NumofMachines - 1, NumofJobs - 1] + quicksum(Tasktime[NumofMachines - 1, j] * z[j, NumofJobs - 1] for j in range(NumofJobs)), GRB.MINIMIZE)
  55.  
  56.  
  57. m.optimize()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement