Started implementing derived predicates for decomposing complex PDDL conditions.

This commit is contained in:
2016-09-09 16:42:16 +02:00
parent cc0b9726ed
commit a62cc8b3b9
16 changed files with 213 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
#include <plasp/pddl/Parser.h>
#include <plasp/pddl/Requirement.h>
#include <plasp/pddl/expressions/Constant.h>
#include <plasp/pddl/expressions/DerivedPredicate.h>
#include <plasp/pddl/expressions/PredicateDeclaration.h>
#include <plasp/pddl/expressions/PrimitiveType.h>
@@ -49,6 +50,9 @@ class Domain
std::vector<std::unique_ptr<Action>> &actions();
const std::vector<std::unique_ptr<Action>> &actions() const;
expressions::DerivedPredicates &derivedPredicates();
const expressions::DerivedPredicates &derivedPredicates() const;
void checkConsistency();
void normalize();
@@ -85,6 +89,8 @@ class Domain
std::vector<utils::Stream::Position> m_actionPositions;
std::vector<std::unique_ptr<Action>> m_actions;
expressions::DerivedPredicates m_derivedPredicates;
};
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -40,6 +40,10 @@ class Constant;
using ConstantPointer = boost::intrusive_ptr<Constant>;
using Constants = std::vector<ConstantPointer>;
class DerivedPredicate;
using DerivedPredicatePointer = boost::intrusive_ptr<DerivedPredicate>;
using DerivedPredicates = std::vector<DerivedPredicatePointer>;
class Dummy;
using DummyPointer = boost::intrusive_ptr<Dummy>;
@@ -103,6 +107,7 @@ class Expression
At,
Binary,
Constant,
DerivedPredicate,
Dummy,
Either,
Exists,
@@ -132,6 +137,7 @@ class Expression
virtual ExpressionPointer prenex(Expression::Type lastQuantifierType = Expression::Type::Exists);
virtual ExpressionPointer simplified();
virtual ExpressionPointer disjunctionNormalized();
virtual ExpressionPointer decomposed(expressions::DerivedPredicates &derivedPredicates);
ExpressionPointer negated();
virtual void print(std::ostream &ostream) const = 0;

View File

@@ -25,6 +25,7 @@ class And: public NAry<And>
public:
ExpressionPointer disjunctionNormalized() override;
ExpressionPointer decomposed(DerivedPredicates &derivedPredicates) override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,42 @@
#ifndef __PLASP__PDDL__EXPRESSIONS__DERIVED_PREDICATE_H
#define __PLASP__PDDL__EXPRESSIONS__DERIVED_PREDICATE_H
#include <plasp/pddl/Expression.h>
namespace plasp
{
namespace pddl
{
namespace expressions
{
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// DerivedPredicate
//
////////////////////////////////////////////////////////////////////////////////////////////////////
class DerivedPredicate: public ExpressionCRTP<DerivedPredicate>
{
public:
static const Expression::Type ExpressionType = Expression::Type::DerivedPredicate;
// TODO: consider implementing parsing functions for compatibility with older PDDL versions
public:
void setArgument(ExpressionPointer argument);
ExpressionPointer argument() const;
void print(std::ostream &ostream) const override;
private:
ExpressionPointer m_argument;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
}
#endif

View File

@@ -22,6 +22,9 @@ class Exists: public QuantifiedCRTP<Exists>
static const Expression::Type ExpressionType = Expression::Type::Exists;
static const std::string Identifier;
public:
ExpressionPointer decomposed(DerivedPredicates &derivedPredicates) override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -22,6 +22,9 @@ class ForAll: public QuantifiedCRTP<ForAll>
static const Expression::Type ExpressionType = Expression::Type::ForAll;
static const std::string Identifier;
public:
ExpressionPointer decomposed(DerivedPredicates &derivedPredicates) override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -39,6 +39,7 @@ class Not: public ExpressionCRTP<Not>
ExpressionPointer prenex(Expression::Type lastExpressionType) override;
ExpressionPointer simplified() override;
ExpressionPointer disjunctionNormalized() override;
ExpressionPointer decomposed(DerivedPredicates &derivedPredicates) override;
void print(std::ostream &ostream) const override;

View File

@@ -22,6 +22,9 @@ class Or: public NAry<Or>
static const Expression::Type ExpressionType = Expression::Type::Or;
static const std::string Identifier;
public:
ExpressionPointer decomposed(DerivedPredicates &derivedPredicates) override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////