Esempio n. 1
0
def make_initial_state(instream, task, orig_num_cylinders):
    # 1. initialize all to False

    # 2. initialize actual values
    input_line = instream.readline()
    facts = set()
    while 'goal' not in input_line:
        decode_vars(task, input_line, facts)
        input_line = instream.readline()

    # determine values for task variables
    valuation = dict()

    if 'gripper_empty' in facts:
        valuation[task.gripper_empty.index] = True

    for k in xrange(task.objects.num_blocks()):
        if block_clear(k) in facts:
            valuation[task.block_clear[k].index] = True

    for l in xrange(task.objects.num_cylinders()):
        valuation[task.cylinder_empty[l].index] = True

    for k in xrange(task.objects.num_blocks()):
        for l in xrange(task.objects.num_cylinders()):
            if block_in_cylinder(k, l) in facts:
                valuation[task.block_container[k].
                          index] = task.block_container_values[in_cylinder(l)]
                valuation[task.cylinder_empty[l].index] = False
                break

    for k in xrange(task.objects.num_blocks()):
        is_on_block = False
        for l in xrange(task.objects.num_blocks()):
            if block_on_block(k, l) in facts:
                valuation[task.block_position[k].
                          index] = task.block_position_values[on_block(l)]
                valuation[task.block_clear[l].index] = False
                is_on_block = True
                break
        if is_on_block: continue
        is_on_piston = False
        for l in xrange(task.objects.num_cylinders()):
            if block_on_piston(k) in facts:
                valuation[task.block_position[k].
                          index] = task.block_position_values['on_piston']
                is_on_piston = True
                break
        if is_on_piston: continue
        assert False

    print([(task.state_vars[x].name, v) for x, v in valuation.iteritems()])
    return State(task, [(x, v) for x, v in valuation.iteritems()])
Esempio n. 2
0
def make_goal(instream, task):
    valuation = {}

    input_line = instream.readline()

    facts = set()
    while 'end' not in input_line:
        decode_vars(task, input_line, facts)
        input_line = instream.readline()
    # determine values for task variables
    valuation = dict()

    if 'gripper_empty' in facts:
        valuation[task.gripper_empty.index] = True

    for k in xrange(task.objects.num_blocks()):
        if block_clear(k) in facts:
            valuation[task.block_clear[k].index] = True

    for k in xrange(task.objects.num_blocks()):
        for l in xrange(task.objects.num_cylinders()):
            if block_in_cylinder(k, l) in facts:
                valuation[task.block_container[k].
                          index] = task.block_container_values[in_cylinder(l)]
                break

    for k in xrange(task.objects.num_blocks()):
        is_on_block = False
        for l in xrange(task.objects.num_blocks()):
            if block_on_block(k, l) in facts:
                valuation[task.block_position[k].
                          index] = task.block_position_values[on_block(l)]
                is_on_block = True
                break
        if is_on_block: continue
        is_on_piston = False
        for l in xrange(task.objects.num_cylinders()):
            if block_on_piston(k) in facts:
                valuation[task.block_position[k].
                          index] = task.block_position_values['on_piston']
                is_on_piston = True
                break
        if is_on_piston: continue

    return [(x, v) for x, v in valuation.iteritems()]