Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. from timeit import default_timer as timer
  2. import numpy as np
  3. from src.makespan import makespan
  4.  
  5.  
  6. def get_sequences(index, prev_sequence):
  7. sequences = []
  8. for i in range(0, len(prev_sequence)+1):
  9. new_sequence = prev_sequence[:]
  10. new_sequence.insert(i, index)
  11. sequences.append(new_sequence)
  12. return sequences
  13.  
  14.  
  15. def neh(tasks, numb_of_machines):
  16. start = timer()
  17.  
  18. # step 1: find omegas(j)
  19. omegas = []
  20. for task in tasks:
  21. omegas.append(sum(task.times))
  22.  
  23. # step 2: sort in descending order (get sorted order arguments)
  24. omegas_order = np.argsort(-np.array(omegas)).tolist()
  25.  
  26. # steps 3, 4: repeat n times (n = numb of tasks)
  27. solution_order = []
  28. for i in omegas_order: # (3) get argument of next task with the highest omega value
  29. # (4) insert task & pick task with the lowest makespan
  30. lowest_makespan = float("inf")
  31. lowest_makespan_sequence = []
  32. sequences = get_sequences(i, solution_order)
  33.  
  34. for sequence in sequences:
  35. if makespan(sequence, tasks, numb_of_machines) < lowest_makespan:
  36. lowest_makespan = makespan(sequence, tasks, numb_of_machines)
  37. lowest_makespan_sequence = sequence
  38. solution_order = lowest_makespan_sequence
  39.  
  40. stop = timer()
  41. return solution_order, (stop-start)*1000
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. def neh_mod_1(tasks, numb_of_machines):
  51. start = timer()
  52.  
  53. # step 1: find omegas(j)
  54. omegas = []
  55. for task in tasks:
  56. omegas.append(sum(task.times))
  57.  
  58. # step 2: sort in descending order (get sorted order arguments)
  59. omegas_order = np.argsort(-np.array(omegas)).tolist()
  60.  
  61. # steps 3, 4: repeat n times (n = numb of tasks)
  62. solution_order = []
  63. for i in omegas_order: # (3) get argument of next task with the highest omega value
  64. # (4) insert task & pick task with the lowest makespan
  65. lowest_makespan = float("inf")
  66. lowest_makespan_sequence = []
  67. sequences = get_sequences(i, solution_order)
  68.  
  69. for sequence in sequences:
  70. if makespan(sequence, tasks, numb_of_machines) < lowest_makespan:
  71. lowest_makespan = makespan(sequence, tasks, numb_of_machines)
  72. lowest_makespan_sequence = sequence
  73. solution_order = lowest_makespan_sequence
  74.  
  75. # (5) find longest task in solution order and insert on x pos
  76. for j in solution_order:
  77. temp_order = solution_order[:]
  78. temp_order.remove(j)
  79. new_sequences = get_sequences(j, temp_order)
  80. print(new_sequences)
  81.  
  82. stop = timer()
  83. return solution_order, (stop-start)*1000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement