def rmpyl_episode_ids(hello,uav): """Example of how episode ID's can be used to retrieve them.""" prog = RMPyL() first_uav_seq = prog.sequence(uav.scan(),uav.fly(),id='uav-1-seq') second_uav_seq = prog.sequence(uav.scan(),uav.fly(),id='uav-2-seq') first_hello_seq = prog.sequence(hello.scan(),hello.fly(),id='hello-1-seq') second_hello_seq = prog.sequence(hello.scan(),hello.fly(),id='hello-2-seq') prog *= prog.parallel(prog.sequence(first_uav_seq,second_uav_seq,id='uav-seqs'), prog.sequence(first_hello_seq,second_hello_seq,id='hello-seqs'),id='par-seqs') #This could have been accomplished much more easily by using the sequence #variables directly, but I wanted to show how episodes can be retrieved by #ID. tc1 = TemporalConstraint(start=prog.episode_by_id('uav-1-seq').end, end=prog.episode_by_id('hello-2-seq').start, ctype='controllable',lb=2.0,ub=3.0) tc2 = TemporalConstraint(start=prog.episode_by_id('hello-1-seq').end, end=prog.episode_by_id('uav-2-seq').start, ctype='controllable',lb=0.5,ub=1.0) prog.add_temporal_constraint(tc1) prog.add_temporal_constraint(tc2) return prog
elapsed = time.time()-start print('\n##### All solving took %.4f s'%(elapsed)) prog = RMPyL(name='run()') pddl_episodes = [Episode(id=make_episode_id(t,op), start=Event(name='start-of-%d-%s'%(t,op)), end=Event(name='end-of-%d-%s'%(t,op)), action=op, duration=rss_duration_model_func(op)) for t,op in enumerate(plan)] prog.plan = prog.sequence(*pddl_episodes) # prog.add_overall_temporal_constraint(ctype='controllable',lb=0.0,ub=2000.0) #Adds temporal window to the plan for t,op in enumerate(plan): bounds, tc_type = rss_time_window_model_func(op) for tc in time_window_constraints(tc_type,bounds,prog.first_event,prog.episode_by_id(make_episode_id(t,op))): prog.add_temporal_constraint(tc) #Dummy episodes that enable transmissions activation_episodes=[] activation_tcs=[] global_start=Event(name='global-start') for op_name,op_param_dict in time_windows['time_windows'].items(): for arg_set,window_dict in op_param_dict.items(): for ev_type,time_bound in window_dict.items(): orb_ep_id='%s_event_%s-%s'%(ev_type,op_name,'-'.join(arg_set)) activation_episodes.append(Episode(id=orb_ep_id, action='(%s)'%(orb_ep_id.replace('-',' ')), duration={'ctype':'controllable','lb':0.005,'ub':0.1})) activation_tcs.append(TemporalConstraint(start=global_start,
def rmpyl_breakfast(): """ Example from (Levine & Williams, ICAPS14). """ #Actions that Alice performs get_mug_ep = Episode(action='(get alice mug)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) get_glass_ep = Episode(action='(get alice glass)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) make_cofee_ep = Episode(action='(make-coffee alice)', duration={ 'ctype': 'controllable', 'lb': 3.0, 'ub': 5.0 }) pour_cofee_ep = Episode(action='(pour-coffee alice mug)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) pour_juice_glass = Episode(action='(pour-juice alice glass)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) get_bagel_ep = Episode(action='(get alice bagel)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) get_cereal_ep = Episode(action='(get alice cereal)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) toast_bagel_ep = Episode(action='(toast alice bagel)', duration={ 'ctype': 'controllable', 'lb': 3.0, 'ub': 5.0 }) add_cheese_bagel_ep = Episode(action='(add-cheese alice bagel)', duration={ 'ctype': 'controllable', 'lb': 1.0, 'ub': 2.0 }) mix_cereal_ep = Episode(action='(mix-cereal alice milk)', duration={ 'ctype': 'controllable', 'lb': 1.0, 'ub': 2.0 }) #Actions that the robot performs get_grounds_ep = Episode(action='(get grounds robot)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) get_juice_ep = Episode(action='(get juice robot)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) get_milk_ep = Episode(action='(get milk robot)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) get_cheese_ep = Episode(action='(get cheese robot)', duration={ 'ctype': 'controllable', 'lb': 0.5, 'ub': 1.0 }) prog = RMPyL() prog *= prog.sequence( prog.parallel( prog.observe( { 'name': 'observe-utensil', 'domain': ['Mug', 'Glass'], 'ctype': 'uncontrollable' }, get_mug_ep, get_glass_ep, id='observe-utensil-ep'), prog.decide( { 'name': 'choose-beverage-ingredient', 'domain': ['Grounds', 'Juice'], 'utility': [0, 0] }, get_grounds_ep, get_juice_ep, id='choose-beverage-ingredient-ep')), prog.observe( { 'name': 'observe-alice-drink', 'domain': ['Coffee', 'Juice'], 'ctype': 'uncontrollable' }, prog.sequence(make_cofee_ep, pour_cofee_ep), pour_juice_glass, id='observe-alice-drink-ep'), prog.parallel(prog.observe( { 'name': 'observe-food', 'domain': ['Bagel', 'Cereal'], 'ctype': 'uncontrollable' }, get_bagel_ep, get_cereal_ep, id='observe-food-ep'), prog.decide( { 'name': 'choose-food-ingredient', 'domain': ['Milk', 'Cheese'], 'utility': [0, 0] }, get_milk_ep, get_cheese_ep, id='choose-food-ingredient-ep'), id='parallel-food-ep'), prog.observe( { 'name': 'observe-alice-food', 'domain': ['Bagel', 'Cereal'], 'ctype': 'uncontrollable' }, prog.sequence(toast_bagel_ep, add_cheese_bagel_ep), mix_cereal_ep), id='breakfast-sequence') extra_tcs = [ TemporalConstraint( start=prog.episode_by_id('breakfast-sequence').start, end=prog.episode_by_id('observe-utensil-ep').start, ctype='controllable', lb=0.0, ub=0.0), TemporalConstraint( start=prog.episode_by_id('breakfast-sequence').start, end=prog.episode_by_id('choose-beverage-ingredient-ep').start, ctype='controllable', lb=0.2, ub=0.3), TemporalConstraint(start=prog.episode_by_id('parallel-food-ep').start, end=prog.episode_by_id('observe-food-ep').start, ctype='controllable', lb=0.0, ub=0.0), TemporalConstraint( start=prog.episode_by_id('parallel-food-ep').start, end=prog.episode_by_id('choose-food-ingredient-ep').start, ctype='controllable', lb=0.2, ub=0.3) ] for tc in extra_tcs: prog.add_temporal_constraint(tc) prog.add_overall_temporal_constraint(ctype='controllable', lb=0.0, ub=7.0) prog.simplify_temporal_constraints() return prog
def rmpyl_breakfast(): """ Example from (Levine & Williams, ICAPS14). """ #Actions that Alice performs get_mug_ep = Episode(action='(get alice mug)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) get_glass_ep = Episode(action='(get alice glass)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) make_cofee_ep = Episode(action='(make-coffee alice)',duration={'ctype':'controllable','lb':3.0,'ub':5.0}) pour_cofee_ep = Episode(action='(pour-coffee alice mug)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) pour_juice_glass = Episode(action='(pour-juice alice glass)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) get_bagel_ep = Episode(action='(get alice bagel)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) get_cereal_ep = Episode(action='(get alice cereal)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) toast_bagel_ep = Episode(action='(toast alice bagel)',duration={'ctype':'controllable','lb':3.0,'ub':5.0}) add_cheese_bagel_ep = Episode(action='(add-cheese alice bagel)',duration={'ctype':'controllable','lb':1.0,'ub':2.0}) mix_cereal_ep = Episode(action='(mix-cereal alice milk)',duration={'ctype':'controllable','lb':1.0,'ub':2.0}) #Actions that the robot performs get_grounds_ep = Episode(action='(get grounds robot)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) get_juice_ep = Episode(action='(get juice robot)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) get_milk_ep = Episode(action='(get milk robot)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) get_cheese_ep = Episode(action='(get cheese robot)',duration={'ctype':'controllable','lb':0.5,'ub':1.0}) prog = RMPyL() prog *= prog.sequence( prog.parallel( prog.observe( {'name':'observe-utensil','domain':['Mug','Glass'],'ctype':'uncontrollable'}, get_mug_ep, get_glass_ep, id='observe-utensil-ep'), prog.decide( {'name':'choose-beverage-ingredient','domain':['Grounds','Juice'],'utility':[0,0]}, get_grounds_ep, get_juice_ep, id='choose-beverage-ingredient-ep')), prog.observe( {'name':'observe-alice-drink','domain':['Coffee','Juice'],'ctype':'uncontrollable'}, prog.sequence(make_cofee_ep,pour_cofee_ep), pour_juice_glass, id='observe-alice-drink-ep'), prog.parallel( prog.observe( {'name':'observe-food','domain':['Bagel','Cereal'],'ctype':'uncontrollable'}, get_bagel_ep, get_cereal_ep, id='observe-food-ep'), prog.decide( {'name':'choose-food-ingredient','domain':['Milk','Cheese'],'utility':[0,0]}, get_milk_ep, get_cheese_ep, id='choose-food-ingredient-ep'), id='parallel-food-ep'), prog.observe( {'name':'observe-alice-food','domain':['Bagel','Cereal'],'ctype':'uncontrollable'}, prog.sequence(toast_bagel_ep,add_cheese_bagel_ep), mix_cereal_ep), id='breakfast-sequence') extra_tcs = [TemporalConstraint(start=prog.episode_by_id('breakfast-sequence').start, end=prog.episode_by_id('observe-utensil-ep').start, ctype='controllable',lb=0.0,ub=0.0), TemporalConstraint(start=prog.episode_by_id('breakfast-sequence').start, end=prog.episode_by_id('choose-beverage-ingredient-ep').start, ctype='controllable',lb=0.2,ub=0.3), TemporalConstraint(start=prog.episode_by_id('parallel-food-ep').start, end=prog.episode_by_id('observe-food-ep').start, ctype='controllable',lb=0.0,ub=0.0), TemporalConstraint(start=prog.episode_by_id('parallel-food-ep').start, end=prog.episode_by_id('choose-food-ingredient-ep').start, ctype='controllable',lb=0.2,ub=0.3)] for tc in extra_tcs: prog.add_temporal_constraint(tc) prog.add_overall_temporal_constraint(ctype='controllable',lb=0.0,ub=7.0) prog.simplify_temporal_constraints() return prog
pddl_episodes = [ Episode(id=make_episode_id(t, op), start=Event(name='start-of-%d-%s' % (t, op)), end=Event(name='end-of-%d-%s' % (t, op)), action=op, duration=rss_duration_model_func(op)) for t, op in enumerate(plan) ] prog.plan = prog.sequence(*pddl_episodes) # prog.add_overall_temporal_constraint(ctype='controllable',lb=0.0,ub=2000.0) #Adds temporal window to the plan for t, op in enumerate(plan): bounds, tc_type = rss_time_window_model_func(op) for tc in time_window_constraints( tc_type, bounds, prog.first_event, prog.episode_by_id(make_episode_id(t, op))): prog.add_temporal_constraint(tc) #Dummy episodes that enable transmissions activation_episodes = [] activation_tcs = [] global_start = Event(name='global-start') for op_name, op_param_dict in time_windows['time_windows'].items(): for arg_set, window_dict in op_param_dict.items(): for ev_type, time_bound in window_dict.items(): orb_ep_id = '%s_event_%s-%s' % (ev_type, op_name, '-'.join(arg_set)) activation_episodes.append( Episode(id=orb_ep_id, action='(%s)' % (orb_ep_id.replace('-', ' ')),