14#ifndef ANTHOCNET_CORE_PHEROMONE_TABLE_H
15#define ANTHOCNET_CORE_PHEROMONE_TABLE_H
31 using Key = std::pair<NodeAddress, NodeAddress>;
65 return pheromoneRegular_.size() + pheromoneVirtual_.size();
bool isEmptyRegular() const
void addPheromoneRegular(NodeAddress dest, NodeAddress neighbor, double value)
const DestinationSet & regularDestinations() const
std::vector< std::pair< NodeAddress, double > > nextHopDistribution(NodeAddress dest, bool isProactiveAnt, double beta, NodeAddress exclude=kInvalidAddress) const
The probability distribution nextNeighborNode() samples from, for the same arguments: one (neighbour,...
std::pair< NodeAddress, NodeAddress > Key
void setPheromoneVirtual(NodeAddress dest, NodeAddress neighbor, double value)
void addNeighbor(NodeAddress neighbor)
bool isEmptyVirtual() const
void setPheromoneRegular(NodeAddress dest, NodeAddress neighbor, double value)
double bestVirtual(NodeAddress dest) const
Best (largest) virtual pheromone any neighbour holds for dest, or 0 if none.
std::set< NodeAddress > DestinationSet
NodeAddress nextNeighborNode(NodeAddress dest, bool isProactiveAnt, double beta, IRng &rng, NodeAddress exclude=kInvalidAddress) const
Stochastic next-hop choice.
std::size_t numNeighbors() const
const NeighborSet & neighbors() const
std::size_t numEntriesVirtual() const
std::size_t numEntries() const
std::map< Key, double > PheromoneMap
void removeNeighbor(NodeAddress neighbor)
double getPheromoneRegular(NodeAddress dest, NodeAddress neighbor) const
void addPheromoneVirtual(NodeAddress dest, NodeAddress neighbor, double value)
NodeAddress randomDestination(IRng &rng) const
Uniformly pick a known regular destination, or kInvalidAddress if none.
double bestRegular(NodeAddress dest) const
Best (largest) regular pheromone any neighbour holds for dest, or 0 if none.
void removePheromoneRegular(NodeAddress dest, NodeAddress neighbor)
std::set< NodeAddress > NeighborSet
NodeAddress lookup(NodeAddress dest, double beta, IRng &rng, NodeAddress exclude=kInvalidAddress) const
Reactive lookup == nextNeighborNode(dest, false, beta).
void removePheromoneVirtual(NodeAddress dest, NodeAddress neighbor)
std::size_t numEntriesRegular() const
Size gauge (issue #133): current (neighbor, dest) entry counts.
double getPheromoneVirtual(NodeAddress dest, NodeAddress neighbor) const
const DestinationSet & virtualDestinations() const
constexpr NodeAddress kInvalidAddress
"No such node / no route" sentinel, mirroring the legacy use of -1.
std::int32_t NodeAddress
Network-layer node address.
AntHistoryTracker: (src, seqNum) duplicate detection.