更新BT扩展算法的合并算法

This commit is contained in:
Caiyishuai 2023-12-15 22:11:46 +08:00
parent 9322bd1c7c
commit ffab81b2f4
17 changed files with 1000 additions and 9855 deletions

View File

@ -19,12 +19,12 @@ class Bahavior(ptree.behaviour.Behaviour):
'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup',
'Chips', 'NFCJuice', 'Bernachon', 'ADMilk', 'SpringWater'}
tables_for_guiding = {"QuietTable1","QuietTable2",
"BrightTable1","BrightTable2","BrightTable3","BrightTable4","BrightTable5","BrightTable6"
"BrightTable1","BrightTable2","BrightTable3","BrightTable4","BrightTable5","BrightTable6",
'CoffeeTable','WaterTable','Table1', 'Table2', 'Table3'}
# tables_for_placement = {'Bar', 'WaterTable', 'CoffeeTable'}
# all_object = {'Coffee', 'Water', 'Dessert', 'Softdrink', 'Yogurt'}
# tables_for_placement = {'Bar', 'CoffeeTable', 'Table2',"BrightTable6", 'WaterTable'}
# all_object = {'Coffee'}
num_of_obj_on_place={

View File

@ -21,7 +21,7 @@ class MoveTo(Act):
info['pre'] |= {f'Exist({arg})'}
info["add"] = {f'At(Robot,{arg})'}
info["del_set"] = {f'At(Robot,{place})' for place in cls.valid_args if place != arg}
info['cost'] = 5
info['cost'] = 10
# if arg!='Anything':
# info['cost']=5
# else:

View File

@ -18,7 +18,7 @@ class PickUp(Act):
info = {}
info["pre"] = {f'At(Robot,{arg})','Holding(Nothing)'}
info["add"] = {f'Holding({arg})'}
info["del_set"] = {f'Holding(Nothing)'}
info["del_set"] = {f'Holding(Nothing)',f'Exist({arg})'} #,
for place in cls.valid_args:
info["del_set"] |= {f'On({arg},{place})'}
info['cost'] = 2

View File

@ -84,6 +84,7 @@ class OptBTExpAlgorithm:
self.conditions_index=[]
self.verbose=verbose
self.goal=None
self.bt_merge = True
def clear(self):
self.bt = None
@ -169,7 +170,8 @@ class OptBTExpAlgorithm:
# 增加实时条件判断,满足条件就不再扩展
# if c <= self.scene.state["condition_set"]:
if c <= start:
self.merge_adjacent_conditions_stack()
if self.bt_merge:
self.merge_adjacent_conditions_stack()
return True
else:
subtree.add_child([copy.deepcopy(pair_node.act_leaf)])
@ -215,12 +217,96 @@ class OptBTExpAlgorithm:
# 把符合条件的动作节点都放到列表里
if self.verbose:
print("———— -- %s 符合条件放入列表,对应的c为 %s" % (actions[i].name,c_attr))
self.merge_adjacent_conditions_stack()
if self.bt_merge:
self.merge_adjacent_conditions_stack()
if self.verbose:
print("算法结束!\n")
return True
def merge_adjacent_conditions_stack(self):
# 只针对第一层合并,之后要考虑层层递归合并
bt = ControlBT(type='cond')
sbtree = ControlBT(type='?')
gc_node = Leaf(type='cond', content=self.goal, mincost=0) # 为了统一,都成对出现
sbtree.add_child([copy.deepcopy(gc_node)]) # 子树首先保留所扩展结
bt.add_child([sbtree])
parnode = copy.deepcopy(self.bt.children[0])
stack=[]
for child in parnode.children:
if isinstance(child, ControlBT) and child.type == '>':
if stack==[]:
stack.append(child)
continue
# 检查合并的条件,前面一个的条件包含了后面的条件,把包含部分提取出来
last_child = stack[-1]
set1 = last_child.children[0].content
set2 = child.children[0].content
# 如果后面的动作和前面的一样,删掉前面的
# 应该是两棵子树完全相同的情况,先暂时只判断动作
if set1>=set2 or set1<=set2:
if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf): # 将来这些地方都写成递归的
if last_child.children[1].content.name == child.children[1].content.name: # a1=a2
stack.pop()
stack.append(child)
continue
inter = set1 & set2
if inter!=set():
c1 = set1-set2
c2 = set2-set1
if c1!=set():
seq1 = ControlBT(type='>')
c1 = Leaf(type='cond', content=c1)
a1 = copy.deepcopy(last_child.children[1])
seq1.add_child(
[copy.deepcopy(c1), copy.deepcopy(a1)])
else:
seq1 = copy.deepcopy(last_child.children[1])
if c2!=set():
seq2 = ControlBT(type='>')
c2 = Leaf(type='cond', content=c2)
a2 = copy.deepcopy(child.children[1])
seq2.add_child(
[copy.deepcopy(c2), copy.deepcopy(a2)])
else:
seq2 = copy.deepcopy(child.children[1])
sel = ControlBT(type='?')
if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \
and last_child.children[1].content.name == child.children[1].content.name: # a1=a2
# 第三次优化合并
# 将来这些地方都写成递归的
sel.add_child([copy.deepcopy(c1), copy.deepcopy(c2),copy.deepcopy(last_child.children[1])])
else:
sel.add_child([copy.deepcopy(seq1), copy.deepcopy(seq2)])
tmp_tree = ControlBT(type='>')
c1 = Leaf(type='cond', content=inter)
tmp_tree.add_child(
[copy.deepcopy(c1), copy.deepcopy(sel)])
stack.pop()
stack.append(tmp_tree)
else:
stack.append(child)
for tree in stack:
sbtree.add_child([tree])
self.bt = copy.deepcopy(bt)
def merge_adjacent_conditions_stack_old(self):
# 递归合并
bt = ControlBT(type='cond')
sbtree = ControlBT(type='?')
@ -274,7 +360,6 @@ class OptBTExpAlgorithm:
sbtree.add_child([tree])
self.bt = copy.deepcopy(bt)
def merge_cond_node(self):
# bt合并====================================================
bt = ControlBT(type='cond')

View File

@ -254,6 +254,27 @@ create_sub_task
create_sub_task
{"goal":"On(Dessert,Bar)"}
把咖啡放到吧台上
好的
create_sub_task
{"goal":"On(Coffee,Bar)"}
把咖啡放到水桌
好的
create_sub_task
{"goal":"On(Coffee,Bar)"}
把咖啡放到6号桌
好的
create_sub_task
{"goal":"On(Coffee,BrightTable6)"}
把咖啡放到吧台上再拿一杯咖啡放到6号桌
好的
create_sub_task
{"goal":"On(Coffee,WaterTable),On(Coffee,BrightTable6)"}
打开空调并降低空调温度
好的,没问题
create_sub_task

View File

