From 8985ad77cfd7ad83007897466d672a8bfea4ae82 Mon Sep 17 00:00:00 2001 From: dehnert <dehnert@cs.rwth-aachen.de> Date: Fri, 7 Aug 2015 14:16:45 +0200 Subject: [PATCH 1/6] added first debug output to track down bug Former-commit-id: ad333216c1bd16837a6c4de5c253637bbeb481c4 --- src/builder/DdPrismModelBuilder.cpp | 1 + .../builder/DdPrismModelBuilderTest.cpp | 88 +++++++++---------- 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/builder/DdPrismModelBuilder.cpp b/src/builder/DdPrismModelBuilder.cpp index eae18d06e..07a5f1100 100644 --- a/src/builder/DdPrismModelBuilder.cpp +++ b/src/builder/DdPrismModelBuilder.cpp @@ -620,6 +620,7 @@ namespace storm { std::pair<storm::dd::Add<Type>, ModuleDecisionDiagram> transitionMatrixModulePair = createSystemDecisionDiagram(generationInfo); storm::dd::Add<Type> transitionMatrix = transitionMatrixModulePair.first; + transitionMatrix.exportToDot("trans.dot"); ModuleDecisionDiagram const& globalModule = transitionMatrixModulePair.second; // Finally, we build the DDs for a reward structure, if requested. It is important to do this now, because diff --git a/test/functional/builder/DdPrismModelBuilderTest.cpp b/test/functional/builder/DdPrismModelBuilderTest.cpp index ea88d24f1..15f5b03ce 100644 --- a/test/functional/builder/DdPrismModelBuilderTest.cpp +++ b/test/functional/builder/DdPrismModelBuilderTest.cpp @@ -72,50 +72,50 @@ TEST(DdPrismModelBuilderTest, Mdp) { EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); std::shared_ptr<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>> mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); - - EXPECT_EQ(169, mdp->getNumberOfStates()); - EXPECT_EQ(436, mdp->getNumberOfTransitions()); - EXPECT_EQ(254, mdp->getNumberOfChoices()); - - program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader3.nm"); - model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); - - EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); - mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); - - EXPECT_EQ(364, mdp->getNumberOfStates()); - EXPECT_EQ(654, mdp->getNumberOfTransitions()); - EXPECT_EQ(573, mdp->getNumberOfChoices()); - - program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/coin2-2.nm"); - model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); - - EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); - mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); - - EXPECT_EQ(272, mdp->getNumberOfStates()); - EXPECT_EQ(492, mdp->getNumberOfTransitions()); - EXPECT_EQ(400, mdp->getNumberOfChoices()); - - program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/csma2-2.nm"); - model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); - - EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); - mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); - - EXPECT_EQ(1038, mdp->getNumberOfStates()); - EXPECT_EQ(1282, mdp->getNumberOfTransitions()); - EXPECT_EQ(1054, mdp->getNumberOfChoices()); - - program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/firewire3-0.5.nm"); - model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); - - EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); - mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); - - EXPECT_EQ(4093, mdp->getNumberOfStates()); - EXPECT_EQ(5585, mdp->getNumberOfTransitions()); - EXPECT_EQ(5519, mdp->getNumberOfChoices()); +// +// EXPECT_EQ(169, mdp->getNumberOfStates()); +// EXPECT_EQ(436, mdp->getNumberOfTransitions()); +// EXPECT_EQ(254, mdp->getNumberOfChoices()); +// +// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader3.nm"); +// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); +// +// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); +// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); +// +// EXPECT_EQ(364, mdp->getNumberOfStates()); +// EXPECT_EQ(654, mdp->getNumberOfTransitions()); +// EXPECT_EQ(573, mdp->getNumberOfChoices()); +// +// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/coin2-2.nm"); +// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); +// +// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); +// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); +// +// EXPECT_EQ(272, mdp->getNumberOfStates()); +// EXPECT_EQ(492, mdp->getNumberOfTransitions()); +// EXPECT_EQ(400, mdp->getNumberOfChoices()); +// +// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/csma2-2.nm"); +// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); +// +// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); +// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); +// +// EXPECT_EQ(1038, mdp->getNumberOfStates()); +// EXPECT_EQ(1282, mdp->getNumberOfTransitions()); +// EXPECT_EQ(1054, mdp->getNumberOfChoices()); +// +// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/firewire3-0.5.nm"); +// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); +// +// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); +// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); +// +// EXPECT_EQ(4093, mdp->getNumberOfStates()); +// EXPECT_EQ(5585, mdp->getNumberOfTransitions()); +// EXPECT_EQ(5519, mdp->getNumberOfChoices()); program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/wlan0-2-2.nm"); model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); From b2cec6395a21352b10269ebeef3bfeea293b613e Mon Sep 17 00:00:00 2001 From: dehnert <dehnert@cs.rwth-aachen.de> Date: Fri, 7 Aug 2015 14:34:17 +0200 Subject: [PATCH 2/6] more debug output Former-commit-id: ff8f9b5a81717d597e1b423f82d7f77b22af84eb --- src/builder/DdPrismModelBuilder.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/builder/DdPrismModelBuilder.cpp b/src/builder/DdPrismModelBuilder.cpp index 07a5f1100..69aea3119 100644 --- a/src/builder/DdPrismModelBuilder.cpp +++ b/src/builder/DdPrismModelBuilder.cpp @@ -621,6 +621,8 @@ namespace storm { std::pair<storm::dd::Add<Type>, ModuleDecisionDiagram> transitionMatrixModulePair = createSystemDecisionDiagram(generationInfo); storm::dd::Add<Type> transitionMatrix = transitionMatrixModulePair.first; transitionMatrix.exportToDot("trans.dot"); + std::cout << "nnz: " << transitionMatrix.getNonZeroCount() << std::endl; + std::cout << "node: " << transitionMatrix.getNodeCount() << std::endl; ModuleDecisionDiagram const& globalModule = transitionMatrixModulePair.second; // Finally, we build the DDs for a reward structure, if requested. It is important to do this now, because @@ -651,6 +653,9 @@ namespace storm { transitionMatrixBdd = transitionMatrixBdd.existsAbstract(generationInfo.allNondeterminismVariables); } storm::dd::Bdd<Type> reachableStates = computeReachableStates(generationInfo, initialStates, transitionMatrixBdd); + reachableStates.exportToDot("reach.dot"); + std::cout << "reach nnz: " << reachableStates.getNonZeroCount() << std::endl; + std::cout << "reach node: " << reachableStates.getNodeCount() << std::endl; storm::dd::Add<Type> reachableStatesAdd = reachableStates.toAdd(); transitionMatrix *= reachableStatesAdd; if (stateAndTransitionRewards) { From 507331d8a92fbf3dc8e45bf16a8013347cbb9bbd Mon Sep 17 00:00:00 2001 From: dehnert <dehnert@cs.rwth-aachen.de> Date: Fri, 7 Aug 2015 14:47:56 +0200 Subject: [PATCH 3/6] more debug output Former-commit-id: acb7f9ea2f17ee903b05436aa3088640d92feb2a --- src/builder/DdPrismModelBuilder.cpp | 4 +--- src/storage/dd/CuddAdd.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/builder/DdPrismModelBuilder.cpp b/src/builder/DdPrismModelBuilder.cpp index 69aea3119..2d94be7cc 100644 --- a/src/builder/DdPrismModelBuilder.cpp +++ b/src/builder/DdPrismModelBuilder.cpp @@ -623,6 +623,7 @@ namespace storm { transitionMatrix.exportToDot("trans.dot"); std::cout << "nnz: " << transitionMatrix.getNonZeroCount() << std::endl; std::cout << "node: " << transitionMatrix.getNodeCount() << std::endl; + std::cout << "trans: " << transitionMatrix << std::endl; ModuleDecisionDiagram const& globalModule = transitionMatrixModulePair.second; // Finally, we build the DDs for a reward structure, if requested. It is important to do this now, because @@ -653,9 +654,6 @@ namespace storm { transitionMatrixBdd = transitionMatrixBdd.existsAbstract(generationInfo.allNondeterminismVariables); } storm::dd::Bdd<Type> reachableStates = computeReachableStates(generationInfo, initialStates, transitionMatrixBdd); - reachableStates.exportToDot("reach.dot"); - std::cout << "reach nnz: " << reachableStates.getNonZeroCount() << std::endl; - std::cout << "reach node: " << reachableStates.getNodeCount() << std::endl; storm::dd::Add<Type> reachableStatesAdd = reachableStates.toAdd(); transitionMatrix *= reachableStatesAdd; if (stateAndTransitionRewards) { diff --git a/src/storage/dd/CuddAdd.cpp b/src/storage/dd/CuddAdd.cpp index 5eaded696..dbee2e94a 100644 --- a/src/storage/dd/CuddAdd.cpp +++ b/src/storage/dd/CuddAdd.cpp @@ -1,5 +1,6 @@ #include <cstring> #include <algorithm> +#include <boost/algorithm/string/join.hpp> #include "src/storage/dd/CuddAdd.h" #include "src/storage/dd/CuddBdd.h" @@ -1055,7 +1056,12 @@ namespace storm { } std::ostream& operator<<(std::ostream& out, const Add<DdType::CUDD>& add) { - add.exportToDot(); + out << "ADD with " << add.getNonZeroCount() << " nnz, " << add.getNodeCount() << " nodes, " << add.getLeafCount() << " leaves" << std::endl; + std::vector<std::string> variableNames; + for (auto const& variable : add.getContainedMetaVariables()) { + variableNames.push_back(variable.getName()); + } + out << "contained variables: " << boost::algorithm::join(variableNames, ", ") << std::endl; return out; } From 08747378d5b64e7e650eb9eacb434307f6e28de0 Mon Sep 17 00:00:00 2001 From: dehnert <dehnert@cs.rwth-aachen.de> Date: Fri, 7 Aug 2015 15:00:01 +0200 Subject: [PATCH 4/6] workplace switch Former-commit-id: eab2c2bc9e49aa4392294107528e9e398f074130 --- src/builder/DdPrismModelBuilder.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/builder/DdPrismModelBuilder.cpp b/src/builder/DdPrismModelBuilder.cpp index 2d94be7cc..13a6cb985 100644 --- a/src/builder/DdPrismModelBuilder.cpp +++ b/src/builder/DdPrismModelBuilder.cpp @@ -613,6 +613,7 @@ namespace storm { } preparedProgram = preparedProgram.substituteConstants(); + std::cout << "translating: " << preparedProgram << std::endl; // Start by initializing the structure used for storing all information needed during the model generation. // In particular, this creates the meta variables used to encode the model. @@ -621,8 +622,6 @@ namespace storm { std::pair<storm::dd::Add<Type>, ModuleDecisionDiagram> transitionMatrixModulePair = createSystemDecisionDiagram(generationInfo); storm::dd::Add<Type> transitionMatrix = transitionMatrixModulePair.first; transitionMatrix.exportToDot("trans.dot"); - std::cout << "nnz: " << transitionMatrix.getNonZeroCount() << std::endl; - std::cout << "node: " << transitionMatrix.getNodeCount() << std::endl; std::cout << "trans: " << transitionMatrix << std::endl; ModuleDecisionDiagram const& globalModule = transitionMatrixModulePair.second; From c683934ea0f10088bc65343ef79ccbd2e224b6db Mon Sep 17 00:00:00 2001 From: dehnert <dehnert@cs.rwth-aachen.de> Date: Fri, 7 Aug 2015 19:53:58 +0200 Subject: [PATCH 5/6] removed debug output and fixed bug Former-commit-id: 0c33f61bbea9dfe743c213ff0eecdad1eb3008d1 --- src/builder/DdPrismModelBuilder.cpp | 3 - src/parser/PrismParser.cpp | 9 +- src/storage/prism/Program.cpp | 4 +- .../builder/DdPrismModelBuilderTest.cpp | 88 +++++++++---------- 4 files changed, 53 insertions(+), 51 deletions(-) diff --git a/src/builder/DdPrismModelBuilder.cpp b/src/builder/DdPrismModelBuilder.cpp index 13a6cb985..eae18d06e 100644 --- a/src/builder/DdPrismModelBuilder.cpp +++ b/src/builder/DdPrismModelBuilder.cpp @@ -613,7 +613,6 @@ namespace storm { } preparedProgram = preparedProgram.substituteConstants(); - std::cout << "translating: " << preparedProgram << std::endl; // Start by initializing the structure used for storing all information needed during the model generation. // In particular, this creates the meta variables used to encode the model. @@ -621,8 +620,6 @@ namespace storm { std::pair<storm::dd::Add<Type>, ModuleDecisionDiagram> transitionMatrixModulePair = createSystemDecisionDiagram(generationInfo); storm::dd::Add<Type> transitionMatrix = transitionMatrixModulePair.first; - transitionMatrix.exportToDot("trans.dot"); - std::cout << "trans: " << transitionMatrix << std::endl; ModuleDecisionDiagram const& globalModule = transitionMatrixModulePair.second; // Finally, we build the DDs for a reward structure, if requested. It is important to do this now, because diff --git a/src/parser/PrismParser.cpp b/src/parser/PrismParser.cpp index bff8c71b8..ddb348249 100644 --- a/src/parser/PrismParser.cpp +++ b/src/parser/PrismParser.cpp @@ -378,7 +378,8 @@ namespace storm { if (!actionName.empty()) { auto const& nameIndexPair = globalProgramInformation.actionIndices.find(actionName); if (nameIndexPair == globalProgramInformation.actionIndices.end()) { - globalProgramInformation.actionIndices[actionName] = globalProgramInformation.actionIndices.size(); + std::size_t nextIndex = globalProgramInformation.actionIndices.size(); + globalProgramInformation.actionIndices[actionName] = nextIndex; } } @@ -392,7 +393,8 @@ namespace storm { // Register the action name if it has not appeared earlier. auto const& nameIndexPair = globalProgramInformation.actionIndices.find(actionName); if (nameIndexPair == globalProgramInformation.actionIndices.end()) { - globalProgramInformation.actionIndices[actionName] = globalProgramInformation.actionIndices.size(); + std::size_t nextIndex = globalProgramInformation.actionIndices.size(); + globalProgramInformation.actionIndices[actionName] = nextIndex; } } @@ -518,7 +520,8 @@ namespace storm { if (!newActionName.empty()) { auto const& nameIndexPair = globalProgramInformation.actionIndices.find(newActionName); if (nameIndexPair == globalProgramInformation.actionIndices.end()) { - globalProgramInformation.actionIndices[newActionName] = globalProgramInformation.actionIndices.size(); + std::size_t nextIndex = globalProgramInformation.actionIndices.size(); + globalProgramInformation.actionIndices[newActionName] = nextIndex; } } diff --git a/src/storage/prism/Program.cpp b/src/storage/prism/Program.cpp index 0b61fd795..4655f1bcc 100644 --- a/src/storage/prism/Program.cpp +++ b/src/storage/prism/Program.cpp @@ -13,8 +13,10 @@ namespace storm { namespace prism { Program::Program(std::shared_ptr<storm::expressions::ExpressionManager> manager, ModelType modelType, std::vector<Constant> const& constants, std::vector<BooleanVariable> const& globalBooleanVariables, std::vector<IntegerVariable> const& globalIntegerVariables, std::vector<Formula> const& formulas, std::vector<Module> const& modules, std::map<std::string, uint_fast64_t> const& actionToIndexMap, std::vector<RewardModel> const& rewardModels, bool fixInitialConstruct, storm::prism::InitialConstruct const& initialConstruct, std::vector<Label> const& labels, std::string const& filename, uint_fast64_t lineNumber, bool checkValidity) : LocatedInformation(filename, lineNumber), manager(manager), modelType(modelType), constants(constants), constantToIndexMap(), globalBooleanVariables(globalBooleanVariables), globalBooleanVariableToIndexMap(), globalIntegerVariables(globalIntegerVariables), globalIntegerVariableToIndexMap(), formulas(formulas), formulaToIndexMap(), modules(modules), moduleToIndexMap(), rewardModels(rewardModels), rewardModelToIndexMap(), initialConstruct(initialConstruct), labels(labels), actionToIndexMap(actionToIndexMap), indexToActionMap(), actions(), actionIndices(), actionIndicesToModuleIndexMap(), variableToModuleIndexMap() { + + // Start by creating the necessary mappings from the given ones. this->createMappings(); - + // Create a new initial construct if the corresponding flag was set. if (fixInitialConstruct) { storm::expressions::Expression newInitialExpression = manager->boolean(true); diff --git a/test/functional/builder/DdPrismModelBuilderTest.cpp b/test/functional/builder/DdPrismModelBuilderTest.cpp index 15f5b03ce..db6adc88f 100644 --- a/test/functional/builder/DdPrismModelBuilderTest.cpp +++ b/test/functional/builder/DdPrismModelBuilderTest.cpp @@ -72,50 +72,50 @@ TEST(DdPrismModelBuilderTest, Mdp) { EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); std::shared_ptr<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>> mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); -// -// EXPECT_EQ(169, mdp->getNumberOfStates()); -// EXPECT_EQ(436, mdp->getNumberOfTransitions()); -// EXPECT_EQ(254, mdp->getNumberOfChoices()); -// -// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader3.nm"); -// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); -// -// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); -// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); -// -// EXPECT_EQ(364, mdp->getNumberOfStates()); -// EXPECT_EQ(654, mdp->getNumberOfTransitions()); -// EXPECT_EQ(573, mdp->getNumberOfChoices()); -// -// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/coin2-2.nm"); -// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); -// -// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); -// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); -// -// EXPECT_EQ(272, mdp->getNumberOfStates()); -// EXPECT_EQ(492, mdp->getNumberOfTransitions()); -// EXPECT_EQ(400, mdp->getNumberOfChoices()); -// -// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/csma2-2.nm"); -// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); -// -// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); -// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); -// -// EXPECT_EQ(1038, mdp->getNumberOfStates()); -// EXPECT_EQ(1282, mdp->getNumberOfTransitions()); -// EXPECT_EQ(1054, mdp->getNumberOfChoices()); -// -// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/firewire3-0.5.nm"); -// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); -// -// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); -// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); -// -// EXPECT_EQ(4093, mdp->getNumberOfStates()); -// EXPECT_EQ(5585, mdp->getNumberOfTransitions()); -// EXPECT_EQ(5519, mdp->getNumberOfChoices()); + + EXPECT_EQ(169, mdp->getNumberOfStates()); + EXPECT_EQ(436, mdp->getNumberOfTransitions()); + EXPECT_EQ(254, mdp->getNumberOfChoices()); + + program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader3.nm"); + model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); + + EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); + mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); + + EXPECT_EQ(364, mdp->getNumberOfStates()); + EXPECT_EQ(654, mdp->getNumberOfTransitions()); + EXPECT_EQ(573, mdp->getNumberOfChoices()); + + program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/coin2-2.nm"); + model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); + + EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); + mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); + + EXPECT_EQ(272, mdp->getNumberOfStates()); + EXPECT_EQ(492, mdp->getNumberOfTransitions()); + EXPECT_EQ(400, mdp->getNumberOfChoices()); + + program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/csma2-2.nm"); + model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); + + EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); + mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); + + EXPECT_EQ(1038, mdp->getNumberOfStates()); + EXPECT_EQ(1282, mdp->getNumberOfTransitions()); + EXPECT_EQ(1054, mdp->getNumberOfChoices()); + + program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/firewire3-0.5.nm"); + model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); + + EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp); + mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::CUDD>>(); + + EXPECT_EQ(4093, mdp->getNumberOfStates()); + EXPECT_EQ(5585, mdp->getNumberOfTransitions()); + EXPECT_EQ(5519, mdp->getNumberOfChoices()); program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/wlan0-2-2.nm"); model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>::translateProgram(program); From 21627fbab439aa79535f62e012624f7f466c3b13 Mon Sep 17 00:00:00 2001 From: dehnert <dehnert@cs.rwth-aachen.de> Date: Mon, 10 Aug 2015 00:23:47 +0200 Subject: [PATCH 6/6] Started to get rid of some warnings. In particular this means making the compiler more silent for third-party stuff. Former-commit-id: 2b6ca07d06186e7c90644fbc9d4ec4d0d09aff31 --- CMakeLists.txt | 9 ++++++--- resources/3rdparty/cudd-2.5.0/CMakeLists.txt | 6 +++++- resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc | 8 ++++---- resources/3rdparty/glpk-4.53/CMakeLists.txt | 2 +- .../prctl/SparseMdpPrctlModelChecker.cpp | 1 - .../SparseDtmcEliminationModelChecker.cpp | 14 -------------- src/parser/AutoParser.cpp | 2 +- 7 files changed, 17 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1b8c29b3..c0179e39d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,8 +114,10 @@ if(CMAKE_COMPILER_IS_GNUCC) set(STORM_COMPILED_BY "GCC") # Set standard flags for GCC set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -funroll-loops") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -funroll-loops") add_definitions(-DBOOST_RESULT_OF_USE_DECLTYPE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic -Wno-deprecated-declarations") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic -Wno-deprecated-declarations") # Turn on popcnt instruction if desired (yes by default) if (STORM_USE_POPCNT) @@ -123,7 +125,7 @@ if(CMAKE_COMPILER_IS_GNUCC) endif(STORM_USE_POPCNT) # Set the no-strict-aliasing target for GCC - set_source_files_properties(${CONVERSIONHELPER_TARGET} PROPERTIES COMPILE_FLAGS " -fno-strict-aliasing ") + set_source_files_properties(${CONVERSIONHELPER_TARGET} PROPERTIES COMPILE_FLAGS " -fno-strict-aliasing") elseif(MSVC) set(STORM_COMPILED_BY "MSVC") # required for GMM to compile, ugly error directive in their code @@ -146,7 +148,7 @@ else(CLANG) # As CLANG is not set as a variable, we need to set it in case we have not matched another compiler. set (CLANG ON) # Set standard flags for clang - set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -funroll-loops -O3") + set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -funroll-loops -O4") if(UNIX AND NOT APPLE AND NOT USE_LIBCXX) set(CLANG_STDLIB libstdc++) message(STATUS "StoRM - Linking against libstdc++") @@ -162,6 +164,7 @@ else(CLANG) add_definitions(-DBOOST_RESULT_OF_USE_DECLTYPE) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=${CLANG_STDLIB} -Wall -pedantic -Wno-unused-variable -ftemplate-depth=1024") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic") # Turn on popcnt instruction if desired (yes by default) if (STORM_USE_POPCNT) diff --git a/resources/3rdparty/cudd-2.5.0/CMakeLists.txt b/resources/3rdparty/cudd-2.5.0/CMakeLists.txt index 4d08513de..c9f821a21 100644 --- a/resources/3rdparty/cudd-2.5.0/CMakeLists.txt +++ b/resources/3rdparty/cudd-2.5.0/CMakeLists.txt @@ -20,9 +20,13 @@ include_directories("${PROJECT_SOURCE_DIR}/src/nanotrav") include_directories("${PROJECT_SOURCE_DIR}/src/st") include_directories("${PROJECT_SOURCE_DIR}/src/util") -if(MSVC) +if(CMAKE_COMPILER_IS_GNUCC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function") +elseif(MSVC) # required for GMM to compile, ugly error directive in their code add_definitions(/D_SCL_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS) +else(CLANG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function") endif() # Since we do not target Alphas, this symbol is always set diff --git a/resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc b/resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc index 3262108aa..b8f7d3983 100644 --- a/resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc +++ b/resources/3rdparty/cudd-2.5.0/src/obj/cuddObj.cc @@ -2815,7 +2815,7 @@ Cudd::Walsh( size_t n = x.size(); DdNode **X = new DdNode *[n]; DdNode **Y = new DdNode *[n]; - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { X[i] = x[i].getNode(); Y[i] = y[i].getNode(); } @@ -3612,7 +3612,7 @@ ADD::SwapVariables( DdManager *mgr = p->manager; DdNode **X = new DdNode *[n]; DdNode **Y = new DdNode *[n]; - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { X[i] = x[i].node; Y[i] = y[i].node; } @@ -3646,7 +3646,7 @@ BDD::SwapVariables( DdManager *mgr = p->manager; DdNode **X = new DdNode *[n]; DdNode **Y = new DdNode *[n]; - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { X[i] = x[i].node; Y[i] = y[i].node; } @@ -3666,7 +3666,7 @@ BDD::AdjPermuteX( size_t n = x.size(); DdManager *mgr = p->manager; DdNode **X = new DdNode *[n]; - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { X[i] = x[i].node; } DdNode *result = Cudd_bddAdjPermuteX(mgr, node, X, static_cast<int>(n)); diff --git a/resources/3rdparty/glpk-4.53/CMakeLists.txt b/resources/3rdparty/glpk-4.53/CMakeLists.txt index b09ec9e1c..24ee34121 100644 --- a/resources/3rdparty/glpk-4.53/CMakeLists.txt +++ b/resources/3rdparty/glpk-4.53/CMakeLists.txt @@ -53,7 +53,7 @@ message(STATUS "GLPK - CMAKE_BUILD_TYPE (ENV): $ENV{CMAKE_BUILD_TYPE}") if(CMAKE_COMPILER_IS_GNUCC) message(STATUS "GLPK - Using Compiler Configuration: GCC") # Set standard flags for GCC - set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -Wno-return-type") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-return-type -Wno-parentheses -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-value -Wno-unused-function -Wno-address -Wno-unused-label") add_definitions(-DHAVE_CONFIG_H=1) elseif(MSVC) message(STATUS "GLPK - Using Compiler Configuration: MSVC") diff --git a/src/modelchecker/prctl/SparseMdpPrctlModelChecker.cpp b/src/modelchecker/prctl/SparseMdpPrctlModelChecker.cpp index 518d21972..adf65d728 100644 --- a/src/modelchecker/prctl/SparseMdpPrctlModelChecker.cpp +++ b/src/modelchecker/prctl/SparseMdpPrctlModelChecker.cpp @@ -343,7 +343,6 @@ namespace storm { // Get some data members for convenience. typename storm::storage::SparseMatrix<ValueType> const& transitionMatrix = this->getModel().getTransitionMatrix(); std::vector<uint_fast64_t> const& nondeterministicChoiceIndices = this->getModel().getNondeterministicChoiceIndices(); - ValueType one = storm::utility::one<ValueType>(); ValueType zero = storm::utility::zero<ValueType>(); //first calculate LRA for the Maximal End Components. diff --git a/src/modelchecker/reachability/SparseDtmcEliminationModelChecker.cpp b/src/modelchecker/reachability/SparseDtmcEliminationModelChecker.cpp index e4087ad52..498370e02 100644 --- a/src/modelchecker/reachability/SparseDtmcEliminationModelChecker.cpp +++ b/src/modelchecker/reachability/SparseDtmcEliminationModelChecker.cpp @@ -692,23 +692,10 @@ namespace storm { return maximalDepth; } - namespace { - static int chunkCounter = 0; - static int counter = 0; - } - template<typename ValueType> void SparseDtmcEliminationModelChecker<ValueType>::eliminateState(FlexibleSparseMatrix& matrix, std::vector<ValueType>& oneStepProbabilities, uint_fast64_t state, FlexibleSparseMatrix& backwardTransitions, boost::optional<std::vector<ValueType>>& stateRewards, bool removeForwardTransitions, bool constrained, storm::storage::BitVector const& predecessorConstraint) { auto eliminationStart = std::chrono::high_resolution_clock::now(); - ++counter; - STORM_LOG_TRACE("Eliminating state " << state << "."); - if (counter > matrix.getNumberOfRows() / 10) { - ++chunkCounter; - STORM_LOG_INFO("Eliminated " << (chunkCounter * 10) << "% of the states." << std::endl); - counter = 0; - } - bool hasSelfLoop = false; ValueType loopProbability = storm::utility::zero<ValueType>(); @@ -752,7 +739,6 @@ namespace storm { // Now connect the predecessors of the state being eliminated with its successors. typename FlexibleSparseMatrix::row_type& currentStatePredecessors = backwardTransitions.getRow(state); - std::size_t numberOfPredecessors = currentStatePredecessors.size(); std::size_t predecessorForwardTransitionCount = 0; // In case we have a constrained elimination, we need to keep track of the new predecessors. diff --git a/src/parser/AutoParser.cpp b/src/parser/AutoParser.cpp index 23764fd61..065ad4327 100644 --- a/src/parser/AutoParser.cpp +++ b/src/parser/AutoParser.cpp @@ -69,7 +69,7 @@ namespace storm { #ifdef WINDOWS sscanf_s(filehintBuffer, formatString.c_str(), hint, STORM_PARSER_AUTOPARSER_HINT_LENGTH + 1); #else - int ret = sscanf(filehintBuffer, formatString.c_str(), hint); + sscanf(filehintBuffer, formatString.c_str(), hint); #endif for (char* c = hint; *c != '\0'; c++) *c = toupper(*c);