Exemple #1
0
def test_statics2():
    type_object = Type("object", None)

    predicate_a = Predicate("a", [])
    predicate_b = Predicate("b", [])

    the_action = get_action("the-action", [], [predicate_a], [predicate_b], [])

    statics = grounding._get_statics([predicate_a, predicate_b], [the_action])

    assert predicate_a.name in statics and predicate_b.name not in statics
def test_statics1():
    """
    A static predicate is a predicate, which doesn't occur in an effect of an
    action.
    """
    type_object = Type("object", None)
    type_car = Type("car", type_vehicle)
    type_city = Type("city", type_object)
    type_country = Type("country", type_object)
    types = {
        "object": type_object,
        "car": type_car,
        "city": type_city,
        "country": type_country,
    }

    predicate_orig = Predicate("at", [("car", types["car"]),
                                      ("dest", types["city"])])
    predicate_dest = Predicate("at", [("car", types["car"]),
                                      ("orig", types["city"])])
    predicate_in = Predicate("in", [("city", types["city"]),
                                    ("country", types["country"])])

    action_drive_car = get_action(
        "DRIVE-CAR",
        [
            ("car", [types["car"]]),
            ("loc-orig", [types["city"]]),
            ("loc-dest", [types["city"]]),
        ],
        [predicate_orig],
        [predicate_dest],
        [predicate_orig],
    )

    assert "in" in grounding._get_statics([predicate_in], [action_drive_car])
    assert "dest" not in grounding._get_statics([predicate_dest],
                                                [action_drive_car])
    assert "orig" not in grounding._get_statics([predicate_orig],
                                                [action_drive_car])
Exemple #3
0
def test_type_map1():
    """type map: maps each type to a list of objects"""
    type_object = Type("object", None)
    type_vehicle = Type("vehicle", type_object)
    type_car = Type("car", type_vehicle)
    type_truck = Type("truck", type_vehicle)
    type_city = Type("city", type_object)

    objects = {
        "red_car": type_car,
        "green_car": type_car,
        "blue_truck": type_truck,
        "motorbike": type_vehicle,
        "freiburg": type_city,
        "basel": type_city,
    }

    type_map = grounding._create_type_map(objects)

    expected = [
        ("red_car", type_map[type_car]),
        ("green_car", type_map[type_car]),
        ("blue_truck", type_map[type_truck]),
        ("red_car", type_map[type_vehicle]),
        ("green_car", type_map[type_vehicle]),
        ("blue_truck", type_map[type_vehicle]),
        ("motorbike", type_map[type_vehicle]),
        ("freiburg", type_map[type_city]),
        ("basel", type_map[type_city]),
        ("green_car", type_map[type_object]),
        ("motorbike", type_map[type_object]),
        ("basel", type_map[type_object]),
    ]

    for object, object_list in expected:
        assert object in object_list
Exemple #4
0
def test_type():
    test = Type("test", "parent")
    assert str(test) == repr(test)