@ -19,7 +19,8 @@ def single_round(question, prefix=""):
"messages": [
{
"role": "system",
"content": "你是一个机器人服务员RoboWaiter. 你的职责是为顾客提供对话及具身服务。"
# "content": "你是一个机器人服务员RoboWaiter. 你的职责是为顾客提供对话及具身服务。"
"content": ""
# "content":
# """
# 你是一个熟悉行为树的工程师,你的职责是根据用户需求,为一个人型的机器人设计完成用户需求的行为树序列。
@ -46,10 +47,165 @@ def single_round(question, prefix=""):
if __name__ == '__main__':
question = '''
能做一杯咖啡吗咖啡就行
from actions import MoveTo (<obj>/<place>), PickUp (<obj>), PutDown (<obj>,<place>), PutDown(Anything,Anywhere), Make (<obj2>), Clean (<obj3>), Turn (<obj4>,<obj4state>)
from states import At (Robor,<obj>/<place>), On (<obj>,<place>), Holding (<obj>), Is (<obj4>,<obj4state>), Exist (<obj>)
obj=['Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup','Chips', 'NFCJuice', 'Bernachon', 'ADMilk', 'SpringWater']
place=['Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6']
obj2=['Coffee', 'Water', 'Dessert']
obj3=['Table1','Floor','Chairs']
obj4=['AC','TubeLight','HallLight','Curtain','ACTemperature']
obj4state=['On','Off','Up','Down']
currents_state={'At(Robot,Bar)', 'Is(AC,Off)',
'Exist(Yogurt)', 'Exist(BottledDrink)','Exist(Softdrink)','Exist(VacuumCup)',
'Holding(Coffee)',
'On(VacuumCup,Table2)', 'On(Yogurt,Bar)', 'On(BottledDrink,Bar)', 'On(Softdrink,Table1)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'}
def Put_SoftDrink_on_WaterTable(currents_state):
selector
cond On(Softdrink,WaterTable)
sequence
cond Holding(Softdrink)
selector
sequence
cond At(Robot,WaterTable)
act PutDown(Softdrink,WaterTable)
act MoveTo(WaterTable)
sequence
cond At(Robot,Softdrink)
selector
sequence
cond Holding(Nothing)
act PickUp(Softdrink)
act PutDown(Anything,Anywhere)
sequence
cond Exist(Softdrink)
act MoveTo(Softdrink)
currents_state={'At(Robot,Bar)', 'Is(AC,On)',
'Exist(Yogurt)', 'Exist(BottledDrink)',
'Exist(Chips)', 'Exist(VacuumCup)', 'Exist(ADMilk)',
'Holding(Nothing)',
'On(VacuumCup,Table2)', 'On(Chips,Bar)','On(ADMilk,Bar)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'}
def Put_Dessert_on_Bar(currents_state):
selector
cond On(Dessert,Bar)
sequence
cond Holding(Nothing)
act Make(Dessert)
currents_state={'At(Robot,Bar)', 'Is(AC,Off)',
'Exist(VacuumCup)','Exist(Coffee)',
'On(VacuumCup,Table2)', 'On(Coffee,CoffeeTable)',
'Holding(Nothing)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'}
def Put_Coffee_on_Bar(currents_state):
selector
cond On(Coffee,Bar)
sequence
cond Holding(Coffee)
selector
sequence
cond At(Robot,Bar)
act PutDown(Coffee,Bar)
act MoveTo(Bar)
sequence
cond At(Robot,Coffee)
selector
sequence
cond Holding(Nothing)
act PickUp(Coffee)
act PutDown(Anything,Anywhere)
sequence
cond Exist(Coffee)
cond Holding(Nothing)
act MoveTo(Coffee)
currents_state={'At(Robot,Bar)', 'Is(AC,Off)',
'Exist(VacuumCup)', 'Exist(Yogurt)',
'On(VacuumCup,Table2)',
'Holding(Yogurt)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'}
def Put_Coffee_on_Bar(currents_state):
selector
cond On(Coffee,Bar)
sequence
cond Holding(Coffee)
selector
sequence
cond At(Robot,Bar)
act PutDown(Coffee,Bar)
act MoveTo(Bar)
sequence
cond At(Robot,Coffee)
selector
sequence
cond Holding(Nothing)
act PickUp(Coffee)
act PutDown(Anything,Anywhere)
sequence
cond Exist(Coffee)
act MoveTo(Coffee)
sequence
cond Holding(Nothing)
act Make(Coffee)
sequence
cond At(Robot,Bar)
cond Holding(Yogurt)
act PutDown(Yogurt,Bar)
currents_state={'At(Robot,Bar)', 'Is(AC,Off)',
'Exist(Yogurt)', 'Exist(BottledDrink)','Exist(Softdrink)',
'Exist(Chips)', 'Exist(NFCJuice)', 'Exist(Bernachon)', 'Exist(ADMilk)', 'Exist(SpringWater)',
'Holding(Softdrink)',
'Exist(VacuumCup)', 'On(VacuumCup,Table2)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Clean)', 'Is(Floor,Clean)', 'Is(Chairs,Clean)'}
def Turn_AC_Temperature_Down(currents_state):
selector
cond Is(ACTemperature,Down)
sequence
cond Is(AC,On)
selector
sequence
cond Holding(Nothing)
act Turn(ACTemperature,Down)
act PutDown(Anything,Anywhere)
sequence
cond Is(AC,Off)
selector
sequence
cond Holding(Nothing)
act Turn(AC,On)
act PutDown(Anything,Anywhere)
currents_state={'At(Robot,Bar)', 'Is(AC,Off)',
'Exist(Yogurt)','Exist(VacuumCup)','Exist(Coffee)',
'Holding(Nothing)',
'On(Yogurt,Bar)','On(VacuumCup,Table2)','On(Coffee,CoffeeTable)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'}
def Put_one_Coffee_on_WaterTable_and_Put_another_Coffee_on_BrightTable6
(currents_state):
Please write the content of this function based on the content of currents_state
Please write the content of this function based on the content of currents_state
'''
import timeit
cur_time = time.time()
print(single_round(question, prefix='现在给出符合这句话要求的目标状态: '))
print(single_round(question))
# print(single_round(question, prefix='现在给出符合这句话要求的目标状态: '))
print(f"单次生成耗时:{time.time() - cur_time} s \n")

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 484 KiB

After

Width:  |  Height:  |  Size: 124 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 638 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -214,19 +214,39 @@ class Scene:
"chat_list": [], # 未处理的顾客的对话, (顾客的位置,顾客对话的内容)
"sub_goal_list": [], # 子目标列表
"status": None, # 仿真器中的观测信息,见下方详细解释
# "condition_set": {'At(Robot,Bar)', 'Is(AC,Off)',
# 'Exist(Yogurt)', 'Exist(BottledDrink)','Exist(Softdrink)',
# # 'On(Yogurt,Bar)','On(BottledDrink,Bar)',
# # 'Exist(Softdrink)', 'On(Softdrink,Table1)',
# 'Exist(Chips)', 'Exist(NFCJuice)', 'Exist(Bernachon)', 'Exist(ADMilk)', 'Exist(SpringWater)'
# 'Holding(Nothing)',
# # 'Holding(Yogurt)',
# 'Exist(VacuumCup)', 'On(VacuumCup,Table2)',
# 'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
# 'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'},
"condition_set": {'At(Robot,Bar)', 'Is(AC,Off)',
'Exist(Yogurt)', 'Exist(BottledDrink)','Exist(Softdrink)',
# 'On(Yogurt,Bar)','On(BottledDrink,Bar)',
# 'Exist(Softdrink)', 'On(Softdrink,Table1)',
'Exist(Chips)', 'Exist(NFCJuice)', 'Exist(Bernachon)', 'Exist(ADMilk)', 'Exist(SpringWater)',
'Exist(Yogurt)','Exist(VacuumCup)',
'Holding(Nothing)',
'On(Yogurt,Bar)','On(VacuumCup,Table2)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'},
# 'Holding(Nothing)',
'Holding(Coffee)',
# "condition_set": {'At(Robot,Bar)', 'Is(AC,Off)',
# 'Exist(VacuumCup)','Exist(Coffee)',
# 'On(VacuumCup,Table2)', 'On(Coffee,CoffeeTable)',
# 'Holding(Nothing)',
# 'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
# 'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'},
'Exist(VacuumCup)', 'On(VacuumCup,Table2)',
'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)',
'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'},
"obj_mem": {},
# "condition_set": {'At(Robot,Bar)', 'Is(AC,Off)',
# 'Exist(Yogurt)', 'Exist(VacuumCup)', 'Exist(Coffee)',
# 'Holding(Nothing)',
# 'On(Yogurt,Bar)', 'On(VacuumCup,Table2)', 'On(Coffee,CoffeeTable)',
# 'Is(HallLight,Off)', 'Is(TubeLight,On)',
# 'Is(Curtain,On)',
# 'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'},
"obj_mem": {},
"customer_mem": {},
"served_mem": {},
"greeted_customers": set(),
@ -274,7 +294,7 @@ class Scene:
self.is_nav_walk = False
self.bt_algo_opt = False
self.bt_algo_opt = True
file_name = os.path.join(root_path,'robowaiter/algos/navigator/map_5.pkl')
if os.path.exists(file_name):

View File

@ -1,23 +1,30 @@
selector
sequence
cond Chatting()
act DealChat()
sequence
cond HasSubTask()
selector
sequence
act SubTaskPlaceHolder()
sequence
cond FocusingCustomer()
act ServeCustomer()
sequence
cond NewCustomer()
selector
cond At(Robot,Bar)
act MoveTo(Bar)
act GreetCustomer()
sequence
cond NeedExplore()
act ExploreEnv()
sequence
cond AnomalyDetected()
act ResolveAnomaly()
cond At(Robot, Coffee)
selector
sequence
cond Holding(Nothing)
act PickUp(Coffee)
act PutDown(Anything, Anywhere)
selector
sequence
cond Holding(Coffee)
cond At(Robot, WaterTable)
act PutDown(Coffee, WaterTable)
act MoveTo(WaterTable)
sequence
cond At(Robot, Coffee)
selector
sequence
cond Holding(Nothing)
act PickUp(Coffee)
act PutDown(Anything, Anywhere)
selector
sequence
cond Holding(Coffee)
cond At(Robot, BrightTable6)
act PutDown(Coffee, BrightTable6)
act MoveTo(BrightTable6)

View File

@ -2,32 +2,38 @@ selector
{
sequence
{
cond Chatting()
act DealChat()
} sequence
{
cond HasSubTask()
sequence
{
act SubTaskPlaceHolder()
} } sequence
{
cond FocusingCustomer()
act ServeCustomer()
} sequence
{
cond NewCustomer()
cond At(Robot, Coffee)
selector
{
cond At(Robot,Bar)
act MoveTo(Bar)
} act GreetCustomer()
} sequence
sequence
{
cond NeedExplore()
act ExploreEnv()
} sequence
cond Holding(Nothing)
act PickUp(Coffee)
} act PutDown(Anything, Anywhere)
} selector
{
cond AnomalyDetected()
act ResolveAnomaly()
}}
sequence
{
cond Holding(Coffee)
cond At(Robot, WaterTable)
act PutDown(Coffee, WaterTable)
} act MoveTo(WaterTable)
} } sequence
{
cond At(Robot, Coffee)
selector
{
sequence
{
cond Holding(Nothing)
act PickUp(Coffee)
} act PutDown(Anything, Anywhere)
} selector
{
sequence
{
cond Holding(Coffee)
cond At(Robot, BrightTable6)
act PutDown(Coffee, BrightTable6)
} act MoveTo(BrightTable6)
} }}

