@ -9,6 +9,9 @@
# include "storm/models/symbolic/Mdp.h"
# include "storm/models/symbolic/Mdp.h"
# include "storm/models/symbolic/StandardRewardModel.h"
# include "storm/models/symbolic/StandardRewardModel.h"
# include "storm/settings/SettingsManager.h"
# include "storm/settings/modules/IOSettings.h"
# include "storm/utility/macros.h"
# include "storm/utility/macros.h"
# include "storm/exceptions/InvalidOperationException.h"
# include "storm/exceptions/InvalidOperationException.h"
# include "storm/exceptions/NotSupportedException.h"
# include "storm/exceptions/NotSupportedException.h"
@ -29,16 +32,25 @@ namespace storm {
template < storm : : dd : : DdType DdType , typename ValueType >
template < storm : : dd : : DdType DdType , typename ValueType >
BisimulationDecomposition < DdType , ValueType > : : BisimulationDecomposition ( storm : : models : : symbolic : : Model < DdType , ValueType > const & model , storm : : storage : : BisimulationType const & bisimulationType ) : model ( model ) , preservationInformation ( model , bisimulationType ) , refiner ( createRefiner ( model , Partition < DdType , ValueType > : : create ( model , bisimulationType , preservationInformation ) ) ) {
BisimulationDecomposition < DdType , ValueType > : : BisimulationDecomposition ( storm : : models : : symbolic : : Model < DdType , ValueType > const & model , storm : : storage : : BisimulationType const & bisimulationType ) : model ( model ) , preservationInformation ( model , bisimulationType ) , refiner ( createRefiner ( model , Partition < DdType , ValueType > : : create ( model , bisimulationType , preservationInformation ) ) ) {
auto const & ioSettings = storm : : settings : : getModule < storm : : settings : : modules : : IOSettings > ( ) ;
showProgress = ioSettings . isExplorationShowProgressSet ( ) ;
showProgressDelay = ioSettings . getExplorationShowProgressDelay ( ) ;
this - > refineWrtRewardModels ( ) ;
this - > refineWrtRewardModels ( ) ;
}
}
template < storm : : dd : : DdType DdType , typename ValueType >
template < storm : : dd : : DdType DdType , typename ValueType >
BisimulationDecomposition < DdType , ValueType > : : BisimulationDecomposition ( storm : : models : : symbolic : : Model < DdType , ValueType > const & model , std : : vector < std : : shared_ptr < storm : : logic : : Formula const > > const & formulas , storm : : storage : : BisimulationType const & bisimulationType ) : model ( model ) , preservationInformation ( model , formulas , bisimulationType ) , refiner ( createRefiner ( model , Partition < DdType , ValueType > : : create ( model , bisimulationType , preservationInformation ) ) ) {
BisimulationDecomposition < DdType , ValueType > : : BisimulationDecomposition ( storm : : models : : symbolic : : Model < DdType , ValueType > const & model , std : : vector < std : : shared_ptr < storm : : logic : : Formula const > > const & formulas , storm : : storage : : BisimulationType const & bisimulationType ) : model ( model ) , preservationInformation ( model , formulas , bisimulationType ) , refiner ( createRefiner ( model , Partition < DdType , ValueType > : : create ( model , bisimulationType , preservationInformation ) ) ) {
auto const & ioSettings = storm : : settings : : getModule < storm : : settings : : modules : : IOSettings > ( ) ;
showProgress = ioSettings . isExplorationShowProgressSet ( ) ;
showProgressDelay = ioSettings . getExplorationShowProgressDelay ( ) ;
this - > refineWrtRewardModels ( ) ;
this - > refineWrtRewardModels ( ) ;
}
}
template < storm : : dd : : DdType DdType , typename ValueType >
template < storm : : dd : : DdType DdType , typename ValueType >
BisimulationDecomposition < DdType , ValueType > : : BisimulationDecomposition ( storm : : models : : symbolic : : Model < DdType , ValueType > const & model , Partition < DdType , ValueType > const & initialPartition , bisimulation : : PreservationInformation < DdType , ValueType > const & preservationInformation ) : model ( model ) , preservationInformation ( preservationInformation ) , refiner ( createRefiner ( model , initialPartition ) ) {
BisimulationDecomposition < DdType , ValueType > : : BisimulationDecomposition ( storm : : models : : symbolic : : Model < DdType , ValueType > const & model , Partition < DdType , ValueType > const & initialPartition , bisimulation : : PreservationInformation < DdType , ValueType > const & preservationInformation ) : model ( model ) , preservationInformation ( preservationInformation ) , refiner ( createRefiner ( model , initialPartition ) ) {
auto const & ioSettings = storm : : settings : : getModule < storm : : settings : : modules : : IOSettings > ( ) ;
showProgress = ioSettings . isExplorationShowProgressSet ( ) ;
showProgressDelay = ioSettings . getExplorationShowProgressDelay ( ) ;
this - > refineWrtRewardModels ( ) ;
this - > refineWrtRewardModels ( ) ;
}
}
@ -55,12 +67,24 @@ namespace storm {
# endif
# endif
auto start = std : : chrono : : high_resolution_clock : : now ( ) ;
auto start = std : : chrono : : high_resolution_clock : : now ( ) ;
auto timeOfLastMessage = start ;
uint64_t iterations = 0 ;
uint64_t iterations = 0 ;
bool refined = true ;
bool refined = true ;
while ( refined ) {
while ( refined ) {
refined = refiner - > refine ( mode ) ;
refined = refiner - > refine ( mode ) ;
+ + iterations ;
+ + iterations ;
STORM_LOG_TRACE ( " After iteration " < < iterations < < " partition has " < < refiner - > getStatePartition ( ) . getNumberOfBlocks ( ) < < " blocks. " ) ;
STORM_LOG_TRACE ( " After iteration " < < iterations < < " partition has " < < refiner - > getStatePartition ( ) . getNumberOfBlocks ( ) < < " blocks. " ) ;
if ( showProgress ) {
auto now = std : : chrono : : high_resolution_clock : : now ( ) ;
auto durationSinceLastMessage = std : : chrono : : duration_cast < std : : chrono : : seconds > ( now - timeOfLastMessage ) . count ( ) ;
if ( static_cast < uint64_t > ( durationSinceLastMessage ) > = showProgressDelay ) {
auto durationSinceStart = std : : chrono : : duration_cast < std : : chrono : : seconds > ( now - start ) . count ( ) ;
std : : cout < < " State partition after " < < iterations < < " iterations ( " < < durationSinceStart < < " ms) has " < < refiner - > getStatePartition ( ) . getNumberOfBlocks ( ) < < " blocks. " < < std : : endl ;
timeOfLastMessage = std : : chrono : : high_resolution_clock : : now ( ) ;
}
}
}
}
auto end = std : : chrono : : high_resolution_clock : : now ( ) ;
auto end = std : : chrono : : high_resolution_clock : : now ( ) ;