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
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)