Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
LinearCoefficientVisitor.h
Go to the documentation of this file.
1#pragma once
2
3#include <map>
4#include <optional>
5
9
10namespace storm {
11namespace expressions {
12
16template<typename ValueType>
18 public:
20 public:
21 VariableCoefficients(ValueType constantPart = ValueType(0));
22
27
32
33 void negate();
34 void setCoefficient(storm::expressions::Variable const& variable, ValueType const& coefficient);
35 ValueType getCoefficient(storm::expressions::Variable const& variable);
36 ValueType const& getConstantPart() const;
37
47
48 // Propagate the iterators to variable-coefficient pairs.
49 typename std::map<storm::expressions::Variable, ValueType>::const_iterator begin() const;
50 typename std::map<storm::expressions::Variable, ValueType>::const_iterator end() const;
51
52 size_t size() const;
53
54 private:
55 // Variables whose coefficient cancelled out are not stored.
56 void removeZeroCoefficients();
57
58 std::map<storm::expressions::Variable, ValueType> variableToCoefficientMapping;
59 ValueType constantPart;
60 };
61
67
71 std::optional<VariableCoefficients> tryGetLinearCoefficients(Expression const& expression);
72
73 virtual boost::any visit(IfThenElseExpression const& expression, boost::any const& data) override;
74 virtual boost::any visit(BinaryBooleanFunctionExpression const& expression, boost::any const& data) override;
75 virtual boost::any visit(BinaryNumericalFunctionExpression const& expression, boost::any const& data) override;
76 virtual boost::any visit(BinaryRelationExpression const& expression, boost::any const& data) override;
77 virtual boost::any visit(VariableExpression const& expression, boost::any const& data) override;
78 virtual boost::any visit(UnaryBooleanFunctionExpression const& expression, boost::any const& data) override;
79 virtual boost::any visit(UnaryNumericalFunctionExpression const& expression, boost::any const& data) override;
80 virtual boost::any visit(BooleanLiteralExpression const& expression, boost::any const& data) override;
81 virtual boost::any visit(IntegerLiteralExpression const& expression, boost::any const& data) override;
82 virtual boost::any visit(RationalLiteralExpression const& expression, boost::any const& data) override;
83
84 private:
85 // The visit methods return a std::optional<VariableCoefficients>, which is empty if the expression is not linear.
86 using Result = std::optional<VariableCoefficients>;
87};
88} // namespace expressions
89} // namespace storm
Computes the coefficients of a linear expression.
std::optional< VariableCoefficients > tryGetLinearCoefficients(Expression const &expression)
As getLinearCoefficients, but returns std::nullopt instead of throwing if the expression is not linea...
virtual boost::any visit(IfThenElseExpression const &expression, boost::any const &data) override
VariableCoefficients getLinearCoefficients(Expression const &expression)
Computes the coefficients of all identifiers appearing in the expression if the expression was rewrit...
VariableCoefficients & operator-=(VariableCoefficients &&other)
std::map< storm::expressions::Variable, ValueType >::const_iterator begin() const
VariableCoefficients & operator=(VariableCoefficients &&other)=default
VariableCoefficients(VariableCoefficients const &other)=default
VariableCoefficients & operator*=(VariableCoefficients &&other)
VariableCoefficients & operator=(VariableCoefficients const &other)=default
ValueType getCoefficient(storm::expressions::Variable const &variable)
std::map< storm::expressions::Variable, ValueType >::const_iterator end() const
VariableCoefficients & operator+=(VariableCoefficients &&other)
void separateVariablesFromConstantPart(VariableCoefficients &rhs)
Brings all variables of the right-hand side coefficients to the left-hand side by negating them and m...
VariableCoefficients & operator/=(VariableCoefficients &&other)
void setCoefficient(storm::expressions::Variable const &variable, ValueType const &coefficient)