optimize method
Run optimization for iterations steps. Returns a map with keys:
best: best candidate foundenergy: energy of the best candidate
Implementation
Map<String, dynamic> optimize({int iterations = 1000}) {
var current = initial;
var currentE = energy(current);
var best = current;
var bestE = currentE;
for (var t = 1; t <= iterations; t++) {
final temp = temperature(t);
if (temp <= 0) break;
final cand = neighbor(current, _rand);
final candE = energy(cand);
final delta = candE - currentE;
if (delta <= 0) {
current = cand;
currentE = candE;
} else {
final prob = exp(-delta / temp);
if (_rand.nextDouble() < prob) {
current = cand;
currentE = candE;
}
}
if (currentE < bestE) {
best = current;
bestE = currentE;
}
}
return {'best': best, 'energy': bestE};
}