2 changed files with 122 additions and 0 deletions
			
			
		- 
					56src/storm/modelchecker/helper/infinitehorizon/SparseNondeterministicGameInfiniteHorizonHelper.cpp
- 
					66src/storm/modelchecker/helper/infinitehorizon/SparseNondeterministicGameInfiniteHorizonHelper.h
| @ -0,0 +1,56 @@ | |||
| #include "SparseNondeterministicGameInfiniteHorizonHelper.h"
 | |||
| 
 | |||
| #include "storm/modelchecker/helper/infinitehorizon/internal/LraViHelper.h"
 | |||
| 
 | |||
| #include "storm/storage/SparseMatrix.h"
 | |||
| #include "storm/storage/Scheduler.h"
 | |||
| 
 | |||
| #include "storm/solver/MinMaxLinearEquationSolver.h"
 | |||
| #include "storm/solver/Multiplier.h"
 | |||
| 
 | |||
| #include "storm/utility/solver.h"
 | |||
| #include "storm/utility/vector.h"
 | |||
| 
 | |||
| #include "storm/environment/solver/LongRunAverageSolverEnvironment.h"
 | |||
| #include "storm/environment/solver/MinMaxSolverEnvironment.h"
 | |||
| 
 | |||
| #include "storm/exceptions/UnmetRequirementException.h"
 | |||
| #include "storm/exceptions/InternalException.h"
 | |||
| 
 | |||
| namespace storm { | |||
|     namespace modelchecker { | |||
|         namespace helper { | |||
| 
 | |||
|             template <typename ValueType> | |||
|             SparseNondeterministicGameInfiniteHorizonHelper<ValueType>::SparseNondeterministicGameInfiniteHorizonHelper(storm::storage::SparseMatrix<ValueType> const& transitionMatrix, std::vector<uint64_t> const& coalitionIndices) : SparseInfiniteHorizonHelper<ValueType, true>(transitionMatrix), coalitionIndices(coalitionIndices) { | |||
|                 // Intentionally left empty.
 | |||
|             } | |||
| 
 | |||
|             template <typename ValueType> | |||
|             void SparseNondeterministicGameInfiniteHorizonHelper<ValueType>::createDecomposition() { | |||
|                 STORM_LOG_THROW(false, storm::exceptions::InternalException, "Creating Decompositions of SMGs is currently not possible."); | |||
|             } | |||
| 
 | |||
|             template <typename ValueType> | |||
|             ValueType SparseNondeterministicGameInfiniteHorizonHelper<ValueType>::computeLraForComponent(Environment const& env, ValueGetter const& stateRewardsGetter, ValueGetter const& actionRewardsGetter, storm::storage::MaximalEndComponent const& component) { | |||
| 
 | |||
|                 STORM_LOG_THROW(false, storm::exceptions::InternalException, "Computing values for LRA for SMGs components is currently not possible."); | |||
|             } | |||
| 
 | |||
|             template <typename ValueType> | |||
|             std::vector<ValueType> SparseNondeterministicGameInfiniteHorizonHelper<ValueType>::buildAndSolveSsp(Environment const& env, std::vector<ValueType> const& componentLraValues) { | |||
|                 STORM_LOG_THROW(false, storm::exceptions::InternalException, "buildAndSolveSsp not available for SMGs"); | |||
|             } | |||
| 
 | |||
|             template <typename ValueType> | |||
|             std::vector<ValueType> SparseNondeterministicGameInfiniteHorizonHelper<ValueType>::computeLongRunAverageValues(Environment const& env, ValueGetter const& stateRewardsGetter, ValueGetter const& actionRewardsGetter) { | |||
|                 STORM_LOG_THROW(false, storm::exceptions::InternalException, "computeLongRunAverageValues not possible yet."); | |||
|             } | |||
| 
 | |||
| 
 | |||
|             template class SparseNondeterministicGameInfiniteHorizonHelper<double>; | |||
|             template class SparseNondeterministicGameInfiniteHorizonHelper<storm::RationalNumber>; | |||
| 
 | |||
|         } | |||
|     } | |||
| } | |||
| @ -0,0 +1,66 @@ | |||
| #pragma once | |||
| #include "storm/modelchecker/helper/infinitehorizon/SparseInfiniteHorizonHelper.h" | |||
| 
 | |||
| namespace storm { | |||
| 
 | |||
|     namespace storage { | |||
|         template <typename VT> class Scheduler; | |||
|     } | |||
| 
 | |||
|     namespace modelchecker { | |||
|         namespace helper { | |||
| 
 | |||
|             /*! | |||
|              * Helper class for model checking queries that depend on the long run behavior of the (nondeterministic) system with different players choices. | |||
|              * @tparam ValueType the type a value can have | |||
|              */ | |||
|             template <typename ValueType> | |||
|             class SparseNondeterministicGameInfiniteHorizonHelper : public SparseInfiniteHorizonHelper<ValueType, true> { | |||
| 
 | |||
|             public: | |||
| 
 | |||
|                 /*! | |||
|                  * Function mapping from indices to values | |||
|                  */ | |||
|                 typedef typename SparseInfiniteHorizonHelper<ValueType, true>::ValueGetter ValueGetter; | |||
| 
 | |||
|                 /*! | |||
|                  * Initializes the helper for a discrete time model with different players (i.e. SMG) | |||
|                  */ | |||
|                 SparseNondeterministicGameInfiniteHorizonHelper(storm::storage::SparseMatrix<ValueType> const& transitionMatrix, std::vector<uint64_t> const& coalitionIndices); | |||
| 
 | |||
|                 /*! | |||
|                  * TODO | |||
|                  */ | |||
|                 std::vector<ValueType> computeLongRunAverageValues(Environment const& env, ValueGetter const& stateRewardsGetter, ValueGetter const& actionRewardsGetter); | |||
| 
 | |||
|                 /*! | |||
|                  * @pre before calling this, a computation call should have been performed during which scheduler production was enabled. | |||
|                  * @return the produced scheduler of the most recent call. | |||
|                  */ | |||
|                 //std::vector<uint64_t> const& getProducedOptimalChoices() const; | |||
| 
 | |||
|                 /*! | |||
|                  * @pre before calling this, a computation call should have been performed during which scheduler production was enabled. | |||
|                  * @return the produced scheduler of the most recent call. | |||
|                  */ | |||
|                 //std::vector<uint64_t>& getProducedOptimalChoices(); | |||
| 
 | |||
|                 /*! | |||
|                  * @pre before calling this, a computation call should have been performed during which scheduler production was enabled. | |||
|                  * @return a new scheduler containing optimal choices for each state that yield the long run average values of the most recent call. | |||
|                  */ | |||
|                 //storm::storage::Scheduler<ValueType> extractScheduler() const; | |||
| 
 | |||
|                 void createDecomposition(); | |||
|                 ValueType computeLraForComponent(Environment const& env, ValueGetter const& stateValuesGetter,  ValueGetter const& actionValuesGetter, storm::storage::MaximalEndComponent const& component); | |||
|                 std::vector<ValueType> buildAndSolveSsp(Environment const& env, std::vector<ValueType> const& mecLraValues); | |||
| 
 | |||
|             private: | |||
|                 std::vector<uint64_t> coalitionIndices; | |||
|             }; | |||
| 
 | |||
| 
 | |||
|         } | |||
|     } | |||
| } | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue