From 401b23feddf93c766d74fcabe46bb7d7e523d9b5 Mon Sep 17 00:00:00 2001 From: Thomas Knoll Date: Thu, 4 Jan 2024 13:46:31 +0100 Subject: [PATCH] parsing fault prob --- main.cpp | 28 ++++++++++++++++++++-------- util/Grid.cpp | 4 ++-- util/Grid.h | 3 ++- util/PrismModulesPrinter.cpp | 2 +- util/PrismModulesPrinter.h | 11 ++++++++++- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/main.cpp b/main.cpp index e1c5f2e..7c82aeb 100644 --- a/main.cpp +++ b/main.cpp @@ -116,22 +116,20 @@ int main(int argc, char* argv[]) { parsingStateRewards = true; parsingBackground = false; continue; + } else if (line.at(0) == '-' && line.at(line.size() - 1 ) == '-' && parsingStateRewards) { + parsingStateRewards = false; + parsingEnvironmentProperties = true; + continue; } else if(line.at(0) == '-' && line.at(line.size() - 1) == '-') { parsingBackground = true; continue; } - if(!parsingBackground && !parsingStateRewards) { - // std::cout << "Reading :\t" << line << "\n"; + if(!parsingBackground && !parsingStateRewards && !parsingEnvironmentProperties) { content += line + "\n"; } else if (parsingBackground) { - // std::cout << "Background:\t" << line << "\n"; background += line + "\n"; } else if(parsingStateRewards) { rewards += line + "\n"; - } else if (line.at(0) == '-' && line.at(line.size() - 1 ) == '-' && parsingStateRewards) { - parsingStateRewards = false; - parsingEnvironmentProperties = true; - continue; } else if (parsingEnvironmentProperties) { properties += line + "\n"; } @@ -151,6 +149,8 @@ int main(int argc, char* argv[]) { cells backgroundCells; std::vector configurations; std::map stateRewards; + double faultyProbability; + try { bool ok = phrase_parse(contentIter, contentLast, contentParser, qi::space, contentCells); // TODO if(background is not empty) { @@ -169,8 +169,20 @@ int main(int argc, char* argv[]) { float reward = std::stof(*(++iter)); stateRewards[std::make_pair(x,y)] = reward; } + if (!properties.empty()) { + auto faultProbabilityIdentifier = std::string("FaultProbability:"); + auto start_pos = properties.find(faultProbabilityIdentifier); + + + if (start_pos != std::string::npos) { + auto end_pos = properties.find('\n', start_pos); + auto value = properties.substr(start_pos + faultProbabilityIdentifier.length(), end_pos - start_pos - faultProbabilityIdentifier.length()); + faultyProbability = std::stod(value); + std::cout << "Probabilty" << faultyProbability << std::endl; + } + } if(ok) { - Grid grid(contentCells, backgroundCells, gridOptions, stateRewards); + Grid grid(contentCells, backgroundCells, gridOptions, stateRewards, faultyProbability); //grid.printToPrism(std::cout, prism::ModelType::MDP); std::stringstream ss; // grid.printToPrism(file, configurations ,prism::ModelType::MDP); diff --git a/util/Grid.cpp b/util/Grid.cpp index 69d10bf..3991484 100644 --- a/util/Grid.cpp +++ b/util/Grid.cpp @@ -12,8 +12,8 @@ prism::ModelType GridOptions::getModelType() const return prism::ModelType::MDP; } -Grid::Grid(cells gridCells, cells background, const GridOptions &gridOptions, const std::map &stateRewards) - : allGridCells(gridCells), background(background), gridOptions(gridOptions), stateRewards(stateRewards) +Grid::Grid(cells gridCells, cells background, const GridOptions &gridOptions, const std::map &stateRewards, const double faultyProbability) + : allGridCells(gridCells), background(background), gridOptions(gridOptions), stateRewards(stateRewards), faultyProbability(faultyProbability) { cell max = allGridCells.at(allGridCells.size() - 1); maxBoundaries = std::make_pair(max.row - 1, max.column - 1); diff --git a/util/Grid.h b/util/Grid.h index 1ac8965..29e9e20 100644 --- a/util/Grid.h +++ b/util/Grid.h @@ -21,7 +21,7 @@ struct GridOptions { class Grid { public: - Grid(cells gridCells, cells background, const GridOptions &gridOptions, const std::map &stateRewards = {}); + Grid(cells gridCells, cells background, const GridOptions &gridOptions, const std::map &stateRewards = {}, const double faultyProbability = 0); cells getGridCells(); @@ -67,4 +67,5 @@ class Grid { std::map backgroundTiles; std::map stateRewards; + double faultyProbability; }; diff --git a/util/PrismModulesPrinter.cpp b/util/PrismModulesPrinter.cpp index 1d66f3e..273ae65 100644 --- a/util/PrismModulesPrinter.cpp +++ b/util/PrismModulesPrinter.cpp @@ -515,7 +515,7 @@ namespace prism { return os; } - std::ostream& PrismModulesPrinter::printModule(std::ostream &os, const AgentName &agentName, const size_t &agentIndex, const coordinates &boundaries, const coordinates& initialPosition, const cells &keys, const std::map &backgroundTiles, const bool agentWithView, const std::vector &probabilities) { + std::ostream& PrismModulesPrinter::printModule(std::ostream &os, const AgentName &agentName, const size_t &agentIndex, const coordinates &boundaries, const coordinates& initialPosition, const cells &keys, const std::map &backgroundTiles, const bool agentWithView, const std::vector &probabilities, const double faultyProbability) { os << "module " << agentName << "\n"; os << "\tx" << agentName << " : [1.." << boundaries.second << "];\n"; os << "\ty" << agentName << " : [1.." << boundaries.first << "];\n"; diff --git a/util/PrismModulesPrinter.h b/util/PrismModulesPrinter.h index 005ebf0..dcae2cb 100644 --- a/util/PrismModulesPrinter.h +++ b/util/PrismModulesPrinter.h @@ -78,7 +78,16 @@ namespace prism { std::ostream& printBooleansForBackground(std::ostream &os, const AgentName &agentName, const std::map &backgroundTiles); std::ostream& printActionsForBackground(std::ostream &os, const AgentName &agentName, const std::map &backgroundTiles); std::ostream& printInitStruct(std::ostream &os, const AgentNameAndPositionMap &agents, const KeyNameAndPositionMap &keys, const cells &lockedDoors, const cells &unlockedDoors, prism::ModelType modelType); - std::ostream& printModule(std::ostream &os, const AgentName &agentName, const size_t &agentIndex, const coordinates &boundaries, const coordinates& initialPosition, const cells &keys, const std::map &backgroundTiles, const bool agentWithView, const std::vector &probabilities = {}); + std::ostream& printModule(std::ostream &os, + const AgentName &agentName, + const size_t &agentIndex, + const coordinates &boundaries, + const coordinates& initialPosition, + const cells &keys, + const std::map &backgroundTiles, + const bool agentWithView, + const std::vector &probabilities = {}, + const double faultyProbability = 0); std::ostream& printMovementActions(std::ostream &os, const AgentName &agentName, const size_t &agentIndex, const bool agentWithView, const float &probability = 1.0); std::ostream& printDoneActions(std::ostream &os, const AgentName &agentName, const size_t &agentIndex); std::ostream& printEndmodule(std::ostream &os);