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()])
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()]