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