Skip to content
Snippets Groups Projects
Commit 3249e1b3 authored by awenjb's avatar awenjb
Browse files

Add Sorting Strategy

- add shuffle as basic sorting strategy
- add getter  to Solution
parent 54e16ee5
No related branches found
No related tags found
No related merge requests found
......@@ -34,6 +34,7 @@ add_executable(pdptw src/mains/main.cpp
src/lns/modification/route/insert_route.cpp
src/lns/modification/route/remove_route.cpp
src/output/solution_checker.cpp
src/lns/operators/sorting_strategy.cpp
src/lns/operators/destruction/random_destroy.cpp
src/lns/operators/selector/operator_selection.cpp
src/utils.cpp
......
......@@ -5,9 +5,7 @@
class RandomDestroy : public DestructionOperator
{
public:
explicit RandomDestroy(int numberOfPairsToDestroy)
: numberOfPairsToDestroy(numberOfPairsToDestroy)
{}
explicit RandomDestroy(int numberOfPairsToDestroy) : numberOfPairsToDestroy(numberOfPairsToDestroy) {}
/**
* This operator removes numberOfPairsToDestroy pairs randomly in the solution.
......
#include "sorting_strategy.h"
#include "utils.h"
#include <algorithm>
#include <ranges>
std::vector<int> const &sorting_strategy::Shuffle::sortRequests() const
{
auto &bank = getSolution().getPairBank();
std::ranges::shuffle(bank, util::getRawRandom());
return bank;
}
\ No newline at end of file
#pragma once
#include "lns/solution/solution.h"
namespace sorting_strategy
{
/**
* Interface for sorting the requests in the request bank. Does modify directly the solution request bank
*/
class SortingStrategy
{
public:
explicit SortingStrategy(Solution &solution) : solution(solution) {}
Solution &getSolution() const { return solution; }
virtual std::vector<int> const &sortRequests() const = 0;
virtual ~SortingStrategy() = default;
private:
// non const to sort in place
Solution &solution;
};
/**
* Shuffle the requests
*/
class Shuffle : public SortingStrategy
{
using SortingStrategy::SortingStrategy;
public:
std::vector<int> const &sortRequests() const override;
};
}// namespace sorting_strategy
\ No newline at end of file
......@@ -83,6 +83,16 @@ Solution::PairBank const &Solution::getBank() const
return pairBank;
}
Solution::PairBank const &Solution::getPairBank() const
{
return pairBank;
}
Solution::PairBank &Solution::getPairBank()
{
return pairBank;
}
std::vector<Route> const &Solution::getRoutes() const
{
return routes;
......
......@@ -54,6 +54,8 @@ public:
PairBank const &getBank() const;
PairBank const &getPairBank() const;
PairBank &getPairBank();
std::vector<Route> const &getRoutes() const;
Route const &getRoute(int routeIndex) const;
PDPTWData const &getData() const;
......
#include "utils.h"
#include "config.h"
#include <random>
......@@ -10,7 +11,6 @@ namespace// anonymous namespace
std::uniform_real_distribution<> distribution(0, 1);
}// namespace
double util::getRandom()
{
if (!seedSet) [[unlikely]]
......@@ -30,3 +30,13 @@ unsigned int util::getRandomInt(unsigned int min, unsigned int max)
}
return std::uniform_int_distribution<>(min, max)(randomGenerator);
}
std::mt19937_64 &util::getRawRandom()
{
if (!seedSet) [[unlikely]]
{
randomGenerator.seed(RANDOM_SEED);
seedSet = true;
}
return randomGenerator;
}
......@@ -19,6 +19,9 @@ namespace util
* @return a random integer number between min (included) and max (included)
*/
unsigned int getRandomInt(unsigned int min, unsigned int max);
/**
* @return the random generator directly, it is a deterministic random
*/
std::mt19937_64 &getRawRandom();
}// namespace util
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment