Пример #1
0
def test_ground_actions_for_small_gripper():
    problem = create_sample_problem()

    # First try with the variable-only grounding strategy
    varonly_grounding = LPGroundingStrategy(problem, ground_actions=False)
    varonly_variables = varonly_grounding.ground_state_variables()
    assert len(varonly_variables) == 20

    # Now try full LP grounding
    grounding = LPGroundingStrategy(problem)
    actions = grounding.ground_actions()

    assert len(actions['pick']) == len(
        actions['drop']) == 16  # 4 balls, two rooms, two grippers
    assert len(actions['move']) == 2  # 2 rooms

    lpvariables = grounding.ground_state_variables()
    assert len(lpvariables) == 20
    # Check both grounding methods produce same set of ground variables
    assert set(lpvariables) == set(varonly_variables)

    grounding = NaiveGroundingStrategy(problem)
    naive_variables = grounding.ground_state_variables()
    # The naive grounding strategy will result in many unreachable state variables such as 'carry(left,left)'
    assert len(set(naive_variables) - set(lpvariables)) == 124
Пример #2
0
def test_ground_actions_on_negated_preconditions():
    problem = create_sample_problem()

    # We negate all atoms in the precondition, which makes all 8^3 combinations of objects be a valid grounding,
    # since all precondition atoms are ignored
    pick_prec = problem.actions['pick'].precondition
    pick_prec.subformulas = tuple(neg(f) for f in pick_prec.subformulas)
    actions = compute_action_groundings(problem)
    assert len(actions['pick']) == 512
Пример #3
0
def test_ground_actions_for_small_gripper():
    problem = create_sample_problem()
    grounding = LPGroundingStrategy(problem)
    actions = grounding.ground_actions()
    assert len(actions['pick']) == len(
        actions['drop']) == 16  # 4 balls, two rooms, two grippers
    assert len(actions['move']) == 2  # 2 rooms

    as_list2 = lambda symbols: sorted(map(str, symbols))
    lpvariables = grounding.ground_state_variables()
    assert len(lpvariables) == 20

    grounding = NaiveGroundingStrategy(problem)
    naive_variables = grounding.ground_state_variables()
    # The naive grounding strategy will result in many unreachable state variables such as 'carry(left,left)'
    assert len(set(as_list2(naive_variables)) -
               set(as_list2(lpvariables))) == 124
Пример #4
0
def test_ignore_unused_types():
    # Regression test for issue #83
    problem = create_sample_problem()
    lp, tr = create_reachability_lp(problem, ground_actions=False)
    ruleset = set(lp.rules)

    # Now add an empty type and check that the set of LP rules is exactly the same, i.e. the type is ignored
    problem.language.sort('empty_type')
    lp, tr = create_reachability_lp(problem, ground_actions=False)
    ruleset2 = set(lp.rules)
    assert ruleset == ruleset2

    problem = generate_strips_problem(
        "organic-synthesis-opt18-strips:p01.pddl")
    lp, tr = create_reachability_lp(problem, ground_actions=True)
    ruleset = set(lp.rules)
    assert not any(s.startswith("action_oxidationofborane") for s in ruleset)

    actions = compute_action_groundings(problem)
    assert actions['oxidationofborane'] == set()