Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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();
    }
Ejemplo n.º 3
0
Optimize::Optimize(
        const Solution &old_solution) :
    Solution(old_solution),
    best_solution(old_solution)  {
        pgassert(false);
        decrease_truck();
        inter_swap(fleet.size());
    }
Ejemplo n.º 4
0
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();
    }
Ejemplo n.º 5
0
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");
    }
}