View File

@ -16,5 +16,5 @@ if __name__ == '__main__':
render_dot_tree(bt.root,name="test")
render_dot_tree(bt.root,name="test",png_only = False)
# build and tick

View File

@ -3,19 +3,57 @@ ordering=out;
graph [fontname="times-roman"];
node [fontname="times-roman"];
edge [fontname="times-roman"];
"c9a8671e-b0b8-4587-a4de-a094fd678334" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=octagon, style=filled, width=0.01];
"bc597ff6-b3cb-4573-9dea-944fdb38d045" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled];
"c9a8671e-b0b8-4587-a4de-a094fd678334" -> "bc597ff6-b3cb-4573-9dea-944fdb38d045";
"a8e26121-f5cc-4ba5-b98e-86bd84de06d6" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"c9a8671e-b0b8-4587-a4de-a094fd678334" -> "a8e26121-f5cc-4ba5-b98e-86bd84de06d6";
"676d8bda-2c30-44a5-bca2-ade68761403a" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Is(Curtain,Off)", shape=ellipse, style=filled];
"a8e26121-f5cc-4ba5-b98e-86bd84de06d6" -> "676d8bda-2c30-44a5-bca2-ade68761403a";
"c3d096cf-f848-46a3-9497-5398614798e8" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="Turn(Curtain,On)", shape=box, style=filled];
"a8e26121-f5cc-4ba5-b98e-86bd84de06d6" -> "c3d096cf-f848-46a3-9497-5398614798e8";
"400b4104-ff96-4d64-89b2-49dc6e4e3cbd" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"c9a8671e-b0b8-4587-a4de-a094fd678334" -> "400b4104-ff96-4d64-89b2-49dc6e4e3cbd";
"3fc48afc-1cef-45f5-826d-2571d7979a2f" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Is(AC,Off)", shape=ellipse, style=filled];
"400b4104-ff96-4d64-89b2-49dc6e4e3cbd" -> "3fc48afc-1cef-45f5-826d-2571d7979a2f";
"47af4df0-8811-45a5-95e2-f0fc9458ddfd" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="Turn(AC,On)", shape=box, style=filled];
"400b4104-ff96-4d64-89b2-49dc6e4e3cbd" -> "47af4df0-8811-45a5-95e2-f0fc9458ddfd";
"c681805a-96e1-4a3d-a38d-0bfca162692b" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01];
"e878636e-ab91-45b3-8d25-1712a9b919ab" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"c681805a-96e1-4a3d-a38d-0bfca162692b" -> "e878636e-ab91-45b3-8d25-1712a9b919ab";
"e88e510b-5495-4aa1-95cd-f95b3b4e50dc" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled];
"e878636e-ab91-45b3-8d25-1712a9b919ab" -> "e88e510b-5495-4aa1-95cd-f95b3b4e50dc";
"292edbec-e8dc-44df-a80c-7dd5b6dd6692" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01];
"e878636e-ab91-45b3-8d25-1712a9b919ab" -> "292edbec-e8dc-44df-a80c-7dd5b6dd6692";
"8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"292edbec-e8dc-44df-a80c-7dd5b6dd6692" -> "8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b";
"65f29fbc-02c3-4015-98bf-e71d16a78cbb" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled];
"8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b" -> "65f29fbc-02c3-4015-98bf-e71d16a78cbb";
"c503211c-ab75-4671-a6ca-2f66518be485" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled];
"8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b" -> "c503211c-ab75-4671-a6ca-2f66518be485";
"27760c0d-aa85-437c-ac87-564d573f6d3d" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled];
"292edbec-e8dc-44df-a80c-7dd5b6dd6692" -> "27760c0d-aa85-437c-ac87-564d573f6d3d";
"94f578bf-0c4b-4614-aacc-d73ca0996d2c" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01];
"e878636e-ab91-45b3-8d25-1712a9b919ab" -> "94f578bf-0c4b-4614-aacc-d73ca0996d2c";
"5a162890-11de-41d8-9954-ba17ccf166c4" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"94f578bf-0c4b-4614-aacc-d73ca0996d2c" -> "5a162890-11de-41d8-9954-ba17ccf166c4";
"296bae80-a542-4fde-87b9-b030340caa1d" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled];
"5a162890-11de-41d8-9954-ba17ccf166c4" -> "296bae80-a542-4fde-87b9-b030340caa1d";
"cba60b1e-308f-4f5a-939c-28bba802bca5" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,WaterTable)", shape=ellipse, style=filled];
"5a162890-11de-41d8-9954-ba17ccf166c4" -> "cba60b1e-308f-4f5a-939c-28bba802bca5";
"93924025-e88f-47ec-90e4-c53bbc3df60e" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,WaterTable)", shape=box, style=filled];
"5a162890-11de-41d8-9954-ba17ccf166c4" -> "93924025-e88f-47ec-90e4-c53bbc3df60e";
"191ca7d5-a98c-429f-b040-66d210c30bdd" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(WaterTable)", shape=box, style=filled];
"94f578bf-0c4b-4614-aacc-d73ca0996d2c" -> "191ca7d5-a98c-429f-b040-66d210c30bdd";
"5461e129-ef05-4848-9107-2617c82b3566" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"c681805a-96e1-4a3d-a38d-0bfca162692b" -> "5461e129-ef05-4848-9107-2617c82b3566";
"fd31940a-4e40-433d-8165-c9dd302fae62" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled];
"5461e129-ef05-4848-9107-2617c82b3566" -> "fd31940a-4e40-433d-8165-c9dd302fae62";
"0a9876b0-1ff9-4f96-b7a8-8257a3928f62" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01];
"5461e129-ef05-4848-9107-2617c82b3566" -> "0a9876b0-1ff9-4f96-b7a8-8257a3928f62";
"052d5a92-c6b4-483d-9cef-41745df61ff9" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"0a9876b0-1ff9-4f96-b7a8-8257a3928f62" -> "052d5a92-c6b4-483d-9cef-41745df61ff9";
"c8462c00-d129-4eba-a0b4-ad6a819e34e8" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled];
"052d5a92-c6b4-483d-9cef-41745df61ff9" -> "c8462c00-d129-4eba-a0b4-ad6a819e34e8";
"5a944a18-ea71-4cbe-a04e-675d955b1b1f" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled];
"052d5a92-c6b4-483d-9cef-41745df61ff9" -> "5a944a18-ea71-4cbe-a04e-675d955b1b1f";
"bfea3ed6-08c4-4fd3-9aa7-994f4be28953" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled];
"0a9876b0-1ff9-4f96-b7a8-8257a3928f62" -> "bfea3ed6-08c4-4fd3-9aa7-994f4be28953";
"c719600f-4033-418f-8608-5c808481d1aa" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01];
"5461e129-ef05-4848-9107-2617c82b3566" -> "c719600f-4033-418f-8608-5c808481d1aa";
"c9d1af42-f394-4c52-9e7b-32d46487c708" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01];
"c719600f-4033-418f-8608-5c808481d1aa" -> "c9d1af42-f394-4c52-9e7b-32d46487c708";
"84ecc165-efa0-4747-8ce9-64bf6ac557a2" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled];
"c9d1af42-f394-4c52-9e7b-32d46487c708" -> "84ecc165-efa0-4747-8ce9-64bf6ac557a2";
"8d3d2c3f-1f52-4742-bb03-a02d578134de" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,BrightTable6)", shape=ellipse, style=filled];
"c9d1af42-f394-4c52-9e7b-32d46487c708" -> "8d3d2c3f-1f52-4742-bb03-a02d578134de";
"b5bcfc9e-f0ad-458b-ba99-19bae2fc6b12" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,BrightTable6)", shape=box, style=filled];
"c9d1af42-f394-4c52-9e7b-32d46487c708" -> "b5bcfc9e-f0ad-458b-ba99-19bae2fc6b12";
"5685125a-34f9-40cd-be0c-b7674970c01b" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(BrightTable6)", shape=box, style=filled];
"c719600f-4033-418f-8608-5c808481d1aa" -> "5685125a-34f9-40cd-be0c-b7674970c01b";
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 131 KiB

