Browse Source
made jit-builder ready to deal with compositions that do not mention all automata, more work on rewards
made jit-builder ready to deal with compositions that do not mention all automata, more work on rewards
Former-commit-id:main2faeed82fa
[formerly60157bbec4
] Former-commit-id:ea62a094f1
23 changed files with 393 additions and 175 deletions
-
1src/adapters/Z3ExpressionAdapter.cpp
-
6src/builder/DdJaniModelBuilder.cpp
-
61src/builder/ExplicitModelBuilder.cpp
-
66src/builder/RewardModelBuilder.cpp
-
51src/builder/RewardModelBuilder.h
-
39src/builder/RewardModelInformation.cpp
-
29src/builder/RewardModelInformation.h
-
15src/builder/jit/Choice.cpp
-
22src/builder/jit/Choice.h
-
48src/builder/jit/ExplicitJitJaniModelBuilder.cpp
-
1src/builder/jit/ExplicitJitJaniModelBuilder.h
-
52src/builder/jit/ModelComponentsBuilder.cpp
-
8src/builder/jit/ModelComponentsBuilder.h
-
29src/builder/jit/StateBehaviour.cpp
-
21src/builder/jit/StateBehaviour.h
-
10src/generator/JaniNextStateGenerator.cpp
-
4src/generator/JaniNextStateGenerator.h
-
32src/generator/NextStateGenerator.cpp
-
22src/generator/NextStateGenerator.h
-
4src/generator/PrismNextStateGenerator.cpp
-
2src/generator/PrismNextStateGenerator.h
-
30src/storage/jani/Model.cpp
-
9src/storage/jani/Model.h
@ -0,0 +1,66 @@ |
|||||
|
#include "src/builder/RewardModelBuilder.h"
|
||||
|
|
||||
|
#include "src/adapters/CarlAdapter.h"
|
||||
|
|
||||
|
#include "src/models/sparse/StandardRewardModel.h"
|
||||
|
|
||||
|
#include "src/utility/macros.h"
|
||||
|
#include "src/exceptions/InvalidArgumentException.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace builder { |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
RewardModelBuilder<ValueType>::RewardModelBuilder(RewardModelInformation const& rewardModelInformation) : rewardModelName(rewardModelInformation.getName()), stateRewards(rewardModelInformation.hasStateRewards()), stateActionRewards(rewardModelInformation.hasStateActionRewards()), stateRewardVector(), stateActionRewardVector() { |
||||
|
STORM_LOG_THROW(!rewardModelInformation.hasTransitionRewards(), storm::exceptions::InvalidArgumentException, "Unable to treat transition rewards."); |
||||
|
} |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
storm::models::sparse::StandardRewardModel<ValueType> RewardModelBuilder<ValueType>::build(uint_fast64_t rowCount, uint_fast64_t columnCount, uint_fast64_t rowGroupCount) { |
||||
|
boost::optional<std::vector<ValueType>> optionalStateRewardVector; |
||||
|
if (hasStateRewards()) { |
||||
|
stateRewardVector.resize(rowGroupCount); |
||||
|
optionalStateRewardVector = std::move(stateRewardVector); |
||||
|
} |
||||
|
|
||||
|
boost::optional<std::vector<ValueType>> optionalStateActionRewardVector; |
||||
|
if (hasStateActionRewards()) { |
||||
|
stateActionRewardVector.resize(rowCount); |
||||
|
optionalStateActionRewardVector = std::move(stateActionRewardVector); |
||||
|
} |
||||
|
|
||||
|
return storm::models::sparse::StandardRewardModel<ValueType>(std::move(optionalStateRewardVector), std::move(optionalStateActionRewardVector)); |
||||
|
} |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
std::string const& RewardModelBuilder<ValueType>::getName() const { |
||||
|
return rewardModelName; |
||||
|
} |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
void RewardModelBuilder<ValueType>::addStateReward(ValueType const& value) { |
||||
|
stateRewardVector.push_back(value); |
||||
|
} |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
void RewardModelBuilder<ValueType>::addStateActionReward(ValueType const& value) { |
||||
|
stateActionRewardVector.push_back(value); |
||||
|
} |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
bool RewardModelBuilder<ValueType>::hasStateRewards() const { |
||||
|
return stateRewards; |
||||
|
} |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
bool RewardModelBuilder<ValueType>::hasStateActionRewards() const { |
||||
|
return stateActionRewards; |
||||
|
} |
||||
|
|
||||
|
template class RewardModelBuilder<double>; |
||||
|
template class RewardModelBuilder<storm::RationalNumber>; |
||||
|
template class RewardModelBuilder<storm::RationalFunction>; |
||||
|
template class RewardModelBuilder<storm::Interval>; |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,51 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <vector> |
||||
|
#include <cstdint> |
||||
|
|
||||
|
#include "src/builder/RewardModelInformation.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace models { |
||||
|
namespace sparse { |
||||
|
template <typename ValueType> |
||||
|
class StandardRewardModel; |
||||
|
} |
||||
|
} |
||||
|
namespace builder { |
||||
|
|
||||
|
/*! |
||||
|
* A structure that is used to keep track of a reward model currently being built. |
||||
|
*/ |
||||
|
template <typename ValueType> |
||||
|
class RewardModelBuilder { |
||||
|
public: |
||||
|
RewardModelBuilder(RewardModelInformation const& rewardModelInformation); |
||||
|
|
||||
|
storm::models::sparse::StandardRewardModel<ValueType> build(uint_fast64_t rowCount, uint_fast64_t columnCount, uint_fast64_t rowGroupCount); |
||||
|
|
||||
|
std::string const& getName() const; |
||||
|
|
||||
|
void addStateReward(ValueType const& value); |
||||
|
|
||||
|
void addStateActionReward(ValueType const& value); |
||||
|
|
||||
|
bool hasStateRewards() const; |
||||
|
|
||||
|
bool hasStateActionRewards() const; |
||||
|
|
||||
|
private: |
||||
|
std::string rewardModelName; |
||||
|
|
||||
|
bool stateRewards; |
||||
|
bool stateActionRewards; |
||||
|
|
||||
|
// The state reward vector. |
||||
|
std::vector<ValueType> stateRewardVector; |
||||
|
|
||||
|
// The state-action reward vector. |
||||
|
std::vector<ValueType> stateActionRewardVector; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
#include "src/builder/RewardModelInformation.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace builder { |
||||
|
|
||||
|
RewardModelInformation::RewardModelInformation(std::string const& name, bool stateRewards, bool stateActionRewards, bool transitionRewards) : name(name), stateRewards(stateRewards), stateActionRewards(stateActionRewards), transitionRewards(transitionRewards) { |
||||
|
// Intentionally left empty.
|
||||
|
} |
||||
|
|
||||
|
std::string const& RewardModelInformation::getName() const { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
bool RewardModelInformation::hasStateRewards() const { |
||||
|
return stateRewards; |
||||
|
} |
||||
|
|
||||
|
bool RewardModelInformation::hasStateActionRewards() const { |
||||
|
return stateActionRewards; |
||||
|
} |
||||
|
|
||||
|
bool RewardModelInformation::hasTransitionRewards() const { |
||||
|
return transitionRewards; |
||||
|
} |
||||
|
|
||||
|
void RewardModelInformation::setHasStateRewards() { |
||||
|
stateRewards = true; |
||||
|
} |
||||
|
|
||||
|
void RewardModelInformation::setHasStateActionRewards() { |
||||
|
stateActionRewards = true; |
||||
|
} |
||||
|
|
||||
|
void RewardModelInformation::setHasTransitionRewards() { |
||||
|
transitionRewards = true; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <string> |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace builder { |
||||
|
|
||||
|
class RewardModelInformation { |
||||
|
public: |
||||
|
RewardModelInformation(std::string const& name, bool stateRewards, bool stateActionRewards, bool transitionRewards); |
||||
|
|
||||
|
std::string const& getName() const; |
||||
|
bool hasStateRewards() const; |
||||
|
bool hasStateActionRewards() const; |
||||
|
bool hasTransitionRewards() const; |
||||
|
|
||||
|
void setHasStateRewards(); |
||||
|
void setHasStateActionRewards(); |
||||
|
void setHasTransitionRewards(); |
||||
|
|
||||
|
private: |
||||
|
std::string name; |
||||
|
bool stateRewards; |
||||
|
bool stateActionRewards; |
||||
|
bool transitionRewards; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue