29 typedef typename std::conditional<SingleObjectiveMode, ValueType, std::vector<ValueType>>::type
SolutionType;
48 std::set<storm::expressions::Variable>
const& infinityBoundVariables = {});
88 void setCurrentEpochClass(
Epoch const& epoch);
89 void initialize(std::set<storm::expressions::Variable>
const& infinityBoundVariables = {});
91 void initializeObjectives(std::vector<Epoch>& epochSteps, std::set<storm::expressions::Variable>
const& infinityBoundVariables);
92 void computeMaxDimensionValues();
93 void translateLowerBoundInfinityDimensions(std::vector<Epoch>& epochSteps);
95 void initializeMemoryProduct(std::vector<Epoch>
const& epochSteps);
97 template<bool SO = SingleObjectiveMode, typename std::enable_if<SO, int>::type = 0>
99 template<bool SO = SingleObjectiveMode, typename std::enable_if<!SO, int>::type = 0>
102 template<bool SO = SingleObjectiveMode, typename std::enable_if<SO, int>::type = 0>
103 void addScaledSolution(
SolutionType& solution,
SolutionType const& solutionToAdd, ValueType
const& scalingFactor)
const;
104 template<bool SO = SingleObjectiveMode, typename std::enable_if<!SO, int>::type = 0>
105 void addScaledSolution(
SolutionType& solution,
SolutionType const& solutionToAdd, ValueType
const& scalingFactor)
const;
107 template<bool SO = SingleObjectiveMode, typename std::enable_if<SO, int>::type = 0>
108 void setSolutionEntry(
SolutionType& solution, uint64_t objIndex, ValueType
const& value)
const;
109 template<bool SO = SingleObjectiveMode, typename std::enable_if<!SO, int>::type = 0>
110 void setSolutionEntry(
SolutionType& solution, uint64_t objIndex, ValueType
const& value)
const;
112 template<bool SO = SingleObjectiveMode, typename std::enable_if<SO, int>::type = 0>
113 std::string solutionToString(
SolutionType const& solution)
const;
114 template<bool SO = SingleObjectiveMode, typename std::enable_if<!SO, int>::type = 0>
115 std::string solutionToString(
SolutionType const& solution)
const;
117 SolutionType const& getStateSolution(
Epoch const& epoch, uint64_t
const& productState);
118 struct EpochSolution {
120 std::shared_ptr<std::vector<uint64_t>
const> productStateToSolutionVectorMap;
121 std::vector<SolutionType> solutions;
123 std::map<Epoch, EpochSolution> epochSolutions;
124 EpochSolution
const& getEpochSolution(std::map<Epoch, EpochSolution const*>
const& solutions,
Epoch const& epoch);
125 SolutionType const& getStateSolution(EpochSolution
const& epochSolution, uint64_t
const& productState);
128 std::vector<storm::modelchecker::multiobjective::Objective<ValueType>> objectives;
130 std::unique_ptr<ProductModel<ValueType>> productModel;
132 std::vector<uint64_t> epochModelToProductChoiceMap;
133 std::shared_ptr<std::vector<uint64_t>
const> productStateToEpochModelInStateMap;
134 std::set<Epoch> possibleEpochSteps;
136 EpochModel<ValueType, SingleObjectiveMode> epochModel;
137 boost::optional<Epoch> currentEpoch;
139 EpochManager epochManager;
141 std::vector<Dimension<ValueType>> dimensions;
142 std::vector<storm::storage::BitVector> objectiveDimensions;