Exemple #5
0
def test_regression():
    parser = Parser("")

    def parse_problem(domain, problem):
        parser.domInput = domain
        parser.probInput = problem
        domain = parser.parse_domain(False)
        return parser.parse_problem(domain, False)

    prob_05 = """
    ;; See domain file for description of this test.

    (define (problem regression-test-05)
      (:domain regression-test)
      (:objects y - object)
      (:init)
      (:goal (the-predicate x y)))
    """

    dom_05 = """
    ;; Expected behaviour: plan of length one found
    ;; Observed behaviour (r265): plan of length zero found

    (define (domain regression-test)
      (:requirements :typing) ;; work around problem in regression test #4.
      (:predicates (the-predicate ?v1 ?v2 - object))
      (:constants x - object)

      (:action theaction
       :parameters (?x - object)
       :precondition (and)
       :effect (the-predicate x ?x)
      )
    )
    """

    prob_06 = """
    ;; See domain file for description of this test.

    (define (problem regression-test-06)
      (:domain regression-test)
      (:objects y - object)
      (:init)
      (:goal (the-predicate y y)))

    """
    dom_06 = """
    ;; Expected behaviour: planner proves that no plan exists
    ;; Observed behaviour (r265): plan of length one found

    (define (domain regression-test)
      (:requirements :typing) ;; work around problem in regression test #4.
      (:predicates (the-predicate ?v1 ?v2 - object))
      (:constants x - object)

      (:action theaction
       :parameters (?x - object)
       :precondition (and)
       :effect (the-predicate x ?x)
      )
    )
    """

    # problem / domain 07 contains a different action compared
    # to the actions of domain 5 & 6
    prob_07 = prob_06

    dom_07 = """
    (define (domain regression-test)
      (:requirements :typing) ;; work around problem in regression test #4.
      (:predicates (the-predicate ?v1 ?v2 - object))
      (:constants y - object)

      (:action theaction
       :parameters (?x - object)
       :precondition (and)
       :effect (the-predicate y ?x)
      )
    )
    """

    # action of problem / domain 8 differs only in the variable name compared
    # to the actions of problem 5 and 6: After grounding there should be no
    # difference between the grounded actions
    prob_08 = prob_05

    dom_08 = """
    (define (domain regression-test)
      (:requirements :typing) ;; work around problem in regression test #4.
      (:predicates (the-predicate ?v1 ?v2 - object))
      (:constants x - object)

      (:action theaction
       :parameters (?z - object)
       :precondition (and)
       :effect (the-predicate x ?z)
      )
    )
    """

    parsed_problem5 = parse_problem(dom_05, prob_05)
    parsed_problem6 = parse_problem(dom_06, prob_06)
    parsed_problem7 = parse_problem(dom_07, prob_07)
    parsed_problem8 = parse_problem(dom_08, prob_08)

    # coded input:
    type_object = Type("object", None)
    types = {"object": type_object}
    predicates = {
        "the_predicate": Predicate(
            "the-predicate", [("v1", type_object), ("v2", type_object)]
        )
    }
    constants = {"x": type_object}
    actions = {
        "theaction": get_action(
            "theaction",
            [("?x", [type_object])],
            [],
            [Predicate("the-predicate", [("x", type_object), ("?x", type_object)])],
            [],
        )
    }
    domain = Domain("regression-test", types, predicates, actions, constants)
    problem5 = Problem(
        "regression-test-05",
        domain,
        {"y": type_object},
        [],
        [Predicate("the-predicate", [("x", type_object), ("y", type_object)])],
    )
    problem6 = Problem(
        "regression-test-06",
        domain,
        {"y": type_object},
        [],
        [Predicate("the-predicate", [("y", type_object), ("y", type_object)])],
    )

    parsed_task5 = grounding.ground(parsed_problem5)
    coded_task5 = grounding.ground(problem5)
    parsed_task6 = grounding.ground(parsed_problem6)
    coded_task6 = grounding.ground(problem6)
    parsed_task7 = grounding.ground(parsed_problem7)
    parsed_task8 = grounding.ground(parsed_problem8)

    expected = [
        (parsed_task5.operators, coded_task5.operators, True),
        (parsed_task6.operators, coded_task6.operators, True),
        (parsed_task5.operators, coded_task6.operators, False),
        (parsed_task5.operators, parsed_task7.operators, False),
        (parsed_task5.operators, parsed_task8.operators, True),
    ]

    for operator1, operator2, expected_result in expected:
        assert compare_operators(operator1, operator2) == expected_result
Exemple #6
0
def test_type_map2():
    type_object = Type("object", None)
    objects = {"object1": type_object}
    type_map = grounding._create_type_map(objects)
    assert "object1" in type_map[type_object]
Exemple #7
0
from pyperplan.task import Operator


def get_action(name, signature, precondition, addlist, dellist):
    effect = Effect()
    effect.addlist = set(addlist)
    effect.dellist = set(dellist)
    return Action(name, signature, precondition, effect)


"""
test domain and problem
"""

# types:
type_object = Type("object", None)
type_vehicle = Type("vehicle", type_object)
type_car = Type("car", type_vehicle)
type_truck = Type("truck", type_vehicle)
type_city = Type("city", type_object)
type_country = Type("country", type_object)
type_my_car = Type("my_car", type_vehicle)
type_color = Type("color", type_object)

types = {
    "object": type_object,
    "vehicle": type_vehicle,
    "car": type_car,
    "truck": type_truck,
    "city": type_city,
    "country": type_country,