funcSimulateAnneal() { result := math.MaxFloat64 t := 100.0 minT := 1e-8 iterNum := 10000 delta := 0.98 rand.Seed(0) x := rand.Float64() * 100 bestX := x fmt.Println(bestX)
cnt := 0 for t > minT && iterNum >= 0 { xNew := x + rand.Float64() * 2 - 1 if xNew >= 0 && xNew <= 100 { cnt++ funcNew := getFuncRes(xNew, 0) if funcNew < result { x = xNew bestX = x result = funcNew } else { p := math.Exp(-1 * (funcNew - result) / t) if rand.Float64() < p { x = xNew } if p > 0 { //fmt.Println("prob ", p) }
} } iterNum-- t = t * delta } fmt.Println(bestX, result, cnt) }