def tabu(N,NL,S,items, completion,tardiness,lambda1,lambda2): TL = [None]*NL pairs = generate.pairsets(S) completion_temp = completion[:] tardiness_temp = tardiness[:] delta_star = 0 Delta = 0 S_star = S[:] for k in xrange(N): delta = [] for s in pairs: if s not in TL: job = list(s) a = S[max(S.index(job[0]),S.index(job[1]))] b = S[min(S.index(job[0]),S.index(job[1]))] delta_c_a = - items[b].process delta_c_b = items[a].process delta_t_a = - min(items[b].process,tardiness_temp[a]) delta_t_b = max(completion_temp[a] - items[b].due,0) - tardiness_temp[b] wt_a,wt_b,wc_a,wc_b = items[a].wt,items[b].wt,items[a].wc,items[b].wc delta_a = h(delta_t_a,delta_c_a,wt_a,wc_a,lambda1,lambda2) delta_b = h(delta_t_b,delta_c_b,wt_b,wc_b,lambda1,lambda2) delta_h = delta_a + delta_b if delta == []: delta = delta_h delta_a_star = delta_a delta_b_star = delta_b a_star,b_star = a,b elif delta_h < delta: delta = delta_h delta_a_star = delta_a delta_b_star = delta_b a_star,b_star = a,b if delta == []: break a = S.index(a_star) b = S.index(b_star) S = generate.innerswap(S,a,b) change_set = set([a_star,b_star]) generate.pairsets_update(pairs,change_set) TL.pop(0) TL.append(change_set) completion_temp[a_star] -= items[b_star].process completion_temp[b_star] += items[a_star].process tardiness_temp[a_star] = max(completion_temp[a_star] - items[a_star].due,0) tardiness_temp[b_star] = max(completion_temp[b_star] - items[b_star].due,0) Delta += delta if Delta < delta_star: delta_star = Delta S_star = S[:] return delta_star,S_star
def tabu(N, NL, S, l, items, G, completion, line_values, lambda1, lambda2): TL = [None] * NL pairs = generate.pairsets(S[l]) completion_temp = completion[:] line_values_temp = line_values[:] G_star = G S_star = [] test_G = [] for s in S: S_star.append(s[:]) for k in xrange(N): test_S = [] s = random.choice(pairs) move = 0 if s not in TL: job = list(s) a = job[0] b = job[1] a_idx = S_star[l].index(a) b_idex = S_star[l].index(b) S_temp = generate.innerswap(S_star[l], a_idx, b_idex) c, v = continueatcs.complete_time( S_star[:l] + [S_temp] + S_star[l + 1:], items, lambda1, lambda2) G_temp = sum(v) if test_G == [] or G_temp < test_G: test_G = G_temp test_S = S_temp[:] completion_temp = c[:] line_values_temp = v[:] a_star = a b_star = b move = 1 else: continue if move == 0: continue change_set = set([a_star, b_star]) generate.pairsets_update(pairs, change_set) S_star[l] = test_S[:] TL.pop(0) TL.append(change_set) if test_G < G_star: G_star = test_G S[l] = test_S[:] line_values = line_values_temp[:] completion = completion_temp[:] return G_star, S, line_values, completion
def tabu(N,NL,S,l,items,G,completion,line_values,lambda1,lambda2): TL = [None]*NL pairs = generate.pairsets(S[l]) completion_temp = completion[:] line_values_temp = line_values[:] G_star = G S_star = [] test_G = [] for s in S: S_star.append(s[:]) for k in xrange(N): test_S = [] s = random.choice(pairs) move = 0 if s not in TL: job = list(s) a = job[0] b = job[1] a_idx = S_star[l].index(a) b_idex = S_star[l].index(b) S_temp = generate.innerswap(S_star[l],a_idx,b_idex) c,v = continueatcs.complete_time(S_star[:l]+[S_temp]+S_star[l+1:],items,lambda1,lambda2) G_temp = sum(v) if test_G == [] or G_temp < test_G: test_G = G_temp test_S = S_temp[:] completion_temp = c[:] line_values_temp = v[:] a_star = a b_star = b move = 1 else: continue if move == 0: continue change_set = set([a_star,b_star]) generate.pairsets_update(pairs,change_set) S_star[l] = test_S[:] TL.pop(0) TL.append(change_set) if test_G < G_star: G_star = test_G S[l] = test_S[:] line_values = line_values_temp[:] completion = completion_temp[:] return G_star,S,line_values,completion