@@ -54,19 +54,15 @@ def solve_johnson(self):
5454 else :
5555 default_timer = time .time
5656 s = default_timer .__call__ ()
57-
5857 # Build optimal sequence array
5958 machine_1_sequence = [j for j in range (
6059 self .nb_jobs ) if self .data [0 ][j ] <= self .data [1 ][j ]]
6160 machine_1_sequence .sort (key = lambda x : self .data [0 ][x ])
6261 machine_2_sequence = [j for j in range (
6362 self .nb_jobs ) if self .data [0 ][j ] > self .data [1 ][j ]]
6463 machine_2_sequence .sort (key = lambda x : self .data [1 ][x ], reverse = True )
65-
6664 seq = machine_1_sequence + machine_2_sequence
67-
6865 e = default_timer .__call__ ()
69-
7066 jobs_m1 , jobs_m2 = [], []
7167 job_name_rad = "job_"
7268 job = {"name" : job_name_rad +
@@ -454,62 +450,48 @@ def swapTwoJobs(self,seq,pos1,pos2):
454450 seq [pos1 ], seq [pos2 ] = seq [pos2 ], seq [pos1 ]
455451 return seq
456452
457- def simulated_annealing (self ,Ti = 750 ,Tf = 2.5 ,alpha = 0.93 ):
453+ def simulated_annealing (self ,Ti = 790 ,Tf = 3 ,alpha = 0.93 ):
458454 #Number of jobs given
459455 n = self .nb_jobs
460- # of machines given
461- m = self .nb_machines
462- #Initialize the primary seq
463456 default_timer = None
464457 if sys .platform == "win32" :
465458 default_timer = time .clock
466459 else :
467460 default_timer = time .time
468461 s = default_timer .__call__ ()
469-
470- old_seq = list ([ i for i in range (0 ,n )])
471- shuffle (old_seq )
472- new_seq = []
473- old_makeSpan = self ._get_makespan (old_seq ,self .data )
474- new_makeSpan = 0
475- #The difference between the two makespans
462+ #Initialize the primary seq
463+ old_seq ,schedules ,old_makeSpan , _ = self .palmer_heuristic ()
464+ new_seq = []
476465 delta_mk1 = 0
477- #Set of cooling constants
478- Cc = []
479466 #Initialize the temperature
480467 T = Ti
481468 Tf = Tf
482469 alpha = alpha
483470 # of iterations
484- N_itr = (np .log (Tf / T )/ np .log (alpha ))
485471 temp_cycle = 0
486- while N_itr > 0 :
487-
488- pos1 , pos2 = randint ( 0 , n - 1 ), randint (0 ,n - 1 )
489- new_seq = self . swapTwoJobs ( old_seq , pos1 , pos2 )
472+ while T >= Tf :
473+ new_seq = old_seq . copy ()
474+ job = new_seq . pop ( randint (0 ,n - 1 ) )
475+ new_seq . insert ( randint ( 0 , n - 1 ), job )
490476 new_make_span = self ._get_makespan (new_seq ,self .data )
491477 delta_mk1 = new_make_span - old_makeSpan
492-
493478 if delta_mk1 <= 0 :
494479 old_seq = new_seq
495480 old_makeSpan = new_make_span
496- N_itr -= 1
497481 else :
498- Aprob = np .exp (- (delta_mk1 / T ) ** - 1 )
499- if Aprob > np .random .uniform ():
482+ Aprob = np .exp (- (delta_mk1 / T ))
483+ if Aprob > np .random .uniform (0.5 , 0.9 ):
500484 old_seq = new_seq
501485 old_makeSpan = new_make_span
502- N_itr -= 1
503486 else :
504487 #The solution is discarded
505- N_itr -= 1
506- T = T * ( alpha ** temp_cycle )
488+ pass
489+ T = T * alpha
507490 temp_cycle += 1
508491
509- # Result Sequence
510- seq = old_seq
511492 e = default_timer .__call__ ()
512-
493+ #Result Sequence
494+ seq = old_seq
513495 schedules = np .zeros ((self .nb_machines , self .nb_jobs ), dtype = dict )
514496 # schedule first job alone first
515497 task = {"name" : "job_{}" .format (
0 commit comments