Beispiel #1
0
    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);
    }
Beispiel #2
0
 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;
     }
 }