fpmas-metamodel 1.0
Loading...
Searching...
No Matches
config.h
Go to the documentation of this file.
1#pragma once
2
3#include "yaml-cpp/yaml.h"
4#include "fpmas/api/scheduler/scheduler.h"
5#include "fpmas/api/model/spatial/grid.h"
6#include "fpmas/utils/macros.h"
7
17 RELATIONS_FROM_NEIGHBORS_GROUP,
18 RELATIONS_FROM_CONTACTS_GROUP,
19 HANDLE_NEW_CONTACTS_GROUP,
20 MOVE_GROUP,
21 UPDATE_CELL_EDGE_WEIGHTS_GROUP,
22 CELL_GROUP);
27#define AGENT_GROUP MOVE_GROUP
28
32FPMAS_DEFINE_LAYERS(CONTACT, NEW_CONTACT);
33
37enum class Environment {
43 GRID,
49 RANDOM,
62};
63
67enum class Utility {
73 UNIFORM,
79 LINEAR,
86 INVERSE,
93 STEP
94};
95
99enum class MovePolicy {
106 RANDOM,
112 MAX
113};
114
118enum class LbAlgorithm {
131 ZOLTAN_LB,
137 GRID_LB,
161};
162
170 LOCAL,
177};
178
185enum class Interactions {
189 NONE,
193 READ_ALL,
197 READ_ONE,
201 WRITE_ALL,
205 WRITE_ONE,
216};
217
221enum class SyncMode {
242};
243
248struct Attractor {
252 float radius;
253};
254
259struct GridAttractor : public Attractor {
263 fpmas::api::model::DiscretePoint center;
264};
265
280 std::vector<fpmas::api::scheduler::TimeStep> lb_periods;
281};
282
292 bool is_valid = true;
293
301 std::size_t grid_width;
305 std::size_t grid_height;
310 std::size_t num_cells;
315 std::size_t output_degree;
323 float p;
327 float cell_weight = 1.0f;
331 Utility utility = Utility::UNIFORM;
336 std::vector<GridAttractor> grid_attractors;
347 bool json_output = false;
359 bool dot_output = false;
360
371 template<typename T>
373 std::string field_name, T& target, YAML::Node node,
374 std::string type_name, const T& default_value) {
375 if(node.IsDefined()) {
376 try{
377 target = node.as<T>();
378 } catch (const YAML::TypedBadConversion<T>& e) {
379 this->is_valid = false;
380 std::cerr <<
381 "[FATAL ERROR] Bad " + field_name + " field parsing. "
382 "Expected type: " + type_name
383 << std::endl;
384 }
385 } else {
386 target = default_value;
387 }
388 }
389
398 template<typename T>
400 std::string field_name, T& target, YAML::Node node,
401 std::string type_name
402 ) {
403 if(!node.IsDefined()) {
404 std::cerr <<
405 "[FATAL ERROR] Missing configuration field: " + field_name +
406 " (" + type_name + ")"
407 << std::endl;
408 this->is_valid = false;
409 } else {
410 try{
411 target = node.as<T>();
412 } catch (const YAML::TypedBadConversion<T>& e) {
413 this->is_valid = false;
414 std::cerr <<
415 "[FATAL ERROR] Bad " + field_name + " field parsing. "
416 "Expected type: " + type_name
417 << std::endl;
418 }
419 }
420 }
421
427 GraphConfig(YAML::Node config);
428};
429
433struct ModelConfig : public GraphConfig {
442 fpmas::api::scheduler::TimeStep num_steps;
446 AgentInteractions agent_interactions = AgentInteractions::LOCAL;
452 Interactions cell_interactions = Interactions::NONE;
462 SyncMode sync_mode = SyncMode::GHOST_MODE;
468 std::size_t cell_size = 0;
472 float agent_weight = 1.0f;
479 fpmas::api::scheduler::TimeStep refresh_local_contacts;
486 fpmas::api::scheduler::TimeStep refresh_distant_contacts;
491 std::vector<TestCaseConfig> test_cases;
492
500 ModelConfig(const GraphConfig& graph_config);
506 ModelConfig(YAML::Node config);
507};
508
509namespace YAML {
510 template<>
511 struct convert<Environment> {
512 static Node encode(const Environment& graph_type);
513 static bool decode(const Node& node, Environment& graph_type);
514 };
515
516 template<>
517 struct convert<Utility> {
518 static Node encode(const Utility& rhs);
519 static bool decode(const Node& node, Utility& rhs);
520 };
521
522 template<>
523 struct convert<MovePolicy> {
524 static Node encode(const MovePolicy& rhs);
525 static bool decode(const Node& node, MovePolicy& rhs);
526 };
527
528 template<>
529 struct convert<LbAlgorithm> {
530 static Node encode(const LbAlgorithm& rhs);
531 static bool decode(const Node& node, LbAlgorithm& rhs);
532 };
533
534 template<>
535 struct convert<AgentInteractions> {
536 static Node encode(const AgentInteractions& rhs);
537 static bool decode(const Node& node, AgentInteractions& rhs);
538 };
539
540 template<>
541 struct convert<Interactions> {
542 static Node encode(const Interactions& rhs);
543 static bool decode(const Node& node, Interactions& rhs);
544 };
545
546 template<>
547 struct convert<SyncMode> {
548 static Node encode(const SyncMode& rhs);
549 static bool decode(const Node& node, SyncMode& rhs);
550 };
551
552 template<>
553 struct convert<Attractor> {
554 static Node encode(const Attractor& rhs);
555 static bool decode(const Node& node, Attractor& rhs);
556 };
557
558 template<>
559 struct convert<GridAttractor> {
560 static Node encode(const GridAttractor& rhs);
561 static bool decode(const Node& node, GridAttractor& rhs);
562 };
563
564 template<>
565 struct convert<TestCaseConfig> {
566 static Node encode(const TestCaseConfig& rhs);
567 static bool decode(const Node& node, TestCaseConfig& rhs);
568 };
569}
570
SyncMode
Definition: config.h:221
@ GLOBAL_GHOST_MODE
@ HARD_SYNC_MODE
Utility
Definition: config.h:67
FPMAS_DEFINE_GROUPS(RELATIONS_FROM_NEIGHBORS_GROUP, RELATIONS_FROM_CONTACTS_GROUP, HANDLE_NEW_CONTACTS_GROUP, MOVE_GROUP, UPDATE_CELL_EDGE_WEIGHTS_GROUP, CELL_GROUP)
LbAlgorithm
Definition: config.h:118
@ STATIC_ZOLTAN_CELL_LB
Interactions
Definition: config.h:185
MovePolicy
Definition: config.h:99
AgentInteractions
Definition: config.h:166
Environment
Definition: config.h:37
FPMAS_DEFINE_LAYERS(CONTACT, NEW_CONTACT)
Definition: config.h:248
float radius
Definition: config.h:252
Definition: config.h:288
void load_config(std::string field_name, T &target, YAML::Node node, std::string type_name)
Definition: config.h:399
std::size_t output_degree
Definition: config.h:315
GraphConfig(YAML::Node config)
float cell_weight
Definition: config.h:327
bool json_output
Definition: config.h:347
float p
Definition: config.h:323
Utility utility
Definition: config.h:331
float zoltan_imbalance_tol
Definition: config.h:342
int json_output_period
Definition: config.h:354
bool dot_output
Definition: config.h:359
std::vector< GridAttractor > grid_attractors
Definition: config.h:336
void load_config_optional(std::string field_name, T &target, YAML::Node node, std::string type_name, const T &default_value)
Definition: config.h:372
Environment environment
Definition: config.h:297
std::size_t num_cells
Definition: config.h:310
std::size_t grid_width
Definition: config.h:301
std::size_t grid_height
Definition: config.h:305
bool is_valid
Definition: config.h:292
Definition: config.h:259
fpmas::api::model::DiscretePoint center
Definition: config.h:263
Definition: config.h:433
std::size_t cell_size
Definition: config.h:468
bool dynamic_cell_edge_weights
Definition: config.h:458
float agent_weight
Definition: config.h:472
AgentInteractions agent_interactions
Definition: config.h:446
fpmas::api::scheduler::TimeStep refresh_local_contacts
Definition: config.h:479
fpmas::api::scheduler::TimeStep num_steps
Definition: config.h:442
float occupation_rate
Definition: config.h:438
fpmas::api::scheduler::TimeStep refresh_distant_contacts
Definition: config.h:486
ModelConfig(YAML::Node config)
SyncMode sync_mode
Definition: config.h:462
ModelConfig(const GraphConfig &graph_config)
Interactions cell_interactions
Definition: config.h:452
std::vector< TestCaseConfig > test_cases
Definition: config.h:491
Definition: config.h:272
std::vector< fpmas::api::scheduler::TimeStep > lb_periods
Definition: config.h:280
LbAlgorithm algorithm
Definition: config.h:276