AnnealResult Annealer::minimize(const arma::vec& ctr0, const arma::vec& sigma0, const arma::mat& expPos, const arma::vec& expHits) const { assert(ctr0.n_elem > 0); assert(ctr0.n_elem == sigma0.n_elem); AnnealerState state; state.temp = T0; state.sigma = sigma0; state.expPos = expPos; state.expHits = expHits; state.ctrs.push_back(ctr0); state.chis.push_back(runTrack(ctr0, expPos, expHits)); state.numCalls++; for (int iter = 0; iter < numIters; iter++) { try { findNextPoint(state); } catch (const AnnealerReachedMaxCalls&) { return AnnealResult(state.ctrs, state.chis, AnnealStopReason::tooManyCalls, state.numCalls); } // Cool the system before the next iteration state.temp *= coolRate; state.sigma *= coolRate; } return AnnealResult(state.ctrs, state.chis, AnnealStopReason::maxIters, state.numCalls); }
void TSPGreedy(int N, const double **T, int *R) { for(int i = 0; i < N-2; ++i) { int min = findNextPoint(N, T, R, i); int temp = R[i+1]; R[i+1] = R[min]; R[min] = temp; } }