fpmas 1.6
Public Member Functions | List of all members
fpmas::model::detail::DefaultModel< SyncMode > Class Template Reference

#include <model.h>

Inheritance diagram for fpmas::model::detail::DefaultModel< SyncMode >:
Inheritance graph
[legend]
Collaboration diagram for fpmas::model::detail::DefaultModel< SyncMode >:
Collaboration graph
[legend]

Public Member Functions

 DefaultModel ()
 
 DefaultModel (api::graph::LoadBalancing< AgentPtr > &load_balancing)
 
 DefaultModel (api::scheduler::Scheduler &scheduler, api::runtime::Runtime &runtime, api::graph::LoadBalancing< AgentPtr > &load_balancing)
 
- Public Member Functions inherited from fpmas::model::detail::Model
 Model (api::model::AgentGraph &graph, api::scheduler::Scheduler &scheduler, api::runtime::Runtime &runtime, api::model::LoadBalancing &load_balancing)
 
 Model (const Model &)=delete
 
 Model (Model &&)=delete
 
Modeloperator= (const Model &)=delete
 
Modeloperator= (Model &&)=delete
 
api::model::AgentGraphgraph () override
 
const api::model::AgentGraphgraph () const override
 
api::scheduler::Schedulerscheduler () override
 
const api::scheduler::Schedulerscheduler () const override
 
api::runtime::Runtimeruntime () override
 
const api::runtime::Runtimeruntime () const override
 
const scheduler::JobloadBalancingJob () const override
 
api::model::AgentGroupbuildGroup (api::model::GroupId id) override
 
api::model::AgentGroupbuildGroup (api::model::GroupId id, const api::model::Behavior &behavior) override
 
void removeGroup (api::model::AgentGroup &group) override
 
api::model::AgentGroupgetGroup (api::model::GroupId id) const override
 
const std::unordered_map< GroupId, api::model::AgentGroup * > & groups () const override
 
AgentEdge * link (api::model::Agent *src_agent, api::model::Agent *tgt_agent, api::graph::LayerId layer) override
 
void unlink (api::model::AgentEdge *edge) override
 
api::communication::MpiCommunicatorgetMpiCommunicator () override
 
const api::communication::MpiCommunicatorgetMpiCommunicator () const override
 
void clear () override
 
virtual AgentGraphgraph ()=0
 
virtual const AgentGraphgraph () const =0
 
virtual api::scheduler::Schedulerscheduler ()=0
 
virtual const api::scheduler::Schedulerscheduler () const =0
 
virtual api::runtime::Runtimeruntime ()=0
 
virtual const api::runtime::Runtimeruntime () const =0
 
virtual const api::scheduler::JobloadBalancingJob () const =0
 
virtual AgentGroupbuildGroup (GroupId id)=0
 
virtual AgentGroupbuildGroup (GroupId id, const Behavior &behavior)=0
 
virtual void removeGroup (AgentGroup &group)=0
 
virtual AgentGroupgetGroup (GroupId id) const =0
 
virtual const std::unordered_map< GroupId, AgentGroup * > & groups () const =0
 
virtual AgentEdgelink (Agent *src_agent, Agent *tgt_agent, api::graph::LayerId layer)=0
 
virtual void unlink (AgentEdge *edge)=0
 
virtual api::communication::MpiCommunicatorgetMpiCommunicator ()=0
 
virtual const api::communication::MpiCommunicatorgetMpiCommunicator () const =0
 
virtual void clear ()=0
 

Additional Inherited Members

- Protected Member Functions inherited from fpmas::model::detail::Model
void insert (api::model::GroupId id, api::model::AgentGroup *group) override
 
virtual void insert (GroupId id, AgentGroup *group)=0
 

Detailed Description

template<template< typename > class SyncMode>
class fpmas::model::detail::DefaultModel< SyncMode >

Model extension based on the DefaultModelConfig.

It is recommended to use this helper class to instantiate a Model.

Example
// main.cpp
#include "fpmas.h"
using namespace fpmas;
class UserAgent1 : public model::AgentBase<UserAgent1> {
public:
void act() override {
FPMAS_LOG_INFO(UserAgent1, "Execute agent %s",
FPMAS_C_STR(this->node()->getId()))
}
};
class UserAgent2 : public model::AgentBase<UserAgent2> {
public:
void act() override {
FPMAS_LOG_INFO(UserAgent2, "Execute agent %s",
FPMAS_C_STR(this->node()->getId()))
}
};
#define USER_AGENTS UserAgent1, UserAgent2
FPMAS_DEFAULT_JSON(UserAgent1)
FPMAS_DEFAULT_JSON(UserAgent2)
FPMAS_JSON_SET_UP(USER_AGENTS)
int main(int argc, char** argv) {
fpmas::init(argc, argv);
{
model::DefaultModel model;
model::AgentGroup& group_1 = model.buildGroup();
group_1.add(new UserAgent1);
group_1.add(new UserAgent2);
model.scheduler().schedule(0, 1, group_1.job());
model.scheduler().schedule(0, 50, model.loadBalancingJob());
model.runtime().run(1000);
}
}
#define FPMAS_DEFAULT_JSON(AGENT)
Definition: json_serializer.h:127
#define FPMAS_C_STR(arg)
Definition: macros.h:24
detail::AgentBase< api::model::Agent, AgentType, TypeIdBase > AgentBase
Definition: model.h:1152
Definition: fpmas.cpp:3
void finalize()
Definition: fpmas.cpp:18
void init(int argc, char **argv)
Definition: fpmas.cpp:6
#define FPMAS_JSON_SET_UP(...)
Definition: serializer.h:122
#define FPMAS_REGISTER_AGENT_TYPES(...)
Definition: serializer.h:214

Constructor & Destructor Documentation

◆ DefaultModel() [1/3]

template<template< typename > class SyncMode>
fpmas::model::detail::DefaultModel< SyncMode >::DefaultModel ( )
inline

DefaultModel default constructor.

Default graph, load balancing algorithm, runtime and scheduler defined in DefaultModelConfig are used to initialize the Model.

◆ DefaultModel() [2/3]

template<template< typename > class SyncMode>
fpmas::model::detail::DefaultModel< SyncMode >::DefaultModel ( api::graph::LoadBalancing< AgentPtr > &  load_balancing)
inline

DefaultModel constructor.

Default graph, runtime and scheduler defined in DefaultModelConfig are used to initialize the Model, with the specified load balancing algorithm.

The load_balancing algorithm lifetime must exceed this DefaultModel lifetime.

Parameters
load_balancinguser defined load balancing algorithm

◆ DefaultModel() [3/3]

template<template< typename > class SyncMode>
fpmas::model::detail::DefaultModel< SyncMode >::DefaultModel ( api::scheduler::Scheduler scheduler,
api::runtime::Runtime runtime,
api::graph::LoadBalancing< AgentPtr > &  load_balancing 
)
inline

DefaultModel constructor.

The default graph is used to initialize the Model, with the specified scheduler, runtime and load balancing algorithm.

The load_balancing algorithm lifetime must exceed this DefaultModel lifetime.

Parameters
schedulerscheduler
runtimeruntime
load_balancinguser defined load balancing algorithm

The documentation for this class was generated from the following file: