예제 #1
0
파일: main.py 프로젝트: RudoK/Bakalarka
def anneal(fun, init_temp, ticks, opt = 1):
    hracia_plocha = funkcie.plocha()
    rozlozenie_cur = funkcie.rozlozenie()
    funkcie.inicializuj(hracia_plocha, rozlozenie_cur)
    cur = funkcie.plocha(hracia_plocha)
    best = funkcie.plocha(hracia_plocha)
    ebest = fun(best, opt)
    ecur = fun(cur, opt)
    temp = init_temp
    delta_e = 0
    while temp > init_temp/ticks:
        temp -= init_temp/ticks
        new_plocha = funkcie.plocha(cur)
        rozlozenie_new = funkcie.rozlozenie(rozlozenie_cur)
        funkcie.generuj(rozlozenie_new, new_plocha)
        enew = fun(new_plocha, opt)
        delta_e += math.fabs(enew - ecur)
        probability = funkcie.prob(ecur, enew, temp)
        randomnumber = random.random()
        if probability > randomnumber:
#            print(ecur - enew, temp)
            cur = funkcie.plocha(new_plocha)
            rozlozenie_cur = funkcie.rozlozenie(rozlozenie_new)
            ecur = fun(cur, opt)
            if ecur < ebest:
                best = funkcie.plocha(cur)
                ebest = fun(best, opt)

    ebest = funkcie.finalenergy(best)
    funkcie.vypis_plochu(best)
    print ("ebest: %d" % ebest)
    return ebest, delta_e
예제 #2
0
파일: main.py 프로젝트: RudoK/Bakalarka
 def test2(self):
     self.assertEqual(funkcie.finalenergy(self.hracia_plocha1), 60)
     self.assertEqual(funkcie.finalenergy(self.hracia_plocha2), 55)
     self.assertEqual(funkcie.finalenergy(self.hracia_plocha3), 51)
     self.assertEqual(funkcie.finalenergy(self.hracia_plocha4), 44)
     self.assertEqual(funkcie.finalenergy(self.hracia_plocha5), 61)