Skip to content
Snippets Groups Projects
main.cpp 4.40 KiB

#include "input/data.h"
#include "input/json_parser.h"
#include "input/location.h"
#include "input/pdptw_data.h"
#include "input/time_window.h"
#include "lns/acceptance/threshold_acceptance.h"
#include "lns/constraints/capacity/capacity_constraint.h"
#include "lns/constraints/time_window/forward_time_slack.h"
#include "lns/constraints/time_window/time_window_constraint.h"
#include "lns/lns.h"
#include "lns/modification/pair/insert_pair.h"
#include "lns/modification/pair/remove_pair.h"
#include "lns/modification/route/insert_route.h"
#include "lns/modification/route/remove_route.h"
#include "lns/operators/abstract_operator.h"
#include "lns/operators/destruction/clean_empty_route.h"
#include "lns/operators/destruction/random_destroy.h"
#include "lns/operators/destruction/string_removal.h"
#include "lns/operators/reconstruction/enumerate.h"
#include "lns/operators/reconstruction/list_heuristic_cost_oriented.h"
#include "lns/operators/selector/operator_selector.h"
#include "lns/operators/selector/small_large_selector.h"
#include "lns/operators/sorting_strategy.h"
#include "lns/solution/solution.h"
#include "mains/main_interface.h"
#include "output/solution_checker.h"
#include "output/solution_exporter.h"
#include "types.h"
#include "output/run.h"
#include "config.h"

#include <filesystem>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <nlohmann/json.hpp>
#include <spdlog/spdlog.h>
#include <string>
#include <vector>

using json = nlohmann::json;

void simpleLNS(PDPTWData const &data, Solution &startingSolution)
{
    // lns parameters
    int requests = data.getPairCount();

    int pairs = requests * 2 / 100;
    int manyPairs = requests * 40 / 100;

    // threshold function
    ThresholdAcceptance acceptor(0.05);

    // lns operators
    SimpleOperatorSelector RandomDestroy_BestInsert;
    addAllReconstructor(RandomDestroy_BestInsert);
    RandomDestroy_BestInsert.addDestructor(RandomDestroy(pairs));
    RandomDestroy_BestInsert.addDestructor(StringRemoval(10, 10));

    SimpleOperatorSelector largeSelector;
    addAllReconstructor(largeSelector);
    largeSelector.addDestructor(RandomDestroy(manyPairs));
    largeSelector.addDestructor(StringRemoval(10, 10));


    std::vector<SmallLargeOperatorSelector::StepSelector> selectors;
    selectors.emplace_back(10, std::move(RandomDestroy_BestInsert));
    selectors.emplace_back(50, std::move(largeSelector));

    SmallLargeOperatorSelector smallLargeSelector(std::move(selectors));

    // run lns
    output::LnsOutput result = lns::runLns(startingSolution, smallLargeSelector, acceptor);

    if (STORE_SOLUTION)
    {
        output::exportToJson(result);
    }


    // Solution sol = result.getBestSolution();
    // CapacityConstraint capa = CapacityConstraint(sol);

    // capa.initRouteCapacities();
    // capa.initMaxCapacity();
    // capa.print();

    // RemovePair rem = RemovePair(0, 1, 4, sol.getData().getPair(1));

    

    // sol.applyDestructSolution(rem);
    // sol.print();
    // capa.updateMaxCapacity(sol.getData(), sol.getRoute(0));
    // capa.print();
    // int pickup = 8;
    // int delivery = 8;
    // std::cout << std::endl<< capa.checkModif(sol.getData().getPair(1), 0, pickup, delivery) << std::endl;
    // std::cout << std::endl<< capa.checkModif2(sol.getData().getPair(1), 0, pickup, delivery) << std::endl;

    // InsertPair add = InsertPair(0, pickup, delivery, sol.getData().getPair(1));
    // sol.applyRecreateSolution(add);

    // checker::checkAll(sol, sol.getData());

    // capa.updateMaxCapacity(sol.getData(), sol.getRoute(0));
    // capa.print();
}

int main(int argc, char **argv)
{
    //return mainInterface(argc, argv, &simpleLNS);

    ///////////////////////////////////////////////////////////////////////

    //std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/n100/bar-n100-1.json";
    //std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/pdp_100/lc106.json";
    //std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/Nantes_1.json";
    //std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/n5000/bar-n5000-1.json";

    // PDPTWData data = parsing::parseJson(filepath);
    // Solution startingSolution = Solution::emptySolution(data);
    // simpleLNS(data, startingSolution);

    std::string path = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/selection";
    runAllInDirectory(path, simpleLNS);



    return 0;
}