void Optimize::inter_swap() { auto local_limit(fleet.size()); size_t i(0); while (inter_swap(false) && (++i < local_limit)) { } i = 0; while (inter_swap(true) && (++i < local_limit)) { } sort_by_duration(); delete_empty_truck(); this->fleet = best_solution.fleet; }
Optimize::Optimize( int kind, const Solution &old_solution) : Solution(old_solution), best_solution(old_solution) { switch (kind) { case 0: sort_by_duration(); break; case 1: decrease_truck(); break; case 2: move_duration_based(); break; case 3: move_wait_time_based(); break; case 4: inter_swap(); break; } this->fleet = best_solution.fleet; sort_by_duration(); delete_empty_truck(); }
Optimize::Optimize( const Solution &old_solution) : Solution(old_solution), best_solution(old_solution) { pgassert(false); decrease_truck(); inter_swap(fleet.size()); }
Optimize::Optimize( const Solution &old_solution, size_t times) : Solution(old_solution), best_solution(old_solution) { inter_swap(times); this->fleet = best_solution.fleet; msg.log << tau("bestSol before sort by size"); sort_by_size(); msg.log << tau("bestSol after sort by size"); msg.log << tau(); }
void Optimize::inter_swap(size_t times) { msg.log << tau("before sort by size"); sort_by_size(); msg.log << tau("before decrease"); decrease_truck(); msg.log << tau("after decrease"); sort_by_size(); msg.log << tau("after sort by size"); size_t i = 0; while ((i++ < times) && inter_swap()) { msg.log << tau("after inter swap"); msg.log << "\n***************************" << i; std::rotate(fleet.begin(), fleet.begin() + 1, fleet.end()); msg.log << tau("before next cycle"); } }