1
1
#pragma once
2
2
3
+ #include < any>
3
4
#include " storm/models/sparse/Ctmc.h"
4
5
#include " storm/models/sparse/Dtmc.h"
5
6
#include " storm/models/sparse/Mdp.h"
@@ -24,6 +25,13 @@ std::shared_ptr<ModelType> performDeterministicSparseBisimulationMinimization(st
24
25
if (!formulas.empty () && graphPreserving) {
25
26
options = typename storm::storage::DeterministicModelBisimulationDecomposition<ModelType>::Options (*model, formulas);
26
27
}
28
+ // If we cannot use formula-based decomposition because of
29
+ // non-graph-preserving regions but there are reward models, we need to
30
+ // preserve those
31
+ if (!graphPreserving &&
32
+ std::any_of (formulas.begin (), formulas.end (), [](auto const & formula) { return formula->getReferencedRewardModels ().size () > 0 ; })) {
33
+ options.setKeepRewards (true );
34
+ }
27
35
options.setType (type);
28
36
29
37
storm::storage::DeterministicModelBisimulationDecomposition<ModelType> bisimulationDecomposition (*model, options);
@@ -39,6 +47,13 @@ std::shared_ptr<ModelType> performNondeterministicSparseBisimulationMinimization
39
47
if (!formulas.empty () && graphPreserving) {
40
48
options = typename storm::storage::NondeterministicModelBisimulationDecomposition<ModelType>::Options (*model, formulas);
41
49
}
50
+ // If we cannot use formula-based decomposition because of
51
+ // non-graph-preserving regions but there are reward models, we need to
52
+ // preserve those
53
+ if (!graphPreserving &&
54
+ std::any_of (formulas.begin (), formulas.end (), [](auto const & formula) { return formula->getReferencedRewardModels ().size () > 0 ; })) {
55
+ options.setKeepRewards (true );
56
+ }
42
57
options.setType (type);
43
58
44
59
storm::storage::NondeterministicModelBisimulationDecomposition<ModelType> bisimulationDecomposition (*model, options);
0 commit comments