Fixed meta encoding for sequential, incremental planning.

This commit is contained in:
Patrick Lühne 2016-05-23 00:24:48 +02:00
parent 5b42b09e5d
commit 5db8af9ffc
4 changed files with 14 additions and 20 deletions

View File

@ -19,6 +19,12 @@ holds(F, t) :- occurs(A, t), postcondition(A, F, true), action(A).
deleted(F, t) :- occurs(A, t), postcondition(A, F, false), action(A).
holds(F, t) :- holds(F, t - 1), not deleted(F, t).
% Enforce mutexes
deleted(F2, t) :- mutex(F1, true, F2, true), holds(F1, t).
holds(F2, t) :- mutex(F1, true, F2, false), holds(F1, t).
deleted(F2, t) :- mutex(F1, false, F2, true), not holds(F1, t).
holds(F2, t) :- mutex(F1, false, F2, false), not holds(F1, t).
#program check(t).
% Verify that goal is met
@ -26,5 +32,4 @@ holds(F, t) :- holds(F, t - 1), not deleted(F, t).
:- query(t), goal(F, false), holds(F, t).
#show query/1.
#show holds/2.
#show occurs/2.

View File

@ -42,7 +42,6 @@ struct Value
void printAsSAS(std::ostream &ostream) const;
void printAsASP(std::ostream &ostream) const;
void printAsASPPredicateBody(std::ostream &ostream) const;
void printAsASPHoldsPredicate(std::ostream &ostream) const;
Sign sign() const;
const std::string &name() const;

View File

@ -181,11 +181,11 @@ void TranslatorASP::translate(std::ostream &ostream) const
const auto &value1 = *i;
const auto &value2 = *j;
ostream << ":- ";
value1.printAsASPHoldsPredicate(ostream);
ostream << "mutex(";
value1.printAsASPPredicateBody(ostream);
ostream << ", ";
value2.printAsASPHoldsPredicate(ostream);
ostream << "." << std::endl;
value2.printAsASPPredicateBody(ostream);
ostream << ")." << std::endl;
}
});
@ -205,11 +205,11 @@ void TranslatorASP::translate(std::ostream &ostream) const
const auto &value1 = i->value();
const auto &value2 = j->value();
ostream << ":- ";
value1.printAsASPHoldsPredicate(ostream);
ostream << "mutex(";
value1.printAsASPPredicateBody(ostream);
ostream << ", ";
value2.printAsASPHoldsPredicate(ostream);
ostream << "." << std::endl;
value2.printAsASPPredicateBody(ostream);
ostream << ")." << std::endl;
}
});
}

View File

@ -120,16 +120,6 @@ void Value::printAsASPPredicateBody(std::ostream &ostream) const
////////////////////////////////////////////////////////////////////////////////////////////////////
void Value::printAsASPHoldsPredicate(std::ostream &ostream) const
{
if (m_sign == Value::Sign::Negative)
ostream << "not ";
ostream << "holds(" << utils::escapeASP(m_name) << ", t)";
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void Value::printAsSAS(std::ostream &ostream) const
{
if (m_sign == Value::Sign::Positive)