Browse Source
only one optimization direction enum -- towards integration of termination criterions on the model checker
only one optimization direction enum -- towards integration of termination criterions on the model checker
Former-commit-id: 648855264e
main
67 changed files with 750 additions and 503 deletions
-
19src/logic/BoundInfo.h
-
10src/logic/ExpectedTimeOperatorFormula.cpp
-
6src/logic/ExpectedTimeOperatorFormula.h
-
3src/logic/Formulas.h
-
10src/logic/LongRunAverageOperatorFormula.cpp
-
6src/logic/LongRunAverageOperatorFormula.h
-
6src/logic/OperatorFormula.cpp
-
8src/logic/OperatorFormula.h
-
13src/logic/OptimalityType.cpp
-
14src/logic/OptimalityType.h
-
10src/logic/ProbabilityOperatorFormula.cpp
-
6src/logic/ProbabilityOperatorFormula.h
-
10src/logic/RewardOperatorFormula.cpp
-
7src/logic/RewardOperatorFormula.h
-
42src/modelchecker/AbstractModelChecker.cpp
-
28src/modelchecker/AbstractModelChecker.h
-
14src/modelchecker/csl/HybridCtmcCslModelChecker.cpp
-
14src/modelchecker/csl/HybridCtmcCslModelChecker.h
-
14src/modelchecker/csl/SparseCtmcCslModelChecker.cpp
-
14src/modelchecker/csl/SparseCtmcCslModelChecker.h
-
25src/modelchecker/csl/SparseMarkovAutomatonCslModelChecker.cpp
-
10src/modelchecker/csl/SparseMarkovAutomatonCslModelChecker.h
-
65src/modelchecker/csl/helper/SparseMarkovAutomatonCslHelper.cpp
-
20src/modelchecker/csl/helper/SparseMarkovAutomatonCslHelper.h
-
14src/modelchecker/prctl/HybridDtmcPrctlModelChecker.cpp
-
14src/modelchecker/prctl/HybridDtmcPrctlModelChecker.h
-
24src/modelchecker/prctl/HybridMdpPrctlModelChecker.cpp
-
15src/modelchecker/prctl/HybridMdpPrctlModelChecker.h
-
14src/modelchecker/prctl/SparseDtmcPrctlModelChecker.cpp
-
14src/modelchecker/prctl/SparseDtmcPrctlModelChecker.h
-
48src/modelchecker/prctl/SparseMdpPrctlModelChecker.cpp
-
18src/modelchecker/prctl/SparseMdpPrctlModelChecker.h
-
12src/modelchecker/prctl/SymbolicDtmcPrctlModelChecker.cpp
-
12src/modelchecker/prctl/SymbolicDtmcPrctlModelChecker.h
-
24src/modelchecker/prctl/SymbolicMdpPrctlModelChecker.cpp
-
12src/modelchecker/prctl/SymbolicMdpPrctlModelChecker.h
-
28src/modelchecker/prctl/helper/HybridMdpPrctlHelper.cpp
-
13src/modelchecker/prctl/helper/HybridMdpPrctlHelper.h
-
89src/modelchecker/prctl/helper/SparseMdpPrctlHelper.cpp
-
35src/modelchecker/prctl/helper/SparseMdpPrctlHelper.h
-
6src/modelchecker/reachability/SparseDtmcEliminationModelChecker.cpp
-
6src/modelchecker/reachability/SparseDtmcEliminationModelChecker.h
-
26src/parser/FormulaParser.cpp
-
24src/solver/AllowEarlyTerminationCondition.cpp
-
6src/solver/AllowEarlyTerminationCondition.h
-
10src/solver/GlpkLpSolver.cpp
-
16src/solver/GlpkLpSolver.h
-
10src/solver/GmmxxMinMaxLinearEquationSolver.cpp
-
4src/solver/GmmxxMinMaxLinearEquationSolver.h
-
14src/solver/GurobiLpSolver.cpp
-
4src/solver/GurobiLpSolver.h
-
4src/solver/LpSolver.cpp
-
23src/solver/LpSolver.h
-
45src/solver/MinMaxLinearEquationSolver.h
-
10src/solver/NativeMinMaxLinearEquationSolver.cpp
-
4src/solver/NativeMinMaxLinearEquationSolver.h
-
38src/solver/OptimizationDirection.cpp
-
31src/solver/OptimizationDirection.h
-
32src/solver/SolveGoal.cpp
-
71src/solver/SolveGoal.h
-
16src/solver/TopologicalMinMaxLinearEquationSolver.cpp
-
6src/solver/TopologicalMinMaxLinearEquationSolver.h
-
8src/utility/vector.h
-
17test/functional/solver/GlpkLpSolverTest.cpp
-
28test/functional/solver/GmmxxMinMaxLinearEquationSolverTest.cpp
-
16test/functional/solver/GurobiLpSolverTest.cpp
-
18test/functional/solver/NativeMinMaxLinearEquationSolverTest.cpp
@ -0,0 +1,19 @@ |
|||
|
|||
#ifndef BOUNDINFO_H |
|||
#define BOUNDINFO_H |
|||
|
|||
#include "ComparisonType.h" |
|||
|
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
template<typename BT> |
|||
struct BoundInfo { |
|||
BT bound; |
|||
ComparisonType boundType; |
|||
}; |
|||
} |
|||
} |
|||
|
|||
#endif /* BOUNDINFO_H */ |
|||
|
@ -1,13 +0,0 @@ |
|||
#include "src/logic/OptimalityType.h"
|
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
std::ostream& operator<<(std::ostream& out, OptimalityType const& optimalityType) { |
|||
switch (optimalityType) { |
|||
case Maximize: out << "max"; break; |
|||
case Minimize: out << "min"; break; |
|||
} |
|||
return out; |
|||
} |
|||
} |
|||
} |
@ -1,14 +0,0 @@ |
|||
#ifndef STORM_LOGIC_OPTIMALITYTYPE_H_ |
|||
#define STORM_LOGIC_OPTIMALITYTYPE_H_ |
|||
|
|||
#include <iostream> |
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
enum OptimalityType { Minimize, Maximize }; |
|||
|
|||
std::ostream& operator<<(std::ostream& out, OptimalityType const& optimalityType); |
|||
} |
|||
} |
|||
|
|||
#endif /* STORM_LOGIC_OPTIMALITYTYPE_H_ */ |
@ -0,0 +1,38 @@ |
|||
#include "OptimizationDirection.h"
|
|||
#include <iostream>
|
|||
#include <cassert>
|
|||
|
|||
namespace storm { |
|||
namespace solver { |
|||
|
|||
bool isSet(OptimizationDirectionSetting s) { |
|||
return s != OptimizationDirectionSetting::Unset; |
|||
} |
|||
|
|||
bool minimize(OptimizationDirection d) { |
|||
return d == OptimizationDirection::Minimize; |
|||
} |
|||
|
|||
bool maximize(OptimizationDirection d) { |
|||
return d == OptimizationDirection::Maximize; |
|||
} |
|||
|
|||
OptimizationDirection convert(OptimizationDirectionSetting s) { |
|||
assert(isSet(s)); |
|||
return static_cast<OptimizationDirection>(s); |
|||
} |
|||
|
|||
OptimizationDirectionSetting convert(OptimizationDirection d) { |
|||
return static_cast<OptimizationDirectionSetting>(d); |
|||
} |
|||
|
|||
OptimizationDirection invert(OptimizationDirection d) { |
|||
return d == OptimizationDirection::Minimize ? OptimizationDirection::Maximize : OptimizationDirection::Minimize; |
|||
} |
|||
|
|||
std::ostream& operator<<(std::ostream& out, OptimizationDirection d) { |
|||
return d == OptimizationDirection::Minimize ? out << "Minimize" : out << "Maximize"; |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,31 @@ |
|||
#ifndef OPTIMIZATIONDIRECTIONSETTING_H |
|||
#define OPTIMIZATIONDIRECTIONSETTING_H |
|||
|
|||
#include <iostream> |
|||
|
|||
namespace storm { |
|||
namespace solver { |
|||
enum class OptimizationDirection { Minimize = 0, Maximize = 1 }; |
|||
enum class OptimizationDirectionSetting { Minimize = 0, Maximize = 1, Unset }; |
|||
|
|||
bool isSet(OptimizationDirectionSetting s); |
|||
|
|||
bool minimize(OptimizationDirection d); |
|||
|
|||
bool maximize(OptimizationDirection d); |
|||
|
|||
OptimizationDirection convert(OptimizationDirectionSetting s); |
|||
|
|||
OptimizationDirectionSetting convert(OptimizationDirection d); |
|||
|
|||
OptimizationDirection invert(OptimizationDirection d); |
|||
|
|||
std::ostream& operator<<(std::ostream& out, OptimizationDirection d); |
|||
} |
|||
|
|||
using OptimizationDirection = solver::OptimizationDirection; |
|||
} |
|||
|
|||
|
|||
#endif /* OPTIMIZATIONDIRECTIONSETTING_H */ |
|||
|
@ -0,0 +1,32 @@ |
|||
#include "SolveGoal.h"
|
|||
|
|||
#include "src/storage/SparseMatrix.h"
|
|||
#include "src/utility/solver.h"
|
|||
#include "src/solver/MinMaxLinearEquationSolver.h"
|
|||
|
|||
namespace storm { |
|||
namespace solver { |
|||
|
|||
template<typename VT> |
|||
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<VT>> configureMinMaxLinearEquationSolver(BoundedGoal<VT> const& goal, storm::utility::solver::MinMaxLinearEquationSolverFactory<VT> const& factory, storm::storage::SparseMatrix<VT> const& matrix) { |
|||
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<VT>> p = factory.create(matrix); |
|||
p->setOptimizationDirection(goal.direction()); |
|||
p->setEarlyTerminationCriterion(std::make_unique<TerminateAfterFilteredExtremumPassesThresholdValue<double>>(goal.relevantColumns(), goal.threshold, goal.minimize())); |
|||
return p; |
|||
} |
|||
|
|||
template<typename VT> |
|||
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<VT>> configureMinMaxLinearEquationSolver(SolveGoal const& goal, storm::utility::solver::MinMaxLinearEquationSolverFactory<VT> const& factory, storm::storage::SparseMatrix<VT> const& matrix) { |
|||
if(goal.isBounded()) { |
|||
return configureMinMaxLinearEquationSolver(static_cast<BoundedGoal<VT> const&>(goal), factory, matrix); |
|||
} |
|||
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<VT>> p = factory.create(matrix); |
|||
p->setOptimizationDirection(goal.direction()); |
|||
return p; |
|||
} |
|||
|
|||
template std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<double>> configureMinMaxLinearEquationSolver(BoundedGoal<double> const& goal, storm::utility::solver::MinMaxLinearEquationSolverFactory<double> const& factory, storm::storage::SparseMatrix<double> const& matrix); |
|||
template std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<double>> configureMinMaxLinearEquationSolver(SolveGoal const& goal, storm::utility::solver::MinMaxLinearEquationSolverFactory<double> const& factory, storm::storage::SparseMatrix<double> const& matrix); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
|
|||
#ifndef SOLVEGOAL_H |
|||
#define SOLVEGOAL_H |
|||
|
|||
#include "src/solver/OptimizationDirection.h" |
|||
#include "src/logic/ComparisonType.h" |
|||
#include "src/logic/BoundInfo.h" |
|||
#include "src/storage/BitVector.h" |
|||
|
|||
namespace storm { |
|||
namespace storage { |
|||
template<typename VT> class SparseMatrix; |
|||
} |
|||
namespace utility { |
|||
namespace solver { |
|||
template<typename VT> class MinMaxLinearEquationSolverFactory; |
|||
} |
|||
} |
|||
|
|||
|
|||
namespace solver { |
|||
template<typename VT> class MinMaxLinearEquationSolver; |
|||
|
|||
class SolveGoal { |
|||
public: |
|||
SolveGoal(bool minimize) : optDirection(minimize ? OptimizationDirection::Minimize : OptimizationDirection::Maximize) {} |
|||
SolveGoal(OptimizationDirection d) : optDirection(d) {} |
|||
virtual ~SolveGoal() {} |
|||
|
|||
bool minimize() const { return optDirection == OptimizationDirection::Minimize; } |
|||
OptimizationDirection direction() const { return optDirection; } |
|||
virtual bool isBounded() const { return false; } |
|||
|
|||
private: |
|||
OptimizationDirection optDirection; |
|||
|
|||
}; |
|||
|
|||
|
|||
template<typename VT> |
|||
class BoundedGoal : public SolveGoal { |
|||
public: |
|||
BoundedGoal(OptimizationDirection dir, storm::logic::ComparisonType ct, VT const& threshold, storm::storage::BitVector const& relColumns) : SolveGoal(dir), boundType(ct), threshold(threshold), relevantColumnVector(relColumns) {} |
|||
BoundedGoal(OptimizationDirection dir, storm::logic::BoundInfo<VT> const& bi, storm::storage::BitVector const& relColumns) : SolveGoal(dir), boundType(bi.boundType), threshold(bi.bound), relevantColumnVector(relColumns) {} |
|||
virtual ~BoundedGoal() {} |
|||
|
|||
bool isBounded() const override { return true; } |
|||
|
|||
bool boundIsALowerBound() const { |
|||
return (boundType == storm::logic::ComparisonType::Greater | |
|||
boundType == storm::logic::ComparisonType::GreaterEqual); ; |
|||
} |
|||
VT thresholdValue() const { return threshold; } |
|||
storm::storage::BitVector relevantColumns() const { return relevantColumnVector; } |
|||
|
|||
storm::logic::ComparisonType boundType; |
|||
VT threshold; |
|||
storm::storage::BitVector relevantColumnVector; |
|||
}; |
|||
template<typename VT> |
|||
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<VT>> configureMinMaxLinearEquationSolver(BoundedGoal<VT> const& goal, storm::utility::solver::MinMaxLinearEquationSolverFactory<VT> const& factory, storm::storage::SparseMatrix<VT> const& matrix); |
|||
template<typename VT> |
|||
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<VT>> configureMinMaxLinearEquationSolver(SolveGoal const& goal, storm::utility::solver::MinMaxLinearEquationSolverFactory<VT> const& factory, storm::storage::SparseMatrix<VT> const& matrix); |
|||
|
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
#endif /* SOLVEGOAL_H */ |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue