24 typedef typename SparseMaModelType::ValueType
ValueType;
45 typedef std::map<uint_fast64_t, storm::storage::BitVector, std::greater<uint_fast64_t>> TimeBoundMap;
57 std::vector<ValueType> weightedRewardVector;
58 std::vector<std::vector<ValueType>> objectiveRewardVectors;
60 std::vector<ValueType> weightedSolutionVector;
61 std::vector<std::vector<ValueType>> objectiveSolutionVectors;
63 std::vector<ValueType> auxChoiceValues;
65 uint_fast64_t getNumberOfStates()
const {
68 uint_fast64_t getNumberOfChoices()
const {
76 struct MinMaxSolverData {
77 std::unique_ptr<Environment> env;
78 std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>>
solver;
79 std::vector<ValueType> b;
82 struct LinEqSolverData {
83 std::unique_ptr<Environment> env;
85 std::unique_ptr<storm::solver::LinearEquationSolverFactory<ValueType>> factory;
86 std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver;
87 std::vector<ValueType> b;
95 virtual void boundedPhase(Environment
const& env, std::vector<ValueType>
const& weightVector, std::vector<ValueType>& weightedRewardVector)
override;
102 SubModel createSubModel(
bool createMS, std::vector<ValueType>
const& weightedRewardVector)
const;
107 template<typename VT = ValueType, typename std::enable_if<storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
108 VT getDigitizationConstant(std::vector<ValueType>
const& weightVector)
const;
109 template<typename VT = ValueType, typename std::enable_if<!storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
110 VT getDigitizationConstant(std::vector<ValueType>
const& weightVector)
const;
115 template<typename VT = ValueType, typename std::enable_if<storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
116 void digitize(SubModel& subModel, VT
const& digitizationConstant)
const;
117 template<typename VT = ValueType, typename std::enable_if<!storm::NumberTraits<VT>::SupportsExponential,
int>::type = 0>
118 void digitize(SubModel& subModel, VT
const& digitizationConstant)
const;
124 void digitizeTimeBounds(TimeBoundMap& upperTimeBounds,
ValueType const& digitizationConstant, std::vector<ValueType>
const& weightVector);
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,
157 std::vector<uint_fast64_t>& optimalChoicesAtCurrentEpoch, storm::storage::BitVector
const& consideredObjectives,
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;
170 storm::storage::BitVector markovianStates;
171 std::vector<ValueType> exitRates;