Example #1
0
def simulatedAnnealing(tasks):
    RNG = RandomNumberGenerator(123)
    t = copy.deepcopy(tasks)
    T = 1550.0  #temperatura zarzenia na bialo rozgrzanej stali :)
    Tend = 1E-10  # cokolwiek większe od zera
    it = 0
    L = 10
    pi = []
    pi_new = []
    pi_best = []

    #natural perm
    for perm in range(1, t.size + 1):
        pi.append(perm)
        pi_best.append(perm)

    while T > Tend:
        for k in range(L):
            i = RNG.nextInt(0, t.size) - 1
            j = RNG.nextInt(0, t.size) - 1
            pi_new = copy.deepcopy(pi)
            swap_value = pi_new[i]
            pi_new[i] = pi_new[j]
            pi_new[j] = swap_value
            cmax_new = t.calculate_Cmax(pi_new)
            cmax_old = t.calculate_Cmax(pi)
            if cmax_new > cmax_old:
                r = RNG.nextFloat(0, 1)
                dCmax = cmax_old - cmax_new
                if r >= math.exp(dCmax / T):
                    pi_new = copy.deepcopy(pi)
            pi = copy.deepcopy(pi_new)
            if t.calculate_Cmax(pi_best) > t.calculate_Cmax(pi):
                pi_best = copy.deepcopy(pi)
        it += 1
        T = T / math.log(it + 1)  #ln(it+1)
    return pi_best