View File

@ -4,100 +4,328 @@
<!-- Generated by graphviz version 9.0.0 (20230911.1827)
-->
<!-- Title: pastafarianism Pages: 1 -->
<svg width="716pt" height="220pt"
viewBox="0.00 0.00 715.70 219.87" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 215.87)">
<svg width="2460pt" height="417pt"
viewBox="0.00 0.00 2460.20 416.87" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 412.87)">
<title>pastafarianism</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-215.87 711.7,-215.87 711.7,4 -4,4"/>
<!-- c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334 -->
<polygon fill="white" stroke="none" points="-4,4 -4,-412.87 2456.2,-412.87 2456.2,4 -4,4"/>
<!-- c681805a&#45;96e1&#45;4a3d&#45;a38d&#45;0bfca162692b -->
<g id="node1" class="node">
<title>c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334</title>
<polygon fill="orange" stroke="black" points="383.11,-178.04 383.11,-197.85 345.67,-211.87 292.73,-211.87 255.29,-197.85 255.29,-178.04 292.73,-164.03 345.67,-164.03 383.11,-178.04"/>
<text text-anchor="middle" x="319.2" y="-180.57" font-family="Times New Roman,serif" font-size="20.00">Selector</text>
<title>c681805a&#45;96e1&#45;4a3d&#45;a38d&#45;0bfca162692b</title>
<polygon fill="cyan" stroke="black" points="848.2,-408.87 764.7,-377.62 848.2,-346.37 931.7,-377.62 848.2,-408.87"/>
<text text-anchor="middle" x="848.2" y="-370.24" font-family="Times New Roman,serif" font-size="20.00">Selector</text>
</g>
<!-- bc597ff6&#45;b3cb&#45;4573&#45;9dea&#45;944fdb38d045 -->
<!-- e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab -->
<g id="node2" class="node">
<title>bc597ff6&#45;b3cb&#45;4573&#45;9dea&#45;944fdb38d045</title>
<ellipse fill="yellow" stroke="black" cx="114.2" cy="-104.11" rx="114.2" ry="22.1"/>
<text text-anchor="middle" x="114.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Holding(Nothing)</text>
<title>e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab</title>
<polygon fill="orange" stroke="black" points="750.72,-276.54 750.72,-296.35 708.24,-310.37 648.16,-310.37 605.68,-296.35 605.68,-276.54 648.16,-262.53 708.24,-262.53 750.72,-276.54"/>
<text text-anchor="middle" x="678.2" y="-279.07" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334&#45;&gt;bc597ff6&#45;b3cb&#45;4573&#45;9dea&#45;944fdb38d045 -->
<!-- c681805a&#45;96e1&#45;4a3d&#45;a38d&#45;0bfca162692b&#45;&gt;e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab -->
<g id="edge1" class="edge">
<title>c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334&#45;&gt;bc597ff6&#45;b3cb&#45;4573&#45;9dea&#45;944fdb38d045</title>
<path fill="none" stroke="black" d="M276.22,-169.79C246.35,-157.87 206.15,-141.82 173.26,-128.69"/>
<polygon fill="black" stroke="black" points="174.86,-125.56 164.27,-125.1 172.26,-132.06 174.86,-125.56"/>
<title>c681805a&#45;96e1&#45;4a3d&#45;a38d&#45;0bfca162692b&#45;&gt;e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab</title>
<path fill="none" stroke="black" d="M814.2,-358.78C789.26,-345.7 755.03,-327.75 727.14,-313.12"/>
<polygon fill="black" stroke="black" points="729.01,-310.15 718.53,-308.6 725.76,-316.35 729.01,-310.15"/>
</g>
<!-- a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6 -->
<!-- 5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566 -->
<g id="node15" class="node">
<title>5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566</title>
<polygon fill="orange" stroke="black" points="1467.72,-276.54 1467.72,-296.35 1425.24,-310.37 1365.16,-310.37 1322.68,-296.35 1322.68,-276.54 1365.16,-262.53 1425.24,-262.53 1467.72,-276.54"/>
<text text-anchor="middle" x="1395.2" y="-279.07" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- c681805a&#45;96e1&#45;4a3d&#45;a38d&#45;0bfca162692b&#45;&gt;5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566 -->
<g id="edge14" class="edge">
<title>c681805a&#45;96e1&#45;4a3d&#45;a38d&#45;0bfca162692b&#45;&gt;5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566</title>
<path fill="none" stroke="black" d="M905.45,-367.28C1003.84,-351.24 1205.19,-318.42 1316.64,-300.25"/>
<polygon fill="black" stroke="black" points="1316.99,-303.74 1326.3,-298.68 1315.86,-296.83 1316.99,-303.74"/>
</g>
<!-- e88e510b&#45;5495&#45;4aa1&#45;95cd&#45;f95b3b4e50dc -->
<g id="node3" class="node">
<title>a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6</title>
<polygon fill="orange" stroke="black" points="391.72,-94.2 391.72,-114.02 349.24,-128.03 289.16,-128.03 246.68,-114.02 246.68,-94.2 289.16,-80.19 349.24,-80.19 391.72,-94.2"/>
<text text-anchor="middle" x="319.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
<title>e88e510b&#45;5495&#45;4aa1&#45;95cd&#45;f95b3b4e50dc</title>
<ellipse fill="yellow" stroke="black" cx="360.2" cy="-195.28" rx="113.14" ry="22.1"/>
<text text-anchor="middle" x="360.2" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">At(Robot,Coffee)</text>
</g>
<!-- c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334&#45;&gt;a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6 -->
<!-- e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab&#45;&gt;e88e510b&#45;5495&#45;4aa1&#45;95cd&#45;f95b3b4e50dc -->
<g id="edge2" class="edge">
<title>c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334&#45;&gt;a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6</title>
<path fill="none" stroke="black" d="M319.2,-163.72C319.2,-156.29 319.2,-147.89 319.2,-139.83"/>
<polygon fill="black" stroke="black" points="322.7,-139.92 319.2,-129.92 315.7,-139.92 322.7,-139.92"/>
<title>e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab&#45;&gt;e88e510b&#45;5495&#45;4aa1&#45;95cd&#45;f95b3b4e50dc</title>
<path fill="none" stroke="black" d="M623.89,-270.22C571.65,-255.57 492.25,-233.31 434.23,-217.04"/>
<polygon fill="black" stroke="black" points="435.33,-213.71 424.75,-214.38 433.44,-220.45 435.33,-213.71"/>
</g>
<!-- 400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd -->
<g id="node6" class="node">
<title>400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd</title>
<polygon fill="orange" stroke="black" points="562.72,-94.2 562.72,-114.02 520.24,-128.03 460.16,-128.03 417.68,-114.02 417.68,-94.2 460.16,-80.19 520.24,-80.19 562.72,-94.2"/>
<text text-anchor="middle" x="490.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334&#45;&gt;400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd -->
<g id="edge5" class="edge">
<title>c9a8671e&#45;b0b8&#45;4587&#45;a4de&#45;a094fd678334&#45;&gt;400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd</title>
<path fill="none" stroke="black" d="M358,-168.38C382.01,-156.89 413.11,-142.01 439.11,-129.56"/>
<polygon fill="black" stroke="black" points="440.29,-132.88 447.8,-125.4 437.27,-126.56 440.29,-132.88"/>
</g>
<!-- 676d8bda&#45;2c30&#45;44a5&#45;bca2&#45;ade68761403a -->
<!-- 292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692 -->
<g id="node4" class="node">
<title>676d8bda&#45;2c30&#45;44a5&#45;bca2&#45;ade68761403a</title>
<ellipse fill="yellow" stroke="black" cx="124.2" cy="-22.1" rx="96.17" ry="22.1"/>
<text text-anchor="middle" x="124.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Is(Curtain,Off)</text>
<title>292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692</title>
<polygon fill="cyan" stroke="black" points="575.2,-226.53 491.7,-195.28 575.2,-164.03 658.7,-195.28 575.2,-226.53"/>
<text text-anchor="middle" x="575.2" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">Selector</text>
</g>
<!-- a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6&#45;&gt;676d8bda&#45;2c30&#45;44a5&#45;bca2&#45;ade68761403a -->
<!-- e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab&#45;&gt;292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692 -->
<g id="edge3" class="edge">
<title>a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6&#45;&gt;676d8bda&#45;2c30&#45;44a5&#45;bca2&#45;ade68761403a</title>
<path fill="none" stroke="black" d="M274.46,-84.75C246.5,-73.28 210.25,-58.41 180.36,-46.14"/>
<polygon fill="black" stroke="black" points="182.06,-43.06 171.48,-42.5 179.4,-49.53 182.06,-43.06"/>
<title>e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab&#45;&gt;292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692</title>
<path fill="none" stroke="black" d="M651.4,-262.25C638.18,-250.8 622.1,-236.88 608.12,-224.78"/>
<polygon fill="black" stroke="black" points="610.74,-222.42 600.88,-218.52 606.15,-227.71 610.74,-222.42"/>
</g>
<!-- c3d096cf&#45;f848&#45;46a3&#45;9497&#45;5398614798e8 -->
<!-- 94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c -->
<g id="node9" class="node">
<title>94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c</title>
<polygon fill="cyan" stroke="black" points="780.2,-226.53 696.7,-195.28 780.2,-164.03 863.7,-195.28 780.2,-226.53"/>
<text text-anchor="middle" x="780.2" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">Selector</text>
</g>
<!-- e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab&#45;&gt;94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c -->
<g id="edge8" class="edge">
<title>e878636e&#45;ab91&#45;45b3&#45;8d25&#45;1712a9b919ab&#45;&gt;94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c</title>
<path fill="none" stroke="black" d="M704.73,-262.25C717.61,-250.99 733.22,-237.35 746.89,-225.4"/>
<polygon fill="black" stroke="black" points="749.18,-228.04 754.41,-218.82 744.58,-222.77 749.18,-228.04"/>
</g>
<!-- 8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b -->
<g id="node5" class="node">
<title>c3d096cf&#45;f848&#45;46a3&#45;9497&#45;5398614798e8</title>
<polygon fill="lawngreen" stroke="black" points="399.57,-40.1 238.82,-40.1 238.82,-4.1 399.57,-4.1 399.57,-40.1"/>
<text text-anchor="middle" x="319.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Turn(Curtain,On)</text>
<title>8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b</title>
<polygon fill="orange" stroke="black" points="390.72,-94.2 390.72,-114.02 348.24,-128.03 288.16,-128.03 245.68,-114.02 245.68,-94.2 288.16,-80.19 348.24,-80.19 390.72,-94.2"/>
<text text-anchor="middle" x="318.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6&#45;&gt;c3d096cf&#45;f848&#45;46a3&#45;9497&#45;5398614798e8 -->
<!-- 292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692&#45;&gt;8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b -->
<g id="edge4" class="edge">
<title>a8e26121&#45;f5cc&#45;4ba5&#45;b98e&#45;86bd84de06d6&#45;&gt;c3d096cf&#45;f848&#45;46a3&#45;9497&#45;5398614798e8</title>
<path fill="none" stroke="black" d="M319.2,-79.97C319.2,-71.24 319.2,-61.2 319.2,-52.01"/>
<polygon fill="black" stroke="black" points="322.7,-52.11 319.2,-42.11 315.7,-52.11 322.7,-52.11"/>
<title>292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692&#45;&gt;8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b</title>
<path fill="none" stroke="black" d="M532.76,-179.56C490.57,-164.92 425.46,-142.33 378.03,-125.87"/>
<polygon fill="black" stroke="black" points="379.31,-122.61 368.72,-122.64 377.02,-129.23 379.31,-122.61"/>
</g>
<!-- 3fc48afc&#45;1cef&#45;45f5&#45;826d&#45;2571d7979a2f -->
<g id="node7" class="node">
<title>3fc48afc&#45;1cef&#45;45f5&#45;826d&#45;2571d7979a2f</title>
<ellipse fill="yellow" stroke="black" cx="490.2" cy="-22.1" rx="72.3" ry="22.1"/>
<text text-anchor="middle" x="490.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Is(AC,Off)</text>
</g>
<!-- 400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd&#45;&gt;3fc48afc&#45;1cef&#45;45f5&#45;826d&#45;2571d7979a2f -->
<g id="edge6" class="edge">
<title>400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd&#45;&gt;3fc48afc&#45;1cef&#45;45f5&#45;826d&#45;2571d7979a2f</title>
<path fill="none" stroke="black" d="M490.2,-79.97C490.2,-72.46 490.2,-63.99 490.2,-55.92"/>
<polygon fill="black" stroke="black" points="493.7,-56.06 490.2,-46.06 486.7,-56.06 493.7,-56.06"/>
</g>
<!-- 47af4df0&#45;8811&#45;45a5&#45;95e2&#45;f0fc9458ddfd -->
<!-- 27760c0d&#45;aa85&#45;437c&#45;ac87&#45;564d573f6d3d -->
<g id="node8" class="node">
<title>47af4df0&#45;8811&#45;45a5&#45;95e2&#45;f0fc9458ddfd</title>
<polygon fill="lawngreen" stroke="black" points="707.7,-40.1 580.7,-40.1 580.7,-4.1 707.7,-4.1 707.7,-40.1"/>
<text text-anchor="middle" x="644.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Turn(AC,On)</text>
<title>27760c0d&#45;aa85&#45;437c&#45;ac87&#45;564d573f6d3d</title>
<polygon fill="lawngreen" stroke="black" points="690.07,-122.11 418.32,-122.11 418.32,-86.11 690.07,-86.11 690.07,-122.11"/>
<text text-anchor="middle" x="554.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">PutDown(Anything,Anywhere)</text>
</g>
<!-- 400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd&#45;&gt;47af4df0&#45;8811&#45;45a5&#45;95e2&#45;f0fc9458ddfd -->
<!-- 292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692&#45;&gt;27760c0d&#45;aa85&#45;437c&#45;ac87&#45;564d573f6d3d -->
<g id="edge7" class="edge">
<title>400b4104&#45;ff96&#45;4d64&#45;89b2&#45;49dc6e4e3cbd&#45;&gt;47af4df0&#45;8811&#45;45a5&#45;95e2&#45;f0fc9458ddfd</title>
<path fill="none" stroke="black" d="M529.46,-82.71C551.25,-71.39 578.4,-57.28 600.82,-45.64"/>
<polygon fill="black" stroke="black" points="602.15,-48.89 609.41,-41.17 598.92,-42.68 602.15,-48.89"/>
<title>292edbec&#45;e8dc&#45;44df&#45;a80c&#45;7dd5b6dd6692&#45;&gt;27760c0d&#45;aa85&#45;437c&#45;ac87&#45;564d573f6d3d</title>
<path fill="none" stroke="black" d="M568.55,-166.07C566.11,-155.69 563.34,-143.93 560.89,-133.53"/>
<polygon fill="black" stroke="black" points="564.34,-132.92 558.64,-123.99 557.53,-134.53 564.34,-132.92"/>
</g>
<!-- 65f29fbc&#45;02c3&#45;4015&#45;98bf&#45;e71d16a78cbb -->
<g id="node6" class="node">
<title>65f29fbc&#45;02c3&#45;4015&#45;98bf&#45;e71d16a78cbb</title>
<ellipse fill="yellow" stroke="black" cx="114.2" cy="-22.1" rx="114.2" ry="22.1"/>
<text text-anchor="middle" x="114.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Holding(Nothing)</text>
</g>
<!-- 8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b&#45;&gt;65f29fbc&#45;02c3&#45;4015&#45;98bf&#45;e71d16a78cbb -->
<g id="edge5" class="edge">
<title>8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b&#45;&gt;65f29fbc&#45;02c3&#45;4015&#45;98bf&#45;e71d16a78cbb</title>
<path fill="none" stroke="black" d="M272.16,-85.06C243.13,-73.67 205.33,-58.84 173.99,-46.55"/>
<polygon fill="black" stroke="black" points="175.63,-43.43 165.04,-43.04 173.07,-49.95 175.63,-43.43"/>
</g>
<!-- c503211c&#45;ab75&#45;4671&#45;a6ca&#45;2f66518be485 -->
<g id="node7" class="node">
<title>c503211c&#45;ab75&#45;4671&#45;a6ca&#45;2f66518be485</title>
<polygon fill="lawngreen" stroke="black" points="389.95,-40.1 246.45,-40.1 246.45,-4.1 389.95,-4.1 389.95,-40.1"/>
<text text-anchor="middle" x="318.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">PickUp(Coffee)</text>
</g>
<!-- 8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b&#45;&gt;c503211c&#45;ab75&#45;4671&#45;a6ca&#45;2f66518be485 -->
<g id="edge6" class="edge">
<title>8d44bfa1&#45;3a4e&#45;4ae7&#45;94bb&#45;25d70caf0b4b&#45;&gt;c503211c&#45;ab75&#45;4671&#45;a6ca&#45;2f66518be485</title>
<path fill="none" stroke="black" d="M318.2,-79.97C318.2,-71.24 318.2,-61.2 318.2,-52.01"/>
<polygon fill="black" stroke="black" points="321.7,-52.11 318.2,-42.11 314.7,-52.11 321.7,-52.11"/>
</g>
<!-- 5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4 -->
<g id="node10" class="node">
<title>5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4</title>
<polygon fill="orange" stroke="black" points="852.72,-94.2 852.72,-114.02 810.24,-128.03 750.16,-128.03 707.68,-114.02 707.68,-94.2 750.16,-80.19 810.24,-80.19 852.72,-94.2"/>
<text text-anchor="middle" x="780.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- 94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c&#45;&gt;5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4 -->
<g id="edge9" class="edge">
<title>94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c&#45;&gt;5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4</title>
<path fill="none" stroke="black" d="M780.2,-163.59C780.2,-155.97 780.2,-147.74 780.2,-139.93"/>
<polygon fill="black" stroke="black" points="783.7,-140.04 780.2,-130.04 776.7,-140.04 783.7,-140.04"/>
</g>
<!-- 191ca7d5&#45;a98c&#45;429f&#45;b040&#45;66d210c30bdd -->
<g id="node14" class="node">
<title>191ca7d5&#45;a98c&#45;429f&#45;b040&#45;66d210c30bdd</title>
<polygon fill="lawngreen" stroke="black" points="1065.45,-122.11 870.95,-122.11 870.95,-86.11 1065.45,-86.11 1065.45,-122.11"/>
<text text-anchor="middle" x="968.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">MoveTo(WaterTable)</text>
</g>
<!-- 94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c&#45;&gt;191ca7d5&#45;a98c&#45;429f&#45;b040&#45;66d210c30bdd -->
<g id="edge13" class="edge">
<title>94f578bf&#45;0c4b&#45;4614&#45;aacc&#45;d73ca0996d2c&#45;&gt;191ca7d5&#45;a98c&#45;429f&#45;b040&#45;66d210c30bdd</title>
<path fill="none" stroke="black" d="M816.45,-177.09C846.29,-162.93 888.82,-142.76 921.27,-127.37"/>
<polygon fill="black" stroke="black" points="922.52,-130.65 930.05,-123.2 919.52,-124.33 922.52,-130.65"/>
</g>
<!-- 296bae80&#45;a542&#45;4fde&#45;87b9&#45;b030340caa1d -->
<g id="node11" class="node">
<title>296bae80&#45;a542&#45;4fde&#45;87b9&#45;b030340caa1d</title>
<ellipse fill="yellow" stroke="black" cx="513.2" cy="-22.1" rx="105.71" ry="22.1"/>
<text text-anchor="middle" x="513.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Holding(Coffee)</text>
</g>
<!-- 5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4&#45;&gt;296bae80&#45;a542&#45;4fde&#45;87b9&#45;b030340caa1d -->
<g id="edge10" class="edge">
<title>5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4&#45;&gt;296bae80&#45;a542&#45;4fde&#45;87b9&#45;b030340caa1d</title>
<path fill="none" stroke="black" d="M727.45,-87.3C686.17,-74.93 628.39,-57.62 583.24,-44.09"/>
<polygon fill="black" stroke="black" points="584.38,-40.77 573.79,-41.26 582.37,-47.48 584.38,-40.77"/>
</g>
<!-- cba60b1e&#45;308f&#45;4f5a&#45;939c&#45;28bba802bca5 -->
<g id="node12" class="node">
<title>cba60b1e&#45;308f&#45;4f5a&#45;939c&#45;28bba802bca5</title>
<ellipse fill="yellow" stroke="black" cx="780.2" cy="-22.1" rx="142.84" ry="22.1"/>
<text text-anchor="middle" x="780.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">At(Robot,WaterTable)</text>
</g>
<!-- 5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4&#45;&gt;cba60b1e&#45;308f&#45;4f5a&#45;939c&#45;28bba802bca5 -->
<g id="edge11" class="edge">
<title>5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4&#45;&gt;cba60b1e&#45;308f&#45;4f5a&#45;939c&#45;28bba802bca5</title>
<path fill="none" stroke="black" d="M780.2,-79.97C780.2,-72.46 780.2,-63.99 780.2,-55.92"/>
<polygon fill="black" stroke="black" points="783.7,-56.06 780.2,-46.06 776.7,-56.06 783.7,-56.06"/>
</g>
<!-- 93924025&#45;e88f&#45;47ec&#45;90e4&#45;c53bbc3df60e -->
<g id="node13" class="node">
<title>93924025&#45;e88f&#45;47ec&#45;90e4&#45;c53bbc3df60e</title>
<polygon fill="lawngreen" stroke="black" points="1203.2,-40.1 941.2,-40.1 941.2,-4.1 1203.2,-4.1 1203.2,-40.1"/>
<text text-anchor="middle" x="1072.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">PutDown(Coffee,WaterTable)</text>
</g>
<!-- 5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4&#45;&gt;93924025&#45;e88f&#45;47ec&#45;90e4&#45;c53bbc3df60e -->
<g id="edge12" class="edge">
<title>5a162890&#45;11de&#45;41d8&#45;9954&#45;ba17ccf166c4&#45;&gt;93924025&#45;e88f&#45;47ec&#45;90e4&#45;c53bbc3df60e</title>
<path fill="none" stroke="black" d="M834.44,-87.9C843.7,-85.31 853.22,-82.67 862.2,-80.19 906.81,-67.9 956.81,-54.29 996.82,-43.45"/>
<polygon fill="black" stroke="black" points="997.63,-46.86 1006.37,-40.87 995.8,-40.1 997.63,-46.86"/>
</g>
<!-- fd31940a&#45;4e40&#45;433d&#45;8165&#45;c9dd302fae62 -->
<g id="node16" class="node">
<title>fd31940a&#45;4e40&#45;433d&#45;8165&#45;c9dd302fae62</title>
<ellipse fill="yellow" stroke="black" cx="1288.2" cy="-195.28" rx="113.14" ry="22.1"/>
<text text-anchor="middle" x="1288.2" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">At(Robot,Coffee)</text>
</g>
<!-- 5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566&#45;&gt;fd31940a&#45;4e40&#45;433d&#45;8165&#45;c9dd302fae62 -->
<g id="edge15" class="edge">
<title>5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566&#45;&gt;fd31940a&#45;4e40&#45;433d&#45;8165&#45;c9dd302fae62</title>
<path fill="none" stroke="black" d="M1367.36,-262.25C1353.52,-250.71 1336.67,-236.67 1322.08,-224.51"/>
<polygon fill="black" stroke="black" points="1324.42,-221.91 1314.49,-218.19 1319.94,-227.28 1324.42,-221.91"/>
</g>
<!-- 0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62 -->
<g id="node17" class="node">
<title>0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62</title>
<polygon fill="cyan" stroke="black" points="1503.2,-226.53 1419.7,-195.28 1503.2,-164.03 1586.7,-195.28 1503.2,-226.53"/>
<text text-anchor="middle" x="1503.2" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">Selector</text>
</g>
<!-- 5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566&#45;&gt;0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62 -->
<g id="edge16" class="edge">
<title>5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566&#45;&gt;0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62</title>
<path fill="none" stroke="black" d="M1423.29,-262.25C1437.27,-250.71 1454.27,-236.67 1469,-224.51"/>
<polygon fill="black" stroke="black" points="1471.18,-227.25 1476.66,-218.19 1466.72,-221.86 1471.18,-227.25"/>
</g>
<!-- c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa -->
<g id="node22" class="node">
<title>c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa</title>
<polygon fill="cyan" stroke="black" points="1953.2,-226.53 1869.7,-195.28 1953.2,-164.03 2036.7,-195.28 1953.2,-226.53"/>
<text text-anchor="middle" x="1953.2" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">Selector</text>
</g>
<!-- 5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566&#45;&gt;c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa -->
<g id="edge21" class="edge">
<title>5461e129&#45;ef05&#45;4848&#45;9107&#45;2617c82b3566&#45;&gt;c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa</title>
<path fill="none" stroke="black" d="M1463.06,-274.6C1570.11,-257.5 1777.03,-224.43 1884.56,-207.25"/>
<polygon fill="black" stroke="black" points="1885.09,-210.71 1894.41,-205.67 1883.99,-203.8 1885.09,-210.71"/>
</g>
<!-- 052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9 -->
<g id="node18" class="node">
<title>052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9</title>
<polygon fill="orange" stroke="black" points="1462.72,-94.2 1462.72,-114.02 1420.24,-128.03 1360.16,-128.03 1317.68,-114.02 1317.68,-94.2 1360.16,-80.19 1420.24,-80.19 1462.72,-94.2"/>
<text text-anchor="middle" x="1390.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- 0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62&#45;&gt;052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9 -->
<g id="edge17" class="edge">
<title>0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62&#45;&gt;052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9</title>
<path fill="none" stroke="black" d="M1476.99,-173.6C1462.58,-162.23 1444.43,-147.91 1428.46,-135.3"/>
<polygon fill="black" stroke="black" points="1431.06,-132.9 1421.04,-129.45 1426.72,-138.39 1431.06,-132.9"/>
</g>
<!-- bfea3ed6&#45;08c4&#45;4fd3&#45;9aa7&#45;994f4be28953 -->
<g id="node21" class="node">
<title>bfea3ed6&#45;08c4&#45;4fd3&#45;9aa7&#45;994f4be28953</title>
<polygon fill="lawngreen" stroke="black" points="1752.07,-122.11 1480.32,-122.11 1480.32,-86.11 1752.07,-86.11 1752.07,-122.11"/>
<text text-anchor="middle" x="1616.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">PutDown(Anything,Anywhere)</text>
</g>
<!-- 0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62&#45;&gt;bfea3ed6&#45;08c4&#45;4fd3&#45;9aa7&#45;994f4be28953 -->
<g id="edge20" class="edge">
<title>0a9876b0&#45;1ff9&#45;4f96&#45;b7a8&#45;8257a3928f62&#45;&gt;bfea3ed6&#45;08c4&#45;4fd3&#45;9aa7&#45;994f4be28953</title>
<path fill="none" stroke="black" d="M1529.41,-173.6C1546.17,-160.37 1567.99,-143.15 1585.56,-129.29"/>
<polygon fill="black" stroke="black" points="1587.44,-132.26 1593.12,-123.32 1583.1,-126.77 1587.44,-132.26"/>
</g>
<!-- c8462c00&#45;d129&#45;4eba&#45;a0b4&#45;ad6a819e34e8 -->
<g id="node19" class="node">
<title>c8462c00&#45;d129&#45;4eba&#45;a0b4&#45;ad6a819e34e8</title>
<ellipse fill="yellow" stroke="black" cx="1335.2" cy="-22.1" rx="114.2" ry="22.1"/>
<text text-anchor="middle" x="1335.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Holding(Nothing)</text>
</g>
<!-- 052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9&#45;&gt;c8462c00&#45;d129&#45;4eba&#45;a0b4&#45;ad6a819e34e8 -->
<g id="edge18" class="edge">
<title>052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9&#45;&gt;c8462c00&#45;d129&#45;4eba&#45;a0b4&#45;ad6a819e34e8</title>
<path fill="none" stroke="black" d="M1374.29,-79.97C1368.67,-71.79 1362.25,-62.45 1356.26,-53.74"/>
<polygon fill="black" stroke="black" points="1359.16,-51.78 1350.61,-45.52 1353.39,-55.74 1359.16,-51.78"/>
</g>
<!-- 5a944a18&#45;ea71&#45;4cbe&#45;a04e&#45;675d955b1b1f -->
<g id="node20" class="node">
<title>5a944a18&#45;ea71&#45;4cbe&#45;a04e&#45;675d955b1b1f</title>
<polygon fill="lawngreen" stroke="black" points="1610.95,-40.1 1467.45,-40.1 1467.45,-4.1 1610.95,-4.1 1610.95,-40.1"/>
<text text-anchor="middle" x="1539.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">PickUp(Coffee)</text>
</g>
<!-- 052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9&#45;&gt;5a944a18&#45;ea71&#45;4cbe&#45;a04e&#45;675d955b1b1f -->
<g id="edge19" class="edge">
<title>052d5a92&#45;c6b4&#45;483d&#45;9cef&#45;41745df61ff9&#45;&gt;5a944a18&#45;ea71&#45;4cbe&#45;a04e&#45;675d955b1b1f</title>
<path fill="none" stroke="black" d="M1428.57,-82.51C1449.56,-71.23 1475.6,-57.25 1497.14,-45.68"/>
<polygon fill="black" stroke="black" points="1498.51,-48.92 1505.67,-41.1 1495.2,-42.75 1498.51,-48.92"/>
</g>
<!-- c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708 -->
<g id="node23" class="node">
<title>c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708</title>
<polygon fill="orange" stroke="black" points="2025.72,-94.2 2025.72,-114.02 1983.24,-128.03 1923.16,-128.03 1880.68,-114.02 1880.68,-94.2 1923.16,-80.19 1983.24,-80.19 2025.72,-94.2"/>
<text text-anchor="middle" x="1953.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Sequence</text>
</g>
<!-- c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa&#45;&gt;c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708 -->
<g id="edge22" class="edge">
<title>c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa&#45;&gt;c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708</title>
<path fill="none" stroke="black" d="M1953.2,-163.59C1953.2,-155.97 1953.2,-147.74 1953.2,-139.93"/>
<polygon fill="black" stroke="black" points="1956.7,-140.04 1953.2,-130.04 1949.7,-140.04 1956.7,-140.04"/>
</g>
<!-- 5685125a&#45;34f9&#45;40cd&#45;be0c&#45;b7674970c01b -->
<g id="node27" class="node">
<title>5685125a&#45;34f9&#45;40cd&#45;be0c&#45;b7674970c01b</title>
<polygon fill="lawngreen" stroke="black" points="2250.45,-122.11 2043.95,-122.11 2043.95,-86.11 2250.45,-86.11 2250.45,-122.11"/>
<text text-anchor="middle" x="2147.2" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">MoveTo(BrightTable6)</text>
</g>
<!-- c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa&#45;&gt;5685125a&#45;34f9&#45;40cd&#45;be0c&#45;b7674970c01b -->
<g id="edge26" class="edge">
<title>c719600f&#45;4033&#45;418f&#45;8608&#45;5c808481d1aa&#45;&gt;5685125a&#45;34f9&#45;40cd&#45;be0c&#45;b7674970c01b</title>
<path fill="none" stroke="black" d="M1989.69,-177.51C2020.62,-163.29 2065.23,-142.79 2099.08,-127.23"/>
<polygon fill="black" stroke="black" points="2100.22,-130.56 2107.84,-123.2 2097.29,-124.2 2100.22,-130.56"/>
</g>
<!-- 84ecc165&#45;efa0&#45;4747&#45;8ce9&#45;64bf6ac557a2 -->
<g id="node24" class="node">
<title>84ecc165&#45;efa0&#45;4747&#45;8ce9&#45;64bf6ac557a2</title>
<ellipse fill="yellow" stroke="black" cx="1734.2" cy="-22.1" rx="105.71" ry="22.1"/>
<text text-anchor="middle" x="1734.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">Holding(Coffee)</text>
</g>
<!-- c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708&#45;&gt;84ecc165&#45;efa0&#45;4747&#45;8ce9&#45;64bf6ac557a2 -->
<g id="edge23" class="edge">
<title>c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708&#45;&gt;84ecc165&#45;efa0&#45;4747&#45;8ce9&#45;64bf6ac557a2</title>
<path fill="none" stroke="black" d="M1905.41,-85.65C1873.24,-73.9 1830.53,-58.29 1795.82,-45.61"/>
<polygon fill="black" stroke="black" points="1797.34,-42.44 1786.74,-42.29 1794.93,-49.01 1797.34,-42.44"/>
</g>
<!-- 8d3d2c3f&#45;1f52&#45;4742&#45;bb03&#45;a02d578134de -->
<g id="node25" class="node">
<title>8d3d2c3f&#45;1f52&#45;4742&#45;bb03&#45;a02d578134de</title>
<ellipse fill="yellow" stroke="black" cx="2009.2" cy="-22.1" rx="151.32" ry="22.1"/>
<text text-anchor="middle" x="2009.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">At(Robot,BrightTable6)</text>
</g>
<!-- c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708&#45;&gt;8d3d2c3f&#45;1f52&#45;4742&#45;bb03&#45;a02d578134de -->
<g id="edge24" class="edge">
<title>c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708&#45;&gt;8d3d2c3f&#45;1f52&#45;4742&#45;bb03&#45;a02d578134de</title>
<path fill="none" stroke="black" d="M1969.4,-79.97C1975.07,-71.85 1981.55,-62.6 1987.6,-53.96"/>
<polygon fill="black" stroke="black" points="1990.45,-55.98 1993.32,-45.78 1984.72,-51.97 1990.45,-55.98"/>
</g>
<!-- b5bcfc9e&#45;f0ad&#45;458b&#45;ba99&#45;19bae2fc6b12 -->
<g id="node26" class="node">
<title>b5bcfc9e&#45;f0ad&#45;458b&#45;ba99&#45;19bae2fc6b12</title>
<polygon fill="lawngreen" stroke="black" points="2452.2,-40.1 2178.2,-40.1 2178.2,-4.1 2452.2,-4.1 2452.2,-40.1"/>
<text text-anchor="middle" x="2315.2" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">PutDown(Coffee,BrightTable6)</text>
</g>
<!-- c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708&#45;&gt;b5bcfc9e&#45;f0ad&#45;458b&#45;ba99&#45;19bae2fc6b12 -->
<g id="edge25" class="edge">
<title>c9d1af42&#45;f394&#45;4c52&#45;9e7b&#45;32d46487c708&#45;&gt;b5bcfc9e&#45;f0ad&#45;458b&#45;ba99&#45;19bae2fc6b12</title>
<path fill="none" stroke="black" d="M2006.87,-87.52C2016.28,-84.96 2026,-82.41 2035.2,-80.19 2092.6,-66.34 2157.16,-53.02 2209.81,-42.74"/>
<polygon fill="black" stroke="black" points="2210.22,-46.23 2219.37,-40.88 2208.89,-39.36 2210.22,-46.23"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -24,11 +24,17 @@ class SceneOT(Scene):
# ]
self.signal_event_list =[
# (3, self.set_goal,("On(Yogurt,Bar)",)),
(3, self.customer_say, ("System", "把盒装冰红茶放到水桌")),
# (3, self.customer_say, ("System", "把盒装冰红茶放到水桌")),
# (3, self.customer_say, ("System", "打开空调并降低空调温度")),
# (3, self.customer_say, ("System", "点心")),
# (3, self.customer_say, ("System", "把咖啡放到水桌")),
# (3, self.customer_say, ("System", "把咖啡放到吧台上")),
# (3, self.customer_say, ("System", "把咖啡放到吧台上再拿一杯咖啡放到6号桌")),
(3, self.customer_say, ("System", "把咖啡放到6号桌")),
]
def _reset(self):
self.gen_obj()
scene = self.add_walkers([[0, 0], [250, 1200], [-55, 750], [70, -200]])
pass