Browse Source

Clean up

tempestpy_adaptions
Jip Spel 6 years ago
parent
commit
5aec480a1e
  1. 128
      src/storm-pars-cli/storm-pars.cpp

128
src/storm-pars-cli/storm-pars.cpp

@ -521,8 +521,6 @@ namespace storm {
myfile << "\t" << i << " -> " << first.getColumn() << "[label=\"" << first.getValue() << "\"];" myfile << "\t" << i << " -> " << first.getColumn() << "[label=\"" << first.getValue() << "\"];"
<< std::endl; << std::endl;
} }
} }
myfile << "\tsubgraph legend {" << std::endl; myfile << "\tsubgraph legend {" << std::endl;
@ -615,129 +613,11 @@ namespace storm {
latticeWatch.stop(); latticeWatch.stop();
STORM_PRINT(std::endl << "Time for lattice creation: " << latticeWatch << "." << std::endl << std::endl); STORM_PRINT(std::endl << "Time for lattice creation: " << latticeWatch << "." << std::endl << std::endl);
ofstream myfile; ofstream myfile;
myfile.open ("lattice.dot");
lattice->toDotFile(myfile);
myfile.close();
// CriticalStates
//TODO: what if states not found in lattice/cyclic thingie
storm::storage::SparseMatrix<ValueType> matrix = sparseModel.get()->getTransitionMatrix();
//TODO: separate class
storm::utility::Stopwatch criticalStatesWatch(true);
storm::storage::BitVector criticalStates = storm::storage::BitVector(sparseModel.get()->getNumberOfStates());
for (uint_fast64_t i = 0; i < sparseModel.get()->getNumberOfStates(); ++i) {
auto row = matrix.getRow(i);
auto first = (*row.begin());
if (first.getValue() != ValueType(1)) {
auto second = (*(++row.begin()));
string color = "";
auto val = first.getValue();
auto vars = val.gatherVariables();
for (auto itr = vars.begin(); itr != vars.end(); ++itr) {
auto compare = lattice->compare(first.getColumn(), second.getColumn());
if (compare != 1 && compare != 2 && compare !=0) {
if (storm::utility::parameterlifting::validateParameterLiftingSound(*(sparseModel.get()), *((formulas[0]).get()))) {
//TODO: parameterlifting gebruiken om te kijken op kans op =) vanuit first.getCOlumn() en second.getColumn()
// als vanuit first.getColumn() >= second.getColumn() voor =) dan lattice->addRelation(lattice->getNode(first.getColumn()),
// lattice->getNode(i),
// lattice->getNode(second.getColumn()));
// als vanuit second.getColumn() >= first.getColumn() voor =) dan lattice->addRelation(lattice->getNode(second.getColumn()),
// lattice->getNode(i),
// lattice->getNode(first.getColumn()));
auto modelParameters = storm::models::sparse::getProbabilityParameters(*sparseModel);
auto rewParameters = storm::models::sparse::getRewardParameters(*sparseModel);
modelParameters.insert(rewParameters.begin(), rewParameters.end());
// auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<ValueType, storm::RationalNumber>(Environment(), sparseModel, storm::api::createTask<storm::RationalFunction>(formulas[0], true));
//
// //start testing
// auto allSatRegion=storm::api::parseRegion<storm::RationalFunction>("0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
// auto exBothRegion=storm::api::parseRegion<storm::RationalFunction>("0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
// auto allVioRegion=storm::api::parseRegion<storm::RationalFunction>("0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
// if (storm::modelchecker::RegionResult::AllSat == regionChecker->analyzeRegion(Environment(), allSatRegion, storm::modelchecker::RegionResultHypothesis::Unknown, storm::modelchecker::RegionResult::Unknown, true)) {
// std::cout << "Tralalala" << std::endl;
// }
}
auto rowFirst = matrix.getRow(first.getColumn());
while ((*rowFirst.begin()).getValue() == ValueType(1)) {
rowFirst = matrix.getRow((*rowFirst.begin()).getColumn());
}
auto rowSecond = matrix.getRow(second.getColumn());
while ((*rowSecond.begin()).getValue() == ValueType(1)) {
rowSecond = matrix.getRow((*rowSecond.begin()).getColumn());
}
auto succF1 = *rowFirst.begin();
auto succF2 = *(++rowFirst.begin());
auto compareF = lattice->compare(succF1.getColumn(), succF2.getColumn());
ValueType valF;
ValueType valS;
if (compareF == 1) {
valF = succF1.getValue();
} else if (compareF == 2) {
valF = succF2.getValue();
} else {
continue;
}
auto succS1 = *rowSecond.begin();
auto succS2 = *(++rowSecond.begin());
auto compareS = lattice->compare(succS1.getColumn(), succS2.getColumn());
if (compareS == 1) {
valS = succS1.getValue();
} else if (compareS == 2) {
valS = succS2.getValue();
} else {
continue;
}
storm::RationalFunction diff = valF-valS;
auto vars = diff.gatherVariables();
if (vars.size() == 1) {
for (auto varsItr = vars.begin(); varsItr != vars.end(); ++varsItr) {
ValueType derivative = diff.derivative(*varsItr);
if (derivative.isConstant()) {
std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> sub0;
sub0.emplace(*varsItr,
storm::utility::convertNumber<storm::RationalFunctionCoefficient>(
std::string("0")));
std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> sub1;
sub1.emplace(*varsItr,
storm::utility::convertNumber<storm::RationalFunctionCoefficient>(
std::string("1")));
if (diff.evaluate(sub0) >= 0 && diff.evaluate(sub1) >= 0) {
lattice->addRelation(lattice->getNode(first.getColumn()),
lattice->getNode(i),
lattice->getNode(second.getColumn()));
} else if (diff.evaluate(sub0) <= 0 && diff.evaluate(sub1) <= 0) {
lattice->addRelation(lattice->getNode(second.getColumn()),
lattice->getNode(i),
lattice->getNode(first.getColumn()));
}
}
}
}
}
}
}
}
criticalStatesWatch.stop();
STORM_PRINT(std::endl << "Time for critical states checking: " << criticalStatesWatch << "." << std::endl << std::endl);
myfile.open ("lattice.dot"); myfile.open ("lattice.dot");
lattice->toDotFile(myfile); lattice->toDotFile(myfile);
myfile.close(); myfile.close();
// Monotonicity? // Monotonicity?
storm::utility::Stopwatch monotonicityWatch(true); storm::utility::Stopwatch monotonicityWatch(true);
std::map<carl::Variable, std::pair<bool, bool>> varsMonotone = analyseMonotonicity<ValueType>(lattice, matrix); std::map<carl::Variable, std::pair<bool, bool>> varsMonotone = analyseMonotonicity<ValueType>(lattice, matrix);
@ -746,14 +626,14 @@ namespace storm {
for (auto itr = varsMonotone.begin(); itr != varsMonotone.end(); ++itr) { for (auto itr = varsMonotone.begin(); itr != varsMonotone.end(); ++itr) {
if (itr->second.first) { if (itr->second.first) {
std::cout << "Monotone increasing in: " << itr->first << std::endl;
STORM_PRINT("Monotone increasing in: " << itr->first << std::endl);
} else { } else {
std::cout << "Do not know if monotone increasing in: " << itr->first << std::endl;
STORM_PRINT("Do not know if monotone increasing in: " << itr->first << std::endl);
} }
if (itr->second.second) { if (itr->second.second) {
std::cout << "Monotone decreasing in: " << itr->first << std::endl;
STORM_PRINT("Monotone decreasing in: " << itr->first << std::endl);
} else { } else {
std::cout << "Do not know if monotone decreasing in: " << itr->first << std::endl;
STORM_PRINT("Do not know if monotone decreasing in: " << itr->first << std::endl);
} }
} }

Loading…
Cancel
Save