1 #ifndef INDIGOX_ALGORITHM_ELECTRON_ASSIGNMENT_ASTAR_OPTIMISATION_HPP 2 #define INDIGOX_ALGORITHM_ELECTRON_ASSIGNMENT_ASTAR_OPTIMISATION_HPP 4 #include "../../graph/assignment.hpp" 6 #include <boost/dynamic_bitset/dynamic_bitset.hpp> 30 QueueItem(
const size_t loc_size,
const size_t pos_size)
36 const LocMask &new_calc,
const size_t ni)
41 using queue_t = std::priority_queue<QueueItem, std::vector<QueueItem>,
42 std::greater<QueueItem>>;
45 void reserve(
size_t sz) { this->c.reserve(sz); }
46 size_t max_size()
const {
return this->c.max_size(); }
47 void clear() { this->c.clear(); }
51 using NbrAssigns = std::array<AssignMask, 32>;
78 virtual void Run()
override;
81 void DetermineLocationCounts();
82 void DetermineRequiredUnchangeables();
83 void DetermineInitialAssignment();
89 size_t GenerateNextAssignments(
const QueueItem &q, NbrAssigns &out)
const;
94 std::find(_unique_locs.begin(), _unique_locs.end(), v));
100 std::vector<graph::AGVertex> _unique_locs;
101 std::vector<uint32_t> _loc_counts;
102 std::vector<LocMask> _req_unchange;
IXAStarOptimisation()=delete
size_t max_size() const
Definition: astar_optimisation.hpp:46
LocMask unchange_mask
Definition: astar_optimisation.hpp:19
static uint64_t MEMORY_LIMIT
Definition: astar_optimisation.hpp:57
std::priority_queue< QueueItem, std::vector< QueueItem >, std::greater< QueueItem > > queue_t
Definition: astar_optimisation.hpp:42
std::map< key_t, score_t > ScoreTable
Type of a score table.
Definition: assigner.hpp:27
Definition: astar_optimisation.hpp:50
score_t path
Definition: astar_optimisation.hpp:17
Definition: astar_optimisation.hpp:56
QueueItem(const size_t loc_size, const size_t pos_size)
Definition: astar_optimisation.hpp:30
Definition: astar_optimisation.hpp:16
uint64_t score_t
Type of the score of an electron assignment.
Definition: assigner.hpp:21
boost::dynamic_bitset<> LocMask
Definition: astar_optimisation.hpp:14
score_t Total() const
Definition: astar_optimisation.hpp:26
boost::dynamic_bitset<> AssignMask
Type of the mask used for assignments.
Definition: assigner.hpp:23
virtual void Run() override
Run the algorithm.
bool operator>(const QueueItem &r) const
bool IsInfinite() const
Definition: astar_optimisation.hpp:22
static Heuristic HEURISTIC
Definition: astar_optimisation.hpp:58
Heuristic
Definition: astar_optimisation.hpp:54
std::shared_ptr< IXAGVertex > AGVertex
Definition: fwd_declares.hpp:104
void clear()
Definition: astar_optimisation.hpp:47
static score_t Infinity
Value of an infinite score.
Definition: assigner.hpp:252
size_t CalcCount() const
Definition: astar_optimisation.hpp:27
Base class for an electron assignment algorithm.
Definition: assigner.hpp:44
Definition: molecule.hpp:15
void reserve(size_t sz)
Definition: astar_optimisation.hpp:45
Definition: astar_optimisation.hpp:43
size_t nbr_begin_idx
Definition: astar_optimisation.hpp:20
virtual void Initalise(const Molecule &mol) override
Initalisation method.
LocMask calc_mask
Definition: astar_optimisation.hpp:19
QueueItem(const score_t p, const score_t h, const AssignMask &ass, const LocMask &unchange, const LocMask &calc, const LocMask &new_calc, const size_t ni)
Definition: astar_optimisation.hpp:34
AssignMask assignment
Definition: astar_optimisation.hpp:18
LocMask new_calc_mask
Definition: astar_optimisation.hpp:19
score_t heuristic
Definition: astar_optimisation.hpp:17