Beispiel #1
0
bool CVRPSolver::updateFinalSolution(CSolutionInfo& curSolution) {
    bool callUpdate = false;
    if (curSolution.getOrderServed() > m_solutionFinal.getOrderServed()) {
        callUpdate = true;
    } else if (curSolution.getOrderServed() == m_solutionFinal.getOrderServed()) {
        if (curSolution.getTotalCost() < m_solutionFinal.getTotalCost()) {
            callUpdate = true;
        } else if (curSolution.getTotalCost() == m_solutionFinal.getTotalCost()) {
            if (curSolution.getTotalTravelTime() < m_solutionFinal.getTotalTravelTime()) {
                callUpdate = true;
            } else if (curSolution.getTotalTravelTime() == m_solutionFinal.getTotalTravelTime()) {
                if (curSolution.getTotalDistance() < m_solutionFinal.getTotalDistance()) {
                    callUpdate = true;
                }
            }
        }
    }
    if (callUpdate) {
        // m_iStepsSinceLastSolution = 0;
        m_solutionFinal = curSolution;

        // clear map and delete objects
        // m_mpTabuCount.clear();
        // for (std::map< CVRPTWMove*, int >::iterator it = m_mpMoveFrequency.begin();it!= m_mpMoveFrequency.end();++it)
        // {
        //  delete (*it).first;
        // }
        // m_mpMoveFrequency.clear();
        return true;
    }
    return false;
}