void BestEverAspirationCriteria::update(const ISolution& decision)
{
    if (decision.getObjectiveValue() < bestObjectiveValue)
    {
        bestObjectiveValue = decision.getObjectiveValue();
    }
}
bool TSPSolution::operator<(ISolution& s)
{
	if((isFeasible() && s.isFeasible()) || (!isFeasible() && !s.isFeasible()))
	{
		return static_cast<long long>(1000*getObjectiveValue()) < static_cast<long long>(1000*s.getObjectiveValue());
	}
	else
	{
		return isFeasible();
	}
}