25 typedef typename SparseMaModelType::ValueType
ValueType;
42 typedef std::map<uint_fast64_t, storm::storage::BitVector, std::greater<uint_fast64_t>> TimeBoundMap;
54 std::vector<ValueType> weightedRewardVector;
55 std::vector<std::vector<ValueType>> objectiveRewardVectors;
57 std::vector<ValueType> weightedSolutionVector;
58 std::vector<std::vector<ValueType>> objectiveSolutionVectors;
60 std::vector<ValueType> auxChoiceValues;
62 uint_fast64_t getNumberOfStates()
const {
65 uint_fast64_t getNumberOfChoices()
const {
73 struct MinMaxSolverData {
74 std::unique_ptr<Environment> env;
75 std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver;
76 std::vector<ValueType> b;
79 struct LinEqSolverData {
80 std::unique_ptr<Environment> env;
82 std::unique_ptr<storm::solver::LinearEquationSolverFactory<ValueType>> factory;
83 std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver;
84 std::vector<ValueType> b;
92 virtual void boundedPhase(Environment
const& env, std::vector<ValueType>
const& weightVector, std::vector<ValueType>& weightedRewardVector)
override;
99 SubModel createSubModel(
bool createMS, std::vector<ValueType>
const& weightedRewardVector)
const;
104 template<typename VT = ValueType, typename std::enable_if<storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
105 VT getDigitizationConstant(std::vector<ValueType>
const& weightVector)
const;
106 template<typename VT = ValueType, typename std::enable_if<!storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
107 VT getDigitizationConstant(std::vector<ValueType>
const& weightVector)
const;
112 template<typename VT = ValueType, typename std::enable_if<storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
113 void digitize(SubModel& subModel, VT
const& digitizationConstant)
const;
114 template<typename VT = ValueType, typename std::enable_if<!storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
115 void digitize(SubModel& subModel, VT
const& digitizationConstant)
const;
121 template<typename VT = ValueType, typename std::enable_if<storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
122 void digitizeTimeBounds(TimeBoundMap& upperTimeBounds, VT
const& digitizationConstant);
123 template<typename VT = ValueType, typename std::enable_if<!storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
124 void digitizeTimeBounds(TimeBoundMap& upperTimeBounds, VT
const& digitizationConstant);
129 std::unique_ptr<MinMaxSolverData> initMinMaxSolver(Environment
const& env, SubModel
const& PS,
bool acyclic,
130 std::vector<ValueType>
const& weightVector)
const;
135 template<typename VT = ValueType, typename std::enable_if<storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
136 std::unique_ptr<LinEqSolverData> initLinEqSolver(Environment
const& env, SubModel
const& PS,
bool acyclic)
const;
137 template<typename VT = ValueType, typename std::enable_if<!storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
138 std::unique_ptr<LinEqSolverData> initLinEqSolver(Environment
const& env, SubModel
const& PS,
bool acyclic)
const;
145 void updateDataToCurrentEpoch(SubModel& MS, SubModel& PS, MinMaxSolverData& minMax,
storm::storage::BitVector& consideredObjectives,
146 uint_fast64_t
const& currentEpoch, std::vector<ValueType>
const& weightVector, TimeBoundMap::iterator& upperTimeBoundIt,
147 TimeBoundMap
const& upperTimeBounds);
156 void performPSStep(Environment
const& env, SubModel& PS, SubModel
const& MS, MinMaxSolverData& minMax, LinEqSolverData& linEq,
158 std::vector<ValueType>
const& weightVector)
const;
166 void performMSStep(Environment
const& env, SubModel& MS, SubModel
const& PS,
storm::storage::BitVector const& consideredObjectives,
167 std::vector<ValueType>
const& weightVector)
const;
171 std::vector<ValueType> exitRates;