optimize method

Map<String, dynamic> optimize({
  1. int iterations = 1000,
})

Run optimization for iterations steps. Returns a map with keys:

  • best: best candidate found
  • energy: 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};
}