@ -10,11 +10,12 @@ namespace tempest {
void createShield ( std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > > model , std : : vector < ValueType > const & choiceValues , std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) {
std : : ofstream stream ;
storm : : utility : : openFile ( shieldFilename ( shieldingExpression ) , stream ) ;
if ( coalitionStates . is_initialized ( ) ) coalitionStates . get ( ) . complement ( ) ;
if ( shieldingExpression - > isPreSafetyShield ( ) ) {
PreSafetyS hield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
PreShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
shield . construct ( ) . printToStream ( stream , shieldingExpression , model ) ;
} else if ( shieldingExpression - > isPostSafetyShield ( ) ) {
PostSafetyS hield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
PostShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
shield . construct ( ) . printToStream ( stream , shieldingExpression , model ) ;
} else {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidArgumentException , " Unknown Shielding Type: " + shieldingExpression - > typeToString ( ) ) ;
@ -24,11 +25,15 @@ namespace tempest {
}
template < typename ValueType , typename IndexType >
void createQuantitativeShield ( std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > > model , std : : vector < uint64_t > const & pre computedC hoices, std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) {
void createQuantitativeShield ( std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > > model , std : : vector < ValueType > const & choiceValu es , std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) {
std : : ofstream stream ;
storm : : utility : : openFile ( shieldFilename ( shieldingExpression ) , stream ) ;
if ( shieldingExpression - > isOptimalShield ( ) ) {
OptimalShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , precomputedChoices , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
if ( coalitionStates . is_initialized ( ) ) coalitionStates . get ( ) . complement ( ) ; // TODO CHECK THIS!!!
if ( shieldingExpression - > isOptimalPreShield ( ) ) {
PreShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
shield . construct ( ) . printToStream ( stream , shieldingExpression , model ) ;
} else if ( shieldingExpression - > isOptimalPostShield ( ) ) {
PostShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
shield . construct ( ) . printToStream ( stream , shieldingExpression , model ) ;
} else {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidArgumentException , " Unknown Shielding Type: " + shieldingExpression - > typeToString ( ) ) ;
@ -38,10 +43,10 @@ namespace tempest {
}
// Explicitly instantiate appropriate
template void createShield < double , typename storm : : storage : : SparseMatrix < double > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < double > > model , std : : vector < double > const & choiceValues , std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) ;
template void createQuantitativeShield < double , typename storm : : storage : : SparseMatrix < double > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < double > > model , std : : vector < uint64_t > const & pre computedC hoices, std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) ;
template void createQuantitativeShield < double , typename storm : : storage : : SparseMatrix < double > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < double > > model , std : : vector < double > const & choiceValu es , std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) ;
# ifdef STORM_HAVE_CARL
template void createShield < storm : : RationalNumber , typename storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < storm : : RationalNumber > > model , std : : vector < storm : : RationalNumber > const & choiceValues , std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) ;
template void createQuantitativeShield < storm : : RationalNumber , typename storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < storm : : RationalNumber > > model , std : : vector < uint64_t > const & pre computedC hoices, std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) ;
template void createQuantitativeShield < storm : : RationalNumber , typename storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < storm : : RationalNumber > > model , std : : vector < storm : : RationalNumber > const & choiceValu es , std : : shared_ptr < storm : : logic : : ShieldExpression const > const & shieldingExpression , storm : : OptimizationDirection optimizationDirection , storm : : storage : : BitVector relevantStates , boost : : optional < storm : : storage : : BitVector > coalitionStates ) ;
# endif
}
}