#pragma once #include "storm/logic/Formula.h" #include "storm/solver/OptimizationDirection.h" namespace storm { namespace logic { class QuantileFormula : public Formula { public: QuantileFormula(std::vector> const& boundVariables, std::shared_ptr subformula); virtual ~QuantileFormula(); virtual bool isQuantileFormula() const override; virtual bool hasQuantitativeResult() const override; // Result is numerical or a pareto curve virtual bool hasNumericalResult() const; // Result is numerical virtual bool hasParetoCurveResult() const; // Result is a pareto curve Formula const& getSubformula() const; uint64_t getDimension() const; bool isMultiDimensional() const; storm::expressions::Variable const& getBoundVariable() const; storm::expressions::Variable const& getBoundVariable(uint64_t index) const; std::vector> const& getBoundVariables() const; storm::solver::OptimizationDirection const& getOptimizationDirection() const; storm::solver::OptimizationDirection const& getOptimizationDirection(uint64_t index) const; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual void gatherAtomicExpressionFormulas(std::vector>& atomicExpressionFormulas) const override; virtual void gatherAtomicLabelFormulas(std::vector>& atomicLabelFormulas) const override; virtual void gatherReferencedRewardModels(std::set& referencedRewardModels) const override; virtual std::ostream& writeToStream(std::ostream& out) const override; private: std::vector> boundVariables; std::shared_ptr subformula; }; } }