@ -24,6 +24,21 @@ namespace tempest {
storm : : utility : : closeFile ( stream ) ;
}
template < typename ValueType , typename IndexType >
std : : unique_ptr < tempest : : shields : : AbstractShield < ValueType , IndexType > > createShieldTest ( 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 ) {
if ( coalitionStates . is_initialized ( ) ) coalitionStates . get ( ) . complement ( ) ;
if ( shieldingExpression - > isPreSafetyShield ( ) ) {
PreShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
return std : : make_unique < tempest : : shields : : PreShield < ValueType , IndexType > > ( shield ) ;
} else if ( shieldingExpression - > isPostSafetyShield ( ) ) {
PostShield < ValueType , IndexType > shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) , choiceValues , shieldingExpression , optimizationDirection , relevantStates , coalitionStates ) ;
return std : : make_unique < tempest : : shields : : PostShield < ValueType , IndexType > > ( shield ) ;
} else {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidArgumentException , " Unknown Shielding Type: " + shieldingExpression - > typeToString ( ) ) ;
}
}
template < typename ValueType , typename IndexType >
void createQuantitativeShield ( 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 ;
@ -43,9 +58,12 @@ 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 std : : unique_ptr < tempest : : shields : : AbstractShield < double , typename storm : : storage : : SparseMatrix < double > : : index_type > > createShieldTest < 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 < 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 ) ;
# 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 std : : unique_ptr < tempest : : shields : : AbstractShield < storm : : RationalNumber , typename storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > > createShieldTest < 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 < 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 ) ;
# endif
}