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; }