Leviathan_no_group
Leviathan.h
1 #ifndef LEVIATHAN_H
2 #define LEVIATHAN_H
3 
4 #include <random>
5 
6 //--------------------------------------------------UTILITARY
7 
10 float average(const std::vector<float> & tab);
11 
14 float standardDeviation(const std::vector<float> & tab);
15 
18 typedef unsigned int IdAgent;
19 
20 class Leviathan;
21 
24 extern std::mt19937 g_m_t_generator;
25 
26 //--------------------------------------------------CLASS
27 
30 class Agent
31 {
32 public:
33 //ATTRIBUTS
34 
36  IdAgent id;
37  std::vector<float> opinions;
38  std::vector<float> deltaOpinions;
39  std::vector<IdAgent> listGossip;
42  std::vector<IdAgent> gossipAbout;
43  unsigned int countGossipAbout;
44 //METHODS
49  inline Agent(Leviathan * father,IdAgent agent_):
50  dady(father),id(agent_),directInteraction(0),influenceOther(0),countGossipAbout(0){};
54  void init(unsigned int nbAgents);
55 
56 //RUN Function
59  IdAgent gossipToWho();
62  void updateOpinions();
63 
64 //getters
68  inline float getOpinion(IdAgent other){return opinions[other];};
69 };
70 
73 class Leviathan
74 {
75 public:
76 //ATTRIBUTS
77 //Parameters
78  float delta;
79  unsigned int gossip;
80  float sigma;
82 //Informations
83  unsigned int nbStep;
84  std::vector<Agent> agents;
85  bool useBorder;
88 //Utilitary
89  std::uniform_real_distribution<float> g_noise;
91 //CONSTRUCTOR
98  Leviathan(float delta_,float sigma_,unsigned int nbAgents_,unsigned int nbGossips_);
99 
100 //METHODS
103  float borne(float value);
106  void step();
111  void selectCoupleForInterraction(IdAgent & Ai,IdAgent & Aj);
116  void directInteraction(IdAgent Ai,IdAgent Aj);
121  void gossipInteraction(IdAgent Ai,IdAgent Aj);
126  void oneGossip(IdAgent Ai,IdAgent Aj);
127 
128 //SETTERS
133  void setAgentReputation(IdAgent Ai,float newReputation);
134 
135 //GETTERS
136 
139  float getAverageOpinion();
143  float getAverageOpinionTo(IdAgent a);
146  float getStdOpinion();
150  float getStdOpinionTo(IdAgent a);
153  float getAverageStdOpinion();
156  float getStdReputation();
161  inline float getOpinion(IdAgent i,IdAgent j){return agents[i].getOpinion(j);};
164  inline unsigned int getNbAgents(){return agents.size();};
167  inline IdAgent getRandomAgent(){return rand()%getNbAgents();};
168 
169 //WRITTER
173  void writeOpinions(std::string fileName);
174 
175 };
176 
177 #endif // LEVIATHAN_H
Leviathan::directInteraction
void directInteraction(IdAgent Ai, IdAgent Aj)
Definition: Leviathan.cpp:122
Leviathan
Definition: Leviathan.h:74
Leviathan::delta
float delta
Definition: Leviathan.h:78
Agent::getOpinion
float getOpinion(IdAgent other)
Definition: Leviathan.h:68
Leviathan::nbStep
unsigned int nbStep
Definition: Leviathan.h:83
Leviathan::getStdReputation
float getStdReputation()
Definition: Leviathan.cpp:195
Leviathan::oneInteractionParStep
bool oneInteractionParStep
Definition: Leviathan.h:86
Leviathan::Leviathan
Leviathan(float delta_, float sigma_, unsigned int nbAgents_, unsigned int nbGossips_)
Definition: Leviathan.cpp:85
Agent::deltaOpinions
std::vector< float > deltaOpinions
Definition: Leviathan.h:38
Leviathan::gossip
unsigned int gossip
Definition: Leviathan.h:79
Agent::directInteraction
IdAgent directInteraction
Definition: Leviathan.h:40
Leviathan::sigma
float sigma
Definition: Leviathan.h:80
Leviathan::step
void step()
Definition: Leviathan.cpp:94
Agent::countGossipAbout
unsigned int countGossipAbout
Definition: Leviathan.h:43
Agent::init
void init(unsigned int nbAgents)
Definition: Leviathan.cpp:30
Leviathan::borne
float borne(float value)
Definition: Leviathan.cpp:74
Leviathan::g_noise
std::uniform_real_distribution< float > g_noise
Definition: Leviathan.h:89
Leviathan::gossipInteraction
void gossipInteraction(IdAgent Ai, IdAgent Aj)
Definition: Leviathan.cpp:129
Agent::updateOpinions
void updateOpinions()
Definition: Leviathan.cpp:59
Leviathan::selectCoupleForInterraction
void selectCoupleForInterraction(IdAgent &Ai, IdAgent &Aj)
Definition: Leviathan.cpp:113
Leviathan::useBorder
bool useBorder
Definition: Leviathan.h:85
Agent
Definition: Leviathan.h:31
Agent::dady
Leviathan * dady
Definition: Leviathan.h:35
Agent::listGossip
std::vector< IdAgent > listGossip
Definition: Leviathan.h:39
Agent::opinions
std::vector< float > opinions
Definition: Leviathan.h:37
Leviathan::oneGossip
void oneGossip(IdAgent Ai, IdAgent Aj)
Definition: Leviathan.cpp:136
Agent::gossipToWho
IdAgent gossipToWho()
Definition: Leviathan.cpp:39
Agent::influenceOther
float influenceOther
Definition: Leviathan.h:41
Leviathan::getStdOpinionTo
float getStdOpinionTo(IdAgent a)
Definition: Leviathan.cpp:180
Agent::Agent
Agent(Leviathan *father, IdAgent agent_)
Definition: Leviathan.h:49
Leviathan::getAverageStdOpinion
float getAverageStdOpinion()
Definition: Leviathan.cpp:188
Leviathan::setAgentReputation
void setAgentReputation(IdAgent Ai, float newReputation)
Definition: Leviathan.cpp:146
Leviathan::getNbAgents
unsigned int getNbAgents()
Definition: Leviathan.h:164
Leviathan::getStdOpinion
float getStdOpinion()
Definition: Leviathan.cpp:171
Agent::id
IdAgent id
Definition: Leviathan.h:36
Leviathan::getAverageOpinionTo
float getAverageOpinionTo(IdAgent a)
Definition: Leviathan.cpp:163
Leviathan::agents
std::vector< Agent > agents
Definition: Leviathan.h:84
Agent::gossipAbout
std::vector< IdAgent > gossipAbout
Definition: Leviathan.h:42
Leviathan::writeOpinions
void writeOpinions(std::string fileName)
Definition: Leviathan.cpp:203
Leviathan::getAverageOpinion
float getAverageOpinion()
Definition: Leviathan.cpp:153
Leviathan::getRandomAgent
IdAgent getRandomAgent()
Definition: Leviathan.h:167
Leviathan::getOpinion
float getOpinion(IdAgent i, IdAgent j)
Definition: Leviathan.h:161