You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

72 lines
3.2 KiB

#ifndef STORM_MODELCHECKER_MULTIOBJECTIVE_PCAA_SPARSEPCAAQUANTITATIVEQUERY_H_
#define STORM_MODELCHECKER_MULTIOBJECTIVE_PCAA_SPARSEPCAAQUANTITATIVEQUERY_H_
#include "storm/modelchecker/multiobjective/pcaa/SparsePcaaQuery.h"
namespace storm {
namespace modelchecker {
namespace multiobjective {
/*
* This class represents a query for the Pareto curve approximation algorithm (Pcaa).
* It implements the necessary computations for the different query types.
*/
template <class SparseModelType, typename GeometryValueType>
class SparsePcaaQuantitativeQuery : public SparsePcaaQuery<SparseModelType, GeometryValueType> {
public:
// Typedefs for simple geometric objects
typedef std::vector<GeometryValueType> Point;
typedef std::vector<GeometryValueType> WeightVector;
/*
* Creates a new query for the Pareto curve approximation algorithm (Pcaa)
* @param preprocessorResult the result from preprocessing
*/
SparsePcaaQuantitativeQuery(SparseMultiObjectivePreprocessorResult<SparseModelType>& preprocessorResult);
virtual ~SparsePcaaQuantitativeQuery() = default;
/*
* Invokes the computation and retrieves the result
*/
virtual std::unique_ptr<CheckResult> check(Environment const& env) override;
private:
void initializeThresholdData();
/*
* Returns whether the given thresholds are achievable.
*/
bool checkAchievability(Environment const& env);
/*
* Updates the precision of the weightVectorChecker w.r.t. the provided weights
*/
void updateWeightedPrecisionInAchievabilityPhase(WeightVector const& weights);
void updateWeightedPrecisionInImprovingPhase(Environment const& env, WeightVector const& weights);
/*
* Given that the thresholds are achievable, this function further refines the approximations and returns the optimized value
*/
GeometryValueType improveSolution(Environment const& env);
/*
* Returns true iff there is one point in the given polytope that satisfies the given thresholds.
* It is assumed that the given polytope contains the downward closure of its vertices.
*/
bool checkIfThresholdsAreSatisfied(std::shared_ptr<storm::storage::geometry::Polytope<GeometryValueType>> const& polytope);
uint_fast64_t indexOfOptimizingObjective;
Point thresholds;
storm::storage::BitVector strictThresholds;
std::shared_ptr<storm::storage::geometry::Polytope<GeometryValueType>> thresholdsAsPolytope;
};
}
}
}
#endif /* STORM_MODELCHECKER_MULTIOBJECTIVE_PCAA_SPARSEPCAAQUANTITATIVEQUERY_H_ */