49 ConstantType learningRate = 0.1, ConstantType averageDecay = 0.9, ConstantType squaredAverageDecay = 0.999, uint_fast64_t miniBatchSize = 32,
50 ConstantType terminationEpsilon = 1e-6,
53 startPoint = std::nullopt,
59 instantiationModelChecker(
60 std::make_unique<
modelchecker::SparseDtmcInstantiationModelChecker<
models::sparse::
Dtmc<FunctionType>, ConstantType>>(env, model)),
61 startPoint(startPoint),
62 miniBatchSize(miniBatchSize),
63 terminationEpsilon(terminationEpsilon),
64 constraintMethod(constraintMethod),
66 recordRun(recordRun) {
69 "Specifying a region is only supported if you are constraining by projection.");
74 adam.learningRate = learningRate;
75 adam.averageDecay = averageDecay;
76 adam.averageDecay = averageDecay;
77 adam.squaredAverageDecay = squaredAverageDecay;
78 gradientDescentType = adam;
83 radam.learningRate = learningRate;
84 radam.averageDecay = averageDecay;
85 radam.squaredAverageDecay = squaredAverageDecay;
86 gradientDescentType = radam;
91 rmsProp.learningRate = learningRate;
92 rmsProp.averageDecay = averageDecay;
93 gradientDescentType = rmsProp;
99 plain.learningRate = learningRate;
100 gradientDescentType = plain;
104 useSignsOnly =
false;
111 momentum.learningRate = learningRate;
113 momentum.momentumTerm = averageDecay;
114 gradientDescentType = momentum;
118 useSignsOnly =
false;
125 nesterov.learningRate = learningRate;
127 nesterov.momentumTerm = averageDecay;
128 gradientDescentType = nesterov;
132 useSignsOnly =
false;
147 void setup(
Environment const& env, std::shared_ptr<storm::pars::FeasibilitySynthesisTask const>
const& task) {
150 this->synthesisTask = task;
151 STORM_LOG_ASSERT(task->getFormula().isProbabilityOperatorFormula() || task->getFormula().isRewardOperatorFormula(),
152 "Formula must be either a reward or a probability operator formula.");
154 std::shared_ptr<storm::logic::Formula> formulaWithoutBounds = task->getFormula().clone();
155 formulaWithoutBounds->asOperatorFormula().removeBound();
156 this->currentFormulaNoBound = formulaWithoutBounds->asSharedPointer();
158 if (task->getFormula().isRewardOperatorFormula()) {
160 this->parameters.insert(rewardParameters.begin(), rewardParameters.end());
163 this->currentCheckTaskNoBound = std::make_unique<storm::modelchecker::CheckTask<storm::logic::Formula, FunctionType>>(*currentFormulaNoBound);
164 this->currentCheckTaskNoBoundConstantType =
165 std::make_unique<storm::modelchecker::CheckTask<storm::logic::Formula, ConstantType>>(*currentFormulaNoBound);
167 instantiationModelChecker->specifyFormula(*this->currentCheckTaskNoBound);
168 derivativeEvaluationHelper->specifyFormula(env, *this->currentCheckTaskNoBound);
196 void resetDynamicValues();
199 std::shared_ptr<storm::pars::FeasibilitySynthesisTask const> synthesisTask;
200 std::unique_ptr<modelchecker::CheckTask<storm::logic::Formula, FunctionType>> currentCheckTaskNoBound;
201 std::unique_ptr<modelchecker::CheckTask<storm::logic::Formula, ConstantType>> currentCheckTaskNoBoundConstantType;
202 std::shared_ptr<storm::logic::Formula const> currentFormulaNoBound;
205 std::set<typename utility::parametric::VariableType<FunctionType>::type> parameters;
206 const std::unique_ptr<storm::derivative::SparseDerivativeInstantiationModelChecker<FunctionType, ConstantType>> derivativeEvaluationHelper;
207 std::unique_ptr<storm::analysis::MonotonicityHelper<FunctionType, ConstantType>> monotonicityHelper;
208 const std::unique_ptr<modelchecker::SparseDtmcInstantiationModelChecker<models::sparse::Dtmc<FunctionType>, ConstantType>> instantiationModelChecker;
211 const uint_fast64_t miniBatchSize;
212 const ConstantType terminationEpsilon;
214 const std::optional<storage::ParameterRegion<FunctionType>> region;
217 const bool recordRun;
218 std::vector<VisualizationPoint> walk;
222 ConstantType averageDecay;
223 ConstantType squaredAverageDecay;
224 ConstantType learningRate;
225 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> decayingStepAverageSquared;
226 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> decayingStepAverage;
229 ConstantType averageDecay;
230 ConstantType squaredAverageDecay;
231 ConstantType learningRate;
232 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> decayingStepAverageSquared;
233 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> decayingStepAverage;
236 ConstantType averageDecay;
237 ConstantType learningRate;
238 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> rootMeanSquare;
241 ConstantType learningRate;
244 ConstantType learningRate;
245 ConstantType momentumTerm;
246 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> pastStep;
249 ConstantType learningRate;
250 ConstantType momentumTerm;
251 std::map<typename utility::parametric::VariableType<FunctionType>::type, ConstantType> pastStep;
253 typedef boost::variant<Adam, RAdam, RmsProp, Plain, Momentum, Nesterov> GradientDescentType;
254 GradientDescentType gradientDescentType;
258 ConstantType logarithmicBarrierTerm;
266 ConstantType constantTypeSqrt(ConstantType input) {
270 utility::Stopwatch stochasticWatch;
271 utility::Stopwatch batchWatch;
272 utility::Stopwatch startingPointCalculationWatch;
GradientDescentInstantiationSearcher(Environment const &env, storm::models::sparse::Dtmc< FunctionType > const &model, GradientDescentMethod method=GradientDescentMethod::ADAM, ConstantType learningRate=0.1, ConstantType averageDecay=0.9, ConstantType squaredAverageDecay=0.999, uint_fast64_t miniBatchSize=32, ConstantType terminationEpsilon=1e-6, std::optional< std::map< typename utility::parametric::VariableType< FunctionType >::type, typename utility::parametric::CoefficientType< FunctionType >::type > > startPoint=std::nullopt, GradientDescentConstraintMethod constraintMethod=GradientDescentConstraintMethod::PROJECT_WITH_GRADIENT, std::optional< storage::ParameterRegion< FunctionType > > region=std::nullopt, bool recordRun=false)
The GradientDescentInstantiationSearcher can find extrema and feasible instantiations in pMCs,...