diff --git a/BTExpansionCode/BTExpansionAlgorithm.py b/BTExpansionCode/BTExpansionAlgorithm.py new file mode 100644 index 0000000..723bcbb --- /dev/null +++ b/BTExpansionCode/BTExpansionAlgorithm.py @@ -0,0 +1,225 @@ +import random +import numpy as np +import copy +import time + +from OptimalBTExpansionAlgorithm_single_goal import ControlBT,Leaf,generate_random_state,Action,state_transition,conflict +import re + + +# 本文所提出的完备规划算法 +class BTExpAlgorithm: + def __init__(self,verbose=False): + self.bt = None + self.nodes = [] + self.traversed = [] + self.conditions = [] + self.conditions_index = [] + self.verbose = verbose + # print (self.conditions_list[0]) + + def clear(self): + self.bt = None + self.nodes = [] + self.traversed = [] + self.conditions = [] + self.conditions_index = [] + + def run_algorithm_selTree(self, start, goal, actions): + # 初始行为树只包含目标条件 + bt = ControlBT(type='cond') + g_node = Leaf(type='cond', content=goal,mincost=0) + bt.add_child([g_node]) + + self.conditions.append(goal) + self.nodes.append(g_node) # condition node list + # 尝试在初始状态执行行为树 + val, obj = bt.tick(start) + canrun = False + if val == 'success' or val == 'running': + canrun = True + # 循环扩展,直到行为树能够在初始状态运行 + while not canrun: + index = -1 + for i in range(0, len(self.nodes)): + if self.nodes[i].content in self.traversed: + continue + else: + c_node = self.nodes[i] + index = i + break + if index == -1: # 树中结点扩展完毕,仍无法运行行为树,返回失败 + print('Failure') + return False + # 根据所选择条件结点扩展子树 + subtree = ControlBT(type='?') + subtree.add_child([copy.deepcopy(c_node)]) # 子树首先保留所扩展结点 + c = c_node.content # 子树所扩展结点对应的条件(一个文字的set) + + for i in range(0, len(actions)): # 选择符合条件的行动, + # print("have action") + if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set(): + # print ("pass add") + if (c - actions[i].del_set) == c: + # print("pass delete") + c_attr = (actions[i].pre | c) - actions[i].add + valid = True + + # 这样剪枝存在错误性 + if conflict(c_attr): + continue + + for j in self.traversed: # 剪枝操作 + if j <= c_attr: + valid = False + break + + if valid: + # print("pass prune") + # 构建行动的顺序结构 + sequence_structure = ControlBT(type='>') + c_attr_node = Leaf(type='cond', content=c_attr, mincost=0) + a_node = Leaf(type='act', content=actions[i], mincost=0) + sequence_structure.add_child([c_attr_node, a_node]) + # 将顺序结构添加到子树 + subtree.add_child([sequence_structure]) + + self.nodes.append(c_attr_node) + # 将原条件结点c_node替换为扩展后子树subtree + parent_of_c = c_node.parent + parent_of_c.children[0] = subtree + # 记录已扩展条件 + self.traversed.append(c) + # 尝试在初始状态运行行为树 + val, obj = bt.tick(start) + canrun = False + if val == 'success' or val == 'running': + canrun = True + return bt + + + + def run_algorithm(self, start, goal, actions): + # goal_ls = goal.replace(" ", "") + # goal_ls = goal_ls.split("|") + self.bt = ControlBT(type='cond') + subtree = ControlBT(type='?') + if len(goal) > 1: + for g in goal: + print("goal",g) + bt_sel_tree = self.run_algorithm_selTree(start, g, actions) + print("bt_sel_tree.children",bt_sel_tree.children) + # print(bt_sel_tree.children[0]) + subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])]) + self.bt.add_child([subtree]) + else: + self.bt = self.run_algorithm_selTree(start, goal[0], actions) + return True + + + def print_solution(self): + print("========= XiaoCaoBT ==========") # 树的bfs遍历 + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + print("Parrent:", parnode.type) + for child in parnode.children: + if isinstance(child, Leaf): + print("---- Leaf:", child.content) + elif isinstance(child, ControlBT): + print("---- ControlBT:", child.type) + nodes_ls.append(child) + print() + nodes_ls.pop(0) + print("========= XiaoCaoBT ==========\n") + + + def dfs_ptml_many_act(self, parnode, is_root=False): + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == 'cond': + + if is_root and len(child.content) > 1: + # 把多个 cond 串起来 + self.ptml_string += "sequence{\n" + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + self.ptml_string += '}\n' + else: + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + + elif child.type == 'act': + + child.content.name = re.sub(r'\d+', '', child.content.name) + + if '(' not in child.content.name: + self.ptml_string += 'act ' + child.content.name + "()\n" + else: + self.ptml_string += 'act ' + child.content.name + "\n" + elif isinstance(child, ControlBT): + if child.type == '?': + self.ptml_string += "selector{\n" + self.dfs_ptml_many_act(parnode=child) + elif child.type == '>': + self.ptml_string += "sequence{\n" + self.dfs_ptml_many_act(parnode=child) + self.ptml_string += '}\n' + + def get_ptml_many_act(self): + self.ptml_string = "selector{\n" + self.dfs_ptml_many_act(self.bt.children[0],is_root=True) + self.ptml_string += '}\n' + return self.ptml_string + +if __name__ == '__main__': + + bt_algo_opt = False + + + # casestudy begin 对应论文的case study,包含三个行动的移动机械臂场景 + + actions = [] + a = Action(name='movebtob') + a.pre = {1, 2} + a.add = {3} + a.del_set = {1, 4} + actions.append(a) + a = Action(name='moveatob') + a.pre = {1} + a.add = {5, 2} + a.del_set = {1, 6} + actions.append(a) + a = Action(name='moveatoa') + a.pre = {7} + a.add = {8, 2} + a.del_set = {7, 6} + actions.append(a) + + start = {1, 7, 4, 6} + goal = {3} + algo = BTExpAlgorithm() + algo.clear() + algo.run_algorithm(start, goal, list(actions)) + state = start + steps = 0 + val, obj = algo.bt.tick(state) + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + print(obj.name) + val, obj = algo.bt.tick(state) + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if not goal <= state: + print("wrong solution", steps) + else: + print("right solution", steps) + # algo.bt.print_nodes() + print(algo.bt.count_size() - 1) + algo.clear() + +# case study end diff --git a/BTExpansionCode/BTExpansionAlgorithm_old.py b/BTExpansionCode/BTExpansionAlgorithm_old.py new file mode 100644 index 0000000..a347043 --- /dev/null +++ b/BTExpansionCode/BTExpansionAlgorithm_old.py @@ -0,0 +1,162 @@ +import random +import numpy as np +import copy +import time + +from OptimalBTExpansionAlgorithm import ControlBT,Leaf,generate_random_state,Action,state_transition,conflict + +# 本文所提出的完备规划算法 +class BTExpAlgorithm: + def __init__(self,verbose=False): + self.bt = None + self.nodes = [] + self.traversed = [] + self.conditions = [] + self.conditions_index = [] + self.verbose = verbose + # print (self.conditions_list[0]) + + def clear(self): + self.bt = None + self.nodes = [] + self.traversed = [] + self.conditions = [] + self.conditions_index = [] + + # 运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt + def run_algorithm(self, start, goal, actions): + # 初始行为树只包含目标条件 + self.bt = ControlBT(type='cond') + g_node = Leaf(type='cond', content=goal) + self.bt.add_child([g_node]) + + self.conditions.append(goal) + self.nodes.append(g_node) # condition node list + # 尝试在初始状态执行行为树 + val, obj = self.bt.tick(start) + canrun = False + if val == 'success' or val == 'running': + canrun = True + # 循环扩展,直到行为树能够在初始状态运行 + while not canrun: + index = -1 + for i in range(0, len(self.nodes)): + if self.nodes[i].content in self.traversed: + continue + else: + c_node = self.nodes[i] + index = i + break + if index == -1: # 树中结点扩展完毕,仍无法运行行为树,返回失败 + print('Failure') + return False + # 根据所选择条件结点扩展子树 + subtree = ControlBT(type='?') + subtree.add_child([copy.deepcopy(c_node)]) # 子树首先保留所扩展结点 + c = c_node.content # 子树所扩展结点对应的条件(一个文字的set) + + for i in range(0, len(actions)): # 选择符合条件的行动, + # print("have action") + if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set(): + # print ("pass add") + if (c - actions[i].del_set) == c: + # print("pass delete") + c_attr = (actions[i].pre | c) - actions[i].add + valid = True + + # 这样剪枝存在错误性 + # if conflict(c_attr): + # continue + + for j in self.traversed: # 剪枝操作 + if j <= c_attr: + valid = False + break + if valid: + # print("pass prune") + # 构建行动的顺序结构 + sequence_structure = ControlBT(type='>') + c_attr_node = Leaf(type='cond', content=c_attr) + a_node = Leaf(type='act', content=actions[i]) + sequence_structure.add_child([c_attr_node, a_node]) + # 将顺序结构添加到子树 + subtree.add_child([sequence_structure]) + + self.nodes.append(c_attr_node) + # 将原条件结点c_node替换为扩展后子树subtree + parent_of_c = c_node.parent + parent_of_c.children[0] = subtree + # 记录已扩展条件 + self.traversed.append(c) + # 尝试在初始状态运行行为树 + val, obj = self.bt.tick(start) + canrun = False + if val == 'success' or val == 'running': + canrun = True + return True + + def print_solution(self): + print("========= XiaoCaoBT ==========") # 树的bfs遍历 + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + print("Parrent:", parnode.type) + for child in parnode.children: + if isinstance(child, Leaf): + print("---- Leaf:", child.content) + elif isinstance(child, ControlBT): + print("---- ControlBT:", child.type) + nodes_ls.append(child) + print() + nodes_ls.pop(0) + print("========= XiaoCaoBT ==========\n") + +if __name__ == '__main__': + + bt_algo_opt = False + + + # casestudy begin 对应论文的case study,包含三个行动的移动机械臂场景 + + actions = [] + a = Action(name='movebtob') + a.pre = {1, 2} + a.add = {3} + a.del_set = {1, 4} + actions.append(a) + a = Action(name='moveatob') + a.pre = {1} + a.add = {5, 2} + a.del_set = {1, 6} + actions.append(a) + a = Action(name='moveatoa') + a.pre = {7} + a.add = {8, 2} + a.del_set = {7, 6} + actions.append(a) + + start = {1, 7, 4, 6} + goal = {3} + algo = BTExpAlgorithm() + algo.clear() + algo.run_algorithm(start, goal, list(actions)) + state = start + steps = 0 + val, obj = algo.bt.tick(state) + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + print(obj.name) + val, obj = algo.bt.tick(state) + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if not goal <= state: + print("wrong solution", steps) + else: + print("right solution", steps) + # algo.bt.print_nodes() + print(algo.bt.count_size() - 1) + algo.clear() + +# case study end diff --git a/BTExpansionCode/BehaviorTree.py b/BTExpansionCode/BehaviorTree.py new file mode 100644 index 0000000..b2fa52d --- /dev/null +++ b/BTExpansionCode/BehaviorTree.py @@ -0,0 +1,140 @@ + +import random + + +#叶结点 +class Leaf: + def __init__(self,type,content,mincost=0): + self.type=type + self.content=content #conditionset or action + self.parent=None + self.parent_index=0 + self.mincost=mincost + + # tick 叶节点,返回返回值以及对应的条件或行动对象self.content + def tick(self,state): + if self.type=='cond': + if self.content <= state: + return 'success',self.content + else: + return 'failure',self.content + if self.type=='act': + if self.content.pre<=state: + return 'running',self.content #action + else: + return 'failure',self.content + + def cost_tick(self,state,cost,ticks): + if self.type=='cond': + ticks+=1 + if self.content <= state: + return 'success',self.content,cost,ticks + else: + return 'failure',self.content,cost,ticks + if self.type=='act': + ticks += 1 + if self.content.pre<=state: + return 'running',self.content,cost+self.content.cost,ticks #action + else: + return 'failure',self.content,cost,ticks + + def __str__(self): + print( self.content) + return '' + + def print_nodes(self): + print(self.content) + + def count_size(self): + return 1 + + +#可能包含控制结点的行为树 +class ControlBT: + def __init__(self,type): + self.type=type + self.children=[] + self.parent=None + self.parent_index=0 + + + def add_child(self,subtree_list): + for subtree in subtree_list: + self.children.append(subtree) + subtree.parent=self + subtree.parent_index=len(self.children)-1 + + # tick行为树,根据不同控制结点逻辑tick子结点 + def tick(self,state): + if len(self.children) < 1: + print("error,no child") + if self.type =='?':#选择结点,即或结点 + for child in self.children: + val,obj=child.tick(state) + if val=='success': + return val,obj + if val=='running': + return val,obj + return 'failure','?fails' + if self.type =='>':#顺序结点,即与结点 + for child in self.children: + val,obj=child.tick(state) + if val=='failure': + return val,obj + if val=='running': + return val,obj + return 'success', '>success' + if self.type =='act':#行动结点 + return self.children[0].tick(state) + if self.type =='cond':#条件结点 + return self.children[0].tick(state) + + def cost_tick(self,state,cost,ticks): + if len(self.children) < 1: + print("error,no child") + if self.type =='?':#选择结点,即或结点 + ticks += 1 + for child in self.children: + ticks+=1 + val,obj,cost,ticks=child.cost_tick(state,cost,ticks) + if val=='success': + return val,obj,cost,ticks + if val=='running': + return val,obj,cost,ticks + return 'failure','?fails',cost,ticks + if self.type =='>':#顺序结点,即与结点 + for child in self.children: + # print("state:",state,"cost",cost) + ticks+=1 + val,obj,cost,ticks=child.cost_tick(state,cost,ticks) + if val=='failure': + return val,obj,cost,ticks + if val=='running': + return val,obj,cost,ticks + return 'success', '>success',cost,ticks + if self.type =='act':#行动结点 + return self.children[0].cost_tick(state,cost,ticks) + if self.type =='cond':#条件结点 + return self.children[0].cost_tick(state,cost,ticks) + + def getFirstChild(self): + return self.children[0] + + def __str__(self): + print(self.type+'\n') + for child in self.children: + print (child) + return '' + + def print_nodes(self): + print(self.type) + for child in self.children: + child.print_nodes() + + # 递归统计树中结点数 + def count_size(self): + result=1 + for child in self.children: + result+= child.count_size() + return result + diff --git a/BTExpansionCode/EXP/behavior_lib/__init__.py b/BTExpansionCode/EXP/behavior_lib/__init__.py new file mode 100644 index 0000000..139597f --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/__init__.py @@ -0,0 +1,2 @@ + + diff --git a/BTExpansionCode/EXP/behavior_lib/_base/Act.py b/BTExpansionCode/EXP/behavior_lib/_base/Act.py new file mode 100644 index 0000000..4f7dbbf --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/_base/Act.py @@ -0,0 +1,13 @@ +from EXP.behavior_lib._base.Behavior import Bahavior + +class Act(Bahavior): + print_name_prefix = "act " + type = 'Act' + + def __init__(self,*args): + super().__init__(*args) + self.info = self.get_info(*args) + + @classmethod + def get_info(self,*arg): + return None diff --git a/BTExpansionCode/EXP/behavior_lib/_base/Behavior.py b/BTExpansionCode/EXP/behavior_lib/_base/Behavior.py new file mode 100644 index 0000000..425f547 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/_base/Behavior.py @@ -0,0 +1,153 @@ +import py_trees as ptree +from typing import Any +import enum +from py_trees.common import Status + + +# _base Behavior +class Bahavior(ptree.behaviour.Behaviour): + + can_be_expanded = False + num_params = 0 + valid_params=''' + None + ''' + scene = None + print_name_prefix = "" + tables_for_placement = {'Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6'} + all_object = { + 'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup', + 'Chips', 'NFCJuice', 'Bernachon', 'SpringWater'} + tables_for_guiding = {"QuietTable1","QuietTable2", + "BrightTable1","BrightTable2","BrightTable3","BrightTable4","BrightTable5","BrightTable6", + 'CoffeeTable','WaterTable','Table1', 'Table2', 'Table3'} + + + # tables_for_placement = {'Bar', 'CoffeeTable', 'Table2',"BrightTable6", 'WaterTable'} + # all_object = {'Coffee', 'Yogurt'} + + + num_of_obj_on_place={ + 'Bar': 0, # (247.0, 520.0, 100.0) + 'Bar2': 0, + 'WaterTable': 0, + 'CoffeeTable': 0, + 'Table1': 0, + 'Table2': 0, + 'Table3': 0, + 'BrightTable6': 0, + } + + place_xyz_dic={ + 'Bar': (247.0, 520.0, 100.0), #(247.0, 520.0, 100.0) + 'Bar2': (240.0, 40.0, 100.0), + 'WaterTable':(-70.0, 500.0, 107), + 'CoffeeTable':(250.0, 310.0, 100.0), + 'Table1': (340.0, 900.0, 99.0), + 'Table2': (-55.0, 0.0, 107), + 'Table3':(-55.0, 150.0, 107), + 'BrightTable6': (5, -315, 116.5), + } + + place_have_obj_xyz_dic = { + 'QuietTable1': (480, 1300, 70), + 'QuietTable2': (250, -240, 70), + 'BrightTable1': (230, 1200, 35), + 'BrightTable2': (65, 1000, 35), + 'BrightTable3': (-80, 850, 35), + 'BrightTable4': (-270, 520, 70), + 'BrightTable5': (-270, 420, 35) + } + place_have_obj_xyz_dic.update(place_xyz_dic) + + place_en2zh_name={ + 'Bar': "吧台", + 'Bar2': "另一侧的吧台", + 'WaterTable': "大厅的茶水桌", + 'CoffeeTable': "咖啡桌", + 'Table1': "前门斜桌子", + 'Table2': "大厅长桌子西侧", + 'Table3': "大厅长桌子东侧", + 'BrightTable6': "后门靠窗边圆桌", + 'QuietTable1': "前门角落双人圆桌", + 'QuietTable2': "后门角落三人圆桌", + 'BrightTable1': "靠窗边第一个四人矮桌", + 'BrightTable2': "靠窗边第二个四人矮桌", + 'BrightTable3': "靠窗边第三个四人矮桌", + 'BrightTable4': "大厅里靠窗边长桌子", + 'BrightTable5': "大厅里靠窗边多人矮桌", + } + + place_xy_yaw_dic={ + 'Bar': (247.0, 520.0, 180), # (247.0, 520.0, 100.0) + 'Bar2': (240.0, 40.0, 100.0), + 'WaterTable': (-70.0, 500.0, 107), + 'CoffeeTable': (250.0, 310.0, 100.0), + 'Table1': (340.0, 900.0, 99.0), + 'Table2': (-55.0, 0.0, 107), + 'Table3': (-55.0, 150.0, 107), + 'BrightTable6': (5, -315, 116.5), + + 'QuietTable1':(480,1300,90), + 'QuietTable2':(250,-240,-65), + 'BrightTable1':(230,1200,-135), + 'BrightTable2': (65, 1000, 135), + 'BrightTable3': (-80, 850, 135), + 'BrightTable4': (-270, 520, 150), + 'BrightTable5': (-270, 420, 90) #(-270, 420, -135) + } + container_dic={ + 'Coffee':'CoffeeCup', + 'Water': 'Glass', + 'Dessert':'Plate' + } + + + + @classmethod + def get_ins_name(cls,*args): + name = cls.__name__ + if len(args) > 0: + ins_name = f'{name}({",".join(list(args))})' + else: + ins_name = f'{name}()' + return ins_name + + def __init__(self,*args): + ins_name = self.__class__.get_ins_name(*args) + self.args = args + + super().__init__(ins_name) + + def _update(self) -> ptree.common.Status: + print("this is just a _base behavior node.") + return Status.INVALID + + @property + def print_name(self): + return f'{self.print_name_prefix}{self.get_ins_name(*self.args)}' + + + + # let behavior node Interact with the scene + def set_scene(self, scene=None): + if scene: + self.scene = scene + self.robot = scene.robot + + def setup(self, **kwargs: Any) -> None: + return super().setup(**kwargs) + + def initialise(self) -> None: + return super().initialise() + + def update(self) -> Status: + re = self._update() + return re + + def terminate(self, new_status: Status) -> None: + return super().terminate(new_status) + + @property + def arg_str(self): + return ",".join(self.args) \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_lib/_base/Cond.py b/BTExpansionCode/EXP/behavior_lib/_base/Cond.py new file mode 100644 index 0000000..41366b1 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/_base/Cond.py @@ -0,0 +1,18 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Behavior import Bahavior, Status + +class Cond(Bahavior): + print_name_prefix = "cond " + type = 'Cond' + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + if self.scene.state['chat_list'] == []: + return Status.FAILURE + else: + return Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/_base/Selector.py b/BTExpansionCode/EXP/behavior_lib/_base/Selector.py new file mode 100644 index 0000000..1b61ed0 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/_base/Selector.py @@ -0,0 +1,10 @@ +import py_trees as ptree +from typing import Any + +class Selector(ptree.composites.Selector): + print_name = "Selector" + ins_name = "Selector" + type = "Selector" + + def __init__(self,*args,**kwargs): + super().__init__(*args,**kwargs) diff --git a/BTExpansionCode/EXP/behavior_lib/_base/Sequence.py b/BTExpansionCode/EXP/behavior_lib/_base/Sequence.py new file mode 100644 index 0000000..bd1b75c --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/_base/Sequence.py @@ -0,0 +1,11 @@ +import py_trees as ptree +from typing import Any + +class Sequence(ptree.composites.Sequence): + print_name = "Sequence" + ins_name = "Selector" + type = "Sequence" + + def __init__(self,*args,**kwargs): + super().__init__(*args,**kwargs) + diff --git a/BTExpansionCode/EXP/behavior_lib/_base/__init__.py b/BTExpansionCode/EXP/behavior_lib/_base/__init__.py new file mode 100644 index 0000000..94f6330 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/_base/__init__.py @@ -0,0 +1,3 @@ + +from EXP.behavior_lib._base.Sequence import Sequence +from EXP.behavior_lib._base.Selector import Selector \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_lib/act/Clean.py b/BTExpansionCode/EXP/behavior_lib/act/Clean.py new file mode 100644 index 0000000..7b39896 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/act/Clean.py @@ -0,0 +1,50 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Act import Act +from EXP.behavior_lib._base.Behavior import Status + +class Clean(Act): + can_be_expanded = True + num_args = 1 + valid_args = ( + 'Table1','Floor','Chairs' + ) + + def __init__(self, *args): + super().__init__(*args) + self.target_obj = self.args[0] + self.op_type = 5 + if self.target_obj=="Table1": + self.op_type = 5 + elif self.target_obj=="Floor": + self.op_type = 4 + elif self.target_obj=="Chairs": + self.op_type = 7 + + + @classmethod + def get_info(cls,arg): + info = {} + info["pre"]= {f'Holding(Nothing)',f'Is(HallLight,On)'} + if arg == "Table1": + info["add"]= {f'Is(Table1,Clean)'} + info["del_set"] = {f'Is(Table1,Dirty)'} + elif arg == "Floor": + info["add"] = {f'Is(Floor,Clean)'} + info["del_set"] = {f'Is(Floor,Dirty)'} + elif arg == "Chairs": + info["add"] = {f'Is(Chairs,Clean)'} + info["del_set"] = {f'Is(Chairs,Dirty)'} + return info + + def _update(self) -> ptree.common.Status: + + self.scene.move_task_area(self.op_type) + self.scene.op_task_execute(self.op_type) + + self.scene.state["condition_set"] |= (self.info["add"]) + self.scene.state["condition_set"] -= self.info["del_set"] + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + # print("After Clean condition_set:",self.scene.state["condition_set"] ) + return Status.RUNNING \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_lib/act/Make.py b/BTExpansionCode/EXP/behavior_lib/act/Make.py new file mode 100644 index 0000000..b980f72 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/act/Make.py @@ -0,0 +1,68 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Act import Act +from EXP.behavior_lib._base.Behavior import Status + +class Make(Act): + can_be_expanded = True + num_args = 1 + valid_args = ( + "Coffee","Water","Dessert" + ) + + def __init__(self, *args): + super().__init__(*args) + self.target_obj = self.args[0] + self.op_type = 1 + if self.target_obj==self.valid_args[0]: + self.op_type = 1 + elif self.target_obj==self.valid_args[1]: + self.op_type = 2 + elif self.target_obj==self.valid_args[2]: + self.op_type = 3 + + + @classmethod + def get_info(cls,arg): + info = {} + info["pre"]= {f'Holding(Nothing)'} + info['del_set'] = set() + info['add'] = {f'Exist({arg})'} + if arg == cls.valid_args[0]: + info["add"] |= {f'On({arg},CoffeeTable)'} + elif arg == cls.valid_args[1]: + info["add"] |= {f'On({arg},WaterTable)'} + elif arg == cls.valid_args[2]: + info["add"] |= {f'On({arg},Bar)'} + info['cost'] = 2 + return info + + def _update(self) -> ptree.common.Status: + + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + self.scene.move_task_area(self.op_type) + self.scene.op_task_execute(self.op_type) + + # self.scene.gen_obj(type=40) + + # obj_dict = self.scene.status.objects + # if len(obj_dict) != 0: + # # 获取obj_id + # for id, obj in enumerate(obj_dict): + # print("id:",id,"obj",obj.name) + + # if obj.name == "Coffee": + # obj_info = obj_dict[id] + # obj_x, obj_y, obj_z = obj_info.location.X, obj_info.location.Y, obj_info.location.Z + # print(id,obj.name,obj_x,obj_y,obj_z) + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio,update_info_count=1) + + self.scene.state["condition_set"] |= (self.info["add"]) + self.scene.state["condition_set"] -= self.info["del_set"] + + # print("condition_set:",self.scene.state["condition_set"]) + + return Status.RUNNING \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_lib/act/MoveTo.py b/BTExpansionCode/EXP/behavior_lib/act/MoveTo.py new file mode 100644 index 0000000..2d19716 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/act/MoveTo.py @@ -0,0 +1,28 @@ +import py_trees as ptree +from EXP.behavior_lib._base.Act import Act + +class MoveTo(Act): + can_be_expanded = True + num_args = 1 + valid_args = Act.all_object | Act.tables_for_placement | Act.tables_for_guiding + valid_args.add('Customer') + + def __init__(self, target_place): + super().__init__(target_place) + self.target_place = target_place + + + @classmethod + def get_info(cls,arg): + info = {} + info['pre'] = set() + if arg in Act.all_object: + 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'] = 1 #10 + # if arg!='Anything': + # info['cost']=5 + # else: + # info['cost']=0 + return info diff --git a/BTExpansionCode/EXP/behavior_lib/act/PickUp.py b/BTExpansionCode/EXP/behavior_lib/act/PickUp.py new file mode 100644 index 0000000..04a4f37 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/act/PickUp.py @@ -0,0 +1,74 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Act import Act +from EXP.behavior_lib._base.Behavior import Status + +class PickUp(Act): + can_be_expanded = True + num_args = 1 + valid_args = Act.all_object + # valid_args.add("Anything") + def __init__(self, *args): + super().__init__(*args) + self.target_obj = self.args[0] + + + @classmethod + def get_info(cls,arg): + info = {} + info["pre"] = {f'At(Robot,{arg})','Holding(Nothing)'} + info["add"] = {f'Holding({arg})'} + 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 + + # if arg != 'Anything': + # info['cost'] = 1 + # else: + # info['cost'] = 0 + # + # info["pre"] = {} + + return info + + + def _update(self) -> ptree.common.Status: + # self.scene.test_move() + # op_type=16 + + # 遍历场景里的所有物品,根据名字匹配位置最近的 obj-id + # 是否用容器装好 + if self.target_obj in Act.container_dic: + target_name = Act.container_dic[self.target_obj] + else: + target_name = self.target_obj + # 根据物体名字找到最近的这类物体对应的位置 + obj_id = -1 + min_dis = float('inf') + obj_dict = self.scene.status.objects + if len(obj_dict) != 0: + # 获取obj_id + for id, obj in enumerate(obj_dict): + if obj.name == target_name: + obj_info = obj_dict[id] + dis = self.scene.cal_distance_to_robot(obj_info.location.X, obj_info.location.Y, + obj_info.location.Z) + if dis < min_dis: + min_dis = dis + obj_id = id + # if self.target_place == "CoffeeCup": + # # obj_id = 273 + # obj_id = 275 + if obj_id == -1: + return ptree.common.Status.FAILURE + + self.scene.move_task_area(op_type=16, obj_id=obj_id) + self.scene.op_task_execute(op_type=16, obj_id=obj_id) + + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio,update_info_count=1) + + self.scene.state["condition_set"] |= (self.info["add"]) + self.scene.state["condition_set"] -= self.info["del_set"] + return Status.RUNNING diff --git a/BTExpansionCode/EXP/behavior_lib/act/PutDown.py b/BTExpansionCode/EXP/behavior_lib/act/PutDown.py new file mode 100644 index 0000000..f27e6ea --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/act/PutDown.py @@ -0,0 +1,64 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Act import Act +from EXP.behavior_lib._base.Behavior import Status +import itertools + +class PutDown(Act): + can_be_expanded = True + num_args = 2 + + valid_args = list(itertools.product(Act.all_object, Act.tables_for_placement)) + valid_args.append(('Anything','Anywhere')) + valid_args = tuple(valid_args) + + def __init__(self, *args): + super().__init__(*args) + self.target_obj = self.args[0] + self.target_place = self.args[1] + + + @classmethod + def get_info(cls,*arg): + if arg[0] != 'Anything': + info = {} + info["pre"] = {f'Holding({arg[0]})',f'At(Robot,{arg[1]})'} + info["add"] = {f'Holding(Nothing)',f'On({arg[0]},{arg[1]})'} + info["del_set"] = {f'Holding({arg[0]})'} + info['cost'] = 100 #1000 + else: + info = {} + info["pre"] = set() + info['add'] = {f'Holding(Nothing)'} + info['del_set'] = {f'Holding({obj})' for obj in cls.all_object} + info['cost'] = 0 + + return info + + + def _update(self) -> ptree.common.Status: + # self.scene.test_move() + + if self.target_obj != 'Anything': + op_type=17 + release_pos = list(Act.place_xyz_dic[self.target_place]) + # # 原始吧台处:[247.0, 520.0, 100.0], 空调开关旁吧台:[240.0, 40.0, 70.0], 水杯桌:[-70.0, 500.0, 107] + # # 桌子2:[-55.0, 0.0, 107],桌子3:[-55.0, 150.0, 107] + if Act.num_of_obj_on_place[self.target_place]>=1: + release_pos[1] += 25 + + Act.num_of_obj_on_place[self.target_place]+=1 + + self.scene.move_task_area(op_type, release_pos=release_pos) + + if self.target_obj == "Chips": + release_pos[2] +=3 + self.scene.op_task_execute(op_type, release_pos=release_pos) + + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio,update_info_count=1) + + self.scene.state["condition_set"] |= (self.info["add"]) + self.scene.state["condition_set"] -= self.info["del_set"] + + return Status.RUNNING diff --git a/BTExpansionCode/EXP/behavior_lib/act/Turn.py b/BTExpansionCode/EXP/behavior_lib/act/Turn.py new file mode 100644 index 0000000..4cd890d --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/act/Turn.py @@ -0,0 +1,87 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Act import Act +from EXP.behavior_lib._base.Behavior import Status +import itertools + +class Turn(Act): + can_be_expanded = True + num_args = 2 + valid_args = [('AC','TubeLight','HallLight','Curtain'), + ('On','Off')] + + valid_args = list(itertools.product(valid_args[0], valid_args[1])) + valid_args.extend([('ACTemperature','Up'),('ACTemperature','Down')]) + valid_args = tuple(valid_args) + + + + def __init__(self, *args): + super().__init__(*args) + self.target_obj = self.args[0] + self.op = self.args[1] + self.op_type = 13 + + if self.target_obj=="AC": + self.op_type = 13 + elif self.target_obj=="ACTemperature": + if self.op == 'Up': + self.op_type = 14 + elif self.op == 'Down': + self.op_type = 15 + elif self.target_obj=="TubeLight": + if self.op == 'On': + self.op_type = 6 + elif self.op == 'Off': + self.op_type = 8 + elif self.target_obj=="HallLight": + if self.op == 'On': + self.op_type = 9 + elif self.op == 'Off': + self.op_type = 10 + elif self.target_obj=="Curtain": + if self.op == 'On': + self.op_type = 12 + elif self.op == 'Off': + self.op_type = 11 + + @classmethod + def get_info(cls,*arg): + info = {} + info["pre"] = set() + if arg[0]=="TubeLight" or arg[0]=="HallLight" or arg[0]=="Curtain" or arg[0]=='AC': + if arg[0]!="Curtain": + info["pre"] |= {f'Holding(Nothing)'} + if arg[1]=="On": + info["pre"] |= {f'Is({arg[0]},Off)'} + info["add"] = {f'Is({arg[0]},On)'} + info["del_set"] = {f'Is({arg[0]},Off)'} + elif arg[1]=="Off": + info["pre"] |= {f'Is({arg[0]},On)'} + info["add"] = {f'Is({arg[0]},Off)'} + info["del_set"] = {f'Is({arg[0]},On)'} + elif arg[0]=='ACTemperature': + info["pre"] = {f'Holding(Nothing)',f'Is(AC,On)'} + if arg[1]=="Up": + # info["pre"] |= {f'Is({arg[0]},Down)'} + info["add"] = {f'Is({arg[0]},Up)'} + info["del_set"] = {f'Is({arg[0]},Down)'} + elif arg[1]=="Down": + # info["pre"] |= {f'Is({arg[0]},Up)'} + info["add"] = {f'Is({arg[0]},Down)'} + info["del_set"] = {f'Is({arg[0]},Up)'} + return info + + def _update(self) -> ptree.common.Status: + + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + self.scene.move_task_area(self.op_type) + self.scene.op_task_execute(self.op_type) + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + self.scene.state["condition_set"] |= (self.info["add"]) + self.scene.state["condition_set"] -= self.info["del_set"] + + return Status.RUNNING \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_lib/act/__init__.py b/BTExpansionCode/EXP/behavior_lib/act/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_lib/cond/AnomalyDetected.py b/BTExpansionCode/EXP/behavior_lib/cond/AnomalyDetected.py new file mode 100644 index 0000000..15532d4 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/AnomalyDetected.py @@ -0,0 +1,27 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class AnomalyDetected(Cond): + + + def __init__(self): + super().__init__() + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + + light_set = {'Is(HallLight,Off)', 'Is(TubeLight,Off)', 'Is(Curtain,Off)'} + if light_set.issubset(self.scene.state["condition_set"]): + self.scene.state["anomaly"] = "NoLight" + return ptree.common.Status.SUCCESS + + # light_set = {'Is(Curtain,On)'} + # if light_set.issubset(self.scene.state["condition_set"]): + # self.scene.chat_bubble("太暗了,开灯") + # self.scene.state["anomaly"] = "NoLight" + # return ptree.common.Status.SUCCESS + + + return ptree.common.Status.FAILURE diff --git a/BTExpansionCode/EXP/behavior_lib/cond/At.py b/BTExpansionCode/EXP/behavior_lib/cond/At.py new file mode 100644 index 0000000..f88f243 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/At.py @@ -0,0 +1,31 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond +import itertools + +class At(Cond): + can_be_expanded = True + num_params = 2 + + valid_args = list(itertools.product(('Robot','Customer'), tuple(Cond.all_object | Cond.tables_for_placement | Cond.tables_for_guiding | {'Customer'}))) + valid_args.remove(('Customer','Customer')) + valid_args = tuple(valid_args) + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + + # self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + if self.name in self.scene.state["condition_set"]: + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE + + # if self.scene.state['chat_list'] == []: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/Chatting.py b/BTExpansionCode/EXP/behavior_lib/cond/Chatting.py new file mode 100644 index 0000000..80a7065 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/Chatting.py @@ -0,0 +1,33 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class Chatting(Cond): + + + def __init__(self): + super().__init__() + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + if self.scene.state['chat_list'] == []: + return ptree.common.Status.FAILURE + + name,sentence = self.scene.state['chat_list'][0] + if name == "Goal": + return ptree.common.Status.SUCCESS + + + if "customer" in self.scene.state["attention"]: + attention_customer = self.scene.state["attention"]["customer"] + if name == attention_customer: + return ptree.common.Status.SUCCESS + else: + # self.scene.chat_bubble("请稍等一下") # 机器人输出对话 + # self.scene.wait_history.add(sentence) + + return ptree.common.Status.FAILURE + else: + self.scene.state["attention"]["customer"] = name + return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/CustomerServed.py b/BTExpansionCode/EXP/behavior_lib/cond/CustomerServed.py new file mode 100644 index 0000000..be6754e --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/CustomerServed.py @@ -0,0 +1,33 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond +import itertools + +class CustomerServed(Cond): + can_be_expanded = True + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + + customer = self.scene.state["attention"]["customer"] + serve_state = self.scene.state["serve_state"][customer] + if serve_state['served']: + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE + + # if self.scene.state["attention"]["customer"] + # + # if self.name in self.scene.state["condition_set"]: + # return ptree.common.Status.SUCCESS + # else: + # return ptree.common.Status.FAILURE + + # if self.scene.state['chat_list'] == []: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/Exist.py b/BTExpansionCode/EXP/behavior_lib/cond/Exist.py new file mode 100644 index 0000000..740c8fa --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/Exist.py @@ -0,0 +1,28 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond +import itertools + +class Exist(Cond): + can_be_expanded = True + num_params = 2 + valid_args = tuple(Cond.all_object) + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + + + + if self.name in self.scene.state["condition_set"]: + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE + + # if self.scene.state['chat_list'] == []: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/FocusingCustomer.py b/BTExpansionCode/EXP/behavior_lib/cond/FocusingCustomer.py new file mode 100644 index 0000000..9c7a537 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/FocusingCustomer.py @@ -0,0 +1,20 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class FocusingCustomer(Cond): + + def __init__(self): + super().__init__() + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + if "customer" in self.scene.state['attention']: + # if self.scene.take_picture: + # self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + return ptree.common.Status.SUCCESS + else: + goal = Cond.place_xy_yaw_dic['Bar'] + self.scene.walk_to(goal[0] - 5, goal[1], 180, 180, 0) + return ptree.common.Status.FAILURE diff --git a/BTExpansionCode/EXP/behavior_lib/cond/HasSubTask.py b/BTExpansionCode/EXP/behavior_lib/cond/HasSubTask.py new file mode 100644 index 0000000..508785a --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/HasSubTask.py @@ -0,0 +1,14 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class HasSubTask(Cond): + def __init__(self): + super().__init__() + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + if not self.scene.sub_task_seq or not self.scene.sub_task_seq.children: + return ptree.common.Status.FAILURE + else: + return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/Holding.py b/BTExpansionCode/EXP/behavior_lib/cond/Holding.py new file mode 100644 index 0000000..7866198 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/Holding.py @@ -0,0 +1,27 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class Holding(Cond): + can_be_expanded = True + num_params = 2 + valid_args = [tuple(Cond.all_object|{'Nothing'})] + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + + # self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + if self.name in self.scene.state["condition_set"]: + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE + + # if self.scene.state['chat_list'] == []: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/Is.py b/BTExpansionCode/EXP/behavior_lib/cond/Is.py new file mode 100644 index 0000000..3d58afc --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/Is.py @@ -0,0 +1,37 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond +import itertools + +class Is(Cond): + can_be_expanded = True + num_params = 2 + valid_params1 = [('AC','TubeLight','HallLight','Curtain'), + ('On','Off')] + valid_params2 = [('Table1','Floor','Chairs'), + ('Clean','Dirty')] + valid_params3 = [('ACTemperature'), + ('Up','Down')] + + valid_args = list(itertools.product(valid_params1[0], valid_params1[1])) + valid_args.extend(list(itertools.product(valid_params2[0], valid_params2[1]))) + valid_args.extend(list(itertools.product(valid_params3[0], valid_params3[1]))) + valid_args = tuple(valid_args) + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + # self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + if self.name in self.scene.state["condition_set"]: + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE + + # if self.scene.state['chat_list'] == []: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/NeedExplore.py b/BTExpansionCode/EXP/behavior_lib/cond/NeedExplore.py new file mode 100644 index 0000000..1c477e6 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/NeedExplore.py @@ -0,0 +1,23 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class NeedExplore(Cond): + def __init__(self): + super().__init__() + + def _update(self) -> ptree.common.Status: + # arg_str = self.arg_str + # + # if f'EnvExplored()' not in self.scene.state["condition_set"]: + # return ptree.common.Status.SUCCESS + # else: + # return ptree.common.Status.FAILURE + return ptree.common.Status.FAILURE + + + # if self.scene.status? + # if self.scene.state['map']['2d'] == None: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/NewCustomer.py b/BTExpansionCode/EXP/behavior_lib/cond/NewCustomer.py new file mode 100644 index 0000000..812c6f0 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/NewCustomer.py @@ -0,0 +1,41 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond +import itertools + +class NewCustomer(Cond): + can_be_expanded = False + num_params = 0 + valid_args = () + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + # 获取customer的位置 + # bar (247.0, 520.0, 100.0) + close_to_bar = False + scene = self.scene.status + queue_list = [] + for walker in scene.walkers: + x, y, yaw = walker.pose.X, walker.pose.Y, walker.pose.Yaw + # 到达一定区域就打招呼 + if y >= 450 and y <= 620 and x >= 40 and x <= 100 and yaw>=-10 and yaw <=10: #450-620 + # close_to_bar = True + queue_list.append((x,y,walker.name)) + + if queue_list == []: + return ptree.common.Status.FAILURE + + queue_list.sort() + x,y,name = queue_list[0] + if name not in self.scene.state["greeted_customers"]: + self.scene.state['attention']["customer"] = name + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_lib/cond/On.py b/BTExpansionCode/EXP/behavior_lib/cond/On.py new file mode 100644 index 0000000..c5d20c0 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_lib/cond/On.py @@ -0,0 +1,31 @@ +import py_trees as ptree +from typing import Any +from EXP.behavior_lib._base.Cond import Cond + +class On(Cond): + can_be_expanded = True + num_params = 2 + valid_params = [tuple(Cond.all_object), + tuple(Cond.tables_for_placement)] + + + def __init__(self,*args): + super().__init__(*args) + + + def _update(self) -> ptree.common.Status: + # if self.scene.status? + + # print("self.name:",self.name) + # print("On: condition_set:",self.scene.state["condition_set"]) + # self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio) + + if self.name in self.scene.state["condition_set"]: + return ptree.common.Status.SUCCESS + else: + return ptree.common.Status.FAILURE + + # if self.scene.state['chat_list'] == []: + # return ptree.common.Status.FAILURE + # else: + # return ptree.common.Status.SUCCESS diff --git a/BTExpansionCode/EXP/behavior_lib/cond/__init__.py b/BTExpansionCode/EXP/behavior_lib/cond/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_tree/__init__.py b/BTExpansionCode/EXP/behavior_tree/__init__.py new file mode 100644 index 0000000..8c15ec4 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/__init__.py @@ -0,0 +1,2 @@ + +# from robowaiter.behavior_tree.behavior_tree import BehaviorTree diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/__init__.py b/BTExpansionCode/EXP/behavior_tree/dataset/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output.txt b/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output.txt new file mode 100644 index 0000000..929c465 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output.txt @@ -0,0 +1,386 @@ +At(Robot,Bar) 请给我带来菜单。 +At(Robot,Bar) 请帮我前往吧台。 +At(Robot,Bar) 您好,我需要去吧台那个位置,请问可以帮我吗? +At(Robot,WaterTable) 请送一些茶水到茶水桌。 +At(Robot,WaterTable) 请帮我前往茶水桌。 +At(Robot,WaterTable) 您好,请问您需要我前往哪个位置呢? +At(Robot,CoffeeTable) 请问能帮我来到这个咖啡桌吗? +At(Robot,CoffeeTable) 请前往咖啡桌。 +At(Robot,CoffeeTable) 您好!请问您能帮我前往咖啡桌的位置吗? +At(Robot,Bar2) 您好,请问您需要前往哪个吧台呢? +At(Robot,Bar2) 请帮我前往另一个吧台。 +At(Robot,Bar2) 您好,机器人服务员!请问您能告诉我如何前往另一个吧台的位置吗? +At(Robot,Table1) 请给我送一份菜单到第一桌。 +At(Robot,Table1) 请帮我前往第一桌,谢谢! +At(Robot,Table1) 您好,我是一名AI助手,请问有什么我可以帮您的? +At(Robot,Table2) 请帮我来到第二张桌子。 +At(Robot,Table2) 请帮我前往第二桌,谢谢! +At(Robot,Table2) 您好,机器人服务员!请问您能否前往第二桌的位置提供服务? +At(Robot,Table3) 请给我带来第三桌子的服务。 +At(Robot,Table3) 请前往第三张桌子。 +At(Robot,Table3) 您好,请问您需要我前往第三张桌子所在的方位吗? +On(Softdrink,Bar) 请将软饮料放在吧台那个位置。 +On(Softdrink,Bar) 请将软饮料拿到吧台位置。 +On(Softdrink,WaterTable) 请将软饮料放在茶水桌那个位置。 +On(Softdrink,WaterTable) 请给我拿一罐软饮料,放在茶水桌的位置。 +On(Softdrink,CoffeeTable) 请将软饮料放在咖啡桌上的指定位置。 +On(Softdrink,CoffeeTable) 请把软饮料拿到我的咖啡桌位置。 +On(Softdrink,Bar2) 请将软饮料放在另一个酒吧台的位置。 +On(Softdrink,Bar2) 请将软饮料拿到另一个酒吧台位置。 +On(Softdrink,Table1) 请将软饮料放在第一桌的指定位置。 +On(Softdrink,Table1) 请给我拿一罐软饮料,放在第一桌子的位置。 +On(Softdrink,Table2) 请将软饮料放在第二桌的位置。 +On(Softdrink,Table2) 请帮我从一个位置(可能是吧台或货架)取来一瓶软饮料,然后将其放在第二张桌子上。 +On(Softdrink,Table3) 请将软饮料放在第三桌的具体位置。 +On(Softdrink,Table3) 请给我拿一罐软饮料,放 到第三张桌子的位置。 +On(BottledDrink,Bar) 您好,我想让您将瓶装饮料放在吧台那个位置。 +On(BottledDrink,Bar) 请帮我取一下瓶装饮料,放到吧台那里。 +On(BottledDrink,WaterTable) 您好,机器人服务员,我想让您放一瓶饮料在茶水桌上,可以吗? +On(BottledDrink,WaterTable) 请帮我拿一下瓶装饮料,放到茶水桌的位置。 +On(BottledDrink,CoffeeTable) 请将瓶装饮料放在咖啡桌上的指定位置。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料拿到我的咖啡桌位置。 +On(BottledDrink,Bar2) 请将瓶装饮料放在另一个酒吧台的位置。 +On(BottledDrink,Bar2) 请帮我从一个吧台位置取一个瓶装饮料,然后将其拿到另一个吧台位置。 +On(BottledDrink,Table1) 请将瓶装饮料放在第一桌的指定位置。 +On(BottledDrink,Table1) 您好,我需要您帮忙将瓶装饮料拿到第一桌的位置。 +On(BottledDrink,Table2) 您好,我需要您帮助将瓶装饮料放在第二桌的具体位置。 +On(BottledDrink,Table2) 请给我拿一罐饮料,放在第二桌的位置。 +On(BottledDrink,Table3) 请将瓶装饮料放在第三桌的位置。 +On(BottledDrink,Table3) 请给我取一瓶饮料,放到了第三桌子上。 +On(Yogurt,Bar) 您好,我需要您将酸奶放在吧台上的哪个位置。 +On(Yogurt,Bar) 请您把酸奶拿到吧台。 +On(Yogurt,WaterTable) 请将酸奶放在茶水桌那个位置。 +On(Yogurt,WaterTable) 请将酸奶放在茶水桌的位置。 +On(Yogurt,CoffeeTable) 请将酸奶放在咖啡桌上的指定位置。 +On(Yogurt,CoffeeTable) 请把酸奶放在咖啡桌的位置。 +On(Yogurt,Bar2) 请将酸奶放在另一个吧台上的那个位置。 +On(Yogurt,Bar2) 您好,机器人服务员!请问您可以帮我拿一下酸奶,放到那个靠近窗户的吧台位置吗?谢谢! +On(Yogurt,Table1) 请将酸奶放在第一桌的第一位置。 +On(Yogurt,Table1) 请将酸奶放在第一桌的位置。 +On(Yogurt,Table2) 您好,请问能帮我将酸奶放在第二张桌子的位置吗?谢谢! +On(Yogurt,Table2) 请把酸奶放在第二桌的位置。 +On(Yogurt,Table3) 您好,机器人服务员,我想让您把酸奶放到第三张桌子的位置。谢谢! +On(Yogurt,Table3) 请把酸奶放在第三桌的位置。 +On(ADMilk,Bar) 请将AD钙奶放在吧台那个位置。 +On(ADMilk,Bar) 请把AD钙奶放到 bar 位置。 +On(ADMilk,WaterTable) 请将AD钙奶放在茶水桌那个位置。 +On(ADMilk,WaterTable) 请帮我取一份AD钙奶,放在茶水桌的位置上。 +On(ADMilk,CoffeeTable) 请将AD钙奶放在咖啡桌上的指定位置。 +On(ADMilk,CoffeeTable) 请将AD钙奶送到我的咖啡桌位置。 +On(ADMilk,Bar2) 请将AD钙奶放在另一个酒吧台的位置。 +On(ADMilk,Bar2) 您好,机器人服务员!请问能帮我拿一下AD钙奶,放到另一个吧台位置吗?谢谢! +On(ADMilk,Table1) 请将AD钙奶放在第一桌的指定位置。 +On(ADMilk,Table1) 请把AD钙奶放在第一桌的位置。 +On(ADMilk,Table2) 请将AD钙奶放在第二桌的位置。 +On(ADMilk,Table2) 请把AD钙奶放在第二桌的位置。 +On(ADMilk,Table3) 您好,机器人服务员!请问能帮我将AD钙奶放到第三张桌子的位置吗?谢谢! +On(ADMilk,Table3) 请帮我取一份AD钙奶,放至第三桌。 +On(MilkDrink,Bar) 请将牛奶饮料放在吧台那个位置。 +On(MilkDrink,Bar) 请帮我拿一罐牛奶饮料放到吧台的位置。 +On(MilkDrink,WaterTable) 请将牛奶饮料放在茶水桌那个位置。 +On(MilkDrink,WaterTable) 请帮我递一下牛奶饮料,放到茶水桌的位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在咖啡桌上的指定位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在我的咖啡桌上。 +On(MilkDrink,Bar2) 请将牛奶饮料放在另一个酒吧台的位置。 +On(MilkDrink,Bar2) 您好,机器人服务员!请问能否帮我拿一下牛奶饮料,并将其放在另一个吧台位置?谢谢! +On(MilkDrink,Table1) 请将牛奶饮料放在第一桌的指定位置。 +On(MilkDrink,Table1) 请将牛奶饮料拿到第一桌。 +On(MilkDrink,Table2) 请将牛奶饮料放在第二桌的位置上。 +On(MilkDrink,Table2) 请给我拿一罐牛奶饮料,放在第二桌的位置。 +On(MilkDrink,Table3) 请将牛奶饮料放在第三桌的具体位置。 +On(MilkDrink,Table3) 请给我拿一罐牛奶饮料,放到第三张桌子的位置。 +On(Milk,Bar) 请将牛奶放在吧台那个地方。 +On(Milk,Bar) 请把牛奶拿到吧台。 +On(Milk,WaterTable) 请将牛奶放在茶水桌那个位置。 +On(Milk,WaterTable) 请将牛奶放在茶水桌附近。 +On(Milk,CoffeeTable) 请将牛奶放在咖啡桌上的指定位置。 +On(Milk,CoffeeTable) 请把牛奶放在我的咖啡桌上。 +On(Milk,Bar2) 请将牛奶放在另一个酒吧台的位置上。 +On(Milk,Bar2) 请将牛奶拿到另一个吧台位置。 +On(Milk,Table1) 请将牛奶放在第一桌的位置上。 +On(Milk,Table1) 请把牛奶放在第一桌的位置上。 +On(Milk,Table2) 请将牛奶放在第二桌那个位置。 +On(Milk,Table2) 请给我拿一罐牛奶,放的第二张桌子上。 +On(Milk,Table3) 您好,我需要您将牛奶放在第三张桌子的位置。谢谢! +On(Milk,Table3) 请给我拿一罐牛奶,放到第三桌子的位置。 +On(VacuumCup,Bar) 请将我的保温杯放在吧台上的那个位置。 +On(VacuumCup,Bar) 请将我的保温杯拿到吧台。 +On(VacuumCup,WaterTable) 请将我的保温杯放在茶水桌那个地方。 +On(VacuumCup,WaterTable) 请将保温杯拿到茶水桌那里。 +On(VacuumCup,CoffeeTable) 请将保温杯放置在咖啡桌上的指定位置。 +On(VacuumCup,CoffeeTable) 请把保温杯放在咖啡桌附近。 +On(VacuumCup,Bar2) 请将我的保温杯放在另一个酒吧台上的那个位置。 +On(VacuumCup,Bar2) 请帮我把保温杯拿到另一个吧台位置。 +On(VacuumCup,Table1) 请将保温杯放在第一桌的指定位置。 +On(VacuumCup,Table1) 请把保温杯拿到第一桌子的位置。 +On(VacuumCup,Table2) 请将保温杯放在第二桌的具体位置。 +On(VacuumCup,Table2) 请帮我递一个保温杯到第二桌。 +On(VacuumCup,Table3) 请将保温杯放在第三桌的指定位置。 +On(VacuumCup,Table3) 请把保温杯拿到第三桌的位置。 +Is(AC,0) 当然可以,请问需要我为您执行这个操作吗? +Is(AC,1) 您好!请问您需要我为您打开空调吗? +Is(ACTemperature,0) 尊敬的服务员,可以请您把空调温度调高一些吗?谢谢! +Is(ACTemperature,1) 尊敬的服务员,能否请您将空调温度调低一些呢? +Is(HallLight,0) 当然可以,请您稍等,我这就帮您关闭大厅灯。 +Is(HallLight,1) 您好!请问您需要我为您做些什么呢? +Is(TubeLight,0) 尊敬的服务员,请问你能把筒灯调暗一些吗? +Is(TubeLight,1) 您好,请问您需要我帮您打开筒灯吗? +Is(Curtain,0) 您好,我能为您做什么? +Is(Curtain,1) 您好,请问您需要我帮您打开窗帘吗? +Is(Chairs,0) 您好!请问需要我为您做什么? +Is(Chairs,1) 您好,请问能帮我清理一下座位上的灰尘吗? +Is(Floor,0) 抱歉,我理解您的意思了。请问需要我帮忙做些什么来清理地板呢? +Is(Floor,1) 请问你能帮我打扫一下地板吗? +Is(Table1,0) 您好,请问需要我帮助您做什么呢?如果您需要我清理桌子的灰尘或者污渍,麻烦您告诉我哪一张桌子需要清洁。 +Is(Table1,1) 请帮我清理一下这张桌子的灰尘和垃圾。 +Holding(Softdrink) 您好,我是您的机器人服务员。请问您需要什么帮助呢? +Holding(Softdrink) 您好,我是一个机器人服务员。请问您需要什么帮助?如果您想要点软饮料,您可以告诉我您的喜好,我会为您推荐一些适合的选项。 +Holding(BottledDrink) 您好,请问您需要什么帮助?我会尽力满足您的需求。 +Holding(BottledDrink) 您好,我是一名机器人服务员。请问您需要我帮忙拿着一瓶装饮料吗? +Holding(Yogurt) 您好,我可以帮助您点餐和回答问题。请问您需要什么食物或饮料? +Holding(Yogurt) 请问你能一直帮我拿着这个酸奶吗? +Holding(ADMilk) 你好,尊敬的服务员!能否帮我抓住AD钙奶并递给我呢? +Holding(ADMilk) 您好,我无法长时间拿着 AD 钙奶。作为一个机器人服务员,我的任务是帮助您解决问题和回答问题,而不是提供物理服务。如果您需要AD钙奶,我可以告诉您在哪里可以找到它,或者指导您如何自己获取它。 +Holding(MilkDrink) 您好!请问有什么我可以帮您的吗? +Holding(MilkDrink) 您好,我是您的机器人服务员。请问您需要我为您一直拿着这杯牛奶饮料吗? +Holding(Milk) 你好,尊敬的服务员,能帮我拿一下牛奶吗? +Holding(Milk) 请问你能一直拿着牛奶吗? +Holding(VacuumCup) 您好,请问您需要什么帮助?我可以为您提供服务。 +Holding(VacuumCup) 您好,我是一名AI机器人,无法直接为您拿保温杯。但是,我可以为您提供购买保温杯的建议,或者推荐其他相关商品。请问您需要什么帮助吗? +Holding(Nothing) 抱歉,我需要更多的信息来理解您的请求。请问您能告诉我您具体想要什么帮助吗?我会尽力回答您的问题。 +Holding(Nothing) 请问您能一直拿着无所事事吗? +On(Coffee,Bar) 您好,我需要一杯咖啡,并希望它能够被送到吧台。 +On(Coffee,Bar) 请帮我准备一杯咖啡,然后把咖啡端到吧台这里。 +On(Coffee,WaterTable) 您好!请问您能帮我制作一杯咖啡并将其端到茶水桌 here 吗?谢谢! +On(Coffee,WaterTable) 请帮我准备一杯咖啡,然后将它端到茶水桌旁边。 +On(Coffee,CoffeeTable) 当然可以,请问您想喝什么类型的咖啡呢? +On(Coffee,CoffeeTable) 请帮我准备一杯咖啡,然后将它端到这个咖啡桌上来。 +On(Coffee,Bar2) 您好,机器人服务员!请问您能帮我制作一杯咖啡,然后把咖啡端到这个吧台这里来吗?谢谢! +On(Coffee,Bar2) 请帮我准备一杯咖啡,然后把咖啡端到这个吧台这里。 +On(Coffee,Table1) 您好,我是一名人工智能助手。请问您需要什么帮助? +On(Coffee,Table1) 请给我一杯咖啡,并将其放在第一桌子上。 +On(Coffee,Table2) 您好,机器人服务员!我想要一杯咖啡,并且希望它能够被送到第二张桌子上。 +On(Coffee,Table2) 请为我准备一杯咖啡,并将其送到第二桌。 +On(Coffee,Table3) 您好!请问您能否帮我制作一杯咖啡,然后把咖啡端到第三张桌子上呢?谢谢! +On(Coffee,Table3) 请为我准备一杯咖啡,并将其送到第三张桌子上。 +On(Water,Bar) 您好,我需要一杯水,并且希望它能够被端到吧台那里。 +On(Water,Bar) 请为我准备一杯水,并将其送到吧台。 +On(Water,WaterTable) 您好,我需要一杯水,并希望您能将其端到茶水桌这里。 +On(Water,WaterTable) 请为我送一杯水,并将其放在茶水桌上。 +On(Water,CoffeeTable) 您好,我是一名机器人服务员。请问您需要一杯水,我可以为您制作并在准备好后将其端到咖啡桌旁边。 +On(Water,CoffeeTable) 请给我一杯水,并将其递送到我的咖啡桌上。 +On(Water,Bar2) 您好,机器人服务员!请问你能帮我制作一杯水,然后将其端到距离这里较远的另一个吧台吗?谢谢! +On(Water,Bar2) 请给我倒一杯水,然后把水端到这个吧台这里。 +On(Water,Table1) 您好,我需要一杯水,并希望它能够被送到我所在的桌子上。 +On(Water,Table1) 请为我准备一杯水,并将其送到这张桌子的位置上。 +On(Water,Table2) 您好,我需要一杯水,并希望你能将它端到第二张桌子上。 +On(Water,Table2) 请给我倒一杯水,并把水杯端到第二桌子上。 +On(Water,Table3) 您好,机器人服务员!请问能否为您制作一杯水,并将其送到第三张桌子呢? +On(Water,Table3) 请为我准备一杯水,并将其送到第三桌。 +On(Dessert,Bar) 您好,我需要点心和甜品。请帮我制作一下,然后把它们带到吧台来。 +On(Dessert,Bar) 您好,我可以帮您点一些点心或甜品,然后将它们送到吧台。请问您想点什么? +On(Dessert,WaterTable) 您好,我需要点心和甜品,并将它们端到茶水桌 here。 +On(Dessert,WaterTable) 请为我准备一些点心或甜品,并将其递送到我的茶水桌子上。 +On(Dessert,CoffeeTable) 您好,我是一个人工智能助手,虽然我不能直接为您制作点心或甜品,但我可以帮助您找到附近的餐厅或店铺,为您推荐美味的点心或甜品,您可以品尝一下。如果您有其他需要帮助的地方,也请随时告诉我。 +On(Dessert,CoffeeTable) 请为我准备一些点心或甜品,然后将其放置在咖啡桌附近。 +On(Dessert,Bar2) 您好,我需要点心和甜品。请问您能帮我制作吗?然后把它们端到这里来。谢谢! +On(Dessert,Bar2) 请帮我点一份点心或甜品,然后把它端到另一个吧台那里。 +On(Dessert,Table1) 您好,我是一位AI助手,无法直接为您制作点心或甜品。但我可以为您推荐菜单上的点心或甜品,或者帮您下单购买。请问您需要什么帮助? +On(Dessert,Table1) 请帮我点一些点心或甜品,并把它们放在这张桌子上。 +On(Dessert,Table2) 您好,机器人服务员!我需要点心和甜品,可以帮我制作吗?把它们送到第二桌来,谢谢! +On(Dessert,Table2) 您好,请问有什么我可以帮您的吗?您可以点一些点心或甜品,然后告诉我放在哪一张桌子上,我会马上为您送过去。 +On(Dessert,Table3) 您好,我需要点心和甜品,请把它们送到第三桌。 +On(Dessert,Table3) 您好,机器人服务员!请问您能帮我点些点心或甜品吗?我要把它们送到第三桌。 +At(Robot,Bar) 您好,机器人服务员!请问您能带路来到 Bar 吗?我想要一杯饮料和一些小吃。谢谢! +At(Robot,Bar) 请帮我前往Bar。 +At(Robot,Bar) 请问你能带我前往Bar位置吗? +At(Robot,WaterTable) 请帮我找到WaterTable。 +At(Robot,WaterTable) 您好,机器人服务员!请问您能帮我订一张去WaterTable的桌子吗? +At(Robot,WaterTable) 当然可以!请问您需要我向WaterTable位置发送消息吗? +At(Robot,CoffeeTable) 请把咖啡机移到CoffeeTable附近。 +At(Robot,CoffeeTable) 请前往CoffeeTable。 +At(Robot,CoffeeTable) 您好,我是一名人工智能助手,请问有什么我可以帮您的? +At(Robot,Bar2) 您好,我需要去Bar2。 +At(Robot,Bar2) 您好,机器人服务员,请问您能帮我前往Bar2吗? +At(Robot,Bar2) 您好,我是一名AI助手,无法移动到特定的位置。但我会尽力为您提供帮助。您想前往Bar2吗?如果有其他问题,欢迎随时告诉我。 +At(Robot,Table1) 请把菜单送到Table 1。 +At(Robot,Table1) 请前往Table1。 +At(Robot,Table1) 您好,我能前往Table1位置吗? +At(Robot,Table2) 请带领我到Table 2。 +At(Robot,Table2) 请前往Table2。 +At(Robot,Table2) 您好!请问您需要我前往Table2位置吗? +At(Robot,Table3) 请把服务生叫来Table 3。 +At(Robot,Table3) 请去Table3。 +At(Robot,Table3) 您好,我需要您前往Table3位置。 +On(Softdrink,Bar) 请将Softdrink放在Bar那个位置。 +On(Softdrink,Bar) 请把Softdrink拿到Bar位置。 +On(Softdrink,WaterTable) 您好,机器人服务员!请问能帮我将Softdrink放在WaterTable的位置上吗?谢谢! +On(Softdrink,WaterTable) 请把Softdrink拿到WaterTable的位置。 +On(Softdrink,CoffeeTable) 请将Softdrink放在CoffeeTable那个位置。 +On(Softdrink,CoffeeTable) 请将Softdrink拿到CoffeeTable的位置。 +On(Softdrink,Bar2) 您好,机器人服务员!请问能否帮我放一下Softdrink到Bar2的位置呢?谢谢! +On(Softdrink,Bar2) 请把Softdrink拿到Bar2的位置。 +On(Softdrink,Table1) 请将Softdrink放在Table1的位置。 +On(Softdrink,Table1) 请把Softdrink拿到Table 1的位置。 +On(Softdrink,Table2) 您好,机器人服务员!请将Softdrink放在Table 2的位置。谢谢! +On(Softdrink,Table2) 请将Softdrink拿到Table 2的位置。 +On(Softdrink,Table3) 您好,机器人服务员!请问能否将Softdrink放在Table3的位置上? +On(Softdrink,Table3) 请将Softdrink拿到Table 3的位置。 +On(BottledDrink,Bar) 请将瓶装饮料放在酒吧那个位置。 +On(BottledDrink,Bar) 请将瓶装饮料送到酒吧区域。 +On(BottledDrink,WaterTable) 请将瓶装饮料放在水桌那个位置。 +On(BottledDrink,WaterTable) 请把瓶装饮料拿到水桌的位置。 +On(BottledDrink,CoffeeTable) 请将瓶装饮料放在咖啡桌那个位置。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料放在咖啡桌的位置。 +On(BottledDrink,Bar2) 请将瓶装饮料放在 Bar 2 的位置。 +On(BottledDrink,Bar2) 请把瓶装饮料送到酒吧2号位置。 +On(BottledDrink,Table1) 您好,机器人服务员!请将瓶装饮料放在Table1的位置上。谢谢! +On(BottledDrink,Table1) 请将瓶装饮料拿到Table 1的位置。 +On(BottledDrink,Table2) 请将Bottled Drink放在Table 2的位置。 +On(BottledDrink,Table2) 请把瓶装饮料送到Table2位置。 +On(BottledDrink,Table3) 请将瓶装饮料放在Table3的位置上。 +On(BottledDrink,Table3) 请把瓶装饮料拿到Table3的位置。 +On(Yogurt,Bar) 您好,请问您需要将酸奶放在哪个位置? +On(Yogurt,Bar) 请把Yogurt送到Bar位置。 +On(Yogurt,WaterTable) 请将Yogurt放在WaterTable的位置上。 +On(Yogurt,WaterTable) 请把Yogurt送到WaterTable位置。 +On(Yogurt,CoffeeTable) 请将Yogurt放在CoffeeTable那个位置。 +On(Yogurt,CoffeeTable) 请把Yogurt送到CoffeeTable那里。 +On(Yogurt,Bar2) 您好,机器人服务员!请帮我将酸奶(Yogurt)放在 Bar2 的位置上。谢谢! +On(Yogurt,Bar2) 请将Yogurt送到Bar2位置。 +On(Yogurt,Table1) 您好,机器人服务员!请将酸奶(Yogurt)放到Table1的位置上。谢谢! +On(Yogurt,Table1) 请将Yogurt拿到Table 1的位置。 +On(Yogurt,Table2) 请将 Yogurt 放在 Table2 的那个位置。 +On(Yogurt,Table2) 请将 Yogurt 拿到 Table 2 的位置。 +On(Yogurt,Table3) 您好,请问可以帮我将Yogurt放在Table3的位置吗? +On(Yogurt,Table3) 请将Yogurt放在Table 3的位置上。 +On(ADMilk,Bar) 请将AD Milk放在Bar位置。 +On(ADMilk,Bar) 请把ADMilk拿到Bar位置。 +On(ADMilk,WaterTable) 请将AD Milk放在 WaterTable 的那个位置。 +On(ADMilk,WaterTable) 您好,请问能帮我拿一下ADMilk到WaterTable的位置吗? +On(ADMilk,CoffeeTable) 您好,我需要您将ADMilk放在CoffeeTable那个位置。 +On(ADMilk,CoffeeTable) 请将AD Milk拿到Coffee Table的位置。 +On(ADMilk,Bar2) 请将AD Milk放置在Bar 2的位置。 +On(ADMilk,Bar2) 请把ADMilk拿到Bar2位置。 +On(ADMilk,Table1) 请将ADMilk放到Table1的位置。 +On(ADMilk,Table1) 请将ADMilk搬到Table1的位置。 +On(ADMilk,Table2) 请将ADMilk放在Table2的位置。 +On(ADMilk,Table2) 请把ADMilk搬到Table2的位置。 +On(ADMilk,Table3) 请将ADMilk放在Table3的位置。 +On(ADMilk,Table3) 您好,服务员!能帮我拿一下ADMilk到Table3位置吗? +On(MilkDrink,Bar) 请将牛奶饮料放在吧台那个位置。 +On(MilkDrink,Bar) 请把牛奶饮料拿到酒吧位置。 +On(MilkDrink,WaterTable) 请将牛奶饮料放在水桌那个位置。 +On(MilkDrink,WaterTable) 请把牛奶饮料拿到水 table 位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在咖啡桌那个位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料递送到咖啡桌位置。 +On(MilkDrink,Bar2) 请将牛奶饮料放在吧台2的位置。 +On(MilkDrink,Bar2) 请把牛奶饮料递送到酒吧2号位置。 +On(MilkDrink,Table1) 请将牛奶饮料放在Table1的位置上。 +On(MilkDrink,Table1) 请把牛奶饮料拿到Table1的位置。 +On(MilkDrink,Table2) 请将牛奶饮料放到桌子2的位置。 +On(MilkDrink,Table2) 请把牛奶饮料送到Table2位置。 +On(MilkDrink,Table3) 请将牛奶饮料放在桌3的位置。 +On(MilkDrink,Table3) 请将牛奶饮料拿到 table 3 的位置。 +On(Milk,Bar) 请将牛奶放在酒吧那个位置。 +On(Milk,Bar) 请把牛奶拿到酒吧位置。 +On(Milk,WaterTable) 请将牛奶放在水 table 的那个位置。 +On(Milk,WaterTable) 请把牛奶拿到 WaterTable 那里。 +On(Milk,CoffeeTable) 请将牛奶放在咖啡桌上的指定位置。 +On(Milk,CoffeeTable) 请把牛奶拿到咖啡桌的位置。 +On(Milk,Bar2) 请将牛奶放在 Bar2 的位置。 +On(Milk,Bar2) 请把牛奶放到Bar2的位置。 +On(Milk,Table1) 您好,机器人服务员!请将牛奶放在Table1的位置。 +On(Milk,Table1) 请把牛奶拿到Table1的位置。 +On(Milk,Table2) 请将牛奶放在Table2的位置。 +On(Milk,Table2) 请把牛奶放在Table2的位置上。 +On(Milk,Table3) 请将牛奶放在Table3的位置上。 +On(Milk,Table3) 请把牛奶拿到Table3的位置。 +On(VacuumCup,Bar) 请将VacuumCup放置在Bar位置。 +On(VacuumCup,Bar) 请把VacuumCup放到Bar位置。 +On(VacuumCup,WaterTable) 请将VacuumCup放置在WaterTable上。 +On(VacuumCup,WaterTable) 请把VacuumCup放到WaterTable的位置。 +On(VacuumCup,CoffeeTable) 请将VacuumCup放在CoffeeTable那个地方。 +On(VacuumCup,CoffeeTable) 请把VacuumCup放到CoffeeTable上。 +On(VacuumCup,Bar2) 请将VacuumCup放置在Bar2的位置上。 +On(VacuumCup,Bar2) 请把VacuumCup移到Bar2的位置。 +On(VacuumCup,Table1) 请将VacuumCup放置在Table1的位置上。 +On(VacuumCup,Table1) 请把VacuumCup移到Table1的位置。 +On(VacuumCup,Table2) 请将VacuumCup放到Table2的位置。 +On(VacuumCup,Table2) 请把VacuumCup放到Table2的位置。 +On(VacuumCup,Table3) 请将VacuumCup放置在Table3的位置上。 +On(VacuumCup,Table3) 请将VacuumCup移至Table3位置。 +Is(AC,0) 请问你能帮我关掉AC吗? +Is(AC,1) 请问你能帮我打开空调吗? +Is(ACTemperature,0) 尊敬的服务员,请问您能否将温度调高一些呢? +Is(ACTemperature,1) 请问你能将咖啡厅的温度调低一些吗? +Is(HallLight,0) 当然可以,请问需要我使用哪个开关来关闭HallLight呢? +Is(HallLight,1) 您好!请问您需要我帮助您开启还是关闭HallLight呢? +Is(TubeLight,0) 当然可以,请问您需要我使用哪个遥控器来关闭它呢? +Is(TubeLight,1) 您好,机器人服务员!请问您能帮我打开一下 tube light 吗?谢谢! +Is(Curtain,0) 请问你能把窗帘关上吗? +Is(Curtain,1) 请问你能把窗户帘打开一下吗? +Is(Chairs,0) 您好,请问您需要我帮助清理座位上的污渍吗? +Is(Chairs,1) 您好,我是您的顾客。我想请问您是否能帮我清理一下座位上的灰尘和垃圾? +Is(Floor,0) 您好,我能为您做些什么呢?如果您需要我帮忙打扫地板,请告诉我哪里需要清理,我会尽快为您处理。 +Is(Floor,1) 您好,我需要您帮助打扫一下地板。 +Is(Table1,0) 您好!请问您需要我为您做什么呢?如果您需要我清理Table1,请您告诉我需要使用什么清洁用品,我会按照您的指示进行操作。 +Is(Table1,1) 您好,请问需要我帮您打扫Table1吗? +Holding(Softdrink) 您好,我是一款人工智能助手,无法直接与现实世界进行交互。但我可以为您提供有关如何抓饮料的信息。您可以尝试用手指将Softdrink抓在手中。如果您需要更多帮助,请随时告诉我。 +Holding(Softdrink) 您好,我是您的机器人服务员。我能帮您拿住Softdrink吗? +Holding(BottledDrink) 我能帮我拿起那瓶饮料吗? +Holding(BottledDrink) 您好!请问您需要我帮您一直拿着这瓶饮料吗? +Holding(Yogurt) 请问你能帮我拿一下 yogurt 吗? +Holding(Yogurt) 您好,我可以帮助您更好地理解和使用我们的服务。请问您需要我为您拿取什么商品呢? +Holding(ADMilk) 你能帮我拿一下AD Milk吗? +Holding(ADMilk) 您好,我需要点一杯AD Milk。麻烦您能帮我拿一下吗? +Holding(MilkDrink) 我想要一杯牛奶饮料,能帮我把它端过来吗? +Holding(MilkDrink) 我需要你一直拿着牛奶饮料。 +Holding(Milk) 您好,请问有什么我可以帮助您的? +Holding(Milk) 您好,我是您的机器人服务员。请问有什么我可以帮助您的吗? +Holding(VacuumCup) 您好!请问您需要什么帮助? +Holding(VacuumCup) 您好!请问您需要我帮助您一直拿着VacuumCup吗? +Holding(Nothing) 你能帮我把"Nothing"拿在手里吗? +Holding(Nothing) 您好!作为您的机器人服务员,我会尽力满足您的要求。请问您需要我帮忙做什么呢? +On(Coffee,Bar) 当然可以!请问您想要什么口味的咖啡呢? +On(Coffee,Bar) 请给我一杯咖啡,并将其送到吧台。 +On(Coffee,WaterTable) 当然可以,请告诉我您想喝的咖啡口味,我会为您制作一杯美味的咖啡,然后将其送到WaterTable桌旁。 +On(Coffee,WaterTable) 请给我一杯咖啡,并将其送到 WaterTable 那里。 +On(Coffee,CoffeeTable) 您好,我是一名机器人服务员。我能为您制作一杯咖啡,并将其端到CoffeeTable上吗? +On(Coffee,CoffeeTable) 请给我一杯咖啡,并把它送到Coffee Table那里。 +On(Coffee,Bar2) 当然可以,请告诉我您想要什么口味的咖啡,我会为您制作并在准备好后把咖啡端到Bar 2。 +On(Coffee,Bar2) 请给我一杯咖啡,并将其送到Bar2。 +On(Coffee,Table1) 当然可以!请问您需要什么口味的咖啡呢? +On(Coffee,Table1) 请给我一杯咖啡,并将其送到Table1。 +On(Coffee,Table2) 您好,机器人服务员!我想要一杯咖啡,并希望它能够被送到 Table 2。 +On(Coffee,Table2) 请为我准备一杯咖啡,并将其送到Table 2。 +On(Coffee,Table3) 您好,机器人服务员!请问您能帮我制作一杯咖啡,然后将其端到Table 3吗?谢谢! +On(Coffee,Table3) 请为我准备一杯咖啡,并将其送到Table 3。 +On(Water,Bar) 您好,我需要一杯水,请能帮我制作并送到酒吧处谢谢! +On(Water,Bar) 我需要一杯水,并希望它能够被送到酒吧区域。 +On(Water,WaterTable) 您好,我需要一杯水,并将它送到水桌子上。 +On(Water,WaterTable) 请为我准备一些水,并将其送到水桌 here。 +On(Water,CoffeeTable) 您好,我需要一杯水,并将它送到咖啡桌 here。 +On(Water,CoffeeTable) 请给我倒一杯水,然后将其放在咖啡桌子上。 +On(Water,Bar2) 当然可以!请问您在哪个咖啡厅?我想请您把水送到 Bar 2。 +On(Water,Bar2) 我需要一杯水,并希望它能够被送到Bar2那里。 +On(Water,Table1) 您好,我是一名机器人服务员。请问您需要什么帮助? +On(Water,Table1) 请给我一杯水,并将其送到Table1位置。 +On(Water,Table2) 当然可以!请问您需要什么温度的水呢?并且您想要在哪个桌子上 receiving 水呢? +On(Water,Table2) 请给我倒一杯水,并把水送到Table 2那里。 +On(Water,Table3) 您好,机器人服务员!请问您能给我准备一杯水,然后将其送到 Table 3 位置吗?谢谢! +On(Water,Table3) 请给我倒一杯水,并将其送到 Table 3 桌子上。 +On(Dessert,Bar) 您好,我需要一份甜点并将其送到吧台。 +On(Dessert,Bar) 请送一些甜点来,并将其送到吧台处。 +On(Dessert,WaterTable) 您好,我需要一份甜点,并希望它能够被送到名为"WaterTable"的水 table 那里。 +On(Dessert,WaterTable) 请为我准备一些甜点,并将它送到watertable来。 +On(Dessert,CoffeeTable) 您好,我是一名机器人服务员。我能为您制作甜点,并将其送到咖啡桌旁边。请问您想点什么类型的甜点呢? +On(Dessert,CoffeeTable) 请为我准备一些甜点,并将其送到咖啡桌这里。 +On(Dessert,Bar2) 您好,我需要一份甜点,并希望它能够被送到酒吧2。 +On(Dessert,Bar2) 请为我准备一些甜点,并将其送到Bar2。 +On(Dessert,Table1) 您好,机器人服务员!我想要一份甜点,并希望它能够被送到Table1那里。 +On(Dessert,Table1) 请为我准备一些甜点,并将其送到Table1。 +On(Dessert,Table2) 您好,我是一名机器人服务员。我能为您制作甜点并将它送到Table 2吗? +On(Dessert,Table2) 请给我上甜点,并将它送到Table2那里。 +On(Dessert,Table3) 您好,机器人服务员!请问您能帮我制作一份甜点并将其送到Table 3吗? +On(Dessert,Table3) 请为我准备一些甜点,并将其送到Table3桌子上。 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output1.txt b/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output1.txt new file mode 100644 index 0000000..ddbd385 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output1.txt @@ -0,0 +1,388 @@ +At(Robot,Bar) 嘿,来酒吧了啊? +At(Robot,Bar) 你可以去前台一下吗? +At(Robot,Bar) 当然可以,我可以过去帮忙吗? +At(Robot,WaterTable) 哎呀,你终于出现了啊!赶紧过来坐一下,我给你倒杯茶水。 +At(Robot,WaterTable) 嘿,你能帮我再去茶水桌那儿拿一下水吗? +At(Robot,WaterTable) 当然可以啊,我马上就去茶水桌那儿。 +At(Robot,CoffeeTable) 哎呀,你终于出现了啊!赶紧过来坐一下,我给你倒杯咖啡。 +At(Robot,CoffeeTable) 你可以去 coffee table 一下哦。 +At(Robot,CoffeeTable) 当然可以呀!你可以去咖啡桌的那边坐下来,我就在这边的桌子旁陪着你。 +At(Robot,Bar2) 好的,我可以到另一个吧台帮忙吗? +At(Robot,Bar2) 你可以去另一个酒吧台坐坐吗? +At(Robot,Bar2) 当然可以,您想让我去哪个吧台呢? +At(Robot,Table1) 好的,我來試著把第一張桌子搬起來。 +At(Robot,Table1) 你可以去第一桌啊,那里的东西比较好吃。 +At(Robot,Table1) 当然可以,你可以帮我稳住身体,然后我就能过去坐在第一张桌子上啦! +At(Robot,Table2) 请把第二桌子的东西拿过来。 +At(Robot,Table2) 你可以去第二桌啊。 +At(Robot,Table2) 当然可以,你想去哪一张桌子呢? +At(Robot,Table3) 好的,我马上去拿第三张桌子。 +At(Robot,Table3) 请你到第三桌子上坐一下。 +At(Robot,Table3) 当然可以,移到第三张桌子那边怎么样? +On(Softdrink,Bar) 请把饮料放到酒吧柜台上。 +On(Softdrink,Bar) 嘿,能帮我拿一下饮料吗?放到酒吧台上谢谢! +On(Softdrink,WaterTable) 你可以把软饮放在茶水桌那个地方哦。 +On(Softdrink,WaterTable) 你可以把饮料放到茶水桌那儿呀。 +On(Softdrink,CoffeeTable) 你可以把饮料放在咖啡桌那个地方呀。 +On(Softdrink,CoffeeTable) 你可以把饮料放到咖啡桌附近呀。 +On(Softdrink,Bar2) 请你把饮料放在另一个酒吧台的位置。 +On(Softdrink,Bar2) 请帮我从一个酒吧台拿杯饮料,放到另一个酒吧台吧。 +On(Softdrink,Table1) 请你把饮料放在第一桌的位子上面。 +On(Softdrink,Table1) 请把饮料放到第一桌的位子上。 +On(Softdrink,Table2) 请你把饮料放到第二桌那个地方。 +On(Softdrink,Table2) 请你把饮料放到第二桌的位置。 +On(Softdrink,Table3) 请你把饮料放到第三桌那个地方。 +On(Softdrink,Table3) 请给我一瓶饮料,放到第三桌子上。 +On(BottledDrink,Bar) 请把瓶装饮料放到酒吧那个地方。 +On(BottledDrink,Bar) 你可以把瓶装饮料放到酒吧台面上。 +On(BottledDrink,WaterTable) 你可以把瓶装饮料放在茶水桌那个地方呀。 +On(BottledDrink,WaterTable) 请把瓶装饮料放到茶水桌那儿吧。 +On(BottledDrink,CoffeeTable) 把瓶装饮料放到咖啡桌那个地方吧。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料放到咖啡桌附近。 +On(BottledDrink,Bar2) 请把瓶装饮料放 到另一个酒吧那个地方。 +On(BottledDrink,Bar2) 你可以把瓶装饮料拿到另一个酒吧台的位置。 +On(BottledDrink,Table1) 请把瓶装饮料放在第一桌的相应位置。 +On(BottledDrink,Table1) 请你把瓶装饮料放到第一桌子的位置。 +On(BottledDrink,Table2) 请你把瓶装饮料放到第二大桌子的那个位置。 +On(BottledDrink,Table2) 请您把瓶装饮料放到第二桌的位置。 +On(BottledDrink,Table3) 请把瓶装饮料放到第三桌的那一边。 +On(BottledDrink,Table3) 请您把瓶装饮料放到第三桌子上。 +On(Yogurt,Bar) 把酸奶放在吧台那个位置。 +On(Yogurt,Bar) 请把酸奶放到吧台哦! +On(Yogurt,WaterTable) 把酸奶放到茶水桌那个地方哦。 +On(Yogurt,WaterTable) 你可以把酸奶放到茶水桌附近呀。 +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌那个地方。 +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌附近。 +On(Yogurt,Bar2) 请你把酸奶放到另一个吧台那个位置。 +On(Yogurt,Bar2) 请把酸奶放到另一个台子的位置吧。 +On(Yogurt,Table1) 请把酸奶放在第一桌的位置哦! +On(Yogurt,Table1) 请把酸奶放到第一桌的位置。 +On(Yogurt,Table2) 请把酸奶放到第二桌那个位置哦! +On(Yogurt,Table2) 你可以把酸奶放到第二桌的位置呀。 +On(Yogurt,Table3) 请把酸奶放到第三桌的那儿吧。 +On(Yogurt,Table3) 请你把酸奶放到第三桌子上。 +On(ADMilk,Bar) 把AD钙奶放到吧台那个地方。 +On(ADMilk,Bar) 请把AD钙奶放到吧台哦! +On(ADMilk,WaterTable) 好的,我帮你把AD钙奶放到茶水桌那个地方。 +On(ADMilk,WaterTable) 你可以把AD钙奶放到茶水桌附近呀。 +On(ADMilk,CoffeeTable) 好的,AD钙奶就放在咖啡桌那个地方吧。 +On(ADMilk,CoffeeTable) 你可以把AD钙奶放到咖啡桌旁边呀。 +On(ADMilk,Bar2) 你能否把AD钙奶放到另一个吧台的位置呢? +On(ADMilk,Bar2) 你可以把AD钙奶放到另一个酒吧台的位置上。 +On(ADMilk,Table1) 请把AD钙奶放到第一桌的位子上面。 +On(ADMilk,Table1) 请把AD钙奶放到第一桌的位置。 +On(ADMilk,Table2) 请把AD钙奶放到第二桌的那儿吧。 +On(ADMilk,Table2) 请把AD钙奶放到第二桌的位置。 +On(ADMilk,Table3) 请把AD钙奶放到第三桌的那儿吧。 +On(ADMilk,Table3) 请把AD钙奶放到第三桌子的位置。 +On(MilkDrink,Bar) 把牛奶饮料放到吧台那个地方。 +On(MilkDrink,Bar) 你可以把牛奶饮料拿到吧台前面。 +On(MilkDrink,WaterTable) 你可以把牛奶饮料放在茶水桌那个地方哦。 +On(MilkDrink,WaterTable) 你可以把牛奶饮料放到茶水桌附近呀。 +On(MilkDrink,CoffeeTable) 你可以把牛奶放到了咖啡桌那个地方哦。 +On(MilkDrink,CoffeeTable) 请你把牛奶饮料放到咖啡桌附近呀。 +On(MilkDrink,Bar2) 请你把牛奶饮料放到另一个吧台那个位置,好吗? +On(MilkDrink,Bar2) 请把牛奶饮料放到另一个酒吧台的位置。 +On(MilkDrink,Table1) 请把牛奶放第一桌的位置哦! +On(MilkDrink,Table1) 请把牛奶饮料放到第一桌的位子上。 +On(MilkDrink,Table2) 你可以把牛奶放 到这张桌子的第二個位置。 +On(MilkDrink,Table2) 请你把牛奶饮料放到第二桌的位置。 +On(MilkDrink,Table3) 请你把牛奶放到第三桌的那儿吧。 +On(MilkDrink,Table3) 请你把牛奶饮料放到第三桌子上。 +On(Milk,Bar) 请把牛奶放到吧台那个地方。 +On(Milk,Bar) 请把牛奶放到吧台的位置哦。 +On(Milk,WaterTable) 你可以把牛奶放到茶水桌那个地方哦。 +On(Milk,WaterTable) 请你把牛奶放到茶水桌那个地方。 +On(Milk,CoffeeTable) 你可以把牛奶放在咖啡桌上的那个地方哦。 +On(Milk,CoffeeTable) 你可以把牛奶放到咖啡桌旁边呀,这样就能方便地喝牛奶了。 +On(Milk,Bar2) 请你把牛奶放到另一个吧台那个位置。 +On(Milk,Bar2) 你可以把牛奶放过去一点。 +On(Milk,Table1) 请把牛奶放到第一桌子的位置。 +On(Milk,Table1) 请你把牛奶放到第一桌的位置。 +On(Milk,Table2) 请把牛奶放到第二桌子的那个位置哦! +On(Milk,Table2) 请你把牛奶放到第二桌的位置。 +On(Milk,Table3) 你可以把牛奶放 third table 的那个位置哦! +On(Milk,Table3) 请把牛奶放到第三桌子上。 +On(VacuumCup,Bar) 请把保温杯放 到吧台那个地方。 +On(VacuumCup,Bar) 你可以把保温杯放到吧台哦。 +On(VacuumCup,WaterTable) 请把保温杯放茶水桌那个地方哦。 +On(VacuumCup,WaterTable) 请你把保温杯放到茶水桌那儿。 +On(VacuumCup,CoffeeTable) 你可以把你的保温杯放到咖啡桌那个地方呀。 +On(VacuumCup,CoffeeTable) 请把保温杯放到咖啡桌那里。 +On(VacuumCup,Bar2) 你可以把保温杯放到另一个吧台那个地方呀。 +On(VacuumCup,Bar2) 你可以把保温杯放到另一个酒吧台的位置呀。 +On(VacuumCup,Table1) 请把保温杯放到第一桌子的那个位置。 +On(VacuumCup,Table1) 请把保温杯放到第一桌子的位置。 +On(VacuumCup,Table2) 请把保温杯放到第二桌子的那个位置。 +On(VacuumCup,Table2) 你可以把保温杯放到第二桌子的地方。 +On(VacuumCup,Table3) 请把保温杯放到了第三张桌子的那个地方。 +On(VacuumCup,Table3) 请把保温杯放到第三桌子的地方。 +Is(AC,0) 当然可以,您想什么时候关呢? +Is(AC,1) 当然可以,我马上为您打开空调。 +Is(ACTemperature,0) 当然可以!你把空调的温度调高一点吗? +Is(ACTemperature,1) 可以啊,您要把空调的温度调低一些吗? +Is(HallLight,0) 当然可以,我马上为您关掉大厅的灯。 +Is(HallLight,1) 当然可以,我马上为你开启大厅的灯光。 +Is(TubeLight,0) 当然可以,你只需按一下筒灯的开关按钮即可。 +Is(TubeLight,1) 当然可以,请告诉我你想要多亮度的筒灯呢? +Is(Curtain,0) 好的,我马上帮您关窗帘。 +Is(Curtain,1) 当然可以,您想让阳光照进房间吗? +Is(Chairs,0) 当然可以,把椅子弄脏一点没问题。不过要注意,我是一个人工智能助手,虽然可以理解您的请求,但实际操作能力有限,可能不能非常完美地完成这个任务。 +Is(Chairs,1) 当然可以,亲爱的。把椅子擦干净需要一些努力和耐心,但我会帮您做得干干净净的。 +Is(Floor,0) 你能把地板弄脏一点吗? +Is(Floor,1) 能帮我打扫下地板吗? +Is(Table1,0) 第一,你可以把桌子弄脏一点。 +Is(Table1,1) 当然可以,你想要我尽快完成这个任务吗? +Holding(Softdrink) 你能抓住软饮吗? +Holding(Softdrink) 你能不能一直拿着软饮呢? +Holding(BottledDrink) 能抓住瓶装饮料吗?当然可以啊! +Holding(BottledDrink) 你能一直拿着瓶装饮料吗?当然可以啊,只要喜欢喝 bottled water 或者饮料,就可以一直拿着瓶装饮料。不过要注意保持卫生,不要让瓶子变得太脏或者有细菌。如果觉得手持瓶装饮料不方便,也可以选择使用杯子或者其他更方便的容器来盛放饮料。 +Holding(Yogurt) 您可以把酸奶捏在手里,就像您捏着冰淇淋一样。 +Holding(Yogurt) 嗯,我可以理解你想要一直吃酸奶的想法,但是要注意不要过量食用。酸奶是非常健康的食品,富含蛋白质和钙质,对身体有很多好处。不过,每个人的身体状况和需求不同,所以要根据自己的实际情况来适量食用。如果你想要更好地享受酸奶的好处,可以尝试搭配一些水果或者坚果,让口感更丰富多彩。 +Holding(ADMilk) 你能捧起一罐AD钙奶吗? +Holding(ADMilk) 你能不能一直拿着AD钙奶呀? +Holding(MilkDrink) 你能把牛奶饮料抓在手里啊? +Holding(MilkDrink) 你能一直拿著牛奶 drink 嗎? +Holding(Milk) 哈哈,当然可以啦!你可以把牛奶抓在手里,就像你抓住一个球一样。不过要小心,不要让牛奶洒出来哦! +Holding(Milk) 嘿,你可以一直拿着牛奶,不过我得提醒你,牛奶保质期短,不要喝坏掉的哦! +Holding(VacuumCup) 你能 hand 住保温杯 吗? +Holding(VacuumCup) 你能不能一直拿著保温杯呢? +Holding(Nothing) 哈哈,把"nothing"抓在手里啊。这个表达好像不太对哦,英文里"nothing"是指没有任何东西的意思,不能被抓住。你是要问如何应对"无所适从"的情况吗?可以理解为"nothing happens"或者"没有什么事情发生"。 +Holding(Nothing) 当然可以!如果你觉得需要一直拿着某个东西,那完全可以。 +On(Coffee,Bar) 当然可以!请问您需要什么口味的咖啡呢?我可以为您制作一杯美味的咖啡,然后端到吧台供您享用。 +On(Coffee,Bar) 嘿,老板,能不能给我弄杯咖啡,然后把咖啡杯拿到吧台上来? +On(Coffee,WaterTable) 当然可以!我马上为您制作一杯香浓的咖啡,然后端到茶水桌上来。 +On(Coffee,WaterTable) 好的,主人。请给我来杯咖啡,然后把咖啡端到茶水桌这里来。谢谢! +On(Coffee,CoffeeTable) 当然可以!我马上为您制作一杯香浓的咖啡,然后端到咖啡桌上来。 +On(Coffee,CoffeeTable) 好的,主人。请给我一杯咖啡,然后把咖啡端到这个咖啡桌上来,谢谢! +On(Coffee,Bar2) 当然可以!我马上为您制作一杯咖啡,然后端到这个吧台这里来。 +On(Coffee,Bar2) 好的,我给你拿杯咖啡,放在另一个吧台给你。 +On(Coffee,Table1) 当然可以!我马上为您制作一杯咖啡,然后端到第一张桌子上来。 +On(Coffee,Table1) 请给我拿杯咖啡,然后把它放到这张桌子的位置上。 +On(Coffee,Table2) 当然可以!你想要什么口味的咖啡呢?然后我就可以把咖啡端到你所在的桌子了。 +On(Coffee,Table2) 嘿,老板,我想喝杯咖啡,然后你能把它端到这里来吗? +On(Coffee,Table3) 当然可以!请问您需要什么口味的咖啡呢?我好准备给您制作。 +On(Coffee,Table3) 嘿,老板,能不能给我来杯咖啡?然后把咖啡端到这张桌子的 third 位置上来,谢谢! +On(Water,Bar) 当然可以!您可以告诉我您需要多少水,然后我会给您端过来。 +On(Water,Bar) 好的,我给您倒杯水,然后就放在吧台这里。 +On(Water,WaterTable) 当然可以!请问您需要我怎么制作水呢? +On(Water,WaterTable) 好的,我给你倒杯水,然后把它放在茶水桌上。 +On(Water,CoffeeTable) 当然可以!我立刻为您制作一杯水,然后把它端到咖啡桌上来。请问您需要加些什么其他的配料呢? +On(Water,CoffeeTable) 好的,主人,请给我倒杯水,然后把水端到咖啡桌上来,谢谢! +On(Water,Bar2) 当然可以!我马上为您制作一杯水,然后端到这里来。 +On(Water,Bar2) 好的,请给我倒一杯水,然后把它端到这个吧台这里来。 +On(Water,Table1) 当然可以!请问你需要多少水呢?我一会儿就去烧开水,然后把它端到第一张桌子上。 +On(Water,Table1) 好的,我给你倒杯水,然后把它放在第一桌子上。 +On(Water,Table2) 当然可以!我马上给您拿来。 +On(Water,Table2) 能不能给我倒杯水啊?然后把水端到这张桌子的另一边去。 +On(Water,Table3) 当然可以!请您把第三张桌子的位置告诉我,我马上为您制作一杯水送到那儿去。 +On(Water,Table3) 好的,请给我一杯水,然后把它放在第三张桌子上。 +On(Dessert,Bar) 当然可以!我特别擅长制作各种美味的点心、甜品和糕点。如果您需要的话,我可以在吧台为您准备一份精致的小点心或甜品品尝。 +On(Dessert,Bar) 行啊,点些小吃或甜品,然后让它们送到酒吧台这附近来。 +On(Dessert,WaterTable) 你能不能帮我做些点心或甜品,然后把它端到茶水桌这儿呀? +On(Dessert,WaterTable) 好的,请给我点些小吃或甜品,然后把它端到茶水桌这里来。 +On(Dessert,CoffeeTable) 当然可以!我是一个人工智能助手,虽然不能亲自制作点心或甜品,但我可以为您提供各种食谱和做法。您可以根据我的建议,尝试在家自己制作美味的点心或甜品,然后带到咖啡桌分享。这样不仅可以享受美食,还可以一起度过美好时光。 +On(Dessert,CoffeeTable) 行啊,您想尝点什么点心或甜品呢?然后我给您端过来,放在这咖啡桌上。 +On(Dessert,Bar2) 当然可以!我擅长制作各种美味的点心与甜品,可以随时为你端来。请问你需要什么口味或样式的点心呢? +On(Dessert,Bar2) 行啊,点些小吃或甜品,然后给您端过去。 +On(Dessert,Table1) 当然可以,我 ability做点心和甜品,把它们放在桌子上给你吃。 +On(Dessert,Table1) 好的,我给你准备了一些小吃和甜品,现在 brings it to your table.(请注意,这里用 "brings" 代替 "portrays" 以符合口语化的风格。) +On(Dessert,Table2) 当然可以!我可以在第一张桌子上制作点心或甜品,然后把它们端到第二张桌子那里。请问你有什么特别喜欢的点心或甜品口味吗? +On(Dessert,Table2) 好的,主人。请给我提供一些点心或甜品,我会把它们放在第二张桌子上。 +On(Dessert,Table3) 当然可以!我马上为您制作一些美味的点心或甜品,然后 brings it to the third table for you to enjoy. +On(Dessert,Table3) 好的,请问您想点什么种类的点心或甜品呢?然后我会把它们端到第三张桌子上。 +At(Robot,Bar) 好的,那我们来聊聊吧。你想聊什么呢? +At(Robot,Bar) 你去一下bar吧。 +At(Robot,Bar) 你能到那个酒吧的哪个位置吗? +At(Robot,WaterTable) 当然可以! WaterTable 是一个很棒的实时水文气象数据平台。你想了解哪个地区的天气情况呢? +At(Robot,WaterTable) 你去一下WaterTable吧! +At(Robot,WaterTable) 当然可以啊!你想要去哪个地方呢? +At(Robot,CoffeeTable) 嘿,我能去拿一下咖啡桌吗? +At(Robot,CoffeeTable) 你去一下CoffeeTable吧。 +At(Robot,CoffeeTable) 当然可以,我马上就到CoffeeTable那儿。 +At(Robot,Bar2) 好的,我来试试看 Bar 2。 +At(Robot,Bar2) 你能去bar2吗? +At(Robot,Bar2) 当然可以啊,我马上就去Bar2那儿! +At(Robot,Table1) 当然可以!请您提供一下 Table1 的内容,我会尽量用更口语化和合理化的方式来表述它。 +At(Robot,Table1) 嘿,你能不能去一下Table1呢? +At(Robot,Table1) 当然可以呀,我马上就过去。 +At(Robot,Table2) 当然可以!请您提供一下Table2的内容和您想要我为您做什么,我会尽量帮您进行合理的调整和优化。 +At(Robot,Table2) 好的,我去一下Table2。 +At(Robot,Table2) 当然可以,我马上就过去。 +At(Robot,Table3) 当然可以!请问您需要我帮忙做什么呢? +At(Robot,Table3) 嘿,去Table3看看怎么样?可能有新东西哦! +At(Robot,Table3) 当然可以,我马上就到Table3那儿。 +On(Softdrink,Bar) 你可以这样跟Bar说:“嘿,Bar,你能帮我把Softdrink放好吗?谢谢!” +On(Softdrink,Bar) 请把Softdrink拿到Bar那儿。 +On(Softdrink,WaterTable) 你可以把软饮放在水桌那个地方哦。 +On(Softdrink,WaterTable) 你可以把Soft drink拿到水桌的位置呀。 +On(Softdrink,CoffeeTable) 您可以尝试这样说:“嘿,能否帮我把软饮料放在咖啡桌那个位置呀?” +On(Softdrink,CoffeeTable) 你可以把Softdrink拿到CoffeeTable前面啊。 +On(Softdrink,Bar2) 你可以把软饮放在酒吧2的位置。 +On(Softdrink,Bar2) 你可以把Softdrink拿到Bar2的位置呀。 +On(Softdrink,Table1) 你可以把这个软饮料放到表格1的第二行。 +On(Softdrink,Table1) 请把Softdrink放到Table1的位置上。 +On(Softdrink,Table2) 你可以把 Softdrink 放到 Table2 的那个位置哦! +On(Softdrink,Table2) 你可以把Softdrink移到Table2的位置呀。 +On(Softdrink,Table3) 你可以把 Softdrink 放到 Table3 的那个位置哦! +On(Softdrink,Table3) 你可以把Softdrink拿到Table3那里。 +On(BottledDrink,Bar) 请你把Bottled Drink放到Bar那个地方。 +On(BottledDrink,Bar) 请把 bottled drink 拿到 Bar 那里。 +On(BottledDrink,WaterTable) 你能把 bottled drink 放到 water table 那个地方吗? +On(BottledDrink,WaterTable) 你可以把瓶装饮料放到水桌上了吗? +On(BottledDrink,CoffeeTable) 将瓶装饮料放在咖啡桌那个地方。 +On(BottledDrink,CoffeeTable) 你可以把 bottled drink 拿到咖啡桌 (CoffeeTable) 上。 +On(BottledDrink,Bar2) 你能把 "BottledDrink" 放到 "Bar2" 的位置上吗? +On(BottledDrink,Bar2) 请把 bottled drink 拿到 Bar2 的位置。 +On(BottledDrink,Table1) 你可以把"Bottled Drink"放到"Table1"的位置。 +On(BottledDrink,Table1) 请你把瓶装饮料拿到Table1那儿。 +On(BottledDrink,Table2) 你把Bottled Drink放到Table2那个地方吧。 +On(BottledDrink,Table2) 你可以把 bottled drink 拿到 Table 2 那里。 +On(BottledDrink,Table3) 你想把瓶装饮料放在Table3那个地方吗? +On(BottledDrink,Table3) 请把瓶装饮料放到桌子的第三位置。 +On(Yogurt,Bar) 你可以把酸奶放在吧台那个位置哦。 +On(Yogurt,Bar) 嘿,能否帮我拿一下酸奶(Yogurt)到酒吧(Bar)的位置呀? +On(Yogurt,WaterTable) 你可以把酸奶放在水 table 的那个地方。 +On(Yogurt,WaterTable) 你可以把酸奶放到水 table 那里一下吗? +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌那个地方。 +On(Yogurt,CoffeeTable) 你可以把酸奶放到咖啡桌的位置。 +On(Yogurt,Bar2) 把Yogurt放到Bar2那个地方。 +On(Yogurt,Bar2) 你可以把酸奶放到酒吧的第二的位置。 +On(Yogurt,Table1) 请把酸奶放到表格1那个位置哦! +On(Yogurt,Table1) 请你把Yogurt移到Table1的位置上。 +On(Yogurt,Table2) 你可以把酸奶放到表格2那个位置哦。 +On(Yogurt,Table2) 你可以把酸奶放到桌子第二的位置。 +On(Yogurt,Table3) 您可以把酸奶放到表格三那个位置哦。 +On(Yogurt,Table3) 你可以把酸奶放到桌子第三的位置。 +On(ADMilk,Bar) 你能把ADMilk放到Bar那个地方吗? +On(ADMilk,Bar) 你可以把ADMilk放到Bar那里。 +On(ADMilk,WaterTable) 你可以把ADMilk放到WaterTable那个地方。 +On(ADMilk,WaterTable) 你可以把ADMilk放到WaterTable的位置啊。 +On(ADMilk,CoffeeTable) 你可以把ADMilk放到咖啡桌那个地方。 +On(ADMilk,CoffeeTable) 你可以把AD Milk放到咖啡桌旁边呀。 +On(ADMilk,Bar2) 请把ADMilk放到Bar2那个位置哦! +On(ADMilk,Bar2) 你可以把ADMilk放到Bar2的位置呀。 +On(ADMilk,Table1) 请把ADMilk放到Table1那个位置啦! +On(ADMilk,Table1) 能否帮我将ADMilk放到Table1的位置呢? +On(ADMilk,Table2) 你可以把ADMilk放到Table2那个地方哦。 +On(ADMilk,Table2) 你可以把ADMilk放到Table2的位置呀。 +On(ADMilk,Table3) 你能把ADMilk放到Table3那个地方吗? +On(ADMilk,Table3) 你可以把ADMilk放到Table3的位置呀。 +On(MilkDrink,Bar) 你可以这样说:“把牛奶饮料放到酒吧那个位置。” +On(MilkDrink,Bar) 你可以把牛奶带到酒吧位置吗? +On(MilkDrink,WaterTable) 你能将"MilkDrink"放到"WaterTable"的那个地方吗? +On(MilkDrink,WaterTable) 你可以把牛奶放到水桌的位置。 +On(MilkDrink,CoffeeTable) 你好!你可以把"MilkDrink"放到"CoffeeTable"那个地方。 +On(MilkDrink,CoffeeTable) 你可以把牛奶放到咖啡桌上了吗? +On(MilkDrink,Bar2) 你可以把"MilkDrink"放到"Bar2"那个地方。 +On(MilkDrink,Bar2) 请把牛奶饮料拿到酒吧2号位置。 +On(MilkDrink,Table1) 你可以这样跟朋友说:嘿,你知道吗,把"MilkDrink"放到"Table1"那个位置吧! +On(MilkDrink,Table1) 你可以把牛奶带到Table1那里吗? +On(MilkDrink,Table2) 你能把"MilkDrink"放到Table2那个地方吗? +On(MilkDrink,Table2) 你可以把牛奶饮料端到桌子2的位置吗? +On(MilkDrink,Table3) 你好!我明白你的要求,但是我没有找到与“MilkDrink”相关的内容。如果你能提供更多的信息或者上下文,我会更好地帮助你完成任务。 +On(MilkDrink,Table3) 你可以把牛奶带到桌子3去。 +On(Milk,Bar) 你把牛奶放酒吧的位置吧。 +On(Milk,Bar) 你可以帮我把牛奶放到酒吧的位置吗? +On(Milk,WaterTable) 你能帮我把牛奶放到水 table 那个地方吗? +On(Milk,WaterTable) 你可以把牛奶放到水 table 附近吗? +On(Milk,CoffeeTable) 你可以把牛奶放在咖啡桌那个地方。 +On(Milk,CoffeeTable) 你可以把牛奶放到咖啡桌的位置。 +On(Milk,Bar2) 你可以把牛奶放到酒吧2的位置。 +On(Milk,Bar2) 你可以把牛奶放到酒吧的第二個位置。 +On(Milk,Table1) 你可以这样跟Table1说:“Hey Table1, could you please move the Milk to that spot over there?” +On(Milk,Table1) 你可以把牛奶放到桌子的第一位置呀。 +On(Milk,Table2) 请把牛奶放到表2的那个位置。 +On(Milk,Table2) 请你把牛奶放到Table2的位置上。 +On(Milk,Table3) 你可以把牛奶放到表格三那个位置哦。 +On(Milk,Table3) 你可以把牛奶放到桌子的第三格里呀。 +On(VacuumCup,Bar) 你能把VacuumCup放到Bar的位置吗? +On(VacuumCup,Bar) 你可以把吸管杯放到酒吧位置吗? +On(VacuumCup,WaterTable) 你可以尝试这样说:“嘿,把VacuumCup放到WaterTable的位置吧。”这样更加口语化和亲近。 +On(VacuumCup,WaterTable) 你可以把吸尘器杯放在水 table 位置吗? +On(VacuumCup,CoffeeTable) 你可以把吸尘器杯放在咖啡桌那个地方。 +On(VacuumCup,CoffeeTable) 你可以把吸尘器(VacuumCup)放到咖啡桌(CoffeeTable)的位置。 +On(VacuumCup,Bar2) 你能把VacuumCup放到Bar2那个地方吗? +On(VacuumCup,Bar2) 你可以把VacuumCup放到Bar2的地方哦。 +On(VacuumCup,Table1) 你可以把这些内容换成: "把 VacuumCup 放到 Table1 的那个地方"。 +On(VacuumCup,Table1) 你可以把VacuumCup放到Table1的位置呀。 +On(VacuumCup,Table2) 你可以把VacuumCup放到Table2那个地方哦。 +On(VacuumCup,Table2) 你可以把VacuumCup放到Table2那里呀。 +On(VacuumCup,Table3) 你可以把这个吸管杯放到表格3的位置。 +On(VacuumCup,Table3) 你可以把VacuumCup放到Table3的位置呀。 +Is(AC,0) 当然可以,您需要我帮您关闭AC吗? +Is(AC,1) 你好,我能帮你做什么呢?关于打开AC的问题,我可能不太明白你的具体意思。如果你是想打开空调,请告诉我具体是哪个品牌的空调,这样我才能更好地帮助你。 +Is(ACTemperature,0) 当然可以!请告诉我您想将温度调到多少度呢? +Is(ACTemperature,1) 当然可以,你想要把温度调到多少度呢? +Is(HallLight,0) 当然可以,HallLight怎么样了?需要我帮你做些什么吗? +Is(HallLight,1) 当然可以!请问你需要我怎么操作呢? +Is(TubeLight,0) 当然可以!你想要立即关掉TubeLight吗? +Is(TubeLight,1) 当然可以!你只需按住"开”按钮,或在屏幕上点击一下就可以开启TubeLight了。 +Is(Curtain,0) 当然可以,您想关闭窗帘吗? +Is(Curtain,1) 当然可以,curtain(窗帘)打开了。 +Is(Chairs,0) 当然可以,你能把椅子弄脏一点吗? +Is(Chairs,1) 当然可以,你能帮我打扫一下椅子吗? +Is(Floor,0) 当然可以,不过我需要先声明一下,作为人工智能助手,我没有实体形象,所以不能直接去“操作”或“改变”现实环境。但我可以提供一些建议或者指导来帮助你完成任务。如果你想要打扫房间,可以告诉我具体是哪个部位需要清洁,然后我会给你相应的建议和步骤。 +Is(Floor,1) 当然可以,你让我来吧! +Is(Table1,0) 当然可以!不过我需要先了解一下 Table1 包含哪些内容,以及您想要修改的具体是哪方面。这样我才能更好地帮助您进行操作。 +Is(Table1,1) 当然可以,你有什么特别要求吗?比如需要清理什么物品或者怎么清洁? +Holding(Softdrink) 你能不能把soft drink抓在手里啊? +Holding(Softdrink) 你能一直拿着一罐饮料吗? +Holding(BottledDrink) 你能把瓶装饮料抓在手里吗? +Holding(BottledDrink) 你能一直拿着这瓶饮料吗? +Holding(Yogurt) 你能把酸奶抓在手里吗? +Holding(Yogurt) 你能一直抱着羊酸奶吗? +Holding(ADMilk) 你能捧着 AD Milk 吗? +Holding(ADMilk) 你能一直拿着AD Milk吗? + +如果我能一直拿着AD Milk,那我会很开心,因为我很喜欢喝这个品牌的牛奶。不过,我不确定我能否一直拿着它,因为我需要考虑到我的健康和生活方式。 +Holding(MilkDrink) 哦,你是指那个牛奶饮料品牌“MilkDrink”吗?当然可以啊,你可以像拿任何 other 饮料一样拿起它来。 +Holding(MilkDrink) 你好呀!我能一直拿着这个牛奶饮料吗? +Holding(Milk) 你能把牛奶抓在手里吗?当然可以,只要你抓住瓶子或者盒子,就可以把牛奶抓在手里。不过要注意,不要把牛奶撒出来哦! +Holding(Milk) 你能不能一直拿着牛奶呀? +Holding(VacuumCup) 你能把吸尘器杯收入手中吗? +Holding(VacuumCup) 你能一直拿着吸尘器杯吗? +Holding(Nothing) 你能把“nothing”这个单词抓在手里吗? +Holding(Nothing) 当然可以啊!如果你说的“ Nothing”是指没有任何事物或事情的话,那我可以一直保持这样的状态。不过,如果你指的是某个具体的事物或场景,那可能就需要根据实际情况来分析了。 +On(Coffee,Bar) 当然可以!我马上为你制作一杯咖啡,然后端到吧台给你。 +On(Coffee,Bar) 给我倒杯咖啡,然后把它端到酒吧这里来。 +On(Coffee,WaterTable) 当然可以!我马上为你制作一杯咖啡,然后端到水 table 这里来。 +On(Coffee,WaterTable) 好的,我给你倒杯咖啡,然后端到水 table 这里来。 +On(Coffee,CoffeeTable) 当然可以!我为您制作一杯咖啡,然后把它端到咖啡桌那里吧。 +On(Coffee,CoffeeTable) 行吗?能不能帮我倒杯咖啡,然后把咖啡端到咖啡桌上来呀? +On(Coffee,Bar2) 当然可以!我马上为您制作一杯咖啡,然后送到Bar 2那里。请问您喜欢什么口味的咖啡呢? +On(Coffee,Bar2) 好的,我给您准备了一杯咖啡,现在就端到 Bar 2 这里来。 +On(Coffee,Table1) 当然可以!我马上为您制作一杯咖啡,然后端到Table1这里来。请问您喜欢什么口味的咖啡呢? +On(Coffee,Table1) 好的,请给我一杯咖啡,然后把它送到 Table1 这里来,谢谢! +On(Coffee,Table2) 当然可以!我马上为您制作一杯咖啡,然后端到Table2这里来。 +On(Coffee,Table2) 好的,我给你拿杯咖啡,放Table2那里。 +On(Coffee,Table3) 当然可以!我马上为你制作一杯咖啡,然后端到你面前的桌子上。 +On(Coffee,Table3) 行吗?我可以给你拿杯咖啡,然后放到了Table 3这里。 +On(Water,Bar) 当然可以!去吧,我给你端来水。 +On(Water,Bar) 好的,让我给您倒一杯水,然后把它端到酒吧这里来。 +On(Water,WaterTable) 当然可以!我可以帮你制作水,然后把水送到水 table 这里来。 +On(Water,WaterTable) 好的,我给你倒一杯水,然后把它放在水 table 上。 +On(Water,CoffeeTable) 当然可以!我马上为您制作水,并把水端到咖啡桌这里来。 +On(Water,CoffeeTable) 好的,我马上给您倒杯水,然后把水端到咖啡桌这里来。 +On(Water,Bar2) 当然可以!我可以帮你制作水,然后把水端到酒吧2(Bar 2)那里。你需要我马上去做吗? +On(Water,Bar2) 好的,我来给您倒杯水,送到酒吧2怎么样? +On(Water,Table1) 当然可以!请问你需要多少量的水呢?我会尽快为您准备好的。 +On(Water,Table1) 好的,我给你倒一杯水,你想要端到哪个桌子呢? +On(Water,Table2) 当然可以!我马上帮你制作水,然后把它送到 Table2 这里来。 +On(Water,Table2) 好的,我给你倒一杯水,稍等一下。 +On(Water,Table3) 当然可以!我马上帮您把水送到 Table 3 这里来。 +On(Water,Table3) 好的,我给您倒一杯水,稍等一下,我现在就去拿。请问您要放在哪个桌子上呢?是Table 1还是Table 2?还是您想要自己拿杯子接? +On(Dessert,Bar) 你好!当然可以。Dessert(甜点)是餐后享用的食物,有很多美味的选择,比如蛋糕、饼干、布丁等。请问你想制作哪一种甜点呢?我可以帮你准备材料和制作方法。制作完成后,我们可以一起把甜点带到酒吧享用。 +On(Dessert,Bar) 请给我一点甜点,然后把它送到酒吧这里来。 +On(Dessert,WaterTable) 你能否把甜点做好,然后拿到水 table 那里去呢? +On(Dessert,WaterTable) 好的,我给您准备了一些甜点,现在就端到水 table 这里来。您觉得怎么样? +On(Dessert,CoffeeTable) 当然可以!我给您制作一些甜点,然后拿到咖啡桌上去吧。请问您想尝试哪种甜点呢? +On(Dessert,CoffeeTable) 行啊,那给我来点甜点,然后把它放到咖啡桌子上。 +On(Dessert,Bar2) 当然可以!我会做一些美味的甜点,然后带到酒吧2(Bar 2)来。您想尝尝吗? +On(Dessert,Bar2) 好的,我给你准备了一些甜点,现在就端到你所在的酒吧2。 +On(Dessert,Table1) 当然可以!我马上为您制作甜点,然后把它端到Table1这里来。 +On(Dessert,Table1) 好的,我给您准备了一些美味的甜点,现在 bring it to Table1 这里。 +On(Dessert,Table2) 当然可以!我马上为您制作甜点,然后端到Table2这里来。 +On(Dessert,Table2) 好的,我给你准备了一些甜点,现在端到你面前的桌子上。 +On(Dessert,Table3) 当然可以!我马上为您制作甜点,然后把它送到Table3这里来。 +On(Dessert,Table3) 好的,我给你准备了一些甜点,现在就端到你面前的桌子上。 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output2.txt b/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output2.txt new file mode 100644 index 0000000..9c06989 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/expansion_out/output2.txt @@ -0,0 +1,57 @@ +At(Robot,Bar) 请问您需要什么帮助吗?我就在吧台附近,能否请您自己过来呢? +At(Robot,Bar) 请问你能去一下吧台吗? +At(Robot,Bar) 请问你能帮我到吧台那个位置吗? +At(Robot,WaterTable) 请问你能过来一下吗?我正在茶水桌旁。 +At(Robot,WaterTable) 请问你可以去茶水桌一下吗? +At(Robot,WaterTable) 你能带路去茶水桌吗? +At(Robot,CoffeeTable) 请问你可以过来一下吗?我在这张咖啡桌旁边。 +At(Robot,CoffeeTable) 请问你可以帮我一下,去一下咖啡桌吗? +At(Robot,CoffeeTable) 请问你能帮我前往咖啡桌那个位置吗? +At(Robot,Bar2) 您好,请问您需要什么帮助吗?我正在另一个吧台处理一些事情。 +At(Robot,Bar2) 请问你可以去一下另一个吧台吗? +At(Robot,Bar2) 你能去另一个吧台的位置吗? +At(Robot,Table1) 请问你能过来一下吗?我目前在第一桌,需要你的帮助。 +At(Robot,Table1) 请问你能去一下第一桌吗? +At(Robot,Table1) 请问你能帮我到第一张桌子那个位置吗? +At(Robot,Table2) 请问您能过来一下吗?我正在第二张桌子这里。 +At(Robot,Table2) 请问你可以去第二张桌子一下吗? +At(Robot,Table2) 请问你能帮我前往第二桌吗? +At(Robot,Table3) 请问你能过来一下吗?我正在第三张桌子旁。 +At(Robot,Table3) 请问你能去第三张桌子一下吗? +At(Robot,Table3) 你能告诉我第三张桌子的位置在哪里吗? +On(Softdrink,Bar) 您好,请问您需要我帮您把盒装冰红茶放到哪个位置呢? +On(Softdrink,Bar) 服务员,能否帮我拿来一盒冰红茶放到吧台呢? +On(Softdrink,WaterTable) 您好,请问您需要我帮忙将盒装冰红茶放到哪个位置吗? +On(Softdrink,WaterTable) 服务员,能否帮我把盒装冰红茶拿到茶水桌呢? +On(Softdrink,CoffeeTable) 请问你能把盒装冰红茶放到咖啡桌那个位置吗? +On(Softdrink,CoffeeTable) 服务员,把盒装冰红茶拿到咖啡桌 position 好吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶放到另一个吧台的位置吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶拿到另一个吧台位置吗? +On(Softdrink,Table1) 请问您能否把盒装冰红茶放在第一桌的指定位置呢? +On(Softdrink,Table1) 请您把盒装冰红茶拿到第一桌的位置。 +On(Softdrink,Table2) 服务员,您好,请问能否帮我將這盒裝冰红茶放 到第二張桌子那個位置呢? +On(Softdrink,Table2) 服务员,请把盒装冰红茶拿到第二张桌子的位置。 +On(Softdrink,Table3) 请问你可以把盒装冰红茶放到第三张桌子的那个位置吗? +On(Softdrink,Table3) 请问你能把盒装冰红茶拿到第三张桌子的位置吗? +On(BottledDrink,Bar) 您好,请问您需要我将瓶装饮料放到哪个位置呢? +On(BottledDrink,Bar) 请把瓶装饮料拿到吧台的位置。 +On(BottledDrink,WaterTable) 请问你可以把瓶装饮料放到茶水桌那个位置吗? +On(BottledDrink,WaterTable) 请问你能把瓶装饮料拿到茶水桌位置吗? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料放在咖啡桌那个位置呢? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料拿到咖啡桌附近呢? +On(BottledDrink,Bar2) 请问你能把瓶装饮料放到另一个吧台的那个位置吗? +On(BottledDrink,Bar2) 请把瓶装饮料拿到另一个吧台位置。 +On(BottledDrink,Table1) 请问您能否帮我將瓶裝飲料放至第一張桌子的那個位置呢? +On(BottledDrink,Table1) 请问你能把瓶装饮料拿到第一桌的位置吗? +On(BottledDrink,Table2) 请问,你可以把瓶装饮料放到第二张桌子的那个位置吗? +On(BottledDrink,Table2) 请问你能把瓶装饮料拿到第二张桌子的位置吗? +On(BottledDrink,Table3) 请问,你能把瓶装饮料放到第三桌的哪个位置吗? +On(BottledDrink,Table3) 请问你能把瓶装饮料拿到第三张桌子的位置吗? +On(Yogurt,Bar) 请问你能把酸奶放到吧台那个位置吗? +On(Yogurt,Bar) 请问你能把酸奶拿到吧台位置吗? +On(Yogurt,WaterTable) 请问你能把酸奶放到茶水桌那个位置吗? +On(Yogurt,WaterTable) 服务员,请把酸奶拿到茶水桌的位置。 +On(Yogurt,CoffeeTable) 请问,你能把酸奶放在咖啡桌那个位置吗? +On(Yogurt,CoffeeTable) 服务员,能否把酸奶拿到咖啡桌的位置呢? +On(Yogurt,Bar2) 请问你能把酸奶放到另一个吧台的那个位置吗? +On(Yogurt,Bar2) 请问你能把酸奶拿到另一个吧台位置吗? diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/goal_states.txt b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states.txt new file mode 100644 index 0000000..c72c9cc --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states.txt @@ -0,0 +1,5000 @@ +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,Bar)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Bar2)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot, CoffeeTable)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(Softdrink,Bar)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Bar2)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(BottledDrink,Bar)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(Yogurt,Bar)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Bar2)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(ADMilk,Bar)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Bar2)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(MilkDrink,Bar)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(Milk,Bar)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Bar2)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(VacuumCup,Bar)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(MilkDrink, Table2)} +{On(MilkDrink, Bar2)} +{On(Yogurt, WaterTable)} +{On(Softdrink, Bar2)} +{On(Softdrink, WaterTable)} +{On(MilkDrink, WaterTable)} +{On(ADMilk, Bar)} +{On(MilkDrink, Table3)} +{On(MilkDrink, WaterTable)} +{On(BottledDrink, CoffeeTable)} +{On(VacuumCup, Table2)} +{On(MilkDrink, Bar)} +{On(ADMilk, WaterTable)} +{On(BottledDrink, Bar2)} +{On(ADMilk, Table3)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(Floor, 0)} +{Is(AC, 0)} +{Is(HallLight, 1)} +{Is(ACTemperature, 0)} +{Is(Floor, 1)} +{Is(AC, 1)} +{Is(Floor, 1)} +{Is(Floor, 1)} +{Is(TubeLight, 0)} +{Is(Table1, 0)} +{Is(Table1, 0)} +{Is(HallLight, 0)} +{Is(HallLight, 1)} +{Is(Chairs, 1)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Nothing)} +{Holding(Yogurt)} +{Holding(MilkDrink)} +{Holding(ADMilk)} +{Holding(ADMilk)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee,Bar)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Bar2)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Water,Bar)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Bar2)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Dessert,Bar)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Bar2)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Coffee, Table3)} +{On(Water, WaterTable)} +{On(Coffee, Table2)} +{On(Coffee, Table2)} +{On(Water, Table3)} +{On(Coffee, Bar2)} +{On(Coffee, WaterTable)} +{On(Water, CoffeeTable)} +{On(Dessert, CoffeeTable)} +{On(Water, Table3)} +{On(Water, Table3)} +{On(Coffee, Table1)} +{On(Dessert, WaterTable)} +{On(Water, Bar2)} +{On(Water, Bar2)} +{At(Robot,Bar),On(Softdrink,Bar)} +{At(Robot,Bar),On(Softdrink,WaterTable)} +{At(Robot,Bar),On(Softdrink,CoffeeTable)} +{At(Robot,Bar),On(Softdrink,Bar2)} +{At(Robot,Bar),On(Softdrink,Table1)} +{At(Robot,Bar),On(Softdrink,Table2)} +{At(Robot,Bar),On(Softdrink,Table3)} +{At(Robot,Bar),On(BottledDrink,Bar)} +{At(Robot,Bar),On(BottledDrink,WaterTable)} +{At(Robot,Bar),On(BottledDrink,CoffeeTable)} +{At(Robot,Bar),On(BottledDrink,Bar2)} +{At(Robot,Bar),On(BottledDrink,Table1)} +{At(Robot,Bar),On(BottledDrink,Table2)} +{At(Robot,Bar),On(BottledDrink,Table3)} +{At(Robot,Bar),On(Yogurt,Bar)} +{At(Robot,Bar),On(Yogurt,WaterTable)} +{At(Robot,Bar),On(Yogurt,CoffeeTable)} +{At(Robot,Bar),On(Yogurt,Bar2)} +{At(Robot,Bar),On(Yogurt,Table1)} +{At(Robot,Bar),On(Yogurt,Table2)} +{At(Robot,Bar),On(Yogurt,Table3)} +{At(Robot,Bar),On(ADMilk,Bar)} +{At(Robot,Bar),On(ADMilk,WaterTable)} +{At(Robot,Bar),On(ADMilk,CoffeeTable)} +{At(Robot,Bar),On(ADMilk,Bar2)} +{At(Robot,Bar),On(ADMilk,Table1)} +{At(Robot,Bar),On(ADMilk,Table2)} +{At(Robot,Bar),On(ADMilk,Table3)} +{At(Robot,Bar),On(MilkDrink,Bar)} +{At(Robot,Bar),On(MilkDrink,WaterTable)} +{At(Robot,Bar),On(MilkDrink,CoffeeTable)} +{At(Robot,Bar),On(MilkDrink,Bar2)} +{At(Robot,Bar),On(MilkDrink,Table1)} +{At(Robot,Bar),On(MilkDrink,Table2)} +{At(Robot,Bar),On(MilkDrink,Table3)} +{At(Robot,Bar),On(Milk,Bar)} +{At(Robot,Bar),On(Milk,WaterTable)} +{At(Robot,Bar),On(Milk,CoffeeTable)} +{At(Robot,Bar),On(Milk,Bar2)} +{At(Robot,Bar),On(Milk,Table1)} +{At(Robot,Bar),On(Milk,Table2)} +{At(Robot,Bar),On(Milk,Table3)} +{At(Robot,Bar),On(VacuumCup,Bar)} +{At(Robot,Bar),On(VacuumCup,WaterTable)} +{At(Robot,Bar),On(VacuumCup,CoffeeTable)} +{At(Robot,Bar),On(VacuumCup,Bar2)} +{At(Robot,Bar),On(VacuumCup,Table1)} +{At(Robot,Bar),On(VacuumCup,Table2)} +{At(Robot,Bar),On(VacuumCup,Table3)} +{At(Robot,WaterTable),On(Softdrink,Bar)} +{At(Robot,WaterTable),On(Softdrink,WaterTable)} +{At(Robot,WaterTable),On(Softdrink,CoffeeTable)} +{At(Robot,WaterTable),On(Softdrink,Bar2)} +{At(Robot,WaterTable),On(Softdrink,Table1)} +{At(Robot,WaterTable),On(Softdrink,Table2)} +{At(Robot,WaterTable),On(Softdrink,Table3)} +{At(Robot,WaterTable),On(BottledDrink,Bar)} +{At(Robot,WaterTable),On(BottledDrink,WaterTable)} +{At(Robot,WaterTable),On(BottledDrink,CoffeeTable)} +{At(Robot,WaterTable),On(BottledDrink,Bar2)} +{At(Robot,WaterTable),On(BottledDrink,Table1)} +{At(Robot,WaterTable),On(BottledDrink,Table2)} +{At(Robot,WaterTable),On(BottledDrink,Table3)} +{At(Robot,WaterTable),On(Yogurt,Bar)} +{At(Robot,WaterTable),On(Yogurt,WaterTable)} +{At(Robot,WaterTable),On(Yogurt,CoffeeTable)} +{At(Robot,WaterTable),On(Yogurt,Bar2)} +{At(Robot,WaterTable),On(Yogurt,Table1)} +{At(Robot,WaterTable),On(Yogurt,Table2)} +{At(Robot,WaterTable),On(Yogurt,Table3)} +{At(Robot,WaterTable),On(ADMilk,Bar)} +{At(Robot,WaterTable),On(ADMilk,WaterTable)} +{At(Robot,WaterTable),On(ADMilk,CoffeeTable)} +{At(Robot,WaterTable),On(ADMilk,Bar2)} +{At(Robot,WaterTable),On(ADMilk,Table1)} +{At(Robot,WaterTable),On(ADMilk,Table2)} +{At(Robot,WaterTable),On(ADMilk,Table3)} +{At(Robot,WaterTable),On(MilkDrink,Bar)} +{At(Robot,WaterTable),On(MilkDrink,WaterTable)} +{At(Robot,WaterTable),On(MilkDrink,CoffeeTable)} +{At(Robot,WaterTable),On(MilkDrink,Bar2)} +{At(Robot,WaterTable),On(MilkDrink,Table1)} +{At(Robot,WaterTable),On(MilkDrink,Table2)} +{At(Robot,WaterTable),On(MilkDrink,Table3)} +{At(Robot,WaterTable),On(Milk,Bar)} +{At(Robot,WaterTable),On(Milk,WaterTable)} +{At(Robot,WaterTable),On(Milk,CoffeeTable)} +{At(Robot,WaterTable),On(Milk,Bar2)} +{At(Robot,WaterTable),On(Milk,Table1)} +{At(Robot,WaterTable),On(Milk,Table2)} +{At(Robot,WaterTable),On(Milk,Table3)} +{At(Robot,WaterTable),On(VacuumCup,Bar)} +{At(Robot,WaterTable),On(VacuumCup,WaterTable)} +{At(Robot,WaterTable),On(VacuumCup,CoffeeTable)} +{At(Robot,WaterTable),On(VacuumCup,Bar2)} +{At(Robot,WaterTable),On(VacuumCup,Table1)} +{At(Robot,WaterTable),On(VacuumCup,Table2)} +{At(Robot,WaterTable),On(VacuumCup,Table3)} +{At(Robot,CoffeeTable),On(Softdrink,Bar)} +{At(Robot,CoffeeTable),On(Softdrink,WaterTable)} +{At(Robot,CoffeeTable),On(Softdrink,CoffeeTable)} +{At(Robot,CoffeeTable),On(Softdrink,Bar2)} +{At(Robot,CoffeeTable),On(Softdrink,Table1)} +{At(Robot,CoffeeTable),On(Softdrink,Table2)} +{At(Robot,CoffeeTable),On(Softdrink,Table3)} +{At(Robot,CoffeeTable),On(BottledDrink,Bar)} +{At(Robot,CoffeeTable),On(BottledDrink,WaterTable)} +{At(Robot,CoffeeTable),On(BottledDrink,CoffeeTable)} +{At(Robot,CoffeeTable),On(BottledDrink,Bar2)} +{At(Robot,CoffeeTable),On(BottledDrink,Table1)} +{At(Robot,CoffeeTable),On(BottledDrink,Table2)} +{At(Robot,CoffeeTable),On(BottledDrink,Table3)} +{At(Robot,CoffeeTable),On(Yogurt,Bar)} +{At(Robot,CoffeeTable),On(Yogurt,WaterTable)} +{At(Robot,CoffeeTable),On(Yogurt,CoffeeTable)} +{At(Robot,CoffeeTable),On(Yogurt,Bar2)} +{At(Robot,CoffeeTable),On(Yogurt,Table1)} +{At(Robot,CoffeeTable),On(Yogurt,Table2)} +{At(Robot,CoffeeTable),On(Yogurt,Table3)} +{At(Robot,CoffeeTable),On(ADMilk,Bar)} +{At(Robot,CoffeeTable),On(ADMilk,WaterTable)} +{At(Robot,CoffeeTable),On(ADMilk,CoffeeTable)} +{At(Robot,CoffeeTable),On(ADMilk,Bar2)} +{At(Robot,CoffeeTable),On(ADMilk,Table1)} +{At(Robot,CoffeeTable),On(ADMilk,Table2)} +{At(Robot,CoffeeTable),On(ADMilk,Table3)} +{At(Robot,CoffeeTable),On(MilkDrink,Bar)} +{At(Robot,CoffeeTable),On(MilkDrink,WaterTable)} +{At(Robot,CoffeeTable),On(MilkDrink,CoffeeTable)} +{At(Robot,CoffeeTable),On(MilkDrink,Bar2)} +{At(Robot,CoffeeTable),On(MilkDrink,Table1)} +{At(Robot,CoffeeTable),On(MilkDrink,Table2)} +{At(Robot,CoffeeTable),On(MilkDrink,Table3)} +{At(Robot,CoffeeTable),On(Milk,Bar)} +{At(Robot,CoffeeTable),On(Milk,WaterTable)} +{At(Robot,CoffeeTable),On(Milk,CoffeeTable)} +{At(Robot,CoffeeTable),On(Milk,Bar2)} +{At(Robot,CoffeeTable),On(Milk,Table1)} +{At(Robot,CoffeeTable),On(Milk,Table2)} +{At(Robot,CoffeeTable),On(Milk,Table3)} +{At(Robot,CoffeeTable),On(VacuumCup,Bar)} +{At(Robot,CoffeeTable),On(VacuumCup,WaterTable)} +{At(Robot,CoffeeTable),On(VacuumCup,CoffeeTable)} +{At(Robot,CoffeeTable),On(VacuumCup,Bar2)} +{At(Robot,CoffeeTable),On(VacuumCup,Table1)} +{At(Robot,CoffeeTable),On(VacuumCup,Table2)} +{At(Robot,CoffeeTable),On(VacuumCup,Table3)} +{At(Robot,Bar2),On(Softdrink,Bar)} +{At(Robot,Bar2),On(Softdrink,WaterTable)} +{At(Robot,Bar2),On(Softdrink,CoffeeTable)} +{At(Robot,Bar2),On(Softdrink,Bar2)} +{At(Robot,Bar2),On(Softdrink,Table1)} +{At(Robot,Bar2),On(Softdrink,Table2)} +{At(Robot,Bar2),On(Softdrink,Table3)} +{At(Robot,Bar2),On(BottledDrink,Bar)} +{At(Robot,Bar2),On(BottledDrink,WaterTable)} +{At(Robot,Bar2),On(BottledDrink,CoffeeTable)} +{At(Robot,Bar2),On(BottledDrink,Bar2)} +{At(Robot,Bar2),On(BottledDrink,Table1)} +{At(Robot,Bar2),On(BottledDrink,Table2)} +{At(Robot,Bar2),On(BottledDrink,Table3)} +{At(Robot,Bar2),On(Yogurt,Bar)} +{At(Robot,Bar2),On(Yogurt,WaterTable)} +{At(Robot,Bar2),On(Yogurt,CoffeeTable)} +{At(Robot,Bar2),On(Yogurt,Bar2)} +{At(Robot,Bar2),On(Yogurt,Table1)} +{At(Robot,Bar2),On(Yogurt,Table2)} +{At(Robot,Bar2),On(Yogurt,Table3)} +{At(Robot,Bar2),On(ADMilk,Bar)} +{At(Robot,Bar2),On(ADMilk,WaterTable)} +{At(Robot,Bar2),On(ADMilk,CoffeeTable)} +{At(Robot,Bar2),On(ADMilk,Bar2)} +{At(Robot,Bar2),On(ADMilk,Table1)} +{At(Robot,Bar2),On(ADMilk,Table2)} +{At(Robot,Bar2),On(ADMilk,Table3)} +{At(Robot,Bar2),On(MilkDrink,Bar)} +{At(Robot,Bar2),On(MilkDrink,WaterTable)} +{At(Robot,Bar2),On(MilkDrink,CoffeeTable)} +{At(Robot,Bar2),On(MilkDrink,Bar2)} +{At(Robot,Bar2),On(MilkDrink,Table1)} +{At(Robot,Bar2),On(MilkDrink,Table2)} +{At(Robot,Bar2),On(MilkDrink,Table3)} +{At(Robot,Bar2),On(Milk,Bar)} +{At(Robot,Bar2),On(Milk,WaterTable)} +{At(Robot,Bar2),On(Milk,CoffeeTable)} +{At(Robot,Bar2),On(Milk,Bar2)} +{At(Robot,Bar2),On(Milk,Table1)} +{At(Robot,Bar2),On(Milk,Table2)} +{At(Robot,Bar2),On(Milk,Table3)} +{At(Robot,Bar2),On(VacuumCup,Bar)} +{At(Robot,Bar2),On(VacuumCup,WaterTable)} +{At(Robot,Bar2),On(VacuumCup,CoffeeTable)} +{At(Robot,Bar2),On(VacuumCup,Bar2)} +{At(Robot,Bar2),On(VacuumCup,Table1)} +{At(Robot,Bar2),On(VacuumCup,Table2)} +{At(Robot,Bar2),On(VacuumCup,Table3)} +{At(Robot,Table1),On(Softdrink,Bar)} +{At(Robot,Table1),On(Softdrink,WaterTable)} +{At(Robot,Table1),On(Softdrink,CoffeeTable)} +{At(Robot,Table1),On(Softdrink,Bar2)} +{At(Robot,Table1),On(Softdrink,Table1)} +{At(Robot,Table1),On(Softdrink,Table2)} +{At(Robot,Table1),On(Softdrink,Table3)} +{At(Robot,Table1),On(BottledDrink,Bar)} +{At(Robot,Table1),On(BottledDrink,WaterTable)} +{At(Robot,Table1),On(BottledDrink,CoffeeTable)} +{At(Robot,Table1),On(BottledDrink,Bar2)} +{At(Robot,Table1),On(BottledDrink,Table1)} +{At(Robot,Table1),On(BottledDrink,Table2)} +{At(Robot,Table1),On(BottledDrink,Table3)} +{At(Robot,Table1),On(Yogurt,Bar)} +{At(Robot,Table1),On(Yogurt,WaterTable)} +{At(Robot,Table1),On(Yogurt,CoffeeTable)} +{At(Robot,Table1),On(Yogurt,Bar2)} +{At(Robot,Table1),On(Yogurt,Table1)} +{At(Robot,Table1),On(Yogurt,Table2)} +{At(Robot,Table1),On(Yogurt,Table3)} +{At(Robot,Table1),On(ADMilk,Bar)} +{At(Robot,Table1),On(ADMilk,WaterTable)} +{At(Robot,Table1),On(ADMilk,CoffeeTable)} +{At(Robot,Table1),On(ADMilk,Bar2)} +{At(Robot,Table1),On(ADMilk,Table1)} +{At(Robot,Table1),On(ADMilk,Table2)} +{At(Robot,Table1),On(ADMilk,Table3)} +{At(Robot,Table1),On(MilkDrink,Bar)} +{At(Robot,Table1),On(MilkDrink,WaterTable)} +{At(Robot,Table1),On(MilkDrink,CoffeeTable)} +{At(Robot,Table1),On(MilkDrink,Bar2)} +{At(Robot,Table1),On(MilkDrink,Table1)} +{At(Robot,Table1),On(MilkDrink,Table2)} +{At(Robot,Table1),On(MilkDrink,Table3)} +{At(Robot,Table1),On(Milk,Bar)} +{At(Robot,Table1),On(Milk,WaterTable)} +{At(Robot,Table1),On(Milk,CoffeeTable)} +{At(Robot,Table1),On(Milk,Bar2)} +{At(Robot,Table1),On(Milk,Table1)} +{At(Robot,Table1),On(Milk,Table2)} +{At(Robot,Table1),On(Milk,Table3)} +{At(Robot,Table1),On(VacuumCup,Bar)} +{At(Robot,Table1),On(VacuumCup,WaterTable)} +{At(Robot,Table1),On(VacuumCup,CoffeeTable)} +{At(Robot,Table1),On(VacuumCup,Bar2)} +{At(Robot,Table1),On(VacuumCup,Table1)} +{At(Robot,Table1),On(VacuumCup,Table2)} +{At(Robot,Table1),On(VacuumCup,Table3)} +{At(Robot,Table2),On(Softdrink,Bar)} +{At(Robot,Table2),On(Softdrink,WaterTable)} +{At(Robot,Table2),On(Softdrink,CoffeeTable)} +{At(Robot,Table2),On(Softdrink,Bar2)} +{At(Robot,Table2),On(Softdrink,Table1)} +{At(Robot,Table2),On(Softdrink,Table2)} +{At(Robot,Table2),On(Softdrink,Table3)} +{At(Robot,Table2),On(BottledDrink,Bar)} +{At(Robot,Table2),On(BottledDrink,WaterTable)} +{At(Robot,Table2),On(BottledDrink,CoffeeTable)} +{At(Robot,Table2),On(BottledDrink,Bar2)} +{At(Robot,Table2),On(BottledDrink,Table1)} +{At(Robot,Table2),On(BottledDrink,Table2)} +{At(Robot,Table2),On(BottledDrink,Table3)} +{At(Robot,Table2),On(Yogurt,Bar)} +{At(Robot,Table2),On(Yogurt,WaterTable)} +{At(Robot,Table2),On(Yogurt,CoffeeTable)} +{At(Robot,Table2),On(Yogurt,Bar2)} +{At(Robot,Table2),On(Yogurt,Table1)} +{At(Robot,Table2),On(Yogurt,Table2)} +{At(Robot,Table2),On(Yogurt,Table3)} +{At(Robot,Table2),On(ADMilk,Bar)} +{At(Robot,Table2),On(ADMilk,WaterTable)} +{At(Robot,Table2),On(ADMilk,CoffeeTable)} +{At(Robot,Table2),On(ADMilk,Bar2)} +{At(Robot,Table2),On(ADMilk,Table1)} +{At(Robot,Table2),On(ADMilk,Table2)} +{At(Robot,Table2),On(ADMilk,Table3)} +{At(Robot,Table2),On(MilkDrink,Bar)} +{At(Robot,Table2),On(MilkDrink,WaterTable)} +{At(Robot,Table2),On(MilkDrink,CoffeeTable)} +{At(Robot,Table2),On(MilkDrink,Bar2)} +{At(Robot,Table2),On(MilkDrink,Table1)} +{At(Robot,Table2),On(MilkDrink,Table2)} +{At(Robot,Table2),On(MilkDrink,Table3)} +{At(Robot,Table2),On(Milk,Bar)} +{At(Robot,Table2),On(Milk,WaterTable)} +{At(Robot,Table2),On(Milk,CoffeeTable)} +{At(Robot,Table2),On(Milk,Bar2)} +{At(Robot,Table2),On(Milk,Table1)} +{At(Robot,Table2),On(Milk,Table2)} +{At(Robot,Table2),On(Milk,Table3)} +{At(Robot,Table2),On(VacuumCup,Bar)} +{At(Robot,Table2),On(VacuumCup,WaterTable)} +{At(Robot,Table2),On(VacuumCup,CoffeeTable)} +{At(Robot,Table2),On(VacuumCup,Bar2)} +{At(Robot,Table2),On(VacuumCup,Table1)} +{At(Robot,Table2),On(VacuumCup,Table2)} +{At(Robot,Table2),On(VacuumCup,Table3)} +{At(Robot,Table3),On(Softdrink,Bar)} +{At(Robot,Table3),On(Softdrink,WaterTable)} +{At(Robot,Table3),On(Softdrink,CoffeeTable)} +{At(Robot,Table3),On(Softdrink,Bar2)} +{At(Robot,Table3),On(Softdrink,Table1)} +{At(Robot,Table3),On(Softdrink,Table2)} +{At(Robot,Table3),On(Softdrink,Table3)} +{At(Robot,Table3),On(BottledDrink,Bar)} +{At(Robot,Table3),On(BottledDrink,WaterTable)} +{At(Robot,Table3),On(BottledDrink,CoffeeTable)} +{At(Robot,Table3),On(BottledDrink,Bar2)} +{At(Robot,Table3),On(BottledDrink,Table1)} +{At(Robot,Table3),On(BottledDrink,Table2)} +{At(Robot,Table3),On(BottledDrink,Table3)} +{At(Robot,Table3),On(Yogurt,Bar)} +{At(Robot,Table3),On(Yogurt,WaterTable)} +{At(Robot,Table3),On(Yogurt,CoffeeTable)} +{At(Robot,Table3),On(Yogurt,Bar2)} +{At(Robot,Table3),On(Yogurt,Table1)} +{At(Robot,Table3),On(Yogurt,Table2)} +{At(Robot,Table3),On(Yogurt,Table3)} +{At(Robot,Table3),On(ADMilk,Bar)} +{At(Robot,Table3),On(ADMilk,WaterTable)} +{At(Robot,Table3),On(ADMilk,CoffeeTable)} +{At(Robot,Table3),On(ADMilk,Bar2)} +{At(Robot,Table3),On(ADMilk,Table1)} +{At(Robot,Table3),On(ADMilk,Table2)} +{At(Robot,Table3),On(ADMilk,Table3)} +{At(Robot,Table3),On(MilkDrink,Bar)} +{At(Robot,Table3),On(MilkDrink,WaterTable)} +{At(Robot,Table3),On(MilkDrink,CoffeeTable)} +{At(Robot,Table3),On(MilkDrink,Bar2)} +{At(Robot,Table3),On(MilkDrink,Table1)} +{At(Robot,Table3),On(MilkDrink,Table2)} +{At(Robot,Table3),On(MilkDrink,Table3)} +{At(Robot,Table3),On(Milk,Bar)} +{At(Robot,Table3),On(Milk,WaterTable)} +{At(Robot,Table3),On(Milk,CoffeeTable)} +{At(Robot,Table3),On(Milk,Bar2)} +{At(Robot,Table3),On(Milk,Table1)} +{At(Robot,Table3),On(Milk,Table2)} +{At(Robot,Table3),On(Milk,Table3)} +{At(Robot,Table3),On(VacuumCup,Bar)} +{At(Robot,Table3),On(VacuumCup,WaterTable)} +{At(Robot,Table3),On(VacuumCup,CoffeeTable)} +{At(Robot,Table3),On(VacuumCup,Bar2)} +{At(Robot,Table3),On(VacuumCup,Table1)} +{At(Robot,Table3),On(VacuumCup,Table2)} +{At(Robot,Table3),On(VacuumCup,Table3)} +{At(Robot,Bar),On(Softdrink,Bar)} +{At(Robot,Bar),On(Softdrink,WaterTable)} +{At(Robot,Bar),On(Softdrink,CoffeeTable)} +{At(Robot,Bar),On(Softdrink,Bar2)} +{At(Robot,Bar),On(Softdrink,Table1)} +{At(Robot,Bar),On(Softdrink,Table2)} +{At(Robot,Bar),On(Softdrink,Table3)} +{At(Robot,Bar),On(BottledDrink,Bar)} +{At(Robot,Bar),On(BottledDrink,WaterTable)} +{At(Robot,Bar),On(BottledDrink,CoffeeTable)} +{At(Robot,Bar),On(BottledDrink,Bar2)} +{At(Robot,Bar),On(BottledDrink,Table1)} +{At(Robot,Bar),On(BottledDrink,Table2)} +{At(Robot,Bar),On(BottledDrink,Table3)} +{At(Robot,Bar),On(Yogurt,Bar)} +{At(Robot,Bar),On(Yogurt,WaterTable)} +{At(Robot,Bar),On(Yogurt,CoffeeTable)} +{At(Robot,Bar),On(Yogurt,Bar2)} +{At(Robot,Bar),On(Yogurt,Table1)} +{At(Robot,Bar),On(Yogurt,Table2)} +{At(Robot,Bar),On(Yogurt,Table3)} +{At(Robot,Bar),On(ADMilk,Bar)} +{At(Robot,Bar),On(ADMilk,WaterTable)} +{At(Robot,Bar),On(ADMilk,CoffeeTable)} +{At(Robot,Bar),On(ADMilk,Bar2)} +{At(Robot,Bar),On(ADMilk,Table1)} +{At(Robot,Bar),On(ADMilk,Table2)} +{At(Robot,Bar),On(ADMilk,Table3)} +{At(Robot,Bar),On(MilkDrink,Bar)} +{At(Robot,Bar),On(MilkDrink,WaterTable)} +{At(Robot,Bar),On(MilkDrink,CoffeeTable)} +{At(Robot,Bar),On(MilkDrink,Bar2)} +{At(Robot,Bar),On(MilkDrink,Table1)} +{At(Robot,Bar),On(MilkDrink,Table2)} +{At(Robot,Bar),On(MilkDrink,Table3)} +{At(Robot,Bar),On(Milk,Bar)} +{At(Robot,Bar),On(Milk,WaterTable)} +{At(Robot,Bar),On(Milk,CoffeeTable)} +{At(Robot,Bar),On(Milk,Bar2)} +{At(Robot,Bar),On(Milk,Table1)} +{At(Robot,Bar),On(Milk,Table2)} +{At(Robot,Bar),On(Milk,Table3)} +{At(Robot,Bar),On(VacuumCup,Bar)} +{At(Robot,Bar),On(VacuumCup,WaterTable)} +{At(Robot,Bar),On(VacuumCup,CoffeeTable)} +{At(Robot,Bar),On(VacuumCup,Bar2)} +{At(Robot,Bar),On(VacuumCup,Table1)} +{At(Robot,Bar),On(VacuumCup,Table2)} +{At(Robot,Bar),On(VacuumCup,Table3)} +{At(Robot,WaterTable),On(Softdrink,Bar)} +{At(Robot,WaterTable),On(Softdrink,WaterTable)} +{At(Robot,WaterTable),On(Softdrink,CoffeeTable)} +{At(Robot,WaterTable),On(Softdrink,Bar2)} +{At(Robot,WaterTable),On(Softdrink,Table1)} +{At(Robot,WaterTable),On(Softdrink,Table2)} +{At(Robot,WaterTable),On(Softdrink,Table3)} +{At(Robot,WaterTable),On(BottledDrink,Bar)} +{At(Robot,WaterTable),On(BottledDrink,WaterTable)} +{At(Robot,WaterTable),On(BottledDrink,CoffeeTable)} +{At(Robot,WaterTable),On(BottledDrink,Bar2)} +{At(Robot,WaterTable),On(BottledDrink,Table1)} +{At(Robot,WaterTable),On(BottledDrink,Table2)} +{At(Robot,WaterTable),On(BottledDrink,Table3)} +{At(Robot,WaterTable),On(Yogurt,Bar)} +{At(Robot,WaterTable),On(Yogurt,WaterTable)} +{At(Robot,WaterTable),On(Yogurt,CoffeeTable)} +{At(Robot,WaterTable),On(Yogurt,Bar2)} +{At(Robot,WaterTable),On(Yogurt,Table1)} +{At(Robot,WaterTable),On(Yogurt,Table2)} +{At(Robot,WaterTable),On(Yogurt,Table3)} +{At(Robot,WaterTable),On(ADMilk,Bar)} +{At(Robot,WaterTable),On(ADMilk,WaterTable)} +{At(Robot,WaterTable),On(ADMilk,CoffeeTable)} +{At(Robot,WaterTable),On(ADMilk,Bar2)} +{At(Robot,WaterTable),On(ADMilk,Table1)} +{At(Robot,WaterTable),On(ADMilk,Table2)} +{At(Robot,WaterTable),On(ADMilk,Table3)} +{At(Robot,WaterTable),On(MilkDrink,Bar)} +{At(Robot,WaterTable),On(MilkDrink,WaterTable)} +{At(Robot,WaterTable),On(MilkDrink,CoffeeTable)} +{At(Robot,WaterTable),On(MilkDrink,Bar2)} +{At(Robot,WaterTable),On(MilkDrink,Table1)} +{At(Robot,WaterTable),On(MilkDrink,Table2)} +{At(Robot,WaterTable),On(MilkDrink,Table3)} +{At(Robot,WaterTable),On(Milk,Bar)} +{At(Robot,WaterTable),On(Milk,WaterTable)} +{At(Robot,WaterTable),On(Milk,CoffeeTable)} +{At(Robot,WaterTable),On(Milk,Bar2)} +{At(Robot,WaterTable),On(Milk,Table1)} +{At(Robot,WaterTable),On(Milk,Table2)} +{At(Robot,WaterTable),On(Milk,Table3)} +{At(Robot,WaterTable),On(VacuumCup,Bar)} +{At(Robot,WaterTable),On(VacuumCup,WaterTable)} +{At(Robot,WaterTable),On(VacuumCup,CoffeeTable)} +{At(Robot,WaterTable),On(VacuumCup,Bar2)} +{At(Robot,WaterTable),On(VacuumCup,Table1)} +{At(Robot,WaterTable),On(VacuumCup,Table2)} +{At(Robot,WaterTable),On(VacuumCup,Table3)} +{At(Robot,CoffeeTable),On(Softdrink,Bar)} +{At(Robot,CoffeeTable),On(Softdrink,WaterTable)} +{At(Robot,CoffeeTable),On(Softdrink,CoffeeTable)} +{At(Robot,CoffeeTable),On(Softdrink,Bar2)} +{At(Robot,CoffeeTable),On(Softdrink,Table1)} +{At(Robot,CoffeeTable),On(Softdrink,Table2)} +{At(Robot,CoffeeTable),On(Softdrink,Table3)} +{At(Robot,CoffeeTable),On(BottledDrink,Bar)} +{At(Robot,CoffeeTable),On(BottledDrink,WaterTable)} +{At(Robot,CoffeeTable),On(BottledDrink,CoffeeTable)} +{At(Robot,CoffeeTable),On(BottledDrink,Bar2)} +{At(Robot,CoffeeTable),On(BottledDrink,Table1)} +{At(Robot,CoffeeTable),On(BottledDrink,Table2)} +{At(Robot,CoffeeTable),On(BottledDrink,Table3)} +{At(Robot,CoffeeTable),On(Yogurt,Bar)} +{At(Robot,CoffeeTable),On(Yogurt,WaterTable)} +{At(Robot,CoffeeTable),On(Yogurt,CoffeeTable)} +{At(Robot,CoffeeTable),On(Yogurt,Bar2)} +{At(Robot,CoffeeTable),On(Yogurt,Table1)} +{At(Robot,CoffeeTable),On(Yogurt,Table2)} +{At(Robot,CoffeeTable),On(Yogurt,Table3)} +{At(Robot,CoffeeTable),On(ADMilk,Bar)} +{At(Robot,CoffeeTable),On(ADMilk,WaterTable)} +{At(Robot,CoffeeTable),On(ADMilk,CoffeeTable)} +{At(Robot,CoffeeTable),On(ADMilk,Bar2)} +{At(Robot,CoffeeTable),On(ADMilk,Table1)} +{At(Robot,CoffeeTable),On(ADMilk,Table2)} +{At(Robot,CoffeeTable),On(ADMilk,Table3)} +{At(Robot,CoffeeTable),On(MilkDrink,Bar)} +{At(Robot,CoffeeTable),On(MilkDrink,WaterTable)} +{At(Robot,CoffeeTable),On(MilkDrink,CoffeeTable)} +{At(Robot,CoffeeTable),On(MilkDrink,Bar2)} +{At(Robot,CoffeeTable),On(MilkDrink,Table1)} +{At(Robot,CoffeeTable),On(MilkDrink,Table2)} +{At(Robot,CoffeeTable),On(MilkDrink,Table3)} +{At(Robot,CoffeeTable),On(Milk,Bar)} +{At(Robot,CoffeeTable),On(Milk,WaterTable)} +{At(Robot,CoffeeTable),On(Milk,CoffeeTable)} +{At(Robot,CoffeeTable),On(Milk,Bar2)} +{At(Robot,CoffeeTable),On(Milk,Table1)} +{At(Robot,CoffeeTable),On(Milk,Table2)} +{At(Robot,CoffeeTable),On(Milk,Table3)} +{At(Robot,CoffeeTable),On(VacuumCup,Bar)} +{At(Robot,CoffeeTable),On(VacuumCup,WaterTable)} +{At(Robot,CoffeeTable),On(VacuumCup,CoffeeTable)} +{At(Robot,CoffeeTable),On(VacuumCup,Bar2)} +{At(Robot,CoffeeTable),On(VacuumCup,Table1)} +{At(Robot,CoffeeTable),On(VacuumCup,Table2)} +{At(Robot,CoffeeTable),On(VacuumCup,Table3)} +{At(Robot,Bar2),On(Softdrink,Bar)} +{At(Robot,Bar2),On(Softdrink,WaterTable)} +{At(Robot,Bar2),On(Softdrink,CoffeeTable)} +{At(Robot,Bar2),On(Softdrink,Bar2)} +{At(Robot,Bar2),On(Softdrink,Table1)} +{At(Robot,Bar2),On(Softdrink,Table2)} +{At(Robot,Bar2),On(Softdrink,Table3)} +{At(Robot,Bar2),On(BottledDrink,Bar)} +{At(Robot,Bar2),On(BottledDrink,WaterTable)} +{At(Robot,Bar2),On(BottledDrink,CoffeeTable)} +{At(Robot,Bar),Is(AC,Off)} +{At(Robot,Bar),Is(AC,On)} +{At(Robot,Bar),Is(ACTemperature,Up)} +{At(Robot,Bar),Is(ACTemperature,Down)} +{At(Robot,Bar),Is(HallLight,Off)} +{At(Robot,Bar),Is(HallLight,On)} +{At(Robot,Bar),Is(TubeLight,Off)} +{At(Robot,Bar),Is(TubeLight,On)} +{At(Robot,Bar),Is(Curtain,Off)} +{At(Robot,Bar),Is(Curtain,On)} +{At(Robot,Bar),Is(Chairs,Dirty)} +{At(Robot,Bar),Is(Chairs,Clean)} +{At(Robot,Bar),Is(Floor,Dirty)} +{At(Robot,Bar),Is(Floor,Clean)} +{At(Robot,Bar),Is(Table1,Dirty)} +{At(Robot,Bar),Is(Table1,Clean)} +{At(Robot,WaterTable),Is(AC,Off)} +{At(Robot,WaterTable),Is(AC,On)} +{At(Robot,WaterTable),Is(ACTemperature,Up)} +{At(Robot,WaterTable),Is(ACTemperature,Down)} +{At(Robot,WaterTable),Is(HallLight,Off)} +{At(Robot,WaterTable),Is(HallLight,On)} +{At(Robot,WaterTable),Is(TubeLight,Off)} +{At(Robot,WaterTable),Is(TubeLight,On)} +{At(Robot,WaterTable),Is(Curtain,Off)} +{At(Robot,WaterTable),Is(Curtain,On)} +{At(Robot,WaterTable),Is(Chairs,Dirty)} +{At(Robot,WaterTable),Is(Chairs,Clean)} +{At(Robot,WaterTable),Is(Floor,Dirty)} +{At(Robot,WaterTable),Is(Floor,Clean)} +{At(Robot,WaterTable),Is(Table1,Dirty)} +{At(Robot,WaterTable),Is(Table1,Clean)} +{At(Robot,CoffeeTable),Is(AC,Off)} +{At(Robot,CoffeeTable),Is(AC,On)} +{At(Robot,CoffeeTable),Is(ACTemperature,Up)} +{At(Robot,CoffeeTable),Is(ACTemperature,Down)} +{At(Robot,CoffeeTable),Is(HallLight,Off)} +{At(Robot,CoffeeTable),Is(HallLight,On)} +{At(Robot,CoffeeTable),Is(TubeLight,Off)} +{At(Robot,CoffeeTable),Is(TubeLight,On)} +{At(Robot,CoffeeTable),Is(Curtain,Off)} +{At(Robot,CoffeeTable),Is(Curtain,On)} +{At(Robot,CoffeeTable),Is(Chairs,Dirty)} +{At(Robot,CoffeeTable),Is(Chairs,Clean)} +{At(Robot,CoffeeTable),Is(Floor,Dirty)} +{At(Robot,CoffeeTable),Is(Floor,Clean)} +{At(Robot,CoffeeTable),Is(Table1,Dirty)} +{At(Robot,CoffeeTable),Is(Table1,Clean)} +{At(Robot,Bar2),Is(AC,Off)} +{At(Robot,Bar2),Is(AC,On)} +{At(Robot,Bar2),Is(ACTemperature,Up)} +{At(Robot,Bar2),Is(ACTemperature,Down)} +{At(Robot,Bar2),Is(HallLight,Off)} +{At(Robot,Bar2),Is(HallLight,On)} +{At(Robot,Bar2),Is(TubeLight,Off)} +{At(Robot,Bar2),Is(TubeLight,On)} +{At(Robot,Bar2),Is(Curtain,Off)} +{At(Robot,Bar2),Is(Curtain,On)} +{At(Robot,Bar2),Is(Chairs,Dirty)} +{At(Robot,Bar2),Is(Chairs,Clean)} +{At(Robot,Bar2),Is(Floor,Dirty)} +{At(Robot,Bar2),Is(Floor,Clean)} +{At(Robot,Bar2),Is(Table1,Dirty)} +{At(Robot,Bar2),Is(Table1,Clean)} +{At(Robot,Table1),Is(AC,Off)} +{At(Robot,Table1),Is(AC,On)} +{At(Robot,Table1),Is(ACTemperature,Up)} +{At(Robot,Table1),Is(ACTemperature,Down)} +{At(Robot,Table1),Is(HallLight,Off)} +{At(Robot,Table1),Is(HallLight,On)} +{At(Robot,Table1),Is(TubeLight,Off)} +{At(Robot,Table1),Is(TubeLight,On)} +{At(Robot,Table1),Is(Curtain,Off)} +{At(Robot,Table1),Is(Curtain,On)} +{At(Robot,Table1),Is(Chairs,Dirty)} +{At(Robot,Table1),Is(Chairs,Clean)} +{At(Robot,Table1),Is(Floor,Dirty)} +{At(Robot,Table1),Is(Floor,Clean)} +{At(Robot,Table1),Is(Table1,Dirty)} +{At(Robot,Table1),Is(Table1,Clean)} +{At(Robot,Table2),Is(AC,Off)} +{At(Robot,Table2),Is(AC,On)} +{At(Robot,Table2),Is(ACTemperature,Up)} +{At(Robot,Table2),Is(ACTemperature,Down)} +{At(Robot,Table2),Is(HallLight,Off)} +{At(Robot,Table2),Is(HallLight,On)} +{At(Robot,Table2),Is(TubeLight,Off)} +{At(Robot,Table2),Is(TubeLight,On)} +{At(Robot,Table2),Is(Curtain,Off)} +{At(Robot,Table2),Is(Curtain,On)} +{At(Robot,Table2),Is(Chairs,Dirty)} +{At(Robot,Table2),Is(Chairs,Clean)} +{At(Robot,Table2),Is(Floor,Dirty)} +{At(Robot,Table2),Is(Floor,Clean)} +{At(Robot,Table2),Is(Table1,Dirty)} +{At(Robot,Table2),Is(Table1,Clean)} +{At(Robot,Table3),Is(AC,Off)} +{At(Robot,Table3),Is(AC,On)} +{At(Robot,Table3),Is(ACTemperature,Up)} +{At(Robot,Table3),Is(ACTemperature,Down)} +{At(Robot,Table3),Is(HallLight,Off)} +{At(Robot,Table3),Is(HallLight,On)} +{At(Robot,Table3),Is(TubeLight,Off)} +{At(Robot,Table3),Is(TubeLight,On)} +{At(Robot,Table3),Is(Curtain,Off)} +{At(Robot,Table3),Is(Curtain,On)} +{At(Robot,Table3),Is(Chairs,Dirty)} +{At(Robot,Table3),Is(Chairs,Clean)} +{At(Robot,Table3),Is(Floor,Dirty)} +{At(Robot,Table3),Is(Floor,Clean)} +{At(Robot,Table3),Is(Table1,Dirty)} +{At(Robot,Table3),Is(Table1,Clean)} +{At(Robot,Bar),Is(AC,Off)} +{At(Robot,Bar),Is(AC,On)} +{At(Robot,Bar),Is(ACTemperature,Up)} +{At(Robot,Bar),Is(ACTemperature,Down)} +{At(Robot,Bar),Is(HallLight,Off)} +{At(Robot,Bar),Is(HallLight,On)} +{At(Robot,Bar),Is(TubeLight,Off)} +{At(Robot,Bar),Is(TubeLight,On)} +{At(Robot,Bar),Is(Curtain,Off)} +{At(Robot,Bar),Is(Curtain,On)} +{At(Robot,Bar),Is(Chairs,Dirty)} +{At(Robot,Bar),Is(Chairs,Clean)} +{At(Robot,Bar),Is(Floor,Dirty)} +{At(Robot,Bar),Is(Floor,Clean)} +{At(Robot,Bar),Is(Table1,Dirty)} +{At(Robot,Bar),Is(Table1,Clean)} +{At(Robot,WaterTable),Is(AC,Off)} +{At(Robot,WaterTable),Is(AC,On)} +{At(Robot,WaterTable),Is(ACTemperature,Up)} +{At(Robot,WaterTable),Is(ACTemperature,Down)} +{At(Robot,WaterTable),Is(HallLight,Off)} +{At(Robot,WaterTable),Is(HallLight,On)} +{At(Robot,WaterTable),Is(TubeLight,Off)} +{At(Robot,WaterTable),Is(TubeLight,On)} +{At(Robot,WaterTable),Is(Curtain,Off)} +{At(Robot,WaterTable),Is(Curtain,On)} +{At(Robot,WaterTable),Is(Chairs,Dirty)} +{At(Robot,WaterTable),Is(Chairs,Clean)} +{At(Robot,WaterTable),Is(Floor,Dirty)} +{At(Robot,WaterTable),Is(Floor,Clean)} +{At(Robot,WaterTable),Is(Table1,Dirty)} +{At(Robot,WaterTable),Is(Table1,Clean)} +{At(Robot,CoffeeTable),Is(AC,Off)} +{At(Robot,CoffeeTable),Is(AC,On)} +{At(Robot,CoffeeTable),Is(ACTemperature,Up)} +{At(Robot,CoffeeTable),Is(ACTemperature,Down)} +{At(Robot,CoffeeTable),Is(HallLight,Off)} +{At(Robot,CoffeeTable),Is(HallLight,On)} +{At(Robot,CoffeeTable),Is(TubeLight,Off)} +{At(Robot,CoffeeTable),Is(TubeLight,On)} +{At(Robot,CoffeeTable),Is(Curtain,Off)} +{At(Robot,CoffeeTable),Is(Curtain,On)} +{At(Robot,CoffeeTable),Is(Chairs,Dirty)} +{At(Robot,CoffeeTable),Is(Chairs,Clean)} +{At(Robot,CoffeeTable),Is(Floor,Dirty)} +{At(Robot,CoffeeTable),Is(Floor,Clean)} +{At(Robot,CoffeeTable),Is(Table1,Dirty)} +{At(Robot,CoffeeTable),Is(Table1,Clean)} +{At(Robot,Bar2),Is(AC,Off)} +{At(Robot,Bar2),Is(AC,On)} +{At(Robot,Bar2),Is(ACTemperature,Up)} +{At(Robot,Bar2),Is(ACTemperature,Down)} +{At(Robot,Bar2),Is(HallLight,Off)} +{At(Robot,Bar2),Is(HallLight,On)} +{At(Robot,Bar2),Is(TubeLight,Off)} +{At(Robot,Bar2),Is(TubeLight,On)} +{At(Robot,Bar2),Is(Curtain,Off)} +{At(Robot,Bar2),Is(Curtain,On)} +{At(Robot,Bar2),Is(Chairs,Dirty)} +{At(Robot,Bar2),Is(Chairs,Clean)} +{At(Robot,Bar2),Is(Floor,Dirty)} +{At(Robot,Bar2),Is(Floor,Clean)} +{At(Robot,Bar2),Is(Table1,Dirty)} +{At(Robot,Bar2),Is(Table1,Clean)} +{At(Robot,Table1),Is(AC,Off)} +{At(Robot,Table1),Is(AC,On)} +{At(Robot,Table1),Is(ACTemperature,Up)} +{At(Robot,Table1),Is(ACTemperature,Down)} +{At(Robot,Table1),Is(HallLight,Off)} +{At(Robot,Table1),Is(HallLight,On)} +{At(Robot,Table1),Is(TubeLight,Off)} +{At(Robot,Table1),Is(TubeLight,On)} +{At(Robot,Table1),Is(Curtain,Off)} +{At(Robot,Table1),Is(Curtain,On)} +{At(Robot,Table1),Is(Chairs,Dirty)} +{At(Robot,Table1),Is(Chairs,Clean)} +{At(Robot,Table1),Is(Floor,Dirty)} +{At(Robot,Table1),Is(Floor,Clean)} +{At(Robot,Table1),Is(Table1,Dirty)} +{At(Robot,Table1),Is(Table1,Clean)} +{At(Robot,Table2),Is(AC,Off)} +{At(Robot,Table2),Is(AC,On)} +{At(Robot,Table2),Is(ACTemperature,Up)} +{At(Robot,Table2),Is(ACTemperature,Down)} +{At(Robot,Table2),Is(HallLight,Off)} +{At(Robot,Table2),Is(HallLight,On)} +{At(Robot,Table2),Is(TubeLight,Off)} +{At(Robot,Table2),Is(TubeLight,On)} +{At(Robot,Table2),Is(Curtain,Off)} +{At(Robot,Table2),Is(Curtain,On)} +{At(Robot,Table2),Is(Chairs,Dirty)} +{At(Robot,Table2),Is(Chairs,Clean)} +{At(Robot,Table2),Is(Floor,Dirty)} +{At(Robot,Table2),Is(Floor,Clean)} +{At(Robot,Table2),Is(Table1,Dirty)} +{At(Robot,Table2),Is(Table1,Clean)} +{At(Robot,Table3),Is(AC,Off)} +{At(Robot,Table3),Is(AC,On)} +{At(Robot,Table3),Is(ACTemperature,Up)} +{At(Robot,Table3),Is(ACTemperature,Down)} +{At(Robot,Table3),Is(HallLight,Off)} +{At(Robot,Table3),Is(HallLight,On)} +{At(Robot,Table3),Is(TubeLight,Off)} +{At(Robot,Table3),Is(TubeLight,On)} +{At(Robot,Table3),Is(Curtain,Off)} +{At(Robot,Table3),Is(Curtain,On)} +{At(Robot,Table3),Is(Chairs,Dirty)} +{At(Robot,Table3),Is(Chairs,Clean)} +{At(Robot,Table3),Is(Floor,Dirty)} +{At(Robot,Table3),Is(Floor,Clean)} +{At(Robot,Table3),Is(Table1,Dirty)} +{At(Robot,Table3),Is(Table1,Clean)} +{At(Robot,Bar),Is(AC,Off)} +{At(Robot,Bar),Is(AC,On)} +{At(Robot,Bar),Is(ACTemperature,Up)} +{At(Robot,Bar),Is(ACTemperature,Down)} +{At(Robot,Bar),Is(HallLight,Off)} +{At(Robot,Bar),Is(HallLight,On)} +{At(Robot,Bar),Is(TubeLight,Off)} +{At(Robot,Bar),Is(TubeLight,On)} +{At(Robot,Bar),Is(Curtain,Off)} +{At(Robot,Bar),Is(Curtain,On)} +{At(Robot,Bar),Is(Chairs,Dirty)} +{At(Robot,Bar),Is(Chairs,Clean)} +{At(Robot,Bar),Is(Floor,Dirty)} +{At(Robot,Bar),Is(Floor,Clean)} +{At(Robot,Bar),Is(Table1,Dirty)} +{At(Robot,Bar),Is(Table1,Clean)} +{At(Robot,WaterTable),Is(AC,Off)} +{At(Robot,WaterTable),Is(AC,On)} +{At(Robot,WaterTable),Is(ACTemperature,Up)} +{At(Robot,WaterTable),Is(ACTemperature,Down)} +{At(Robot,WaterTable),Is(HallLight,Off)} +{At(Robot,WaterTable),Is(HallLight,On)} +{At(Robot,WaterTable),Is(TubeLight,Off)} +{At(Robot,WaterTable),Is(TubeLight,On)} +{At(Robot,WaterTable),Is(Curtain,Off)} +{At(Robot,WaterTable),Is(Curtain,On)} +{At(Robot,WaterTable),Is(Chairs,Dirty)} +{At(Robot,WaterTable),Is(Chairs,Clean)} +{At(Robot,WaterTable),Is(Floor,Dirty)} +{At(Robot,WaterTable),Is(Floor,Clean)} +{At(Robot,WaterTable),Is(Table1,Dirty)} +{At(Robot,WaterTable),Is(Table1,Clean)} +{At(Robot,CoffeeTable),Is(AC,Off)} +{At(Robot,CoffeeTable),Is(AC,On)} +{At(Robot,CoffeeTable),Is(ACTemperature,Up)} +{At(Robot,CoffeeTable),Is(ACTemperature,Down)} +{At(Robot,CoffeeTable),Is(HallLight,Off)} +{At(Robot,CoffeeTable),Is(HallLight,On)} +{At(Robot,CoffeeTable),Is(TubeLight,Off)} +{At(Robot,CoffeeTable),Is(TubeLight,On)} +{At(Robot,CoffeeTable),Is(Curtain,Off)} +{At(Robot,CoffeeTable),Is(Curtain,On)} +{At(Robot,CoffeeTable),Is(Chairs,Dirty)} +{At(Robot,CoffeeTable),Is(Chairs,Clean)} +{At(Robot,CoffeeTable),Is(Floor,Dirty)} +{At(Robot,CoffeeTable),Is(Floor,Clean)} +{At(Robot,CoffeeTable),Is(Table1,Dirty)} +{At(Robot,CoffeeTable),Is(Table1,Clean)} +{At(Robot,Bar2),Is(AC,Off)} +{At(Robot,Bar2),Is(AC,On)} +{At(Robot,Bar2),Is(ACTemperature,Up)} +{At(Robot,Bar2),Is(ACTemperature,Down)} +{At(Robot,Bar2),Is(HallLight,Off)} +{At(Robot,Bar2),Is(HallLight,On)} +{At(Robot,Bar2),Is(TubeLight,Off)} +{At(Robot,Bar2),Is(TubeLight,On)} +{At(Robot,Bar2),Is(Curtain,Off)} +{At(Robot,Bar2),Is(Curtain,On)} +{At(Robot,Bar2),Is(Chairs,Dirty)} +{At(Robot,Bar2),Is(Chairs,Clean)} +{At(Robot,Bar2),Is(Floor,Dirty)} +{At(Robot,Bar2),Is(Floor,Clean)} +{At(Robot,Bar2),Is(Table1,Dirty)} +{At(Robot,Bar2),Is(Table1,Clean)} +{At(Robot,Table1),Is(AC,Off)} +{At(Robot,Table1),Is(AC,On)} +{At(Robot,Table1),Is(ACTemperature,Up)} +{At(Robot,Table1),Is(ACTemperature,Down)} +{At(Robot,Table1),Is(HallLight,Off)} +{At(Robot,Table1),Is(HallLight,On)} +{At(Robot,Table1),Is(TubeLight,Off)} +{At(Robot,Table1),Is(TubeLight,On)} +{At(Robot,Table1),Is(Curtain,Off)} +{At(Robot,Table1),Is(Curtain,On)} +{At(Robot,Table1),Is(Chairs,Dirty)} +{At(Robot,Table1),Is(Chairs,Clean)} +{At(Robot,Table1),Is(Floor,Dirty)} +{At(Robot,Table1),Is(Floor,Clean)} +{At(Robot,Table1),Is(Table1,Dirty)} +{At(Robot,Table1),Is(Table1,Clean)} +{At(Robot,Table2),Is(AC,Off)} +{At(Robot,Table2),Is(AC,On)} +{At(Robot,Table2),Is(ACTemperature,Up)} +{At(Robot,Table2),Is(ACTemperature,Down)} +{At(Robot,Table2),Is(HallLight,Off)} +{At(Robot,Table2),Is(HallLight,On)} +{At(Robot,Table2),Is(TubeLight,Off)} +{At(Robot,Table2),Is(TubeLight,On)} +{At(Robot,Table2),Is(Curtain,Off)} +{At(Robot,Table2),Is(Curtain,On)} +{At(Robot,Table2),Is(Chairs,Dirty)} +{At(Robot,Table2),Is(Chairs,Clean)} +{At(Robot,Table2),Is(Floor,Dirty)} +{At(Robot,Table2),Is(Floor,Clean)} +{At(Robot,Table2),Is(Table1,Dirty)} +{At(Robot,Table2),Is(Table1,Clean)} +{At(Robot,Table3),Is(AC,Off)} +{At(Robot,Table3),Is(AC,On)} +{At(Robot,Table3),Is(ACTemperature,Up)} +{At(Robot,Table3),Is(ACTemperature,Down)} +{At(Robot,Table3),Is(HallLight,Off)} +{At(Robot,Table3),Is(HallLight,On)} +{At(Robot,Table3),Is(TubeLight,Off)} +{At(Robot,Table3),Is(TubeLight,On)} +{At(Robot,Table3),Is(Curtain,Off)} +{At(Robot,Table3),Is(Curtain,On)} +{At(Robot,Table3),Is(Chairs,Dirty)} +{At(Robot,Table3),Is(Chairs,Clean)} +{At(Robot,Table3),Is(Floor,Dirty)} +{At(Robot,Table3),Is(Floor,Clean)} +{At(Robot,Table3),Is(Table1,Dirty)} +{At(Robot,Table3),Is(Table1,Clean)} +{At(Robot,Bar),Is(AC,Off)} +{At(Robot,Bar),Is(AC,On)} +{At(Robot,Bar),Is(ACTemperature,Up)} +{At(Robot,Bar),Is(ACTemperature,Down)} +{At(Robot,Bar),Is(HallLight,Off)} +{At(Robot,Bar),Is(HallLight,On)} +{At(Robot,Bar),Is(TubeLight,Off)} +{At(Robot,Bar),Is(TubeLight,On)} +{At(Robot,Bar),Is(Curtain,Off)} +{At(Robot,Bar),Is(Curtain,On)} +{At(Robot,Bar),Is(Chairs,Dirty)} +{At(Robot,Bar),Is(Chairs,Clean)} +{At(Robot,Bar),Is(Floor,Dirty)} +{At(Robot,Bar),Is(Floor,Clean)} +{At(Robot,Bar),Is(Table1,Dirty)} +{At(Robot,Bar),Is(Table1,Clean)} +{At(Robot,WaterTable),Is(AC,Off)} +{At(Robot,WaterTable),Is(AC,On)} +{At(Robot,WaterTable),Is(ACTemperature,Up)} +{At(Robot,WaterTable),Is(ACTemperature,Down)} +{At(Robot,WaterTable),Is(HallLight,Off)} +{At(Robot,WaterTable),Is(HallLight,On)} +{At(Robot,WaterTable),Is(TubeLight,Off)} +{At(Robot,WaterTable),Is(TubeLight,On)} +{At(Robot,WaterTable),Is(Curtain,Off)} +{At(Robot,WaterTable),Is(Curtain,On)} +{At(Robot,WaterTable),Is(Chairs,Dirty)} +{At(Robot,WaterTable),Is(Chairs,Clean)} +{At(Robot,WaterTable),Is(Floor,Dirty)} +{At(Robot,WaterTable),Is(Floor,Clean)} +{At(Robot,WaterTable),Is(Table1,Dirty)} +{At(Robot,WaterTable),Is(Table1,Clean)} +{At(Robot,CoffeeTable),Is(AC,Off)} +{At(Robot,CoffeeTable),Is(AC,On)} +{At(Robot,CoffeeTable),Is(ACTemperature,Up)} +{At(Robot,CoffeeTable),Is(ACTemperature,Down)} +{At(Robot,CoffeeTable),Is(HallLight,Off)} +{At(Robot,CoffeeTable),Is(HallLight,On)} +{At(Robot,CoffeeTable),Is(TubeLight,Off)} +{At(Robot,CoffeeTable),Is(TubeLight,On)} +{At(Robot,CoffeeTable),Is(Curtain,Off)} +{At(Robot,CoffeeTable),Is(Curtain,On)} +{At(Robot,CoffeeTable),Is(Chairs,Dirty)} +{At(Robot,CoffeeTable),Is(Chairs,Clean)} +{At(Robot,CoffeeTable),Is(Floor,Dirty)} +{At(Robot,CoffeeTable),Is(Floor,Clean)} +{At(Robot,CoffeeTable),Is(Table1,Dirty)} +{At(Robot,CoffeeTable),Is(Table1,Clean)} +{At(Robot,Bar2),Is(AC,Off)} +{At(Robot,Bar2),Is(AC,On)} +{At(Robot,Bar2),Is(ACTemperature,Up)} +{At(Robot,Bar2),Is(ACTemperature,Down)} +{At(Robot,Bar2),Is(HallLight,Off)} +{At(Robot,Bar2),Is(HallLight,On)} +{At(Robot,Bar2),Is(TubeLight,Off)} +{At(Robot,Bar2),Is(TubeLight,On)} +{At(Robot,Bar2),Is(Curtain,Off)} +{At(Robot,Bar2),Is(Curtain,On)} +{At(Robot,Bar2),Is(Chairs,Dirty)} +{At(Robot,Bar2),Is(Chairs,Clean)} +{At(Robot,Bar2),Is(Floor,Dirty)} +{At(Robot,Bar2),Is(Floor,Clean)} +{At(Robot,Bar2),Is(Table1,Dirty)} +{At(Robot,Bar2),Is(Table1,Clean)} +{At(Robot,Table1),Is(AC,Off)} +{At(Robot,Table1),Is(AC,On)} +{At(Robot,Table1),Is(ACTemperature,Up)} +{At(Robot,Table1),Is(ACTemperature,Down)} +{At(Robot,Table1),Is(HallLight,Off)} +{At(Robot,Table1),Is(HallLight,On)} +{At(Robot,Table1),Is(TubeLight,Off)} +{At(Robot,Table1),Is(TubeLight,On)} +{At(Robot,Table1),Is(Curtain,Off)} +{At(Robot,Table1),Is(Curtain,On)} +{At(Robot,Table1),Is(Chairs,Dirty)} +{At(Robot,Table1),Is(Chairs,Clean)} +{At(Robot,Table1),Is(Floor,Dirty)} +{At(Robot,Table1),Is(Floor,Clean)} +{At(Robot,Table1),Is(Table1,Dirty)} +{At(Robot,Table1),Is(Table1,Clean)} +{At(Robot,Table2),Is(AC,Off)} +{At(Robot,Table2),Is(AC,On)} +{At(Robot,Table2),Is(ACTemperature,Up)} +{At(Robot,Table2),Is(ACTemperature,Down)} +{At(Robot,Table2),Is(HallLight,Off)} +{At(Robot,Table2),Is(HallLight,On)} +{At(Robot,Table2),Is(TubeLight,Off)} +{At(Robot,Table2),Is(TubeLight,On)} +{At(Robot,Table2),Is(Curtain,Off)} +{At(Robot,Table2),Is(Curtain,On)} +{At(Robot,Table2),Is(Chairs,Dirty)} +{At(Robot,Table2),Is(Chairs,Clean)} +{At(Robot,Table2),Is(Floor,Dirty)} +{At(Robot,Table2),Is(Floor,Clean)} +{At(Robot,Table2),Is(Table1,Dirty)} +{At(Robot,Table2),Is(Table1,Clean)} +{At(Robot,Table3),Is(AC,Off)} +{At(Robot,Table3),Is(AC,On)} +{At(Robot,Table3),Is(ACTemperature,Up)} +{At(Robot,Table3),Is(ACTemperature,Down)} +{At(Robot,Table3),Is(HallLight,Off)} +{At(Robot,Table3),Is(HallLight,On)} +{At(Robot,Table3),Is(TubeLight,Off)} +{At(Robot,Table3),Is(TubeLight,On)} +{At(Robot,Table3),Is(Curtain,Off)} +{At(Robot,Table3),Is(Curtain,On)} +{At(Robot,Table3),Is(Chairs,Dirty)} +{At(Robot,Table3),Is(Chairs,Clean)} +{At(Robot,Table3),Is(Floor,Dirty)} +{At(Robot,Table3),Is(Floor,Clean)} +{At(Robot,Table3),Is(Table1,Dirty)} +{At(Robot,Table3),Is(Table1,Clean)} +{At(Robot,Bar),Is(AC,Off)} +{At(Robot,Bar),Is(AC,On)} +{At(Robot,Bar),Is(ACTemperature,Up)} +{At(Robot,Bar),Is(ACTemperature,Down)} +{At(Robot,Bar),Is(HallLight,Off)} +{At(Robot,Bar),Is(HallLight,On)} +{At(Robot,Bar),Is(TubeLight,Off)} +{At(Robot,Bar),Is(TubeLight,On)} +{At(Robot,Bar),Is(Curtain,Off)} +{At(Robot,Bar),Is(Curtain,On)} +{At(Robot,Bar),Is(Chairs,Dirty)} +{At(Robot,Bar),Is(Chairs,Clean)} +{At(Robot,Bar),Is(Floor,Dirty)} +{At(Robot,Bar),Is(Floor,Clean)} +{At(Robot,Bar),Is(Table1,Dirty)} +{At(Robot,Bar),Is(Table1,Clean)} +{At(Robot,WaterTable),Is(AC,Off)} +{At(Robot,WaterTable),Is(AC,On)} +{At(Robot,WaterTable),Is(ACTemperature,Up)} +{At(Robot,WaterTable),Is(ACTemperature,Down)} +{At(Robot,WaterTable),Is(HallLight,Off)} +{At(Robot,WaterTable),Is(HallLight,On)} +{At(Robot,WaterTable),Is(TubeLight,Off)} +{At(Robot,WaterTable),Is(TubeLight,On)} +{At(Robot,WaterTable),Is(Curtain,Off)} +{At(Robot,WaterTable),Is(Curtain,On)} +{At(Robot,WaterTable),Is(Chairs,Dirty)} +{At(Robot,WaterTable),Is(Chairs,Clean)} +{At(Robot,WaterTable),Is(Floor,Dirty)} +{At(Robot,WaterTable),Is(Floor,Clean)} +{At(Robot,WaterTable),Is(Table1,Dirty)} +{At(Robot,WaterTable),Is(Table1,Clean)} +{At(Robot,CoffeeTable),Is(AC,Off)} +{At(Robot,CoffeeTable),Is(AC,On)} +{At(Robot,CoffeeTable),Is(ACTemperature,Up)} +{At(Robot,CoffeeTable),Is(ACTemperature,Down)} +{At(Robot,CoffeeTable),Is(HallLight,Off)} +{At(Robot,CoffeeTable),Is(HallLight,On)} +{At(Robot,CoffeeTable),Is(TubeLight,Off)} +{At(Robot,CoffeeTable),Is(TubeLight,On)} +{At(Robot,CoffeeTable),Is(Curtain,Off)} +{At(Robot,CoffeeTable),Is(Curtain,On)} +{At(Robot,CoffeeTable),Is(Chairs,Dirty)} +{At(Robot,CoffeeTable),Is(Chairs,Clean)} +{At(Robot,CoffeeTable),Is(Floor,Dirty)} +{At(Robot,CoffeeTable),Is(Floor,Clean)} +{At(Robot,CoffeeTable),Is(Table1,Dirty)} +{At(Robot,CoffeeTable),Is(Table1,Clean)} +{At(Robot,Bar2),Is(AC,Off)} +{At(Robot,Bar2),Is(AC,On)} +{At(Robot,Bar2),Is(ACTemperature,Up)} +{At(Robot,Bar2),Is(ACTemperature,Down)} +{On(Coffee,Bar),Is(AC,Off)} +{On(Coffee,Bar),Is(AC,On)} +{On(Coffee,Bar),Is(ACTemperature,Up)} +{On(Coffee,Bar),Is(ACTemperature,Down)} +{On(Coffee,Bar),Is(HallLight,Off)} +{On(Coffee,Bar),Is(HallLight,On)} +{On(Coffee,Bar),Is(TubeLight,Off)} +{On(Coffee,Bar),Is(TubeLight,On)} +{On(Coffee,Bar),Is(Curtain,Off)} +{On(Coffee,Bar),Is(Curtain,On)} +{On(Coffee,Bar),Is(Chairs,Dirty)} +{On(Coffee,Bar),Is(Chairs,Clean)} +{On(Coffee,Bar),Is(Floor,Dirty)} +{On(Coffee,Bar),Is(Floor,Clean)} +{On(Coffee,Bar),Is(Table1,Dirty)} +{On(Coffee,Bar),Is(Table1,Clean)} +{On(Coffee,WaterTable),Is(AC,Off)} +{On(Coffee,WaterTable),Is(AC,On)} +{On(Coffee,WaterTable),Is(ACTemperature,Up)} +{On(Coffee,WaterTable),Is(ACTemperature,Down)} +{On(Coffee,WaterTable),Is(HallLight,Off)} +{On(Coffee,WaterTable),Is(HallLight,On)} +{On(Coffee,WaterTable),Is(TubeLight,Off)} +{On(Coffee,WaterTable),Is(TubeLight,On)} +{On(Coffee,WaterTable),Is(Curtain,Off)} +{On(Coffee,WaterTable),Is(Curtain,On)} +{On(Coffee,WaterTable),Is(Chairs,Dirty)} +{On(Coffee,WaterTable),Is(Chairs,Clean)} +{On(Coffee,WaterTable),Is(Floor,Dirty)} +{On(Coffee,WaterTable),Is(Floor,Clean)} +{On(Coffee,WaterTable),Is(Table1,Dirty)} +{On(Coffee,WaterTable),Is(Table1,Clean)} +{On(Coffee,CoffeeTable),Is(AC,Off)} +{On(Coffee,CoffeeTable),Is(AC,On)} +{On(Coffee,CoffeeTable),Is(ACTemperature,Up)} +{On(Coffee,CoffeeTable),Is(ACTemperature,Down)} +{On(Coffee,CoffeeTable),Is(HallLight,Off)} +{On(Coffee,CoffeeTable),Is(HallLight,On)} +{On(Coffee,CoffeeTable),Is(TubeLight,Off)} +{On(Coffee,CoffeeTable),Is(TubeLight,On)} +{On(Coffee,CoffeeTable),Is(Curtain,Off)} +{On(Coffee,CoffeeTable),Is(Curtain,On)} +{On(Coffee,CoffeeTable),Is(Chairs,Dirty)} +{On(Coffee,CoffeeTable),Is(Chairs,Clean)} +{On(Coffee,CoffeeTable),Is(Floor,Dirty)} +{On(Coffee,CoffeeTable),Is(Floor,Clean)} +{On(Coffee,CoffeeTable),Is(Table1,Dirty)} +{On(Coffee,CoffeeTable),Is(Table1,Clean)} +{On(Coffee,Bar2),Is(AC,Off)} +{On(Coffee,Bar2),Is(AC,On)} +{On(Coffee,Bar2),Is(ACTemperature,Up)} +{On(Coffee,Bar2),Is(ACTemperature,Down)} +{On(Coffee,Bar2),Is(HallLight,Off)} +{On(Coffee,Bar2),Is(HallLight,On)} +{On(Coffee,Bar2),Is(TubeLight,Off)} +{On(Coffee,Bar2),Is(TubeLight,On)} +{On(Coffee,Bar2),Is(Curtain,Off)} +{On(Coffee,Bar2),Is(Curtain,On)} +{On(Coffee,Bar2),Is(Chairs,Dirty)} +{On(Coffee,Bar2),Is(Chairs,Clean)} +{On(Coffee,Bar2),Is(Floor,Dirty)} +{On(Coffee,Bar2),Is(Floor,Clean)} +{On(Coffee,Bar2),Is(Table1,Dirty)} +{On(Coffee,Bar2),Is(Table1,Clean)} +{On(Coffee,Table1),Is(AC,Off)} +{On(Coffee,Table1),Is(AC,On)} +{On(Coffee,Table1),Is(ACTemperature,Up)} +{On(Coffee,Table1),Is(ACTemperature,Down)} +{On(Coffee,Table1),Is(HallLight,Off)} +{On(Coffee,Table1),Is(HallLight,On)} +{On(Coffee,Table1),Is(TubeLight,Off)} +{On(Coffee,Table1),Is(TubeLight,On)} +{On(Coffee,Table1),Is(Curtain,Off)} +{On(Coffee,Table1),Is(Curtain,On)} +{On(Coffee,Table1),Is(Chairs,Dirty)} +{On(Coffee,Table1),Is(Chairs,Clean)} +{On(Coffee,Table1),Is(Floor,Dirty)} +{On(Coffee,Table1),Is(Floor,Clean)} +{On(Coffee,Table1),Is(Table1,Dirty)} +{On(Coffee,Table1),Is(Table1,Clean)} +{On(Coffee,Table2),Is(AC,Off)} +{On(Coffee,Table2),Is(AC,On)} +{On(Coffee,Table2),Is(ACTemperature,Up)} +{On(Coffee,Table2),Is(ACTemperature,Down)} +{On(Coffee,Table2),Is(HallLight,Off)} +{On(Coffee,Table2),Is(HallLight,On)} +{On(Coffee,Table2),Is(TubeLight,Off)} +{On(Coffee,Table2),Is(TubeLight,On)} +{On(Coffee,Table2),Is(Curtain,Off)} +{On(Coffee,Table2),Is(Curtain,On)} +{On(Coffee,Table2),Is(Chairs,Dirty)} +{On(Coffee,Table2),Is(Chairs,Clean)} +{On(Coffee,Table2),Is(Floor,Dirty)} +{On(Coffee,Table2),Is(Floor,Clean)} +{On(Coffee,Table2),Is(Table1,Dirty)} +{On(Coffee,Table2),Is(Table1,Clean)} +{On(Coffee,Table3),Is(AC,Off)} +{On(Coffee,Table3),Is(AC,On)} +{On(Coffee,Table3),Is(ACTemperature,Up)} +{On(Coffee,Table3),Is(ACTemperature,Down)} +{On(Coffee,Table3),Is(HallLight,Off)} +{On(Coffee,Table3),Is(HallLight,On)} +{On(Coffee,Table3),Is(TubeLight,Off)} +{On(Coffee,Table3),Is(TubeLight,On)} +{On(Coffee,Table3),Is(Curtain,Off)} +{On(Coffee,Table3),Is(Curtain,On)} +{On(Coffee,Table3),Is(Chairs,Dirty)} +{On(Coffee,Table3),Is(Chairs,Clean)} +{On(Coffee,Table3),Is(Floor,Dirty)} +{On(Coffee,Table3),Is(Floor,Clean)} +{On(Coffee,Table3),Is(Table1,Dirty)} +{On(Coffee,Table3),Is(Table1,Clean)} +{On(Water,Bar),Is(AC,Off)} +{On(Water,Bar),Is(AC,On)} +{On(Water,Bar),Is(ACTemperature,Up)} +{On(Water,Bar),Is(ACTemperature,Down)} +{On(Water,Bar),Is(HallLight,Off)} +{On(Water,Bar),Is(HallLight,On)} +{On(Water,Bar),Is(TubeLight,Off)} +{On(Water,Bar),Is(TubeLight,On)} +{On(Water,Bar),Is(Curtain,Off)} +{On(Water,Bar),Is(Curtain,On)} +{On(Water,Bar),Is(Chairs,Dirty)} +{On(Water,Bar),Is(Chairs,Clean)} +{On(Water,Bar),Is(Floor,Dirty)} +{On(Water,Bar),Is(Floor,Clean)} +{On(Water,Bar),Is(Table1,Dirty)} +{On(Water,Bar),Is(Table1,Clean)} +{On(Water,WaterTable),Is(AC,Off)} +{On(Water,WaterTable),Is(AC,On)} +{On(Water,WaterTable),Is(ACTemperature,Up)} +{On(Water,WaterTable),Is(ACTemperature,Down)} +{On(Water,WaterTable),Is(HallLight,Off)} +{On(Water,WaterTable),Is(HallLight,On)} +{On(Water,WaterTable),Is(TubeLight,Off)} +{On(Water,WaterTable),Is(TubeLight,On)} +{On(Water,WaterTable),Is(Curtain,Off)} +{On(Water,WaterTable),Is(Curtain,On)} +{On(Water,WaterTable),Is(Chairs,Dirty)} +{On(Water,WaterTable),Is(Chairs,Clean)} +{On(Water,WaterTable),Is(Floor,Dirty)} +{On(Water,WaterTable),Is(Floor,Clean)} +{On(Water,WaterTable),Is(Table1,Dirty)} +{On(Water,WaterTable),Is(Table1,Clean)} +{On(Water,CoffeeTable),Is(AC,Off)} +{On(Water,CoffeeTable),Is(AC,On)} +{On(Water,CoffeeTable),Is(ACTemperature,Up)} +{On(Water,CoffeeTable),Is(ACTemperature,Down)} +{On(Water,CoffeeTable),Is(HallLight,Off)} +{On(Water,CoffeeTable),Is(HallLight,On)} +{On(Water,CoffeeTable),Is(TubeLight,Off)} +{On(Water,CoffeeTable),Is(TubeLight,On)} +{On(Water,CoffeeTable),Is(Curtain,Off)} +{On(Water,CoffeeTable),Is(Curtain,On)} +{On(Water,CoffeeTable),Is(Chairs,Dirty)} +{On(Water,CoffeeTable),Is(Chairs,Clean)} +{On(Water,CoffeeTable),Is(Floor,Dirty)} +{On(Water,CoffeeTable),Is(Floor,Clean)} +{On(Water,CoffeeTable),Is(Table1,Dirty)} +{On(Water,CoffeeTable),Is(Table1,Clean)} +{On(Water,Bar2),Is(AC,Off)} +{On(Water,Bar2),Is(AC,On)} +{On(Water,Bar2),Is(ACTemperature,Up)} +{On(Water,Bar2),Is(ACTemperature,Down)} +{On(Water,Bar2),Is(HallLight,Off)} +{On(Water,Bar2),Is(HallLight,On)} +{On(Water,Bar2),Is(TubeLight,Off)} +{On(Water,Bar2),Is(TubeLight,On)} +{On(Water,Bar2),Is(Curtain,Off)} +{On(Water,Bar2),Is(Curtain,On)} +{On(Water,Bar2),Is(Chairs,Dirty)} +{On(Water,Bar2),Is(Chairs,Clean)} +{On(Water,Bar2),Is(Floor,Dirty)} +{On(Water,Bar2),Is(Floor,Clean)} +{On(Water,Bar2),Is(Table1,Dirty)} +{On(Water,Bar2),Is(Table1,Clean)} +{On(Water,Table1),Is(AC,Off)} +{On(Water,Table1),Is(AC,On)} +{On(Water,Table1),Is(ACTemperature,Up)} +{On(Water,Table1),Is(ACTemperature,Down)} +{On(Water,Table1),Is(HallLight,Off)} +{On(Water,Table1),Is(HallLight,On)} +{On(Water,Table1),Is(TubeLight,Off)} +{On(Water,Table1),Is(TubeLight,On)} +{On(Water,Table1),Is(Curtain,Off)} +{On(Water,Table1),Is(Curtain,On)} +{On(Water,Table1),Is(Chairs,Dirty)} +{On(Water,Table1),Is(Chairs,Clean)} +{On(Water,Table1),Is(Floor,Dirty)} +{On(Water,Table1),Is(Floor,Clean)} +{On(Water,Table1),Is(Table1,Dirty)} +{On(Water,Table1),Is(Table1,Clean)} +{On(Water,Table2),Is(AC,Off)} +{On(Water,Table2),Is(AC,On)} +{On(Water,Table2),Is(ACTemperature,Up)} +{On(Water,Table2),Is(ACTemperature,Down)} +{On(Water,Table2),Is(HallLight,Off)} +{On(Water,Table2),Is(HallLight,On)} +{On(Water,Table2),Is(TubeLight,Off)} +{On(Water,Table2),Is(TubeLight,On)} +{On(Water,Table2),Is(Curtain,Off)} +{On(Water,Table2),Is(Curtain,On)} +{On(Water,Table2),Is(Chairs,Dirty)} +{On(Water,Table2),Is(Chairs,Clean)} +{On(Water,Table2),Is(Floor,Dirty)} +{On(Water,Table2),Is(Floor,Clean)} +{On(Water,Table2),Is(Table1,Dirty)} +{On(Water,Table2),Is(Table1,Clean)} +{On(Water,Table3),Is(AC,Off)} +{On(Water,Table3),Is(AC,On)} +{On(Water,Table3),Is(ACTemperature,Up)} +{On(Water,Table3),Is(ACTemperature,Down)} +{On(Water,Table3),Is(HallLight,Off)} +{On(Water,Table3),Is(HallLight,On)} +{On(Water,Table3),Is(TubeLight,Off)} +{On(Water,Table3),Is(TubeLight,On)} +{On(Water,Table3),Is(Curtain,Off)} +{On(Water,Table3),Is(Curtain,On)} +{On(Water,Table3),Is(Chairs,Dirty)} +{On(Water,Table3),Is(Chairs,Clean)} +{On(Water,Table3),Is(Floor,Dirty)} +{On(Water,Table3),Is(Floor,Clean)} +{On(Water,Table3),Is(Table1,Dirty)} +{On(Water,Table3),Is(Table1,Clean)} +{On(Dessert,Bar),Is(AC,Off)} +{On(Dessert,Bar),Is(AC,On)} +{On(Dessert,Bar),Is(ACTemperature,Up)} +{On(Dessert,Bar),Is(ACTemperature,Down)} +{On(Dessert,Bar),Is(HallLight,Off)} +{On(Dessert,Bar),Is(HallLight,On)} +{On(Dessert,Bar),Is(TubeLight,Off)} +{On(Dessert,Bar),Is(TubeLight,On)} +{On(Dessert,Bar),Is(Curtain,Off)} +{On(Dessert,Bar),Is(Curtain,On)} +{On(Dessert,Bar),Is(Chairs,Dirty)} +{On(Dessert,Bar),Is(Chairs,Clean)} +{On(Dessert,Bar),Is(Floor,Dirty)} +{On(Dessert,Bar),Is(Floor,Clean)} +{On(Dessert,Bar),Is(Table1,Dirty)} +{On(Dessert,Bar),Is(Table1,Clean)} +{On(Dessert,WaterTable),Is(AC,Off)} +{On(Dessert,WaterTable),Is(AC,On)} +{On(Dessert,WaterTable),Is(ACTemperature,Up)} +{On(Dessert,WaterTable),Is(ACTemperature,Down)} +{On(Dessert,WaterTable),Is(HallLight,Off)} +{On(Dessert,WaterTable),Is(HallLight,On)} +{On(Dessert,WaterTable),Is(TubeLight,Off)} +{On(Dessert,WaterTable),Is(TubeLight,On)} +{On(Dessert,WaterTable),Is(Curtain,Off)} +{On(Dessert,WaterTable),Is(Curtain,On)} +{On(Dessert,WaterTable),Is(Chairs,Dirty)} +{On(Dessert,WaterTable),Is(Chairs,Clean)} +{On(Dessert,WaterTable),Is(Floor,Dirty)} +{On(Dessert,WaterTable),Is(Floor,Clean)} +{On(Dessert,WaterTable),Is(Table1,Dirty)} +{On(Dessert,WaterTable),Is(Table1,Clean)} +{On(Dessert,CoffeeTable),Is(AC,Off)} +{On(Dessert,CoffeeTable),Is(AC,On)} +{On(Dessert,CoffeeTable),Is(ACTemperature,Up)} +{On(Dessert,CoffeeTable),Is(ACTemperature,Down)} +{On(Dessert,CoffeeTable),Is(HallLight,Off)} +{On(Dessert,CoffeeTable),Is(HallLight,On)} +{On(Dessert,CoffeeTable),Is(TubeLight,Off)} +{On(Dessert,CoffeeTable),Is(TubeLight,On)} +{On(Dessert,CoffeeTable),Is(Curtain,Off)} +{On(Dessert,CoffeeTable),Is(Curtain,On)} +{On(Dessert,CoffeeTable),Is(Chairs,Dirty)} +{On(Dessert,CoffeeTable),Is(Chairs,Clean)} +{On(Dessert,CoffeeTable),Is(Floor,Dirty)} +{On(Dessert,CoffeeTable),Is(Floor,Clean)} +{On(Dessert,CoffeeTable),Is(Table1,Dirty)} +{On(Dessert,CoffeeTable),Is(Table1,Clean)} +{On(Dessert,Bar2),Is(AC,Off)} +{On(Dessert,Bar2),Is(AC,On)} +{On(Dessert,Bar2),Is(ACTemperature,Up)} +{On(Dessert,Bar2),Is(ACTemperature,Down)} +{On(Dessert,Bar2),Is(HallLight,Off)} +{On(Dessert,Bar2),Is(HallLight,On)} +{On(Dessert,Bar2),Is(TubeLight,Off)} +{On(Dessert,Bar2),Is(TubeLight,On)} +{On(Dessert,Bar2),Is(Curtain,Off)} +{On(Dessert,Bar2),Is(Curtain,On)} +{On(Dessert,Bar2),Is(Chairs,Dirty)} +{On(Dessert,Bar2),Is(Chairs,Clean)} +{On(Dessert,Bar2),Is(Floor,Dirty)} +{On(Dessert,Bar2),Is(Floor,Clean)} +{On(Dessert,Bar2),Is(Table1,Dirty)} +{On(Dessert,Bar2),Is(Table1,Clean)} +{On(Dessert,Table1),Is(AC,Off)} +{On(Dessert,Table1),Is(AC,On)} +{On(Dessert,Table1),Is(ACTemperature,Up)} +{On(Dessert,Table1),Is(ACTemperature,Down)} +{On(Dessert,Table1),Is(HallLight,Off)} +{On(Dessert,Table1),Is(HallLight,On)} +{On(Dessert,Table1),Is(TubeLight,Off)} +{On(Dessert,Table1),Is(TubeLight,On)} +{On(Dessert,Table1),Is(Curtain,Off)} +{On(Dessert,Table1),Is(Curtain,On)} +{On(Dessert,Table1),Is(Chairs,Dirty)} +{On(Dessert,Table1),Is(Chairs,Clean)} +{On(Dessert,Table1),Is(Floor,Dirty)} +{On(Dessert,Table1),Is(Floor,Clean)} +{On(Dessert,Table1),Is(Table1,Dirty)} +{On(Dessert,Table1),Is(Table1,Clean)} +{On(Dessert,Table2),Is(AC,Off)} +{On(Dessert,Table2),Is(AC,On)} +{On(Dessert,Table2),Is(ACTemperature,Up)} +{On(Dessert,Table2),Is(ACTemperature,Down)} +{On(Dessert,Table2),Is(HallLight,Off)} +{On(Dessert,Table2),Is(HallLight,On)} +{On(Dessert,Table2),Is(TubeLight,Off)} +{On(Dessert,Table2),Is(TubeLight,On)} +{On(Dessert,Table2),Is(Curtain,Off)} +{On(Dessert,Table2),Is(Curtain,On)} +{On(Dessert,Table2),Is(Chairs,Dirty)} +{On(Dessert,Table2),Is(Chairs,Clean)} +{On(Dessert,Table2),Is(Floor,Dirty)} +{On(Dessert,Table2),Is(Floor,Clean)} +{On(Dessert,Table2),Is(Table1,Dirty)} +{On(Dessert,Table2),Is(Table1,Clean)} +{On(Dessert,Table3),Is(AC,Off)} +{On(Dessert,Table3),Is(AC,On)} +{On(Dessert,Table3),Is(ACTemperature,Up)} +{On(Dessert,Table3),Is(ACTemperature,Down)} +{On(Dessert,Table3),Is(HallLight,Off)} +{On(Dessert,Table3),Is(HallLight,On)} +{On(Dessert,Table3),Is(TubeLight,Off)} +{On(Dessert,Table3),Is(TubeLight,On)} +{On(Dessert,Table3),Is(Curtain,Off)} +{On(Dessert,Table3),Is(Curtain,On)} +{On(Dessert,Table3),Is(Chairs,Dirty)} +{On(Dessert,Table3),Is(Chairs,Clean)} +{On(Dessert,Table3),Is(Floor,Dirty)} +{On(Dessert,Table3),Is(Floor,Clean)} +{On(Dessert,Table3),Is(Table1,Dirty)} +{On(Dessert,Table3),Is(Table1,Clean)} +{On(Coffee,Bar),Is(AC,Off)} +{On(Coffee,Bar),Is(AC,On)} +{On(Coffee,Bar),Is(ACTemperature,Up)} +{On(Coffee,Bar),Is(ACTemperature,Down)} +{On(Coffee,Bar),Is(HallLight,Off)} +{On(Coffee,Bar),Is(HallLight,On)} +{On(Coffee,Bar),Is(TubeLight,Off)} +{On(Coffee,Bar),Is(TubeLight,On)} +{On(Coffee,Bar),Is(Curtain,Off)} +{On(Coffee,Bar),Is(Curtain,On)} +{On(Coffee,Bar),Is(Chairs,Dirty)} +{On(Coffee,Bar),Is(Chairs,Clean)} +{On(Coffee,Bar),Is(Floor,Dirty)} +{On(Coffee,Bar),Is(Floor,Clean)} +{On(Coffee,Bar),Is(Table1,Dirty)} +{On(Coffee,Bar),Is(Table1,Clean)} +{On(Coffee,WaterTable),Is(AC,Off)} +{On(Coffee,WaterTable),Is(AC,On)} +{On(Coffee,WaterTable),Is(ACTemperature,Up)} +{On(Coffee,WaterTable),Is(ACTemperature,Down)} +{On(Coffee,WaterTable),Is(HallLight,Off)} +{On(Coffee,WaterTable),Is(HallLight,On)} +{On(Coffee,WaterTable),Is(TubeLight,Off)} +{On(Coffee,WaterTable),Is(TubeLight,On)} +{On(Coffee,WaterTable),Is(Curtain,Off)} +{On(Coffee,WaterTable),Is(Curtain,On)} +{On(Coffee,WaterTable),Is(Chairs,Dirty)} +{On(Coffee,WaterTable),Is(Chairs,Clean)} +{On(Coffee,WaterTable),Is(Floor,Dirty)} +{On(Coffee,WaterTable),Is(Floor,Clean)} +{On(Coffee,WaterTable),Is(Table1,Dirty)} +{On(Coffee,WaterTable),Is(Table1,Clean)} +{On(Coffee,CoffeeTable),Is(AC,Off)} +{On(Coffee,CoffeeTable),Is(AC,On)} +{On(Coffee,CoffeeTable),Is(ACTemperature,Up)} +{On(Coffee,CoffeeTable),Is(ACTemperature,Down)} +{On(Coffee,CoffeeTable),Is(HallLight,Off)} +{On(Coffee,CoffeeTable),Is(HallLight,On)} +{On(Coffee,CoffeeTable),Is(TubeLight,Off)} +{On(Coffee,CoffeeTable),Is(TubeLight,On)} +{On(Coffee,CoffeeTable),Is(Curtain,Off)} +{On(Coffee,CoffeeTable),Is(Curtain,On)} +{On(Coffee,CoffeeTable),Is(Chairs,Dirty)} +{On(Coffee,CoffeeTable),Is(Chairs,Clean)} +{On(Coffee,CoffeeTable),Is(Floor,Dirty)} +{On(Coffee,CoffeeTable),Is(Floor,Clean)} +{On(Coffee,CoffeeTable),Is(Table1,Dirty)} +{On(Coffee,CoffeeTable),Is(Table1,Clean)} +{On(Coffee,Bar2),Is(AC,Off)} +{On(Coffee,Bar2),Is(AC,On)} +{On(Coffee,Bar2),Is(ACTemperature,Up)} +{On(Coffee,Bar2),Is(ACTemperature,Down)} +{On(Coffee,Bar2),Is(HallLight,Off)} +{On(Coffee,Bar2),Is(HallLight,On)} +{On(Coffee,Bar2),Is(TubeLight,Off)} +{On(Coffee,Bar2),Is(TubeLight,On)} +{On(Coffee,Bar2),Is(Curtain,Off)} +{On(Coffee,Bar2),Is(Curtain,On)} +{On(Coffee,Bar2),Is(Chairs,Dirty)} +{On(Coffee,Bar2),Is(Chairs,Clean)} +{On(Coffee,Bar2),Is(Floor,Dirty)} +{On(Coffee,Bar2),Is(Floor,Clean)} +{On(Coffee,Bar2),Is(Table1,Dirty)} +{On(Coffee,Bar2),Is(Table1,Clean)} +{On(Coffee,Table1),Is(AC,Off)} +{On(Coffee,Table1),Is(AC,On)} +{On(Coffee,Table1),Is(ACTemperature,Up)} +{On(Coffee,Table1),Is(ACTemperature,Down)} +{On(Coffee,Table1),Is(HallLight,Off)} +{On(Coffee,Table1),Is(HallLight,On)} +{On(Coffee,Table1),Is(TubeLight,Off)} +{On(Coffee,Table1),Is(TubeLight,On)} +{On(Coffee,Table1),Is(Curtain,Off)} +{On(Coffee,Table1),Is(Curtain,On)} +{On(Coffee,Table1),Is(Chairs,Dirty)} +{On(Coffee,Table1),Is(Chairs,Clean)} +{On(Coffee,Table1),Is(Floor,Dirty)} +{On(Coffee,Table1),Is(Floor,Clean)} +{On(Coffee,Table1),Is(Table1,Dirty)} +{On(Coffee,Table1),Is(Table1,Clean)} +{On(Coffee,Table2),Is(AC,Off)} +{On(Coffee,Table2),Is(AC,On)} +{On(Coffee,Table2),Is(ACTemperature,Up)} +{On(Coffee,Table2),Is(ACTemperature,Down)} +{On(Coffee,Table2),Is(HallLight,Off)} +{On(Coffee,Table2),Is(HallLight,On)} +{On(Coffee,Table2),Is(TubeLight,Off)} +{On(Coffee,Table2),Is(TubeLight,On)} +{On(Coffee,Table2),Is(Curtain,Off)} +{On(Coffee,Table2),Is(Curtain,On)} +{On(Coffee,Table2),Is(Chairs,Dirty)} +{On(Coffee,Table2),Is(Chairs,Clean)} +{On(Coffee,Table2),Is(Floor,Dirty)} +{On(Coffee,Table2),Is(Floor,Clean)} +{On(Coffee,Table2),Is(Table1,Dirty)} +{On(Coffee,Table2),Is(Table1,Clean)} +{On(Coffee,Table3),Is(AC,Off)} +{On(Coffee,Table3),Is(AC,On)} +{On(Coffee,Table3),Is(ACTemperature,Up)} +{On(Coffee,Table3),Is(ACTemperature,Down)} +{On(Coffee,Table3),Is(HallLight,Off)} +{On(Coffee,Table3),Is(HallLight,On)} +{On(Coffee,Table3),Is(TubeLight,Off)} +{On(Coffee,Table3),Is(TubeLight,On)} +{On(Coffee,Table3),Is(Curtain,Off)} +{On(Coffee,Table3),Is(Curtain,On)} +{On(Coffee,Table3),Is(Chairs,Dirty)} +{On(Coffee,Table3),Is(Chairs,Clean)} +{On(Coffee,Table3),Is(Floor,Dirty)} +{On(Coffee,Table3),Is(Floor,Clean)} +{On(Coffee,Table3),Is(Table1,Dirty)} +{On(Coffee,Table3),Is(Table1,Clean)} +{On(Water,Bar),Is(AC,Off)} +{On(Water,Bar),Is(AC,On)} +{On(Water,Bar),Is(ACTemperature,Up)} +{On(Water,Bar),Is(ACTemperature,Down)} +{On(Water,Bar),Is(HallLight,Off)} +{On(Water,Bar),Is(HallLight,On)} +{On(Water,Bar),Is(TubeLight,Off)} +{On(Water,Bar),Is(TubeLight,On)} +{On(Water,Bar),Is(Curtain,Off)} +{On(Water,Bar),Is(Curtain,On)} +{On(Water,Bar),Is(Chairs,Dirty)} +{On(Water,Bar),Is(Chairs,Clean)} +{On(Water,Bar),Is(Floor,Dirty)} +{On(Water,Bar),Is(Floor,Clean)} +{On(Water,Bar),Is(Table1,Dirty)} +{On(Water,Bar),Is(Table1,Clean)} +{On(Water,WaterTable),Is(AC,Off)} +{On(Water,WaterTable),Is(AC,On)} +{On(Water,WaterTable),Is(ACTemperature,Up)} +{On(Water,WaterTable),Is(ACTemperature,Down)} +{On(Water,WaterTable),Is(HallLight,Off)} +{On(Water,WaterTable),Is(HallLight,On)} +{On(Water,WaterTable),Is(TubeLight,Off)} +{On(Water,WaterTable),Is(TubeLight,On)} +{On(Water,WaterTable),Is(Curtain,Off)} +{On(Water,WaterTable),Is(Curtain,On)} +{On(Water,WaterTable),Is(Chairs,Dirty)} +{On(Water,WaterTable),Is(Chairs,Clean)} +{On(Water,WaterTable),Is(Floor,Dirty)} +{On(Water,WaterTable),Is(Floor,Clean)} +{On(Water,WaterTable),Is(Table1,Dirty)} +{On(Water,WaterTable),Is(Table1,Clean)} +{On(Water,CoffeeTable),Is(AC,Off)} +{On(Water,CoffeeTable),Is(AC,On)} +{On(Water,CoffeeTable),Is(ACTemperature,Up)} +{On(Water,CoffeeTable),Is(ACTemperature,Down)} +{On(Water,CoffeeTable),Is(HallLight,Off)} +{On(Water,CoffeeTable),Is(HallLight,On)} +{On(Water,CoffeeTable),Is(TubeLight,Off)} +{On(Water,CoffeeTable),Is(TubeLight,On)} +{On(Water,CoffeeTable),Is(Curtain,Off)} +{On(Water,CoffeeTable),Is(Curtain,On)} +{On(Water,CoffeeTable),Is(Chairs,Dirty)} +{On(Water,CoffeeTable),Is(Chairs,Clean)} +{On(Water,CoffeeTable),Is(Floor,Dirty)} +{On(Water,CoffeeTable),Is(Floor,Clean)} +{On(Water,CoffeeTable),Is(Table1,Dirty)} +{On(Water,CoffeeTable),Is(Table1,Clean)} +{On(Water,Bar2),Is(AC,Off)} +{On(Water,Bar2),Is(AC,On)} +{On(Water,Bar2),Is(ACTemperature,Up)} +{On(Water,Bar2),Is(ACTemperature,Down)} diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_generation.py b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_generation.py new file mode 100644 index 0000000..382f646 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_generation.py @@ -0,0 +1,310 @@ +# the empty string '' represents robot holds nothing +import os +import re + +Object = ['Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk', 'VacuumCup'] + +Cookable = ['Coffee', 'Water', 'Dessert'] + +Place = ['Bar', 'WaterTable', 'CoffeeTable', 'Bar2', 'Table1', 'Table2', 'Table3'] + +Entity = ['Robot', 'Customer'] + +Operable = ['AC', 'ACTemperature', 'HallLight', 'TubeLight', 'Curtain', 'Chairs', 'Floor', 'Table1'] + +import random + + +def single_predict_generation(oplist_1, oplist_2, predict_pattern) -> str: + index_1 = random.randint(0, len(oplist_1) - 1) + if oplist_2: + index_2 = random.randint(0, len(oplist_2) - 1) + + match predict_pattern: + case 'at': + return f'At({oplist_1[index_1]}, {oplist_2[index_2]})' + case 'is': + return f'Is({oplist_1[index_1]}, {oplist_2[index_2]})' + case 'hold': + return f'Holding({oplist_1[index_1]})' + case 'on': + return f'On({oplist_1[index_1]}, {oplist_2[index_2]})' + case _: + raise RuntimeError('Incorrect predict pattern!') + + +def enumerate_predict(oplist_1, oplist_2, predict_pattern) -> [int, list]: + count = 0 + res = [] + + match predict_pattern: + case 'at': + pattern = f'At(%s,%s)' + case 'is': + pattern = f'Is(%s,%s)' + case 'hold': + pattern = f'Holding(%s)' + case 'on': + pattern = f'On(%s,%s)' + case _: + raise RuntimeError('Incorrect predict pattern!') + + for str_1 in oplist_1: + if oplist_2: + for str_2 in oplist_2: + count += 1 + res.append(pattern % (str_1, str_2)) + else: + count += 1 + res.append(pattern % str_1) + + return count, res + + +def generate_goal_states(vln_num: int, vlm_num: int, opentask_num: int): + # res stores lists of sets, while each state represent in set. + res = [] + + # goal states for VLN + for i in range(vln_num): + res.append({single_predict_generation(['Robot'], Place, 'at')}) + + # goal states for VLM + for i in range(int(vlm_num)): + for j in range(int(vlm_num)): + res.append( + { + single_predict_generation(['Robot'], Place, 'at'), + single_predict_generation(Operable, ['0', '1'], 'is') + } + ) + + # goal states for Open-task-1 + for i in range(int(opentask_num)): + for j in range(int(opentask_num)): + res.append( + { + single_predict_generation(['Robot'], Place, 'at'), + single_predict_generation(Object, Place, 'on') + } + ) + + print(res) + print(len(res)) + + return res + + +def enumerate_goal_states(total: int): + res = [] + + point_15 = int(total * .15) + point_10 = int(total * .10) + + # goal states for VLN, .15 + count_vln, list_vln = enumerate_predict(['Robot'], Place, 'at') + list_vln = ['{%s}' % i for i in list_vln] + if count_vln < point_15: + list_vln *= point_15 // count_vln + for i in range(0, point_15 - len(list_vln)): + list_vln.append('{%s}' % single_predict_generation(['Robot'], Place, 'at')) + # print(f'VLN 任务的目标状态数:{count_vln}') + res += list_vln + + # goal states for VLM-1, 0.15 + count_vlm_1, list_vlm_1 = enumerate_predict(Object, Place, 'on') + list_vlm_1 = ['{%s}' % i for i in list_vlm_1] + if count_vlm_1 < point_15: + list_vlm_1 *= point_15 // count_vlm_1 + for i in range(0, point_15 - len(list_vlm_1)): + list_vlm_1.append('{%s}' % (single_predict_generation(Object, Place, 'on'))) + res += list_vlm_1 + + # goal states for VLM-2, 0.15 + count_vlm_2, list_vlm_2 = enumerate_predict(Operable, ['0', '1'], 'is') + list_vlm_2 = ['{%s}' % i for i in list_vlm_2] + if count_vlm_2 < point_15: + list_vlm_2 *= point_15 // count_vlm_2 + for i in range(0, point_15 - len(list_vlm_2)): + list_vlm_2.append('{%s}' % single_predict_generation(Operable, ['0', '1'], 'is')) + res += list_vlm_2 + + # goal states for VLM-3, 0.1 + count_vlm_3, list_vlm_3 = enumerate_predict(Object + ['Nothing'], None, 'hold') + list_vlm_3 = ['{%s}' % i for i in list_vlm_3] + if count_vlm_3 < point_10: + list_vlm_3 *= point_10 // count_vlm_3 + for i in range(0, point_10 - len(list_vlm_3)): + list_vlm_3.append('{%s}' % single_predict_generation(Object, None, 'hold')) + res += list_vlm_3 + + # goal states for OT, 0.15 + count_ot, list_ot = enumerate_predict(Cookable, Place, 'on') + list_ot = ['{%s}' % i for i in list_ot] + if count_ot < point_15: + list_ot *= point_15 // count_ot + for i in range(0, point_15 - len(list_ot)): + list_ot.append('{%s}' % single_predict_generation(Cookable, Place, 'on')) + res += list_ot + + # goal states for compound-1, 0.1 + count_1, list_1 = enumerate_predict(['Robot'], Place, 'at') + count_2, list_2 = enumerate_predict(Object, Place, 'on') + list_tmp = [] + for i in list_1: + for j in list_2: + list_tmp.append('{%s,%s}' % (i, j)) + if len(list_tmp) < point_10: + list_tmp *= point_10 // len(list_tmp) + list_tmp += list_tmp[0:point_10 - len(list_tmp)] + else: + list_tmp = list_tmp[:point_10] + res += list_tmp + + # goal states for compound-2, 0.1 + count_1, list_1 = enumerate_predict(['Robot'], Place, 'at') + count_2, list_2 = enumerate_predict(Operable, ['0', '1'], 'is') + list_tmp = [] + for i in list_1: + for j in list_2: + list_tmp.append('{%s,%s}' % (i, j)) + if len(list_tmp) < point_10: + list_tmp *= point_10 // len(list_tmp) + list_tmp += list_tmp[0:point_10 - len(list_tmp)] + else: + list_tmp = list_tmp[:point_10] + res += list_tmp + + # goal states for compound-3, 0.1 + count_1, list_1 = enumerate_predict(Cookable, Place, 'on') + count_2, list_2 = enumerate_predict(Operable, ['0', '1'], 'is') + list_tmp = [] + for i in list_1: + for j in list_2: + list_tmp.append('{%s,%s}' % (i, j)) + if len(list_tmp) < point_10: + list_tmp *= point_10 // len(list_tmp) + list_tmp += list_tmp[0:point_10 - len(list_tmp)] + else: + list_tmp = list_tmp[:point_10] + res += list_tmp + + # # goal states for VLM-1, 0.15 + # count_vlm_1, list_vlm_1 = enumerate_predict(['Robot'], Place, 'at') + # count_vlm_2, list_vlm_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # print(f'VLM 任务的目标状态数:{count_vlm_1 * count_vlm_2}') + # + # # goal states for open-task + # count_opentask_1, list_opentask_1 = enumerate_predict(['Robot'], Place, 'at') + # count_opentask_2, list_opentask_2 = enumerate_predict(Object, Place, 'on') + # print(f'Open-task-1 任务的目标状态数:{count_opentask_1 * count_opentask_2}') + + with open(os.path.join('./goal_states.txt'), 'w+') as file: + for i in res: + if 'Is' in i and 'ACTemperature' in i: + i = re.sub(',0', ',Up', i) + i = re.sub(',1', ',Down', i) + elif 'Is' in i and ('AC' in i or 'HallLight' in i or 'TubeLight' in i or 'Curtain' in i): + i = re.sub(',0', ',Off', i) + i = re.sub(',1', ',On', i) + elif 'Is' in i and ('Chairs' in i or 'Floor' in i or 'Table' in i): + i = re.sub(',0', ',Dirty', i) + i = re.sub(',1', ',Clean', i) + + file.write(i + '\n') + + +def translate_zero_one(i: str) -> str: + if 'ACTemperature' in i: + i = re.sub('On\)', '调高', i) + i = re.sub('Off\)', '调低', i) + elif 'AC' in i or 'HallLight' in i or 'TubeLight' in i or 'Curtain' in i: + i = re.sub('On\)', '关闭', i) + i = re.sub('Off\)', '打开', i) + elif 'Chairs' in i or 'Floor' in i or 'Table' in i: + i = re.sub('On\)', '脏', i) + i = re.sub('Off\)', '打扫干净', i) + + return i + + +def enumerate_goal_states_with_describe() -> str: + with open(os.path.join('./goal_states_with_description.txt'), 'w', encoding='utf-8') as file: + # vln + count, res = enumerate_predict(['Robot'], Place, 'at') + print(count) + for i in range(count): + tmp = '#' + res[i].split(',')[-1][:-1] + file.write(f'{res[i]}\t你能过来一下吗?我在{tmp}这里。\n') + file.write(f'{res[i]}\t麻烦你去一下{tmp}。\n') + file.write(f'{res[i]}\t你能去{tmp}那个位置吗?\n') + + # vlm, on + count, res = enumerate_predict(Object, Place, 'on') + print(count) + for i in range(count): + tmp = res[i].split(',') + obj = '#' + tmp[0][3:] + pla = '#' + tmp[-1][:-1] + file.write(f'{res[i]}\t麻烦你把{obj}放到{pla}那个位置。\n') + file.write(f'{res[i]}\t请你拿一下{obj}到{pla}位置。\n') + file.write(f'{res[i]}\t你好,我在{pla},请你拿一下{obj}到位置。\n') + + # vlm, is + count, res = enumerate_predict(Operable, ['On', 'Off'], 'is') + print(count) + for i in res: + tmp = i.split(',') + thing, op = '#' + tmp[0][3:], '#' + tmp[-1] + file.write('%s\t%s\n' % (i, translate_zero_one(f'你能把{thing}{op}一下吗?'))) + + # vlm, holding + count, res = enumerate_predict(Object + ['Nothing'], None, 'hold') + print(count) + for i in res: + tmp = '#' + i.split('(')[-1][:-1] + if tmp == 'Nothing': + file.write(f'{i}\t你手里是没有东西的吗?\n') + continue + file.write(f'{i}\t你能把{tmp}抓在手里吗?\n') + file.write(f'{i}\t你能一直拿着{tmp}吗?\n') + + count, res = enumerate_predict(Cookable, Place, 'on') + print(count) + for i in res: + tmp = i.split(',') + thing, pla = '#' + tmp[0][3:], '#' + tmp[-1][:-1] + + file.write(f'{i}\t你能制作{thing}并把它端到{pla}这里来吗?\n') + file.write(f'{i}\t给我来点{thing},并把它端到{pla}这里来。\n') + return './goal_states_with_description.txt' + + +from copy import deepcopy + + +def mutex(path: str): + with open(os.path.join(path), 'r', encoding='utf-8') as file: + lines = "".join(file.readlines()) + new_line = deepcopy(lines) + + check = ['#Bar2', '#WaterTable', '#CoffeeTable', '#Bar', '#Table1', '#Table2', '#Table3', '#Coffee', '#Water', + '#Dessert', '#Softdrink', '#BottledDrink', '#Yogurt', '#ADMilk', '#MilkDrink', '#Milk', '#VacuumCup', + '#AC', + '#ACTemperature', '#HallLight', '#TubeLight', '#Curtain', '#Chairs', '#Floor', '#Table1'] + repla = ['#另一个吧台', '#茶水桌', '#咖啡桌', '#吧台', '#第一张桌子', '#第二张桌子', '#第三张桌子', '#咖啡', '#水', + '#点心或者甜品', '#盒装冰红茶', '#瓶装饮料', '#酸奶', '#AD钙奶', '#牛奶味的饮料', '#牛奶', '#保温杯', '#空调', + '#空调温度', '#大厅灯', '#筒灯', '#窗帘', '#椅子', '#地板', '#第一张桌子'] + + for i, j in zip(check, repla): + new_line = re.sub(i, j, new_line) + new_line = re.sub('#', '', new_line) + lines = re.sub('#', '', lines) + + with open(os.path.join(path), 'w', encoding='utf-8') as file: + file.write(new_line) + + +# generate_goal_states(30, 6, 6) +# enumerate_goal_states(5000) +mutex(enumerate_goal_states_with_describe()) diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description.jsonl b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description.jsonl new file mode 100644 index 0000000..fd2b862 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description.jsonl @@ -0,0 +1,193 @@ +{"title":"你能过来一下吗?我在吧台这里。","text":"At(Robot,Bar)"} +{"title":"麻烦你去一下吧台。","text":"At(Robot,Bar)"} +{"title":"你能去吧台那个位置吗?","text":"At(Robot,Bar)"} +{"title":"你能过来一下吗?我在茶水桌这里。","text":"At(Robot,WaterTable)"} +{"title":"麻烦你去一下茶水桌。","text":"At(Robot,WaterTable)"} +{"title":"你能去茶水桌那个位置吗?","text":"At(Robot,WaterTable)"} +{"title":"你能过来一下吗?我在咖啡桌这里。","text":"At(Robot,CoffeeTable)"} +{"title":"麻烦你去一下咖啡桌。","text":"At(Robot,CoffeeTable)"} +{"title":"你能去咖啡桌那个位置吗?","text":"At(Robot,CoffeeTable)"} +{"title":"你能过来一下吗?我在另一个吧台这里。","text":"At(Robot,Bar2)"} +{"title":"麻烦你去一下另一个吧台。","text":"At(Robot,Bar2)"} +{"title":"你能去另一个吧台那个位置吗?","text":"At(Robot,Bar2)"} +{"title":"你能过来一下吗?我在第一张桌子这里。","text":"At(Robot,Table1)"} +{"title":"麻烦你去一下第一张桌子。","text":"At(Robot,Table1)"} +{"title":"你能去第一张桌子那个位置吗?","text":"At(Robot,Table1)"} +{"title":"你能过来一下吗?我在第二张桌子这里。","text":"At(Robot,Table2)"} +{"title":"麻烦你去一下第二张桌子。","text":"At(Robot,Table2)"} +{"title":"你能去第二张桌子那个位置吗?","text":"At(Robot,Table2)"} +{"title":"你能过来一下吗?我在第三张桌子这里。","text":"At(Robot,Table3)"} +{"title":"麻烦你去一下第三张桌子。","text":"At(Robot,Table3)"} +{"title":"你能去第三张桌子那个位置吗?","text":"At(Robot,Table3)"} +{"title":"麻烦你把盒装冰红茶放到吧台那个位置。","text":"On(Softdrink,Bar)"} +{"title":"请你拿一下盒装冰红茶到吧台位置。","text":"On(Softdrink,Bar)"} +{"title":"麻烦你把盒装冰红茶放到茶水桌那个位置。","text":"On(Softdrink,WaterTable)"} +{"title":"请你拿一下盒装冰红茶到茶水桌位置。","text":"On(Softdrink,WaterTable)"} +{"title":"麻烦你把盒装冰红茶放到咖啡桌那个位置。","text":"On(Softdrink,CoffeeTable)"} +{"title":"请你拿一下盒装冰红茶到咖啡桌位置。","text":"On(Softdrink,CoffeeTable)"} +{"title":"麻烦你把盒装冰红茶放到另一个吧台那个位置。","text":"On(Softdrink,Bar2)"} +{"title":"请你拿一下盒装冰红茶到另一个吧台位置。","text":"On(Softdrink,Bar2)"} +{"title":"麻烦你把盒装冰红茶放到第一张桌子那个位置。","text":"On(Softdrink,Table1)"} +{"title":"请你拿一下盒装冰红茶到第一张桌子位置。","text":"On(Softdrink,Table1)"} +{"title":"麻烦你把盒装冰红茶放到第二张桌子那个位置。","text":"On(Softdrink,Table2)"} +{"title":"请你拿一下盒装冰红茶到第二张桌子位置。","text":"On(Softdrink,Table2)"} +{"title":"麻烦你把盒装冰红茶放到第三张桌子那个位置。","text":"On(Softdrink,Table3)"} +{"title":"请你拿一下盒装冰红茶到第三张桌子位置。","text":"On(Softdrink,Table3)"} +{"title":"麻烦你把瓶装饮料放到吧台那个位置。","text":"On(BottledDrink,Bar)"} +{"title":"请你拿一下瓶装饮料到吧台位置。","text":"On(BottledDrink,Bar)"} +{"title":"麻烦你把瓶装饮料放到茶水桌那个位置。","text":"On(BottledDrink,WaterTable)"} +{"title":"请你拿一下瓶装饮料到茶水桌位置。","text":"On(BottledDrink,WaterTable)"} +{"title":"麻烦你把瓶装饮料放到咖啡桌那个位置。","text":"On(BottledDrink,CoffeeTable)"} +{"title":"请你拿一下瓶装饮料到咖啡桌位置。","text":"On(BottledDrink,CoffeeTable)"} +{"title":"麻烦你把瓶装饮料放到另一个吧台那个位置。","text":"On(BottledDrink,Bar2)"} +{"title":"请你拿一下瓶装饮料到另一个吧台位置。","text":"On(BottledDrink,Bar2)"} +{"title":"麻烦你把瓶装饮料放到第一张桌子那个位置。","text":"On(BottledDrink,Table1)"} +{"title":"请你拿一下瓶装饮料到第一张桌子位置。","text":"On(BottledDrink,Table1)"} +{"title":"麻烦你把瓶装饮料放到第二张桌子那个位置。","text":"On(BottledDrink,Table2)"} +{"title":"请你拿一下瓶装饮料到第二张桌子位置。","text":"On(BottledDrink,Table2)"} +{"title":"麻烦你把瓶装饮料放到第三张桌子那个位置。","text":"On(BottledDrink,Table3)"} +{"title":"请你拿一下瓶装饮料到第三张桌子位置。","text":"On(BottledDrink,Table3)"} +{"title":"麻烦你把酸奶放到吧台那个位置。","text":"On(Yogurt,Bar)"} +{"title":"请你拿一下酸奶到吧台位置。","text":"On(Yogurt,Bar)"} +{"title":"麻烦你把酸奶放到茶水桌那个位置。","text":"On(Yogurt,WaterTable)"} +{"title":"请你拿一下酸奶到茶水桌位置。","text":"On(Yogurt,WaterTable)"} +{"title":"麻烦你把酸奶放到咖啡桌那个位置。","text":"On(Yogurt,CoffeeTable)"} +{"title":"请你拿一下酸奶到咖啡桌位置。","text":"On(Yogurt,CoffeeTable)"} +{"title":"麻烦你把酸奶放到另一个吧台那个位置。","text":"On(Yogurt,Bar2)"} +{"title":"请你拿一下酸奶到另一个吧台位置。","text":"On(Yogurt,Bar2)"} +{"title":"麻烦你把酸奶放到第一张桌子那个位置。","text":"On(Yogurt,Table1)"} +{"title":"请你拿一下酸奶到第一张桌子位置。","text":"On(Yogurt,Table1)"} +{"title":"麻烦你把酸奶放到第二张桌子那个位置。","text":"On(Yogurt,Table2)"} +{"title":"请你拿一下酸奶到第二张桌子位置。","text":"On(Yogurt,Table2)"} +{"title":"麻烦你把酸奶放到第三张桌子那个位置。","text":"On(Yogurt,Table3)"} +{"title":"请你拿一下酸奶到第三张桌子位置。","text":"On(Yogurt,Table3)"} +{"title":"麻烦你把AD钙奶放到吧台那个位置。","text":"On(ADMilk,Bar)"} +{"title":"请你拿一下AD钙奶到吧台位置。","text":"On(ADMilk,Bar)"} +{"title":"麻烦你把AD钙奶放到茶水桌那个位置。","text":"On(ADMilk,WaterTable)"} +{"title":"请你拿一下AD钙奶到茶水桌位置。","text":"On(ADMilk,WaterTable)"} +{"title":"麻烦你把AD钙奶放到咖啡桌那个位置。","text":"On(ADMilk,CoffeeTable)"} +{"title":"请你拿一下AD钙奶到咖啡桌位置。","text":"On(ADMilk,CoffeeTable)"} +{"title":"麻烦你把AD钙奶放到另一个吧台那个位置。","text":"On(ADMilk,Bar2)"} +{"title":"请你拿一下AD钙奶到另一个吧台位置。","text":"On(ADMilk,Bar2)"} +{"title":"麻烦你把AD钙奶放到第一张桌子那个位置。","text":"On(ADMilk,Table1)"} +{"title":"请你拿一下AD钙奶到第一张桌子位置。","text":"On(ADMilk,Table1)"} +{"title":"麻烦你把AD钙奶放到第二张桌子那个位置。","text":"On(ADMilk,Table2)"} +{"title":"请你拿一下AD钙奶到第二张桌子位置。","text":"On(ADMilk,Table2)"} +{"title":"麻烦你把AD钙奶放到第三张桌子那个位置。","text":"On(ADMilk,Table3)"} +{"title":"请你拿一下AD钙奶到第三张桌子位置。","text":"On(ADMilk,Table3)"} +{"title":"麻烦你把牛奶味的饮料放到吧台那个位置。","text":"On(MilkDrink,Bar)"} +{"title":"请你拿一下牛奶味的饮料到吧台位置。","text":"On(MilkDrink,Bar)"} +{"title":"麻烦你把牛奶味的饮料放到茶水桌那个位置。","text":"On(MilkDrink,WaterTable)"} +{"title":"请你拿一下牛奶味的饮料到茶水桌位置。","text":"On(MilkDrink,WaterTable)"} +{"title":"麻烦你把牛奶味的饮料放到咖啡桌那个位置。","text":"On(MilkDrink,CoffeeTable)"} +{"title":"请你拿一下牛奶味的饮料到咖啡桌位置。","text":"On(MilkDrink,CoffeeTable)"} +{"title":"麻烦你把牛奶味的饮料放到另一个吧台那个位置。","text":"On(MilkDrink,Bar2)"} +{"title":"请你拿一下牛奶味的饮料到另一个吧台位置。","text":"On(MilkDrink,Bar2)"} +{"title":"麻烦你把牛奶味的饮料放到第一张桌子那个位置。","text":"On(MilkDrink,Table1)"} +{"title":"请你拿一下牛奶味的饮料到第一张桌子位置。","text":"On(MilkDrink,Table1)"} +{"title":"麻烦你把牛奶味的饮料放到第二张桌子那个位置。","text":"On(MilkDrink,Table2)"} +{"title":"请你拿一下牛奶味的饮料到第二张桌子位置。","text":"On(MilkDrink,Table2)"} +{"title":"麻烦你把牛奶味的饮料放到第三张桌子那个位置。","text":"On(MilkDrink,Table3)"} +{"title":"请你拿一下牛奶味的饮料到第三张桌子位置。","text":"On(MilkDrink,Table3)"} +{"title":"麻烦你把牛奶放到吧台那个位置。","text":"On(Milk,Bar)"} +{"title":"请你拿一下牛奶到吧台位置。","text":"On(Milk,Bar)"} +{"title":"麻烦你把牛奶放到茶水桌那个位置。","text":"On(Milk,WaterTable)"} +{"title":"请你拿一下牛奶到茶水桌位置。","text":"On(Milk,WaterTable)"} +{"title":"麻烦你把牛奶放到咖啡桌那个位置。","text":"On(Milk,CoffeeTable)"} +{"title":"请你拿一下牛奶到咖啡桌位置。","text":"On(Milk,CoffeeTable)"} +{"title":"麻烦你把牛奶放到另一个吧台那个位置。","text":"On(Milk,Bar2)"} +{"title":"请你拿一下牛奶到另一个吧台位置。","text":"On(Milk,Bar2)"} +{"title":"麻烦你把牛奶放到第一张桌子那个位置。","text":"On(Milk,Table1)"} +{"title":"请你拿一下牛奶到第一张桌子位置。","text":"On(Milk,Table1)"} +{"title":"麻烦你把牛奶放到第二张桌子那个位置。","text":"On(Milk,Table2)"} +{"title":"请你拿一下牛奶到第二张桌子位置。","text":"On(Milk,Table2)"} +{"title":"麻烦你把牛奶放到第三张桌子那个位置。","text":"On(Milk,Table3)"} +{"title":"请你拿一下牛奶到第三张桌子位置。","text":"On(Milk,Table3)"} +{"title":"麻烦你把保温杯放到吧台那个位置。","text":"On(VacuumCup,Bar)"} +{"title":"请你拿一下保温杯到吧台位置。","text":"On(VacuumCup,Bar)"} +{"title":"麻烦你把保温杯放到茶水桌那个位置。","text":"On(VacuumCup,WaterTable)"} +{"title":"请你拿一下保温杯到茶水桌位置。","text":"On(VacuumCup,WaterTable)"} +{"title":"麻烦你把保温杯放到咖啡桌那个位置。","text":"On(VacuumCup,CoffeeTable)"} +{"title":"请你拿一下保温杯到咖啡桌位置。","text":"On(VacuumCup,CoffeeTable)"} +{"title":"麻烦你把保温杯放到另一个吧台那个位置。","text":"On(VacuumCup,Bar2)"} +{"title":"请你拿一下保温杯到另一个吧台位置。","text":"On(VacuumCup,Bar2)"} +{"title":"麻烦你把保温杯放到第一张桌子那个位置。","text":"On(VacuumCup,Table1)"} +{"title":"请你拿一下保温杯到第一张桌子位置。","text":"On(VacuumCup,Table1)"} +{"title":"麻烦你把保温杯放到第二张桌子那个位置。","text":"On(VacuumCup,Table2)"} +{"title":"请你拿一下保温杯到第二张桌子位置。","text":"On(VacuumCup,Table2)"} +{"title":"麻烦你把保温杯放到第三张桌子那个位置。","text":"On(VacuumCup,Table3)"} +{"title":"请你拿一下保温杯到第三张桌子位置。","text":"On(VacuumCup,Table3)"} +{"title":"你能把空调关闭一下吗?","text":"Is(AC,On)"} +{"title":"你能把空调打开一下吗?","text":"Is(AC,Off)"} +{"title":"你能把空调Temperature调高一下吗?","text":"Is(ACTemperature,On)"} +{"title":"你能把空调Temperature调低一下吗?","text":"Is(ACTemperature,Off)"} +{"title":"你能把大厅灯关闭一下吗?","text":"Is(HallLight,On)"} +{"title":"你能把大厅灯打开一下吗?","text":"Is(HallLight,Off)"} +{"title":"你能把筒灯关闭一下吗?","text":"Is(TubeLight,On)"} +{"title":"你能把筒灯打开一下吗?","text":"Is(TubeLight,Off)"} +{"title":"你能把窗帘关闭一下吗?","text":"Is(Curtain,On)"} +{"title":"你能把窗帘打开一下吗?","text":"Is(Curtain,Off)"} +{"title":"你能把椅子脏一下吗?","text":"Is(Chairs,On)"} +{"title":"你能把椅子打扫干净一下吗?","text":"Is(Chairs,Off)"} +{"title":"你能把地板脏一下吗?","text":"Is(Floor,On)"} +{"title":"你能把地板打扫干净一下吗?","text":"Is(Floor,Off)"} +{"title":"你能把第一张桌子脏一下吗?","text":"Is(Table1,On)"} +{"title":"你能把第一张桌子打扫干净一下吗?","text":"Is(Table1,Off)"} +{"title":"你能把盒装冰红茶抓在手里吗?","text":"Holding(Softdrink)"} +{"title":"你能一直拿着盒装冰红茶吗?","text":"Holding(Softdrink)"} +{"title":"你能把瓶装饮料抓在手里吗?","text":"Holding(BottledDrink)"} +{"title":"你能一直拿着瓶装饮料吗?","text":"Holding(BottledDrink)"} +{"title":"你能把酸奶抓在手里吗?","text":"Holding(Yogurt)"} +{"title":"你能一直拿着酸奶吗?","text":"Holding(Yogurt)"} +{"title":"你能把AD钙奶抓在手里吗?","text":"Holding(ADMilk)"} +{"title":"你能一直拿着AD钙奶吗?","text":"Holding(ADMilk)"} +{"title":"你能把牛奶味的饮料抓在手里吗?","text":"Holding(MilkDrink)"} +{"title":"你能一直拿着牛奶味的饮料吗?","text":"Holding(MilkDrink)"} +{"title":"你能把牛奶抓在手里吗?","text":"Holding(Milk)"} +{"title":"你能一直拿着牛奶吗?","text":"Holding(Milk)"} +{"title":"你能把保温杯抓在手里吗?","text":"Holding(VacuumCup)"} +{"title":"你能一直拿着保温杯吗?","text":"Holding(VacuumCup)"} +{"title":"你能把Nothing抓在手里吗?","text":"Holding(Nothing)"} +{"title":"你能一直拿着Nothing吗?","text":"Holding(Nothing)"} +{"title":"你能制作咖啡并把它端到吧台这里来吗?","text":"On(Coffee,Bar)"} +{"title":"给我来点咖啡,并把它端到吧台这里来。","text":"On(Coffee,Bar)"} +{"title":"你能制作咖啡并把它端到茶水桌这里来吗?","text":"On(Coffee,WaterTable)"} +{"title":"给我来点咖啡,并把它端到茶水桌这里来。","text":"On(Coffee,WaterTable)"} +{"title":"你能制作咖啡并把它端到咖啡桌这里来吗?","text":"On(Coffee,CoffeeTable)"} +{"title":"给我来点咖啡,并把它端到咖啡桌这里来。","text":"On(Coffee,CoffeeTable)"} +{"title":"你能制作咖啡并把它端到另一个吧台这里来吗?","text":"On(Coffee,Bar2)"} +{"title":"给我来点咖啡,并把它端到另一个吧台这里来。","text":"On(Coffee,Bar2)"} +{"title":"你能制作咖啡并把它端到第一张桌子这里来吗?","text":"On(Coffee,Table1)"} +{"title":"给我来点咖啡,并把它端到第一张桌子这里来。","text":"On(Coffee,Table1)"} +{"title":"你能制作咖啡并把它端到第二张桌子这里来吗?","text":"On(Coffee,Table2)"} +{"title":"给我来点咖啡,并把它端到第二张桌子这里来。","text":"On(Coffee,Table2)"} +{"title":"你能制作咖啡并把它端到第三张桌子这里来吗?","text":"On(Coffee,Table3)"} +{"title":"给我来点咖啡,并把它端到第三张桌子这里来。","text":"On(Coffee,Table3)"} +{"title":"你能制作水并把它端到吧台这里来吗?","text":"On(Water,Bar)"} +{"title":"给我来点水,并把它端到吧台这里来。","text":"On(Water,Bar)"} +{"title":"你能制作水并把它端到茶水桌这里来吗?","text":"On(Water,WaterTable)"} +{"title":"给我来点水,并把它端到茶水桌这里来。","text":"On(Water,WaterTable)"} +{"title":"你能制作水并把它端到咖啡桌这里来吗?","text":"On(Water,CoffeeTable)"} +{"title":"给我来点水,并把它端到咖啡桌这里来。","text":"On(Water,CoffeeTable)"} +{"title":"你能制作水并把它端到另一个吧台这里来吗?","text":"On(Water,Bar2)"} +{"title":"给我来点水,并把它端到另一个吧台这里来。","text":"On(Water,Bar2)"} +{"title":"你能制作水并把它端到第一张桌子这里来吗?","text":"On(Water,Table1)"} +{"title":"给我来点水,并把它端到第一张桌子这里来。","text":"On(Water,Table1)"} +{"title":"你能制作水并把它端到第二张桌子这里来吗?","text":"On(Water,Table2)"} +{"title":"给我来点水,并把它端到第二张桌子这里来。","text":"On(Water,Table2)"} +{"title":"你能制作水并把它端到第三张桌子这里来吗?","text":"On(Water,Table3)"} +{"title":"给我来点水,并把它端到第三张桌子这里来。","text":"On(Water,Table3)"} +{"title":"你能制作点心或者甜品并把它端到吧台这里来吗?","text":"On(Dessert,Bar)"} +{"title":"给我来点点心或者甜品,并把它端到吧台这里来。","text":"On(Dessert,Bar)"} +{"title":"你能制作点心或者甜品并把它端到茶水桌这里来吗?","text":"On(Dessert,WaterTable)"} +{"title":"给我来点点心或者甜品,并把它端到茶水桌这里来。","text":"On(Dessert,WaterTable)"} +{"title":"你能制作点心或者甜品并把它端到咖啡桌这里来吗?","text":"On(Dessert,CoffeeTable)"} +{"title":"给我来点点心或者甜品,并把它端到咖啡桌这里来。","text":"On(Dessert,CoffeeTable)"} +{"title":"你能制作点心或者甜品并把它端到另一个吧台这里来吗?","text":"On(Dessert,Bar2)"} +{"title":"给我来点点心或者甜品,并把它端到另一个吧台这里来。","text":"On(Dessert,Bar2)"} +{"title":"你能制作点心或者甜品并把它端到第一张桌子这里来吗?","text":"On(Dessert,Table1)"} +{"title":"给我来点点心或者甜品,并把它端到第一张桌子这里来。","text":"On(Dessert,Table1)"} +{"title":"你能制作点心或者甜品并把它端到第二张桌子这里来吗?","text":"On(Dessert,Table2)"} +{"title":"给我来点点心或者甜品,并把它端到第二张桌子这里来。","text":"On(Dessert,Table2)"} +{"title":"你能制作点心或者甜品并把它端到第三张桌子这里来吗?","text":"On(Dessert,Table3)"} +{"title":"给我来点点心或者甜品,并把它端到第三张桌子这里来。","text":"On(Dessert,Table3)"} diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description.txt b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description.txt new file mode 100644 index 0000000..fa81cb2 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description.txt @@ -0,0 +1,193 @@ +At(Robot,Bar) 你能过来一下吗?我在吧台这里。 +At(Robot,Bar) 麻烦你去一下吧台。 +At(Robot,Bar) 你能去吧台那个位置吗? +At(Robot,WaterTable) 你能过来一下吗?我在茶水桌这里。 +At(Robot,WaterTable) 麻烦你去一下茶水桌。 +At(Robot,WaterTable) 你能去茶水桌那个位置吗? +At(Robot,CoffeeTable) 你能过来一下吗?我在咖啡桌这里。 +At(Robot,CoffeeTable) 麻烦你去一下咖啡桌。 +At(Robot,CoffeeTable) 你能去咖啡桌那个位置吗? +At(Robot,Bar2) 你能过来一下吗?我在另一个吧台这里。 +At(Robot,Bar2) 麻烦你去一下另一个吧台。 +At(Robot,Bar2) 你能去另一个吧台那个位置吗? +At(Robot,Table1) 你能过来一下吗?我在第一张桌子这里。 +At(Robot,Table1) 麻烦你去一下第一张桌子。 +At(Robot,Table1) 你能去第一张桌子那个位置吗? +At(Robot,Table2) 你能过来一下吗?我在第二张桌子这里。 +At(Robot,Table2) 麻烦你去一下第二张桌子。 +At(Robot,Table2) 你能去第二张桌子那个位置吗? +At(Robot,Table3) 你能过来一下吗?我在第三张桌子这里。 +At(Robot,Table3) 麻烦你去一下第三张桌子。 +At(Robot,Table3) 你能去第三张桌子那个位置吗? +On(Softdrink,Bar) 麻烦你把盒装冰红茶放到吧台那个位置。 +On(Softdrink,Bar) 请你拿一下盒装冰红茶到吧台位置。 +On(Softdrink,WaterTable) 麻烦你把盒装冰红茶放到茶水桌那个位置。 +On(Softdrink,WaterTable) 请你拿一下盒装冰红茶到茶水桌位置。 +On(Softdrink,CoffeeTable) 麻烦你把盒装冰红茶放到咖啡桌那个位置。 +On(Softdrink,CoffeeTable) 请你拿一下盒装冰红茶到咖啡桌位置。 +On(Softdrink,Bar2) 麻烦你把盒装冰红茶放到另一个吧台那个位置。 +On(Softdrink,Bar2) 请你拿一下盒装冰红茶到另一个吧台位置。 +On(Softdrink,Table1) 麻烦你把盒装冰红茶放到第一张桌子那个位置。 +On(Softdrink,Table1) 请你拿一下盒装冰红茶到第一张桌子位置。 +On(Softdrink,Table2) 麻烦你把盒装冰红茶放到第二张桌子那个位置。 +On(Softdrink,Table2) 请你拿一下盒装冰红茶到第二张桌子位置。 +On(Softdrink,Table3) 麻烦你把盒装冰红茶放到第三张桌子那个位置。 +On(Softdrink,Table3) 请你拿一下盒装冰红茶到第三张桌子位置。 +On(BottledDrink,Bar) 麻烦你把瓶装饮料放到吧台那个位置。 +On(BottledDrink,Bar) 请你拿一下瓶装饮料到吧台位置。 +On(BottledDrink,WaterTable) 麻烦你把瓶装饮料放到茶水桌那个位置。 +On(BottledDrink,WaterTable) 请你拿一下瓶装饮料到茶水桌位置。 +On(BottledDrink,CoffeeTable) 麻烦你把瓶装饮料放到咖啡桌那个位置。 +On(BottledDrink,CoffeeTable) 请你拿一下瓶装饮料到咖啡桌位置。 +On(BottledDrink,Bar2) 麻烦你把瓶装饮料放到另一个吧台那个位置。 +On(BottledDrink,Bar2) 请你拿一下瓶装饮料到另一个吧台位置。 +On(BottledDrink,Table1) 麻烦你把瓶装饮料放到第一张桌子那个位置。 +On(BottledDrink,Table1) 请你拿一下瓶装饮料到第一张桌子位置。 +On(BottledDrink,Table2) 麻烦你把瓶装饮料放到第二张桌子那个位置。 +On(BottledDrink,Table2) 请你拿一下瓶装饮料到第二张桌子位置。 +On(BottledDrink,Table3) 麻烦你把瓶装饮料放到第三张桌子那个位置。 +On(BottledDrink,Table3) 请你拿一下瓶装饮料到第三张桌子位置。 +On(Yogurt,Bar) 麻烦你把酸奶放到吧台那个位置。 +On(Yogurt,Bar) 请你拿一下酸奶到吧台位置。 +On(Yogurt,WaterTable) 麻烦你把酸奶放到茶水桌那个位置。 +On(Yogurt,WaterTable) 请你拿一下酸奶到茶水桌位置。 +On(Yogurt,CoffeeTable) 麻烦你把酸奶放到咖啡桌那个位置。 +On(Yogurt,CoffeeTable) 请你拿一下酸奶到咖啡桌位置。 +On(Yogurt,Bar2) 麻烦你把酸奶放到另一个吧台那个位置。 +On(Yogurt,Bar2) 请你拿一下酸奶到另一个吧台位置。 +On(Yogurt,Table1) 麻烦你把酸奶放到第一张桌子那个位置。 +On(Yogurt,Table1) 请你拿一下酸奶到第一张桌子位置。 +On(Yogurt,Table2) 麻烦你把酸奶放到第二张桌子那个位置。 +On(Yogurt,Table2) 请你拿一下酸奶到第二张桌子位置。 +On(Yogurt,Table3) 麻烦你把酸奶放到第三张桌子那个位置。 +On(Yogurt,Table3) 请你拿一下酸奶到第三张桌子位置。 +On(ADMilk,Bar) 麻烦你把AD钙奶放到吧台那个位置。 +On(ADMilk,Bar) 请你拿一下AD钙奶到吧台位置。 +On(ADMilk,WaterTable) 麻烦你把AD钙奶放到茶水桌那个位置。 +On(ADMilk,WaterTable) 请你拿一下AD钙奶到茶水桌位置。 +On(ADMilk,CoffeeTable) 麻烦你把AD钙奶放到咖啡桌那个位置。 +On(ADMilk,CoffeeTable) 请你拿一下AD钙奶到咖啡桌位置。 +On(ADMilk,Bar2) 麻烦你把AD钙奶放到另一个吧台那个位置。 +On(ADMilk,Bar2) 请你拿一下AD钙奶到另一个吧台位置。 +On(ADMilk,Table1) 麻烦你把AD钙奶放到第一张桌子那个位置。 +On(ADMilk,Table1) 请你拿一下AD钙奶到第一张桌子位置。 +On(ADMilk,Table2) 麻烦你把AD钙奶放到第二张桌子那个位置。 +On(ADMilk,Table2) 请你拿一下AD钙奶到第二张桌子位置。 +On(ADMilk,Table3) 麻烦你把AD钙奶放到第三张桌子那个位置。 +On(ADMilk,Table3) 请你拿一下AD钙奶到第三张桌子位置。 +On(MilkDrink,Bar) 麻烦你把牛奶味的饮料放到吧台那个位置。 +On(MilkDrink,Bar) 请你拿一下牛奶味的饮料到吧台位置。 +On(MilkDrink,WaterTable) 麻烦你把牛奶味的饮料放到茶水桌那个位置。 +On(MilkDrink,WaterTable) 请你拿一下牛奶味的饮料到茶水桌位置。 +On(MilkDrink,CoffeeTable) 麻烦你把牛奶味的饮料放到咖啡桌那个位置。 +On(MilkDrink,CoffeeTable) 请你拿一下牛奶味的饮料到咖啡桌位置。 +On(MilkDrink,Bar2) 麻烦你把牛奶味的饮料放到另一个吧台那个位置。 +On(MilkDrink,Bar2) 请你拿一下牛奶味的饮料到另一个吧台位置。 +On(MilkDrink,Table1) 麻烦你把牛奶味的饮料放到第一张桌子那个位置。 +On(MilkDrink,Table1) 请你拿一下牛奶味的饮料到第一张桌子位置。 +On(MilkDrink,Table2) 麻烦你把牛奶味的饮料放到第二张桌子那个位置。 +On(MilkDrink,Table2) 请你拿一下牛奶味的饮料到第二张桌子位置。 +On(MilkDrink,Table3) 麻烦你把牛奶味的饮料放到第三张桌子那个位置。 +On(MilkDrink,Table3) 请你拿一下牛奶味的饮料到第三张桌子位置。 +On(Milk,Bar) 麻烦你把牛奶放到吧台那个位置。 +On(Milk,Bar) 请你拿一下牛奶到吧台位置。 +On(Milk,WaterTable) 麻烦你把牛奶放到茶水桌那个位置。 +On(Milk,WaterTable) 请你拿一下牛奶到茶水桌位置。 +On(Milk,CoffeeTable) 麻烦你把牛奶放到咖啡桌那个位置。 +On(Milk,CoffeeTable) 请你拿一下牛奶到咖啡桌位置。 +On(Milk,Bar2) 麻烦你把牛奶放到另一个吧台那个位置。 +On(Milk,Bar2) 请你拿一下牛奶到另一个吧台位置。 +On(Milk,Table1) 麻烦你把牛奶放到第一张桌子那个位置。 +On(Milk,Table1) 请你拿一下牛奶到第一张桌子位置。 +On(Milk,Table2) 麻烦你把牛奶放到第二张桌子那个位置。 +On(Milk,Table2) 请你拿一下牛奶到第二张桌子位置。 +On(Milk,Table3) 麻烦你把牛奶放到第三张桌子那个位置。 +On(Milk,Table3) 请你拿一下牛奶到第三张桌子位置。 +On(VacuumCup,Bar) 麻烦你把保温杯放到吧台那个位置。 +On(VacuumCup,Bar) 请你拿一下保温杯到吧台位置。 +On(VacuumCup,WaterTable) 麻烦你把保温杯放到茶水桌那个位置。 +On(VacuumCup,WaterTable) 请你拿一下保温杯到茶水桌位置。 +On(VacuumCup,CoffeeTable) 麻烦你把保温杯放到咖啡桌那个位置。 +On(VacuumCup,CoffeeTable) 请你拿一下保温杯到咖啡桌位置。 +On(VacuumCup,Bar2) 麻烦你把保温杯放到另一个吧台那个位置。 +On(VacuumCup,Bar2) 请你拿一下保温杯到另一个吧台位置。 +On(VacuumCup,Table1) 麻烦你把保温杯放到第一张桌子那个位置。 +On(VacuumCup,Table1) 请你拿一下保温杯到第一张桌子位置。 +On(VacuumCup,Table2) 麻烦你把保温杯放到第二张桌子那个位置。 +On(VacuumCup,Table2) 请你拿一下保温杯到第二张桌子位置。 +On(VacuumCup,Table3) 麻烦你把保温杯放到第三张桌子那个位置。 +On(VacuumCup,Table3) 请你拿一下保温杯到第三张桌子位置。 +Is(AC,On) 你能把空调关闭一下吗? +Is(AC,Off) 你能把空调打开一下吗? +Is(ACTemperature,On) 你能把空调Temperature调高一下吗? +Is(ACTemperature,Off) 你能把空调Temperature调低一下吗? +Is(HallLight,On) 你能把大厅灯关闭一下吗? +Is(HallLight,Off) 你能把大厅灯打开一下吗? +Is(TubeLight,On) 你能把筒灯关闭一下吗? +Is(TubeLight,Off) 你能把筒灯打开一下吗? +Is(Curtain,On) 你能把窗帘关闭一下吗? +Is(Curtain,Off) 你能把窗帘打开一下吗? +Is(Chairs,On) 你能把椅子脏一下吗? +Is(Chairs,Off) 你能把椅子打扫干净一下吗? +Is(Floor,On) 你能把地板脏一下吗? +Is(Floor,Off) 你能把地板打扫干净一下吗? +Is(Table1,On) 你能把第一张桌子脏一下吗? +Is(Table1,Off) 你能把第一张桌子打扫干净一下吗? +Holding(Softdrink) 你能把盒装冰红茶抓在手里吗? +Holding(Softdrink) 你能一直拿着盒装冰红茶吗? +Holding(BottledDrink) 你能把瓶装饮料抓在手里吗? +Holding(BottledDrink) 你能一直拿着瓶装饮料吗? +Holding(Yogurt) 你能把酸奶抓在手里吗? +Holding(Yogurt) 你能一直拿着酸奶吗? +Holding(ADMilk) 你能把AD钙奶抓在手里吗? +Holding(ADMilk) 你能一直拿着AD钙奶吗? +Holding(MilkDrink) 你能把牛奶味的饮料抓在手里吗? +Holding(MilkDrink) 你能一直拿着牛奶味的饮料吗? +Holding(Milk) 你能把牛奶抓在手里吗? +Holding(Milk) 你能一直拿着牛奶吗? +Holding(VacuumCup) 你能把保温杯抓在手里吗? +Holding(VacuumCup) 你能一直拿着保温杯吗? +Holding(Nothing) 你能把Nothing抓在手里吗? +Holding(Nothing) 你能一直拿着Nothing吗? +On(Coffee,Bar) 你能制作咖啡并把它端到吧台这里来吗? +On(Coffee,Bar) 给我来点咖啡,并把它端到吧台这里来。 +On(Coffee,WaterTable) 你能制作咖啡并把它端到茶水桌这里来吗? +On(Coffee,WaterTable) 给我来点咖啡,并把它端到茶水桌这里来。 +On(Coffee,CoffeeTable) 你能制作咖啡并把它端到咖啡桌这里来吗? +On(Coffee,CoffeeTable) 给我来点咖啡,并把它端到咖啡桌这里来。 +On(Coffee,Bar2) 你能制作咖啡并把它端到另一个吧台这里来吗? +On(Coffee,Bar2) 给我来点咖啡,并把它端到另一个吧台这里来。 +On(Coffee,Table1) 你能制作咖啡并把它端到第一张桌子这里来吗? +On(Coffee,Table1) 给我来点咖啡,并把它端到第一张桌子这里来。 +On(Coffee,Table2) 你能制作咖啡并把它端到第二张桌子这里来吗? +On(Coffee,Table2) 给我来点咖啡,并把它端到第二张桌子这里来。 +On(Coffee,Table3) 你能制作咖啡并把它端到第三张桌子这里来吗? +On(Coffee,Table3) 给我来点咖啡,并把它端到第三张桌子这里来。 +On(Water,Bar) 你能制作水并把它端到吧台这里来吗? +On(Water,Bar) 给我来点水,并把它端到吧台这里来。 +On(Water,WaterTable) 你能制作水并把它端到茶水桌这里来吗? +On(Water,WaterTable) 给我来点水,并把它端到茶水桌这里来。 +On(Water,CoffeeTable) 你能制作水并把它端到咖啡桌这里来吗? +On(Water,CoffeeTable) 给我来点水,并把它端到咖啡桌这里来。 +On(Water,Bar2) 你能制作水并把它端到另一个吧台这里来吗? +On(Water,Bar2) 给我来点水,并把它端到另一个吧台这里来。 +On(Water,Table1) 你能制作水并把它端到第一张桌子这里来吗? +On(Water,Table1) 给我来点水,并把它端到第一张桌子这里来。 +On(Water,Table2) 你能制作水并把它端到第二张桌子这里来吗? +On(Water,Table2) 给我来点水,并把它端到第二张桌子这里来。 +On(Water,Table3) 你能制作水并把它端到第三张桌子这里来吗? +On(Water,Table3) 给我来点水,并把它端到第三张桌子这里来。 +On(Dessert,Bar) 你能制作点心或者甜品并把它端到吧台这里来吗? +On(Dessert,Bar) 给我来点点心或者甜品,并把它端到吧台这里来。 +On(Dessert,WaterTable) 你能制作点心或者甜品并把它端到茶水桌这里来吗? +On(Dessert,WaterTable) 给我来点点心或者甜品,并把它端到茶水桌这里来。 +On(Dessert,CoffeeTable) 你能制作点心或者甜品并把它端到咖啡桌这里来吗? +On(Dessert,CoffeeTable) 给我来点点心或者甜品,并把它端到咖啡桌这里来。 +On(Dessert,Bar2) 你能制作点心或者甜品并把它端到另一个吧台这里来吗? +On(Dessert,Bar2) 给我来点点心或者甜品,并把它端到另一个吧台这里来。 +On(Dessert,Table1) 你能制作点心或者甜品并把它端到第一张桌子这里来吗? +On(Dessert,Table1) 给我来点点心或者甜品,并把它端到第一张桌子这里来。 +On(Dessert,Table2) 你能制作点心或者甜品并把它端到第二张桌子这里来吗? +On(Dessert,Table2) 给我来点点心或者甜品,并把它端到第二张桌子这里来。 +On(Dessert,Table3) 你能制作点心或者甜品并把它端到第三张桌子这里来吗? +On(Dessert,Table3) 给我来点点心或者甜品,并把它端到第三张桌子这里来。 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description_to_json.py b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description_to_json.py new file mode 100644 index 0000000..9b673be --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/goal_states_with_description_to_json.py @@ -0,0 +1,10 @@ +import os + +with open(os.path.join('./goal_states_with_description.txt'), 'r', encoding='utf-8') as file: + lines = file.readlines() + +with open(os.path.join('./goal_states_with_description.jsonl'), 'w', encoding='utf-8') as file: + + for line in lines: + tmp = line[:-1].split('\t') + file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) diff --git a/BTExpansionCode/EXP/behavior_tree/dataset/sentence_expansion.py b/BTExpansionCode/EXP/behavior_tree/dataset/sentence_expansion.py new file mode 100644 index 0000000..5cd2be4 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset/sentence_expansion.py @@ -0,0 +1,61 @@ +import os +import requests +import urllib3 +from tqdm import tqdm + +######################################## +# 该文件实现了与大模型的简单通信 +######################################## + +# 忽略https的安全性警告 +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + +def single_round(question, prefix=""): + url = "https://45.125.46.134:25344/v1/chat/completions" + headers = {"Content-Type": "application/json"} + data = { + "model": "RoboWaiter", + "messages": [ + { + "role": "system", + # "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" + "content": """ + 假设现在你是咖啡厅的一个顾客,请将以下你对咖啡厅服务员说的话改写成更清晰更合理的顾客表述。注意:句中的你指的是咖啡厅服务员,也不要说能帮我。 + 例如:麻烦你去一下吧台。可以转述成:服务员,你能去下吧台吗? + 另一个例子:请你拿一下酸奶到吧台位置。可以转述成:服务员,拿一杯酸奶来吧台。 + + """ + }, + { + "role": "user", + "content": prefix + question + } + ] + } + + response = requests.post(url, headers=headers, json=data, verify=False) + + if response.status_code == 200: + result = response.json() + return result['choices'][0]['message']['content'].strip() + else: + return "大模型请求失败:", response.status_code + + +if __name__ == '__main__': + with open('./goal_states_with_description.txt', 'r', encoding='utf-8') as file: + lines = file.readlines() + + output_file = './expansion_out/output2.txt' + with open(output_file, 'a', encoding='utf-8') as file: + file.truncate(0) + for line in tqdm(lines): + tmp = line[:-1].split('\t') + # file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) + question = tmp[1] + # print(single_round(question)) + # print(tmp[1]) + with open(output_file, 'a', encoding='utf-8') as file: + file.write(tmp[0] + "\t" + single_round(question, prefix="现在改写一下句子:") + '\n') + print("输出完成") diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/W2V_CI.model b/BTExpansionCode/EXP/behavior_tree/dataset1224/W2V_CI.model new file mode 100644 index 0000000..8a38237 Binary files /dev/null and b/BTExpansionCode/EXP/behavior_tree/dataset1224/W2V_CI.model differ diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/__init__.py b/BTExpansionCode/EXP/behavior_tree/dataset1224/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output.txt b/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output.txt new file mode 100644 index 0000000..929c465 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output.txt @@ -0,0 +1,386 @@ +At(Robot,Bar) 请给我带来菜单。 +At(Robot,Bar) 请帮我前往吧台。 +At(Robot,Bar) 您好,我需要去吧台那个位置,请问可以帮我吗? +At(Robot,WaterTable) 请送一些茶水到茶水桌。 +At(Robot,WaterTable) 请帮我前往茶水桌。 +At(Robot,WaterTable) 您好,请问您需要我前往哪个位置呢? +At(Robot,CoffeeTable) 请问能帮我来到这个咖啡桌吗? +At(Robot,CoffeeTable) 请前往咖啡桌。 +At(Robot,CoffeeTable) 您好!请问您能帮我前往咖啡桌的位置吗? +At(Robot,Bar2) 您好,请问您需要前往哪个吧台呢? +At(Robot,Bar2) 请帮我前往另一个吧台。 +At(Robot,Bar2) 您好,机器人服务员!请问您能告诉我如何前往另一个吧台的位置吗? +At(Robot,Table1) 请给我送一份菜单到第一桌。 +At(Robot,Table1) 请帮我前往第一桌,谢谢! +At(Robot,Table1) 您好,我是一名AI助手,请问有什么我可以帮您的? +At(Robot,Table2) 请帮我来到第二张桌子。 +At(Robot,Table2) 请帮我前往第二桌,谢谢! +At(Robot,Table2) 您好,机器人服务员!请问您能否前往第二桌的位置提供服务? +At(Robot,Table3) 请给我带来第三桌子的服务。 +At(Robot,Table3) 请前往第三张桌子。 +At(Robot,Table3) 您好,请问您需要我前往第三张桌子所在的方位吗? +On(Softdrink,Bar) 请将软饮料放在吧台那个位置。 +On(Softdrink,Bar) 请将软饮料拿到吧台位置。 +On(Softdrink,WaterTable) 请将软饮料放在茶水桌那个位置。 +On(Softdrink,WaterTable) 请给我拿一罐软饮料,放在茶水桌的位置。 +On(Softdrink,CoffeeTable) 请将软饮料放在咖啡桌上的指定位置。 +On(Softdrink,CoffeeTable) 请把软饮料拿到我的咖啡桌位置。 +On(Softdrink,Bar2) 请将软饮料放在另一个酒吧台的位置。 +On(Softdrink,Bar2) 请将软饮料拿到另一个酒吧台位置。 +On(Softdrink,Table1) 请将软饮料放在第一桌的指定位置。 +On(Softdrink,Table1) 请给我拿一罐软饮料,放在第一桌子的位置。 +On(Softdrink,Table2) 请将软饮料放在第二桌的位置。 +On(Softdrink,Table2) 请帮我从一个位置(可能是吧台或货架)取来一瓶软饮料,然后将其放在第二张桌子上。 +On(Softdrink,Table3) 请将软饮料放在第三桌的具体位置。 +On(Softdrink,Table3) 请给我拿一罐软饮料,放 到第三张桌子的位置。 +On(BottledDrink,Bar) 您好,我想让您将瓶装饮料放在吧台那个位置。 +On(BottledDrink,Bar) 请帮我取一下瓶装饮料,放到吧台那里。 +On(BottledDrink,WaterTable) 您好,机器人服务员,我想让您放一瓶饮料在茶水桌上,可以吗? +On(BottledDrink,WaterTable) 请帮我拿一下瓶装饮料,放到茶水桌的位置。 +On(BottledDrink,CoffeeTable) 请将瓶装饮料放在咖啡桌上的指定位置。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料拿到我的咖啡桌位置。 +On(BottledDrink,Bar2) 请将瓶装饮料放在另一个酒吧台的位置。 +On(BottledDrink,Bar2) 请帮我从一个吧台位置取一个瓶装饮料,然后将其拿到另一个吧台位置。 +On(BottledDrink,Table1) 请将瓶装饮料放在第一桌的指定位置。 +On(BottledDrink,Table1) 您好,我需要您帮忙将瓶装饮料拿到第一桌的位置。 +On(BottledDrink,Table2) 您好,我需要您帮助将瓶装饮料放在第二桌的具体位置。 +On(BottledDrink,Table2) 请给我拿一罐饮料,放在第二桌的位置。 +On(BottledDrink,Table3) 请将瓶装饮料放在第三桌的位置。 +On(BottledDrink,Table3) 请给我取一瓶饮料,放到了第三桌子上。 +On(Yogurt,Bar) 您好,我需要您将酸奶放在吧台上的哪个位置。 +On(Yogurt,Bar) 请您把酸奶拿到吧台。 +On(Yogurt,WaterTable) 请将酸奶放在茶水桌那个位置。 +On(Yogurt,WaterTable) 请将酸奶放在茶水桌的位置。 +On(Yogurt,CoffeeTable) 请将酸奶放在咖啡桌上的指定位置。 +On(Yogurt,CoffeeTable) 请把酸奶放在咖啡桌的位置。 +On(Yogurt,Bar2) 请将酸奶放在另一个吧台上的那个位置。 +On(Yogurt,Bar2) 您好,机器人服务员!请问您可以帮我拿一下酸奶,放到那个靠近窗户的吧台位置吗?谢谢! +On(Yogurt,Table1) 请将酸奶放在第一桌的第一位置。 +On(Yogurt,Table1) 请将酸奶放在第一桌的位置。 +On(Yogurt,Table2) 您好,请问能帮我将酸奶放在第二张桌子的位置吗?谢谢! +On(Yogurt,Table2) 请把酸奶放在第二桌的位置。 +On(Yogurt,Table3) 您好,机器人服务员,我想让您把酸奶放到第三张桌子的位置。谢谢! +On(Yogurt,Table3) 请把酸奶放在第三桌的位置。 +On(ADMilk,Bar) 请将AD钙奶放在吧台那个位置。 +On(ADMilk,Bar) 请把AD钙奶放到 bar 位置。 +On(ADMilk,WaterTable) 请将AD钙奶放在茶水桌那个位置。 +On(ADMilk,WaterTable) 请帮我取一份AD钙奶,放在茶水桌的位置上。 +On(ADMilk,CoffeeTable) 请将AD钙奶放在咖啡桌上的指定位置。 +On(ADMilk,CoffeeTable) 请将AD钙奶送到我的咖啡桌位置。 +On(ADMilk,Bar2) 请将AD钙奶放在另一个酒吧台的位置。 +On(ADMilk,Bar2) 您好,机器人服务员!请问能帮我拿一下AD钙奶,放到另一个吧台位置吗?谢谢! +On(ADMilk,Table1) 请将AD钙奶放在第一桌的指定位置。 +On(ADMilk,Table1) 请把AD钙奶放在第一桌的位置。 +On(ADMilk,Table2) 请将AD钙奶放在第二桌的位置。 +On(ADMilk,Table2) 请把AD钙奶放在第二桌的位置。 +On(ADMilk,Table3) 您好,机器人服务员!请问能帮我将AD钙奶放到第三张桌子的位置吗?谢谢! +On(ADMilk,Table3) 请帮我取一份AD钙奶,放至第三桌。 +On(MilkDrink,Bar) 请将牛奶饮料放在吧台那个位置。 +On(MilkDrink,Bar) 请帮我拿一罐牛奶饮料放到吧台的位置。 +On(MilkDrink,WaterTable) 请将牛奶饮料放在茶水桌那个位置。 +On(MilkDrink,WaterTable) 请帮我递一下牛奶饮料,放到茶水桌的位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在咖啡桌上的指定位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在我的咖啡桌上。 +On(MilkDrink,Bar2) 请将牛奶饮料放在另一个酒吧台的位置。 +On(MilkDrink,Bar2) 您好,机器人服务员!请问能否帮我拿一下牛奶饮料,并将其放在另一个吧台位置?谢谢! +On(MilkDrink,Table1) 请将牛奶饮料放在第一桌的指定位置。 +On(MilkDrink,Table1) 请将牛奶饮料拿到第一桌。 +On(MilkDrink,Table2) 请将牛奶饮料放在第二桌的位置上。 +On(MilkDrink,Table2) 请给我拿一罐牛奶饮料,放在第二桌的位置。 +On(MilkDrink,Table3) 请将牛奶饮料放在第三桌的具体位置。 +On(MilkDrink,Table3) 请给我拿一罐牛奶饮料,放到第三张桌子的位置。 +On(Milk,Bar) 请将牛奶放在吧台那个地方。 +On(Milk,Bar) 请把牛奶拿到吧台。 +On(Milk,WaterTable) 请将牛奶放在茶水桌那个位置。 +On(Milk,WaterTable) 请将牛奶放在茶水桌附近。 +On(Milk,CoffeeTable) 请将牛奶放在咖啡桌上的指定位置。 +On(Milk,CoffeeTable) 请把牛奶放在我的咖啡桌上。 +On(Milk,Bar2) 请将牛奶放在另一个酒吧台的位置上。 +On(Milk,Bar2) 请将牛奶拿到另一个吧台位置。 +On(Milk,Table1) 请将牛奶放在第一桌的位置上。 +On(Milk,Table1) 请把牛奶放在第一桌的位置上。 +On(Milk,Table2) 请将牛奶放在第二桌那个位置。 +On(Milk,Table2) 请给我拿一罐牛奶,放的第二张桌子上。 +On(Milk,Table3) 您好,我需要您将牛奶放在第三张桌子的位置。谢谢! +On(Milk,Table3) 请给我拿一罐牛奶,放到第三桌子的位置。 +On(VacuumCup,Bar) 请将我的保温杯放在吧台上的那个位置。 +On(VacuumCup,Bar) 请将我的保温杯拿到吧台。 +On(VacuumCup,WaterTable) 请将我的保温杯放在茶水桌那个地方。 +On(VacuumCup,WaterTable) 请将保温杯拿到茶水桌那里。 +On(VacuumCup,CoffeeTable) 请将保温杯放置在咖啡桌上的指定位置。 +On(VacuumCup,CoffeeTable) 请把保温杯放在咖啡桌附近。 +On(VacuumCup,Bar2) 请将我的保温杯放在另一个酒吧台上的那个位置。 +On(VacuumCup,Bar2) 请帮我把保温杯拿到另一个吧台位置。 +On(VacuumCup,Table1) 请将保温杯放在第一桌的指定位置。 +On(VacuumCup,Table1) 请把保温杯拿到第一桌子的位置。 +On(VacuumCup,Table2) 请将保温杯放在第二桌的具体位置。 +On(VacuumCup,Table2) 请帮我递一个保温杯到第二桌。 +On(VacuumCup,Table3) 请将保温杯放在第三桌的指定位置。 +On(VacuumCup,Table3) 请把保温杯拿到第三桌的位置。 +Is(AC,0) 当然可以,请问需要我为您执行这个操作吗? +Is(AC,1) 您好!请问您需要我为您打开空调吗? +Is(ACTemperature,0) 尊敬的服务员,可以请您把空调温度调高一些吗?谢谢! +Is(ACTemperature,1) 尊敬的服务员,能否请您将空调温度调低一些呢? +Is(HallLight,0) 当然可以,请您稍等,我这就帮您关闭大厅灯。 +Is(HallLight,1) 您好!请问您需要我为您做些什么呢? +Is(TubeLight,0) 尊敬的服务员,请问你能把筒灯调暗一些吗? +Is(TubeLight,1) 您好,请问您需要我帮您打开筒灯吗? +Is(Curtain,0) 您好,我能为您做什么? +Is(Curtain,1) 您好,请问您需要我帮您打开窗帘吗? +Is(Chairs,0) 您好!请问需要我为您做什么? +Is(Chairs,1) 您好,请问能帮我清理一下座位上的灰尘吗? +Is(Floor,0) 抱歉,我理解您的意思了。请问需要我帮忙做些什么来清理地板呢? +Is(Floor,1) 请问你能帮我打扫一下地板吗? +Is(Table1,0) 您好,请问需要我帮助您做什么呢?如果您需要我清理桌子的灰尘或者污渍,麻烦您告诉我哪一张桌子需要清洁。 +Is(Table1,1) 请帮我清理一下这张桌子的灰尘和垃圾。 +Holding(Softdrink) 您好,我是您的机器人服务员。请问您需要什么帮助呢? +Holding(Softdrink) 您好,我是一个机器人服务员。请问您需要什么帮助?如果您想要点软饮料,您可以告诉我您的喜好,我会为您推荐一些适合的选项。 +Holding(BottledDrink) 您好,请问您需要什么帮助?我会尽力满足您的需求。 +Holding(BottledDrink) 您好,我是一名机器人服务员。请问您需要我帮忙拿着一瓶装饮料吗? +Holding(Yogurt) 您好,我可以帮助您点餐和回答问题。请问您需要什么食物或饮料? +Holding(Yogurt) 请问你能一直帮我拿着这个酸奶吗? +Holding(ADMilk) 你好,尊敬的服务员!能否帮我抓住AD钙奶并递给我呢? +Holding(ADMilk) 您好,我无法长时间拿着 AD 钙奶。作为一个机器人服务员,我的任务是帮助您解决问题和回答问题,而不是提供物理服务。如果您需要AD钙奶,我可以告诉您在哪里可以找到它,或者指导您如何自己获取它。 +Holding(MilkDrink) 您好!请问有什么我可以帮您的吗? +Holding(MilkDrink) 您好,我是您的机器人服务员。请问您需要我为您一直拿着这杯牛奶饮料吗? +Holding(Milk) 你好,尊敬的服务员,能帮我拿一下牛奶吗? +Holding(Milk) 请问你能一直拿着牛奶吗? +Holding(VacuumCup) 您好,请问您需要什么帮助?我可以为您提供服务。 +Holding(VacuumCup) 您好,我是一名AI机器人,无法直接为您拿保温杯。但是,我可以为您提供购买保温杯的建议,或者推荐其他相关商品。请问您需要什么帮助吗? +Holding(Nothing) 抱歉,我需要更多的信息来理解您的请求。请问您能告诉我您具体想要什么帮助吗?我会尽力回答您的问题。 +Holding(Nothing) 请问您能一直拿着无所事事吗? +On(Coffee,Bar) 您好,我需要一杯咖啡,并希望它能够被送到吧台。 +On(Coffee,Bar) 请帮我准备一杯咖啡,然后把咖啡端到吧台这里。 +On(Coffee,WaterTable) 您好!请问您能帮我制作一杯咖啡并将其端到茶水桌 here 吗?谢谢! +On(Coffee,WaterTable) 请帮我准备一杯咖啡,然后将它端到茶水桌旁边。 +On(Coffee,CoffeeTable) 当然可以,请问您想喝什么类型的咖啡呢? +On(Coffee,CoffeeTable) 请帮我准备一杯咖啡,然后将它端到这个咖啡桌上来。 +On(Coffee,Bar2) 您好,机器人服务员!请问您能帮我制作一杯咖啡,然后把咖啡端到这个吧台这里来吗?谢谢! +On(Coffee,Bar2) 请帮我准备一杯咖啡,然后把咖啡端到这个吧台这里。 +On(Coffee,Table1) 您好,我是一名人工智能助手。请问您需要什么帮助? +On(Coffee,Table1) 请给我一杯咖啡,并将其放在第一桌子上。 +On(Coffee,Table2) 您好,机器人服务员!我想要一杯咖啡,并且希望它能够被送到第二张桌子上。 +On(Coffee,Table2) 请为我准备一杯咖啡,并将其送到第二桌。 +On(Coffee,Table3) 您好!请问您能否帮我制作一杯咖啡,然后把咖啡端到第三张桌子上呢?谢谢! +On(Coffee,Table3) 请为我准备一杯咖啡,并将其送到第三张桌子上。 +On(Water,Bar) 您好,我需要一杯水,并且希望它能够被端到吧台那里。 +On(Water,Bar) 请为我准备一杯水,并将其送到吧台。 +On(Water,WaterTable) 您好,我需要一杯水,并希望您能将其端到茶水桌这里。 +On(Water,WaterTable) 请为我送一杯水,并将其放在茶水桌上。 +On(Water,CoffeeTable) 您好,我是一名机器人服务员。请问您需要一杯水,我可以为您制作并在准备好后将其端到咖啡桌旁边。 +On(Water,CoffeeTable) 请给我一杯水,并将其递送到我的咖啡桌上。 +On(Water,Bar2) 您好,机器人服务员!请问你能帮我制作一杯水,然后将其端到距离这里较远的另一个吧台吗?谢谢! +On(Water,Bar2) 请给我倒一杯水,然后把水端到这个吧台这里。 +On(Water,Table1) 您好,我需要一杯水,并希望它能够被送到我所在的桌子上。 +On(Water,Table1) 请为我准备一杯水,并将其送到这张桌子的位置上。 +On(Water,Table2) 您好,我需要一杯水,并希望你能将它端到第二张桌子上。 +On(Water,Table2) 请给我倒一杯水,并把水杯端到第二桌子上。 +On(Water,Table3) 您好,机器人服务员!请问能否为您制作一杯水,并将其送到第三张桌子呢? +On(Water,Table3) 请为我准备一杯水,并将其送到第三桌。 +On(Dessert,Bar) 您好,我需要点心和甜品。请帮我制作一下,然后把它们带到吧台来。 +On(Dessert,Bar) 您好,我可以帮您点一些点心或甜品,然后将它们送到吧台。请问您想点什么? +On(Dessert,WaterTable) 您好,我需要点心和甜品,并将它们端到茶水桌 here。 +On(Dessert,WaterTable) 请为我准备一些点心或甜品,并将其递送到我的茶水桌子上。 +On(Dessert,CoffeeTable) 您好,我是一个人工智能助手,虽然我不能直接为您制作点心或甜品,但我可以帮助您找到附近的餐厅或店铺,为您推荐美味的点心或甜品,您可以品尝一下。如果您有其他需要帮助的地方,也请随时告诉我。 +On(Dessert,CoffeeTable) 请为我准备一些点心或甜品,然后将其放置在咖啡桌附近。 +On(Dessert,Bar2) 您好,我需要点心和甜品。请问您能帮我制作吗?然后把它们端到这里来。谢谢! +On(Dessert,Bar2) 请帮我点一份点心或甜品,然后把它端到另一个吧台那里。 +On(Dessert,Table1) 您好,我是一位AI助手,无法直接为您制作点心或甜品。但我可以为您推荐菜单上的点心或甜品,或者帮您下单购买。请问您需要什么帮助? +On(Dessert,Table1) 请帮我点一些点心或甜品,并把它们放在这张桌子上。 +On(Dessert,Table2) 您好,机器人服务员!我需要点心和甜品,可以帮我制作吗?把它们送到第二桌来,谢谢! +On(Dessert,Table2) 您好,请问有什么我可以帮您的吗?您可以点一些点心或甜品,然后告诉我放在哪一张桌子上,我会马上为您送过去。 +On(Dessert,Table3) 您好,我需要点心和甜品,请把它们送到第三桌。 +On(Dessert,Table3) 您好,机器人服务员!请问您能帮我点些点心或甜品吗?我要把它们送到第三桌。 +At(Robot,Bar) 您好,机器人服务员!请问您能带路来到 Bar 吗?我想要一杯饮料和一些小吃。谢谢! +At(Robot,Bar) 请帮我前往Bar。 +At(Robot,Bar) 请问你能带我前往Bar位置吗? +At(Robot,WaterTable) 请帮我找到WaterTable。 +At(Robot,WaterTable) 您好,机器人服务员!请问您能帮我订一张去WaterTable的桌子吗? +At(Robot,WaterTable) 当然可以!请问您需要我向WaterTable位置发送消息吗? +At(Robot,CoffeeTable) 请把咖啡机移到CoffeeTable附近。 +At(Robot,CoffeeTable) 请前往CoffeeTable。 +At(Robot,CoffeeTable) 您好,我是一名人工智能助手,请问有什么我可以帮您的? +At(Robot,Bar2) 您好,我需要去Bar2。 +At(Robot,Bar2) 您好,机器人服务员,请问您能帮我前往Bar2吗? +At(Robot,Bar2) 您好,我是一名AI助手,无法移动到特定的位置。但我会尽力为您提供帮助。您想前往Bar2吗?如果有其他问题,欢迎随时告诉我。 +At(Robot,Table1) 请把菜单送到Table 1。 +At(Robot,Table1) 请前往Table1。 +At(Robot,Table1) 您好,我能前往Table1位置吗? +At(Robot,Table2) 请带领我到Table 2。 +At(Robot,Table2) 请前往Table2。 +At(Robot,Table2) 您好!请问您需要我前往Table2位置吗? +At(Robot,Table3) 请把服务生叫来Table 3。 +At(Robot,Table3) 请去Table3。 +At(Robot,Table3) 您好,我需要您前往Table3位置。 +On(Softdrink,Bar) 请将Softdrink放在Bar那个位置。 +On(Softdrink,Bar) 请把Softdrink拿到Bar位置。 +On(Softdrink,WaterTable) 您好,机器人服务员!请问能帮我将Softdrink放在WaterTable的位置上吗?谢谢! +On(Softdrink,WaterTable) 请把Softdrink拿到WaterTable的位置。 +On(Softdrink,CoffeeTable) 请将Softdrink放在CoffeeTable那个位置。 +On(Softdrink,CoffeeTable) 请将Softdrink拿到CoffeeTable的位置。 +On(Softdrink,Bar2) 您好,机器人服务员!请问能否帮我放一下Softdrink到Bar2的位置呢?谢谢! +On(Softdrink,Bar2) 请把Softdrink拿到Bar2的位置。 +On(Softdrink,Table1) 请将Softdrink放在Table1的位置。 +On(Softdrink,Table1) 请把Softdrink拿到Table 1的位置。 +On(Softdrink,Table2) 您好,机器人服务员!请将Softdrink放在Table 2的位置。谢谢! +On(Softdrink,Table2) 请将Softdrink拿到Table 2的位置。 +On(Softdrink,Table3) 您好,机器人服务员!请问能否将Softdrink放在Table3的位置上? +On(Softdrink,Table3) 请将Softdrink拿到Table 3的位置。 +On(BottledDrink,Bar) 请将瓶装饮料放在酒吧那个位置。 +On(BottledDrink,Bar) 请将瓶装饮料送到酒吧区域。 +On(BottledDrink,WaterTable) 请将瓶装饮料放在水桌那个位置。 +On(BottledDrink,WaterTable) 请把瓶装饮料拿到水桌的位置。 +On(BottledDrink,CoffeeTable) 请将瓶装饮料放在咖啡桌那个位置。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料放在咖啡桌的位置。 +On(BottledDrink,Bar2) 请将瓶装饮料放在 Bar 2 的位置。 +On(BottledDrink,Bar2) 请把瓶装饮料送到酒吧2号位置。 +On(BottledDrink,Table1) 您好,机器人服务员!请将瓶装饮料放在Table1的位置上。谢谢! +On(BottledDrink,Table1) 请将瓶装饮料拿到Table 1的位置。 +On(BottledDrink,Table2) 请将Bottled Drink放在Table 2的位置。 +On(BottledDrink,Table2) 请把瓶装饮料送到Table2位置。 +On(BottledDrink,Table3) 请将瓶装饮料放在Table3的位置上。 +On(BottledDrink,Table3) 请把瓶装饮料拿到Table3的位置。 +On(Yogurt,Bar) 您好,请问您需要将酸奶放在哪个位置? +On(Yogurt,Bar) 请把Yogurt送到Bar位置。 +On(Yogurt,WaterTable) 请将Yogurt放在WaterTable的位置上。 +On(Yogurt,WaterTable) 请把Yogurt送到WaterTable位置。 +On(Yogurt,CoffeeTable) 请将Yogurt放在CoffeeTable那个位置。 +On(Yogurt,CoffeeTable) 请把Yogurt送到CoffeeTable那里。 +On(Yogurt,Bar2) 您好,机器人服务员!请帮我将酸奶(Yogurt)放在 Bar2 的位置上。谢谢! +On(Yogurt,Bar2) 请将Yogurt送到Bar2位置。 +On(Yogurt,Table1) 您好,机器人服务员!请将酸奶(Yogurt)放到Table1的位置上。谢谢! +On(Yogurt,Table1) 请将Yogurt拿到Table 1的位置。 +On(Yogurt,Table2) 请将 Yogurt 放在 Table2 的那个位置。 +On(Yogurt,Table2) 请将 Yogurt 拿到 Table 2 的位置。 +On(Yogurt,Table3) 您好,请问可以帮我将Yogurt放在Table3的位置吗? +On(Yogurt,Table3) 请将Yogurt放在Table 3的位置上。 +On(ADMilk,Bar) 请将AD Milk放在Bar位置。 +On(ADMilk,Bar) 请把ADMilk拿到Bar位置。 +On(ADMilk,WaterTable) 请将AD Milk放在 WaterTable 的那个位置。 +On(ADMilk,WaterTable) 您好,请问能帮我拿一下ADMilk到WaterTable的位置吗? +On(ADMilk,CoffeeTable) 您好,我需要您将ADMilk放在CoffeeTable那个位置。 +On(ADMilk,CoffeeTable) 请将AD Milk拿到Coffee Table的位置。 +On(ADMilk,Bar2) 请将AD Milk放置在Bar 2的位置。 +On(ADMilk,Bar2) 请把ADMilk拿到Bar2位置。 +On(ADMilk,Table1) 请将ADMilk放到Table1的位置。 +On(ADMilk,Table1) 请将ADMilk搬到Table1的位置。 +On(ADMilk,Table2) 请将ADMilk放在Table2的位置。 +On(ADMilk,Table2) 请把ADMilk搬到Table2的位置。 +On(ADMilk,Table3) 请将ADMilk放在Table3的位置。 +On(ADMilk,Table3) 您好,服务员!能帮我拿一下ADMilk到Table3位置吗? +On(MilkDrink,Bar) 请将牛奶饮料放在吧台那个位置。 +On(MilkDrink,Bar) 请把牛奶饮料拿到酒吧位置。 +On(MilkDrink,WaterTable) 请将牛奶饮料放在水桌那个位置。 +On(MilkDrink,WaterTable) 请把牛奶饮料拿到水 table 位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在咖啡桌那个位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料递送到咖啡桌位置。 +On(MilkDrink,Bar2) 请将牛奶饮料放在吧台2的位置。 +On(MilkDrink,Bar2) 请把牛奶饮料递送到酒吧2号位置。 +On(MilkDrink,Table1) 请将牛奶饮料放在Table1的位置上。 +On(MilkDrink,Table1) 请把牛奶饮料拿到Table1的位置。 +On(MilkDrink,Table2) 请将牛奶饮料放到桌子2的位置。 +On(MilkDrink,Table2) 请把牛奶饮料送到Table2位置。 +On(MilkDrink,Table3) 请将牛奶饮料放在桌3的位置。 +On(MilkDrink,Table3) 请将牛奶饮料拿到 table 3 的位置。 +On(Milk,Bar) 请将牛奶放在酒吧那个位置。 +On(Milk,Bar) 请把牛奶拿到酒吧位置。 +On(Milk,WaterTable) 请将牛奶放在水 table 的那个位置。 +On(Milk,WaterTable) 请把牛奶拿到 WaterTable 那里。 +On(Milk,CoffeeTable) 请将牛奶放在咖啡桌上的指定位置。 +On(Milk,CoffeeTable) 请把牛奶拿到咖啡桌的位置。 +On(Milk,Bar2) 请将牛奶放在 Bar2 的位置。 +On(Milk,Bar2) 请把牛奶放到Bar2的位置。 +On(Milk,Table1) 您好,机器人服务员!请将牛奶放在Table1的位置。 +On(Milk,Table1) 请把牛奶拿到Table1的位置。 +On(Milk,Table2) 请将牛奶放在Table2的位置。 +On(Milk,Table2) 请把牛奶放在Table2的位置上。 +On(Milk,Table3) 请将牛奶放在Table3的位置上。 +On(Milk,Table3) 请把牛奶拿到Table3的位置。 +On(VacuumCup,Bar) 请将VacuumCup放置在Bar位置。 +On(VacuumCup,Bar) 请把VacuumCup放到Bar位置。 +On(VacuumCup,WaterTable) 请将VacuumCup放置在WaterTable上。 +On(VacuumCup,WaterTable) 请把VacuumCup放到WaterTable的位置。 +On(VacuumCup,CoffeeTable) 请将VacuumCup放在CoffeeTable那个地方。 +On(VacuumCup,CoffeeTable) 请把VacuumCup放到CoffeeTable上。 +On(VacuumCup,Bar2) 请将VacuumCup放置在Bar2的位置上。 +On(VacuumCup,Bar2) 请把VacuumCup移到Bar2的位置。 +On(VacuumCup,Table1) 请将VacuumCup放置在Table1的位置上。 +On(VacuumCup,Table1) 请把VacuumCup移到Table1的位置。 +On(VacuumCup,Table2) 请将VacuumCup放到Table2的位置。 +On(VacuumCup,Table2) 请把VacuumCup放到Table2的位置。 +On(VacuumCup,Table3) 请将VacuumCup放置在Table3的位置上。 +On(VacuumCup,Table3) 请将VacuumCup移至Table3位置。 +Is(AC,0) 请问你能帮我关掉AC吗? +Is(AC,1) 请问你能帮我打开空调吗? +Is(ACTemperature,0) 尊敬的服务员,请问您能否将温度调高一些呢? +Is(ACTemperature,1) 请问你能将咖啡厅的温度调低一些吗? +Is(HallLight,0) 当然可以,请问需要我使用哪个开关来关闭HallLight呢? +Is(HallLight,1) 您好!请问您需要我帮助您开启还是关闭HallLight呢? +Is(TubeLight,0) 当然可以,请问您需要我使用哪个遥控器来关闭它呢? +Is(TubeLight,1) 您好,机器人服务员!请问您能帮我打开一下 tube light 吗?谢谢! +Is(Curtain,0) 请问你能把窗帘关上吗? +Is(Curtain,1) 请问你能把窗户帘打开一下吗? +Is(Chairs,0) 您好,请问您需要我帮助清理座位上的污渍吗? +Is(Chairs,1) 您好,我是您的顾客。我想请问您是否能帮我清理一下座位上的灰尘和垃圾? +Is(Floor,0) 您好,我能为您做些什么呢?如果您需要我帮忙打扫地板,请告诉我哪里需要清理,我会尽快为您处理。 +Is(Floor,1) 您好,我需要您帮助打扫一下地板。 +Is(Table1,0) 您好!请问您需要我为您做什么呢?如果您需要我清理Table1,请您告诉我需要使用什么清洁用品,我会按照您的指示进行操作。 +Is(Table1,1) 您好,请问需要我帮您打扫Table1吗? +Holding(Softdrink) 您好,我是一款人工智能助手,无法直接与现实世界进行交互。但我可以为您提供有关如何抓饮料的信息。您可以尝试用手指将Softdrink抓在手中。如果您需要更多帮助,请随时告诉我。 +Holding(Softdrink) 您好,我是您的机器人服务员。我能帮您拿住Softdrink吗? +Holding(BottledDrink) 我能帮我拿起那瓶饮料吗? +Holding(BottledDrink) 您好!请问您需要我帮您一直拿着这瓶饮料吗? +Holding(Yogurt) 请问你能帮我拿一下 yogurt 吗? +Holding(Yogurt) 您好,我可以帮助您更好地理解和使用我们的服务。请问您需要我为您拿取什么商品呢? +Holding(ADMilk) 你能帮我拿一下AD Milk吗? +Holding(ADMilk) 您好,我需要点一杯AD Milk。麻烦您能帮我拿一下吗? +Holding(MilkDrink) 我想要一杯牛奶饮料,能帮我把它端过来吗? +Holding(MilkDrink) 我需要你一直拿着牛奶饮料。 +Holding(Milk) 您好,请问有什么我可以帮助您的? +Holding(Milk) 您好,我是您的机器人服务员。请问有什么我可以帮助您的吗? +Holding(VacuumCup) 您好!请问您需要什么帮助? +Holding(VacuumCup) 您好!请问您需要我帮助您一直拿着VacuumCup吗? +Holding(Nothing) 你能帮我把"Nothing"拿在手里吗? +Holding(Nothing) 您好!作为您的机器人服务员,我会尽力满足您的要求。请问您需要我帮忙做什么呢? +On(Coffee,Bar) 当然可以!请问您想要什么口味的咖啡呢? +On(Coffee,Bar) 请给我一杯咖啡,并将其送到吧台。 +On(Coffee,WaterTable) 当然可以,请告诉我您想喝的咖啡口味,我会为您制作一杯美味的咖啡,然后将其送到WaterTable桌旁。 +On(Coffee,WaterTable) 请给我一杯咖啡,并将其送到 WaterTable 那里。 +On(Coffee,CoffeeTable) 您好,我是一名机器人服务员。我能为您制作一杯咖啡,并将其端到CoffeeTable上吗? +On(Coffee,CoffeeTable) 请给我一杯咖啡,并把它送到Coffee Table那里。 +On(Coffee,Bar2) 当然可以,请告诉我您想要什么口味的咖啡,我会为您制作并在准备好后把咖啡端到Bar 2。 +On(Coffee,Bar2) 请给我一杯咖啡,并将其送到Bar2。 +On(Coffee,Table1) 当然可以!请问您需要什么口味的咖啡呢? +On(Coffee,Table1) 请给我一杯咖啡,并将其送到Table1。 +On(Coffee,Table2) 您好,机器人服务员!我想要一杯咖啡,并希望它能够被送到 Table 2。 +On(Coffee,Table2) 请为我准备一杯咖啡,并将其送到Table 2。 +On(Coffee,Table3) 您好,机器人服务员!请问您能帮我制作一杯咖啡,然后将其端到Table 3吗?谢谢! +On(Coffee,Table3) 请为我准备一杯咖啡,并将其送到Table 3。 +On(Water,Bar) 您好,我需要一杯水,请能帮我制作并送到酒吧处谢谢! +On(Water,Bar) 我需要一杯水,并希望它能够被送到酒吧区域。 +On(Water,WaterTable) 您好,我需要一杯水,并将它送到水桌子上。 +On(Water,WaterTable) 请为我准备一些水,并将其送到水桌 here。 +On(Water,CoffeeTable) 您好,我需要一杯水,并将它送到咖啡桌 here。 +On(Water,CoffeeTable) 请给我倒一杯水,然后将其放在咖啡桌子上。 +On(Water,Bar2) 当然可以!请问您在哪个咖啡厅?我想请您把水送到 Bar 2。 +On(Water,Bar2) 我需要一杯水,并希望它能够被送到Bar2那里。 +On(Water,Table1) 您好,我是一名机器人服务员。请问您需要什么帮助? +On(Water,Table1) 请给我一杯水,并将其送到Table1位置。 +On(Water,Table2) 当然可以!请问您需要什么温度的水呢?并且您想要在哪个桌子上 receiving 水呢? +On(Water,Table2) 请给我倒一杯水,并把水送到Table 2那里。 +On(Water,Table3) 您好,机器人服务员!请问您能给我准备一杯水,然后将其送到 Table 3 位置吗?谢谢! +On(Water,Table3) 请给我倒一杯水,并将其送到 Table 3 桌子上。 +On(Dessert,Bar) 您好,我需要一份甜点并将其送到吧台。 +On(Dessert,Bar) 请送一些甜点来,并将其送到吧台处。 +On(Dessert,WaterTable) 您好,我需要一份甜点,并希望它能够被送到名为"WaterTable"的水 table 那里。 +On(Dessert,WaterTable) 请为我准备一些甜点,并将它送到watertable来。 +On(Dessert,CoffeeTable) 您好,我是一名机器人服务员。我能为您制作甜点,并将其送到咖啡桌旁边。请问您想点什么类型的甜点呢? +On(Dessert,CoffeeTable) 请为我准备一些甜点,并将其送到咖啡桌这里。 +On(Dessert,Bar2) 您好,我需要一份甜点,并希望它能够被送到酒吧2。 +On(Dessert,Bar2) 请为我准备一些甜点,并将其送到Bar2。 +On(Dessert,Table1) 您好,机器人服务员!我想要一份甜点,并希望它能够被送到Table1那里。 +On(Dessert,Table1) 请为我准备一些甜点,并将其送到Table1。 +On(Dessert,Table2) 您好,我是一名机器人服务员。我能为您制作甜点并将它送到Table 2吗? +On(Dessert,Table2) 请给我上甜点,并将它送到Table2那里。 +On(Dessert,Table3) 您好,机器人服务员!请问您能帮我制作一份甜点并将其送到Table 3吗? +On(Dessert,Table3) 请为我准备一些甜点,并将其送到Table3桌子上。 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output1.txt b/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output1.txt new file mode 100644 index 0000000..ddbd385 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output1.txt @@ -0,0 +1,388 @@ +At(Robot,Bar) 嘿,来酒吧了啊? +At(Robot,Bar) 你可以去前台一下吗? +At(Robot,Bar) 当然可以,我可以过去帮忙吗? +At(Robot,WaterTable) 哎呀,你终于出现了啊!赶紧过来坐一下,我给你倒杯茶水。 +At(Robot,WaterTable) 嘿,你能帮我再去茶水桌那儿拿一下水吗? +At(Robot,WaterTable) 当然可以啊,我马上就去茶水桌那儿。 +At(Robot,CoffeeTable) 哎呀,你终于出现了啊!赶紧过来坐一下,我给你倒杯咖啡。 +At(Robot,CoffeeTable) 你可以去 coffee table 一下哦。 +At(Robot,CoffeeTable) 当然可以呀!你可以去咖啡桌的那边坐下来,我就在这边的桌子旁陪着你。 +At(Robot,Bar2) 好的,我可以到另一个吧台帮忙吗? +At(Robot,Bar2) 你可以去另一个酒吧台坐坐吗? +At(Robot,Bar2) 当然可以,您想让我去哪个吧台呢? +At(Robot,Table1) 好的,我來試著把第一張桌子搬起來。 +At(Robot,Table1) 你可以去第一桌啊,那里的东西比较好吃。 +At(Robot,Table1) 当然可以,你可以帮我稳住身体,然后我就能过去坐在第一张桌子上啦! +At(Robot,Table2) 请把第二桌子的东西拿过来。 +At(Robot,Table2) 你可以去第二桌啊。 +At(Robot,Table2) 当然可以,你想去哪一张桌子呢? +At(Robot,Table3) 好的,我马上去拿第三张桌子。 +At(Robot,Table3) 请你到第三桌子上坐一下。 +At(Robot,Table3) 当然可以,移到第三张桌子那边怎么样? +On(Softdrink,Bar) 请把饮料放到酒吧柜台上。 +On(Softdrink,Bar) 嘿,能帮我拿一下饮料吗?放到酒吧台上谢谢! +On(Softdrink,WaterTable) 你可以把软饮放在茶水桌那个地方哦。 +On(Softdrink,WaterTable) 你可以把饮料放到茶水桌那儿呀。 +On(Softdrink,CoffeeTable) 你可以把饮料放在咖啡桌那个地方呀。 +On(Softdrink,CoffeeTable) 你可以把饮料放到咖啡桌附近呀。 +On(Softdrink,Bar2) 请你把饮料放在另一个酒吧台的位置。 +On(Softdrink,Bar2) 请帮我从一个酒吧台拿杯饮料,放到另一个酒吧台吧。 +On(Softdrink,Table1) 请你把饮料放在第一桌的位子上面。 +On(Softdrink,Table1) 请把饮料放到第一桌的位子上。 +On(Softdrink,Table2) 请你把饮料放到第二桌那个地方。 +On(Softdrink,Table2) 请你把饮料放到第二桌的位置。 +On(Softdrink,Table3) 请你把饮料放到第三桌那个地方。 +On(Softdrink,Table3) 请给我一瓶饮料,放到第三桌子上。 +On(BottledDrink,Bar) 请把瓶装饮料放到酒吧那个地方。 +On(BottledDrink,Bar) 你可以把瓶装饮料放到酒吧台面上。 +On(BottledDrink,WaterTable) 你可以把瓶装饮料放在茶水桌那个地方呀。 +On(BottledDrink,WaterTable) 请把瓶装饮料放到茶水桌那儿吧。 +On(BottledDrink,CoffeeTable) 把瓶装饮料放到咖啡桌那个地方吧。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料放到咖啡桌附近。 +On(BottledDrink,Bar2) 请把瓶装饮料放 到另一个酒吧那个地方。 +On(BottledDrink,Bar2) 你可以把瓶装饮料拿到另一个酒吧台的位置。 +On(BottledDrink,Table1) 请把瓶装饮料放在第一桌的相应位置。 +On(BottledDrink,Table1) 请你把瓶装饮料放到第一桌子的位置。 +On(BottledDrink,Table2) 请你把瓶装饮料放到第二大桌子的那个位置。 +On(BottledDrink,Table2) 请您把瓶装饮料放到第二桌的位置。 +On(BottledDrink,Table3) 请把瓶装饮料放到第三桌的那一边。 +On(BottledDrink,Table3) 请您把瓶装饮料放到第三桌子上。 +On(Yogurt,Bar) 把酸奶放在吧台那个位置。 +On(Yogurt,Bar) 请把酸奶放到吧台哦! +On(Yogurt,WaterTable) 把酸奶放到茶水桌那个地方哦。 +On(Yogurt,WaterTable) 你可以把酸奶放到茶水桌附近呀。 +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌那个地方。 +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌附近。 +On(Yogurt,Bar2) 请你把酸奶放到另一个吧台那个位置。 +On(Yogurt,Bar2) 请把酸奶放到另一个台子的位置吧。 +On(Yogurt,Table1) 请把酸奶放在第一桌的位置哦! +On(Yogurt,Table1) 请把酸奶放到第一桌的位置。 +On(Yogurt,Table2) 请把酸奶放到第二桌那个位置哦! +On(Yogurt,Table2) 你可以把酸奶放到第二桌的位置呀。 +On(Yogurt,Table3) 请把酸奶放到第三桌的那儿吧。 +On(Yogurt,Table3) 请你把酸奶放到第三桌子上。 +On(ADMilk,Bar) 把AD钙奶放到吧台那个地方。 +On(ADMilk,Bar) 请把AD钙奶放到吧台哦! +On(ADMilk,WaterTable) 好的,我帮你把AD钙奶放到茶水桌那个地方。 +On(ADMilk,WaterTable) 你可以把AD钙奶放到茶水桌附近呀。 +On(ADMilk,CoffeeTable) 好的,AD钙奶就放在咖啡桌那个地方吧。 +On(ADMilk,CoffeeTable) 你可以把AD钙奶放到咖啡桌旁边呀。 +On(ADMilk,Bar2) 你能否把AD钙奶放到另一个吧台的位置呢? +On(ADMilk,Bar2) 你可以把AD钙奶放到另一个酒吧台的位置上。 +On(ADMilk,Table1) 请把AD钙奶放到第一桌的位子上面。 +On(ADMilk,Table1) 请把AD钙奶放到第一桌的位置。 +On(ADMilk,Table2) 请把AD钙奶放到第二桌的那儿吧。 +On(ADMilk,Table2) 请把AD钙奶放到第二桌的位置。 +On(ADMilk,Table3) 请把AD钙奶放到第三桌的那儿吧。 +On(ADMilk,Table3) 请把AD钙奶放到第三桌子的位置。 +On(MilkDrink,Bar) 把牛奶饮料放到吧台那个地方。 +On(MilkDrink,Bar) 你可以把牛奶饮料拿到吧台前面。 +On(MilkDrink,WaterTable) 你可以把牛奶饮料放在茶水桌那个地方哦。 +On(MilkDrink,WaterTable) 你可以把牛奶饮料放到茶水桌附近呀。 +On(MilkDrink,CoffeeTable) 你可以把牛奶放到了咖啡桌那个地方哦。 +On(MilkDrink,CoffeeTable) 请你把牛奶饮料放到咖啡桌附近呀。 +On(MilkDrink,Bar2) 请你把牛奶饮料放到另一个吧台那个位置,好吗? +On(MilkDrink,Bar2) 请把牛奶饮料放到另一个酒吧台的位置。 +On(MilkDrink,Table1) 请把牛奶放第一桌的位置哦! +On(MilkDrink,Table1) 请把牛奶饮料放到第一桌的位子上。 +On(MilkDrink,Table2) 你可以把牛奶放 到这张桌子的第二個位置。 +On(MilkDrink,Table2) 请你把牛奶饮料放到第二桌的位置。 +On(MilkDrink,Table3) 请你把牛奶放到第三桌的那儿吧。 +On(MilkDrink,Table3) 请你把牛奶饮料放到第三桌子上。 +On(Milk,Bar) 请把牛奶放到吧台那个地方。 +On(Milk,Bar) 请把牛奶放到吧台的位置哦。 +On(Milk,WaterTable) 你可以把牛奶放到茶水桌那个地方哦。 +On(Milk,WaterTable) 请你把牛奶放到茶水桌那个地方。 +On(Milk,CoffeeTable) 你可以把牛奶放在咖啡桌上的那个地方哦。 +On(Milk,CoffeeTable) 你可以把牛奶放到咖啡桌旁边呀,这样就能方便地喝牛奶了。 +On(Milk,Bar2) 请你把牛奶放到另一个吧台那个位置。 +On(Milk,Bar2) 你可以把牛奶放过去一点。 +On(Milk,Table1) 请把牛奶放到第一桌子的位置。 +On(Milk,Table1) 请你把牛奶放到第一桌的位置。 +On(Milk,Table2) 请把牛奶放到第二桌子的那个位置哦! +On(Milk,Table2) 请你把牛奶放到第二桌的位置。 +On(Milk,Table3) 你可以把牛奶放 third table 的那个位置哦! +On(Milk,Table3) 请把牛奶放到第三桌子上。 +On(VacuumCup,Bar) 请把保温杯放 到吧台那个地方。 +On(VacuumCup,Bar) 你可以把保温杯放到吧台哦。 +On(VacuumCup,WaterTable) 请把保温杯放茶水桌那个地方哦。 +On(VacuumCup,WaterTable) 请你把保温杯放到茶水桌那儿。 +On(VacuumCup,CoffeeTable) 你可以把你的保温杯放到咖啡桌那个地方呀。 +On(VacuumCup,CoffeeTable) 请把保温杯放到咖啡桌那里。 +On(VacuumCup,Bar2) 你可以把保温杯放到另一个吧台那个地方呀。 +On(VacuumCup,Bar2) 你可以把保温杯放到另一个酒吧台的位置呀。 +On(VacuumCup,Table1) 请把保温杯放到第一桌子的那个位置。 +On(VacuumCup,Table1) 请把保温杯放到第一桌子的位置。 +On(VacuumCup,Table2) 请把保温杯放到第二桌子的那个位置。 +On(VacuumCup,Table2) 你可以把保温杯放到第二桌子的地方。 +On(VacuumCup,Table3) 请把保温杯放到了第三张桌子的那个地方。 +On(VacuumCup,Table3) 请把保温杯放到第三桌子的地方。 +Is(AC,0) 当然可以,您想什么时候关呢? +Is(AC,1) 当然可以,我马上为您打开空调。 +Is(ACTemperature,0) 当然可以!你把空调的温度调高一点吗? +Is(ACTemperature,1) 可以啊,您要把空调的温度调低一些吗? +Is(HallLight,0) 当然可以,我马上为您关掉大厅的灯。 +Is(HallLight,1) 当然可以,我马上为你开启大厅的灯光。 +Is(TubeLight,0) 当然可以,你只需按一下筒灯的开关按钮即可。 +Is(TubeLight,1) 当然可以,请告诉我你想要多亮度的筒灯呢? +Is(Curtain,0) 好的,我马上帮您关窗帘。 +Is(Curtain,1) 当然可以,您想让阳光照进房间吗? +Is(Chairs,0) 当然可以,把椅子弄脏一点没问题。不过要注意,我是一个人工智能助手,虽然可以理解您的请求,但实际操作能力有限,可能不能非常完美地完成这个任务。 +Is(Chairs,1) 当然可以,亲爱的。把椅子擦干净需要一些努力和耐心,但我会帮您做得干干净净的。 +Is(Floor,0) 你能把地板弄脏一点吗? +Is(Floor,1) 能帮我打扫下地板吗? +Is(Table1,0) 第一,你可以把桌子弄脏一点。 +Is(Table1,1) 当然可以,你想要我尽快完成这个任务吗? +Holding(Softdrink) 你能抓住软饮吗? +Holding(Softdrink) 你能不能一直拿着软饮呢? +Holding(BottledDrink) 能抓住瓶装饮料吗?当然可以啊! +Holding(BottledDrink) 你能一直拿着瓶装饮料吗?当然可以啊,只要喜欢喝 bottled water 或者饮料,就可以一直拿着瓶装饮料。不过要注意保持卫生,不要让瓶子变得太脏或者有细菌。如果觉得手持瓶装饮料不方便,也可以选择使用杯子或者其他更方便的容器来盛放饮料。 +Holding(Yogurt) 您可以把酸奶捏在手里,就像您捏着冰淇淋一样。 +Holding(Yogurt) 嗯,我可以理解你想要一直吃酸奶的想法,但是要注意不要过量食用。酸奶是非常健康的食品,富含蛋白质和钙质,对身体有很多好处。不过,每个人的身体状况和需求不同,所以要根据自己的实际情况来适量食用。如果你想要更好地享受酸奶的好处,可以尝试搭配一些水果或者坚果,让口感更丰富多彩。 +Holding(ADMilk) 你能捧起一罐AD钙奶吗? +Holding(ADMilk) 你能不能一直拿着AD钙奶呀? +Holding(MilkDrink) 你能把牛奶饮料抓在手里啊? +Holding(MilkDrink) 你能一直拿著牛奶 drink 嗎? +Holding(Milk) 哈哈,当然可以啦!你可以把牛奶抓在手里,就像你抓住一个球一样。不过要小心,不要让牛奶洒出来哦! +Holding(Milk) 嘿,你可以一直拿着牛奶,不过我得提醒你,牛奶保质期短,不要喝坏掉的哦! +Holding(VacuumCup) 你能 hand 住保温杯 吗? +Holding(VacuumCup) 你能不能一直拿著保温杯呢? +Holding(Nothing) 哈哈,把"nothing"抓在手里啊。这个表达好像不太对哦,英文里"nothing"是指没有任何东西的意思,不能被抓住。你是要问如何应对"无所适从"的情况吗?可以理解为"nothing happens"或者"没有什么事情发生"。 +Holding(Nothing) 当然可以!如果你觉得需要一直拿着某个东西,那完全可以。 +On(Coffee,Bar) 当然可以!请问您需要什么口味的咖啡呢?我可以为您制作一杯美味的咖啡,然后端到吧台供您享用。 +On(Coffee,Bar) 嘿,老板,能不能给我弄杯咖啡,然后把咖啡杯拿到吧台上来? +On(Coffee,WaterTable) 当然可以!我马上为您制作一杯香浓的咖啡,然后端到茶水桌上来。 +On(Coffee,WaterTable) 好的,主人。请给我来杯咖啡,然后把咖啡端到茶水桌这里来。谢谢! +On(Coffee,CoffeeTable) 当然可以!我马上为您制作一杯香浓的咖啡,然后端到咖啡桌上来。 +On(Coffee,CoffeeTable) 好的,主人。请给我一杯咖啡,然后把咖啡端到这个咖啡桌上来,谢谢! +On(Coffee,Bar2) 当然可以!我马上为您制作一杯咖啡,然后端到这个吧台这里来。 +On(Coffee,Bar2) 好的,我给你拿杯咖啡,放在另一个吧台给你。 +On(Coffee,Table1) 当然可以!我马上为您制作一杯咖啡,然后端到第一张桌子上来。 +On(Coffee,Table1) 请给我拿杯咖啡,然后把它放到这张桌子的位置上。 +On(Coffee,Table2) 当然可以!你想要什么口味的咖啡呢?然后我就可以把咖啡端到你所在的桌子了。 +On(Coffee,Table2) 嘿,老板,我想喝杯咖啡,然后你能把它端到这里来吗? +On(Coffee,Table3) 当然可以!请问您需要什么口味的咖啡呢?我好准备给您制作。 +On(Coffee,Table3) 嘿,老板,能不能给我来杯咖啡?然后把咖啡端到这张桌子的 third 位置上来,谢谢! +On(Water,Bar) 当然可以!您可以告诉我您需要多少水,然后我会给您端过来。 +On(Water,Bar) 好的,我给您倒杯水,然后就放在吧台这里。 +On(Water,WaterTable) 当然可以!请问您需要我怎么制作水呢? +On(Water,WaterTable) 好的,我给你倒杯水,然后把它放在茶水桌上。 +On(Water,CoffeeTable) 当然可以!我立刻为您制作一杯水,然后把它端到咖啡桌上来。请问您需要加些什么其他的配料呢? +On(Water,CoffeeTable) 好的,主人,请给我倒杯水,然后把水端到咖啡桌上来,谢谢! +On(Water,Bar2) 当然可以!我马上为您制作一杯水,然后端到这里来。 +On(Water,Bar2) 好的,请给我倒一杯水,然后把它端到这个吧台这里来。 +On(Water,Table1) 当然可以!请问你需要多少水呢?我一会儿就去烧开水,然后把它端到第一张桌子上。 +On(Water,Table1) 好的,我给你倒杯水,然后把它放在第一桌子上。 +On(Water,Table2) 当然可以!我马上给您拿来。 +On(Water,Table2) 能不能给我倒杯水啊?然后把水端到这张桌子的另一边去。 +On(Water,Table3) 当然可以!请您把第三张桌子的位置告诉我,我马上为您制作一杯水送到那儿去。 +On(Water,Table3) 好的,请给我一杯水,然后把它放在第三张桌子上。 +On(Dessert,Bar) 当然可以!我特别擅长制作各种美味的点心、甜品和糕点。如果您需要的话,我可以在吧台为您准备一份精致的小点心或甜品品尝。 +On(Dessert,Bar) 行啊,点些小吃或甜品,然后让它们送到酒吧台这附近来。 +On(Dessert,WaterTable) 你能不能帮我做些点心或甜品,然后把它端到茶水桌这儿呀? +On(Dessert,WaterTable) 好的,请给我点些小吃或甜品,然后把它端到茶水桌这里来。 +On(Dessert,CoffeeTable) 当然可以!我是一个人工智能助手,虽然不能亲自制作点心或甜品,但我可以为您提供各种食谱和做法。您可以根据我的建议,尝试在家自己制作美味的点心或甜品,然后带到咖啡桌分享。这样不仅可以享受美食,还可以一起度过美好时光。 +On(Dessert,CoffeeTable) 行啊,您想尝点什么点心或甜品呢?然后我给您端过来,放在这咖啡桌上。 +On(Dessert,Bar2) 当然可以!我擅长制作各种美味的点心与甜品,可以随时为你端来。请问你需要什么口味或样式的点心呢? +On(Dessert,Bar2) 行啊,点些小吃或甜品,然后给您端过去。 +On(Dessert,Table1) 当然可以,我 ability做点心和甜品,把它们放在桌子上给你吃。 +On(Dessert,Table1) 好的,我给你准备了一些小吃和甜品,现在 brings it to your table.(请注意,这里用 "brings" 代替 "portrays" 以符合口语化的风格。) +On(Dessert,Table2) 当然可以!我可以在第一张桌子上制作点心或甜品,然后把它们端到第二张桌子那里。请问你有什么特别喜欢的点心或甜品口味吗? +On(Dessert,Table2) 好的,主人。请给我提供一些点心或甜品,我会把它们放在第二张桌子上。 +On(Dessert,Table3) 当然可以!我马上为您制作一些美味的点心或甜品,然后 brings it to the third table for you to enjoy. +On(Dessert,Table3) 好的,请问您想点什么种类的点心或甜品呢?然后我会把它们端到第三张桌子上。 +At(Robot,Bar) 好的,那我们来聊聊吧。你想聊什么呢? +At(Robot,Bar) 你去一下bar吧。 +At(Robot,Bar) 你能到那个酒吧的哪个位置吗? +At(Robot,WaterTable) 当然可以! WaterTable 是一个很棒的实时水文气象数据平台。你想了解哪个地区的天气情况呢? +At(Robot,WaterTable) 你去一下WaterTable吧! +At(Robot,WaterTable) 当然可以啊!你想要去哪个地方呢? +At(Robot,CoffeeTable) 嘿,我能去拿一下咖啡桌吗? +At(Robot,CoffeeTable) 你去一下CoffeeTable吧。 +At(Robot,CoffeeTable) 当然可以,我马上就到CoffeeTable那儿。 +At(Robot,Bar2) 好的,我来试试看 Bar 2。 +At(Robot,Bar2) 你能去bar2吗? +At(Robot,Bar2) 当然可以啊,我马上就去Bar2那儿! +At(Robot,Table1) 当然可以!请您提供一下 Table1 的内容,我会尽量用更口语化和合理化的方式来表述它。 +At(Robot,Table1) 嘿,你能不能去一下Table1呢? +At(Robot,Table1) 当然可以呀,我马上就过去。 +At(Robot,Table2) 当然可以!请您提供一下Table2的内容和您想要我为您做什么,我会尽量帮您进行合理的调整和优化。 +At(Robot,Table2) 好的,我去一下Table2。 +At(Robot,Table2) 当然可以,我马上就过去。 +At(Robot,Table3) 当然可以!请问您需要我帮忙做什么呢? +At(Robot,Table3) 嘿,去Table3看看怎么样?可能有新东西哦! +At(Robot,Table3) 当然可以,我马上就到Table3那儿。 +On(Softdrink,Bar) 你可以这样跟Bar说:“嘿,Bar,你能帮我把Softdrink放好吗?谢谢!” +On(Softdrink,Bar) 请把Softdrink拿到Bar那儿。 +On(Softdrink,WaterTable) 你可以把软饮放在水桌那个地方哦。 +On(Softdrink,WaterTable) 你可以把Soft drink拿到水桌的位置呀。 +On(Softdrink,CoffeeTable) 您可以尝试这样说:“嘿,能否帮我把软饮料放在咖啡桌那个位置呀?” +On(Softdrink,CoffeeTable) 你可以把Softdrink拿到CoffeeTable前面啊。 +On(Softdrink,Bar2) 你可以把软饮放在酒吧2的位置。 +On(Softdrink,Bar2) 你可以把Softdrink拿到Bar2的位置呀。 +On(Softdrink,Table1) 你可以把这个软饮料放到表格1的第二行。 +On(Softdrink,Table1) 请把Softdrink放到Table1的位置上。 +On(Softdrink,Table2) 你可以把 Softdrink 放到 Table2 的那个位置哦! +On(Softdrink,Table2) 你可以把Softdrink移到Table2的位置呀。 +On(Softdrink,Table3) 你可以把 Softdrink 放到 Table3 的那个位置哦! +On(Softdrink,Table3) 你可以把Softdrink拿到Table3那里。 +On(BottledDrink,Bar) 请你把Bottled Drink放到Bar那个地方。 +On(BottledDrink,Bar) 请把 bottled drink 拿到 Bar 那里。 +On(BottledDrink,WaterTable) 你能把 bottled drink 放到 water table 那个地方吗? +On(BottledDrink,WaterTable) 你可以把瓶装饮料放到水桌上了吗? +On(BottledDrink,CoffeeTable) 将瓶装饮料放在咖啡桌那个地方。 +On(BottledDrink,CoffeeTable) 你可以把 bottled drink 拿到咖啡桌 (CoffeeTable) 上。 +On(BottledDrink,Bar2) 你能把 "BottledDrink" 放到 "Bar2" 的位置上吗? +On(BottledDrink,Bar2) 请把 bottled drink 拿到 Bar2 的位置。 +On(BottledDrink,Table1) 你可以把"Bottled Drink"放到"Table1"的位置。 +On(BottledDrink,Table1) 请你把瓶装饮料拿到Table1那儿。 +On(BottledDrink,Table2) 你把Bottled Drink放到Table2那个地方吧。 +On(BottledDrink,Table2) 你可以把 bottled drink 拿到 Table 2 那里。 +On(BottledDrink,Table3) 你想把瓶装饮料放在Table3那个地方吗? +On(BottledDrink,Table3) 请把瓶装饮料放到桌子的第三位置。 +On(Yogurt,Bar) 你可以把酸奶放在吧台那个位置哦。 +On(Yogurt,Bar) 嘿,能否帮我拿一下酸奶(Yogurt)到酒吧(Bar)的位置呀? +On(Yogurt,WaterTable) 你可以把酸奶放在水 table 的那个地方。 +On(Yogurt,WaterTable) 你可以把酸奶放到水 table 那里一下吗? +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌那个地方。 +On(Yogurt,CoffeeTable) 你可以把酸奶放到咖啡桌的位置。 +On(Yogurt,Bar2) 把Yogurt放到Bar2那个地方。 +On(Yogurt,Bar2) 你可以把酸奶放到酒吧的第二的位置。 +On(Yogurt,Table1) 请把酸奶放到表格1那个位置哦! +On(Yogurt,Table1) 请你把Yogurt移到Table1的位置上。 +On(Yogurt,Table2) 你可以把酸奶放到表格2那个位置哦。 +On(Yogurt,Table2) 你可以把酸奶放到桌子第二的位置。 +On(Yogurt,Table3) 您可以把酸奶放到表格三那个位置哦。 +On(Yogurt,Table3) 你可以把酸奶放到桌子第三的位置。 +On(ADMilk,Bar) 你能把ADMilk放到Bar那个地方吗? +On(ADMilk,Bar) 你可以把ADMilk放到Bar那里。 +On(ADMilk,WaterTable) 你可以把ADMilk放到WaterTable那个地方。 +On(ADMilk,WaterTable) 你可以把ADMilk放到WaterTable的位置啊。 +On(ADMilk,CoffeeTable) 你可以把ADMilk放到咖啡桌那个地方。 +On(ADMilk,CoffeeTable) 你可以把AD Milk放到咖啡桌旁边呀。 +On(ADMilk,Bar2) 请把ADMilk放到Bar2那个位置哦! +On(ADMilk,Bar2) 你可以把ADMilk放到Bar2的位置呀。 +On(ADMilk,Table1) 请把ADMilk放到Table1那个位置啦! +On(ADMilk,Table1) 能否帮我将ADMilk放到Table1的位置呢? +On(ADMilk,Table2) 你可以把ADMilk放到Table2那个地方哦。 +On(ADMilk,Table2) 你可以把ADMilk放到Table2的位置呀。 +On(ADMilk,Table3) 你能把ADMilk放到Table3那个地方吗? +On(ADMilk,Table3) 你可以把ADMilk放到Table3的位置呀。 +On(MilkDrink,Bar) 你可以这样说:“把牛奶饮料放到酒吧那个位置。” +On(MilkDrink,Bar) 你可以把牛奶带到酒吧位置吗? +On(MilkDrink,WaterTable) 你能将"MilkDrink"放到"WaterTable"的那个地方吗? +On(MilkDrink,WaterTable) 你可以把牛奶放到水桌的位置。 +On(MilkDrink,CoffeeTable) 你好!你可以把"MilkDrink"放到"CoffeeTable"那个地方。 +On(MilkDrink,CoffeeTable) 你可以把牛奶放到咖啡桌上了吗? +On(MilkDrink,Bar2) 你可以把"MilkDrink"放到"Bar2"那个地方。 +On(MilkDrink,Bar2) 请把牛奶饮料拿到酒吧2号位置。 +On(MilkDrink,Table1) 你可以这样跟朋友说:嘿,你知道吗,把"MilkDrink"放到"Table1"那个位置吧! +On(MilkDrink,Table1) 你可以把牛奶带到Table1那里吗? +On(MilkDrink,Table2) 你能把"MilkDrink"放到Table2那个地方吗? +On(MilkDrink,Table2) 你可以把牛奶饮料端到桌子2的位置吗? +On(MilkDrink,Table3) 你好!我明白你的要求,但是我没有找到与“MilkDrink”相关的内容。如果你能提供更多的信息或者上下文,我会更好地帮助你完成任务。 +On(MilkDrink,Table3) 你可以把牛奶带到桌子3去。 +On(Milk,Bar) 你把牛奶放酒吧的位置吧。 +On(Milk,Bar) 你可以帮我把牛奶放到酒吧的位置吗? +On(Milk,WaterTable) 你能帮我把牛奶放到水 table 那个地方吗? +On(Milk,WaterTable) 你可以把牛奶放到水 table 附近吗? +On(Milk,CoffeeTable) 你可以把牛奶放在咖啡桌那个地方。 +On(Milk,CoffeeTable) 你可以把牛奶放到咖啡桌的位置。 +On(Milk,Bar2) 你可以把牛奶放到酒吧2的位置。 +On(Milk,Bar2) 你可以把牛奶放到酒吧的第二個位置。 +On(Milk,Table1) 你可以这样跟Table1说:“Hey Table1, could you please move the Milk to that spot over there?” +On(Milk,Table1) 你可以把牛奶放到桌子的第一位置呀。 +On(Milk,Table2) 请把牛奶放到表2的那个位置。 +On(Milk,Table2) 请你把牛奶放到Table2的位置上。 +On(Milk,Table3) 你可以把牛奶放到表格三那个位置哦。 +On(Milk,Table3) 你可以把牛奶放到桌子的第三格里呀。 +On(VacuumCup,Bar) 你能把VacuumCup放到Bar的位置吗? +On(VacuumCup,Bar) 你可以把吸管杯放到酒吧位置吗? +On(VacuumCup,WaterTable) 你可以尝试这样说:“嘿,把VacuumCup放到WaterTable的位置吧。”这样更加口语化和亲近。 +On(VacuumCup,WaterTable) 你可以把吸尘器杯放在水 table 位置吗? +On(VacuumCup,CoffeeTable) 你可以把吸尘器杯放在咖啡桌那个地方。 +On(VacuumCup,CoffeeTable) 你可以把吸尘器(VacuumCup)放到咖啡桌(CoffeeTable)的位置。 +On(VacuumCup,Bar2) 你能把VacuumCup放到Bar2那个地方吗? +On(VacuumCup,Bar2) 你可以把VacuumCup放到Bar2的地方哦。 +On(VacuumCup,Table1) 你可以把这些内容换成: "把 VacuumCup 放到 Table1 的那个地方"。 +On(VacuumCup,Table1) 你可以把VacuumCup放到Table1的位置呀。 +On(VacuumCup,Table2) 你可以把VacuumCup放到Table2那个地方哦。 +On(VacuumCup,Table2) 你可以把VacuumCup放到Table2那里呀。 +On(VacuumCup,Table3) 你可以把这个吸管杯放到表格3的位置。 +On(VacuumCup,Table3) 你可以把VacuumCup放到Table3的位置呀。 +Is(AC,0) 当然可以,您需要我帮您关闭AC吗? +Is(AC,1) 你好,我能帮你做什么呢?关于打开AC的问题,我可能不太明白你的具体意思。如果你是想打开空调,请告诉我具体是哪个品牌的空调,这样我才能更好地帮助你。 +Is(ACTemperature,0) 当然可以!请告诉我您想将温度调到多少度呢? +Is(ACTemperature,1) 当然可以,你想要把温度调到多少度呢? +Is(HallLight,0) 当然可以,HallLight怎么样了?需要我帮你做些什么吗? +Is(HallLight,1) 当然可以!请问你需要我怎么操作呢? +Is(TubeLight,0) 当然可以!你想要立即关掉TubeLight吗? +Is(TubeLight,1) 当然可以!你只需按住"开”按钮,或在屏幕上点击一下就可以开启TubeLight了。 +Is(Curtain,0) 当然可以,您想关闭窗帘吗? +Is(Curtain,1) 当然可以,curtain(窗帘)打开了。 +Is(Chairs,0) 当然可以,你能把椅子弄脏一点吗? +Is(Chairs,1) 当然可以,你能帮我打扫一下椅子吗? +Is(Floor,0) 当然可以,不过我需要先声明一下,作为人工智能助手,我没有实体形象,所以不能直接去“操作”或“改变”现实环境。但我可以提供一些建议或者指导来帮助你完成任务。如果你想要打扫房间,可以告诉我具体是哪个部位需要清洁,然后我会给你相应的建议和步骤。 +Is(Floor,1) 当然可以,你让我来吧! +Is(Table1,0) 当然可以!不过我需要先了解一下 Table1 包含哪些内容,以及您想要修改的具体是哪方面。这样我才能更好地帮助您进行操作。 +Is(Table1,1) 当然可以,你有什么特别要求吗?比如需要清理什么物品或者怎么清洁? +Holding(Softdrink) 你能不能把soft drink抓在手里啊? +Holding(Softdrink) 你能一直拿着一罐饮料吗? +Holding(BottledDrink) 你能把瓶装饮料抓在手里吗? +Holding(BottledDrink) 你能一直拿着这瓶饮料吗? +Holding(Yogurt) 你能把酸奶抓在手里吗? +Holding(Yogurt) 你能一直抱着羊酸奶吗? +Holding(ADMilk) 你能捧着 AD Milk 吗? +Holding(ADMilk) 你能一直拿着AD Milk吗? + +如果我能一直拿着AD Milk,那我会很开心,因为我很喜欢喝这个品牌的牛奶。不过,我不确定我能否一直拿着它,因为我需要考虑到我的健康和生活方式。 +Holding(MilkDrink) 哦,你是指那个牛奶饮料品牌“MilkDrink”吗?当然可以啊,你可以像拿任何 other 饮料一样拿起它来。 +Holding(MilkDrink) 你好呀!我能一直拿着这个牛奶饮料吗? +Holding(Milk) 你能把牛奶抓在手里吗?当然可以,只要你抓住瓶子或者盒子,就可以把牛奶抓在手里。不过要注意,不要把牛奶撒出来哦! +Holding(Milk) 你能不能一直拿着牛奶呀? +Holding(VacuumCup) 你能把吸尘器杯收入手中吗? +Holding(VacuumCup) 你能一直拿着吸尘器杯吗? +Holding(Nothing) 你能把“nothing”这个单词抓在手里吗? +Holding(Nothing) 当然可以啊!如果你说的“ Nothing”是指没有任何事物或事情的话,那我可以一直保持这样的状态。不过,如果你指的是某个具体的事物或场景,那可能就需要根据实际情况来分析了。 +On(Coffee,Bar) 当然可以!我马上为你制作一杯咖啡,然后端到吧台给你。 +On(Coffee,Bar) 给我倒杯咖啡,然后把它端到酒吧这里来。 +On(Coffee,WaterTable) 当然可以!我马上为你制作一杯咖啡,然后端到水 table 这里来。 +On(Coffee,WaterTable) 好的,我给你倒杯咖啡,然后端到水 table 这里来。 +On(Coffee,CoffeeTable) 当然可以!我为您制作一杯咖啡,然后把它端到咖啡桌那里吧。 +On(Coffee,CoffeeTable) 行吗?能不能帮我倒杯咖啡,然后把咖啡端到咖啡桌上来呀? +On(Coffee,Bar2) 当然可以!我马上为您制作一杯咖啡,然后送到Bar 2那里。请问您喜欢什么口味的咖啡呢? +On(Coffee,Bar2) 好的,我给您准备了一杯咖啡,现在就端到 Bar 2 这里来。 +On(Coffee,Table1) 当然可以!我马上为您制作一杯咖啡,然后端到Table1这里来。请问您喜欢什么口味的咖啡呢? +On(Coffee,Table1) 好的,请给我一杯咖啡,然后把它送到 Table1 这里来,谢谢! +On(Coffee,Table2) 当然可以!我马上为您制作一杯咖啡,然后端到Table2这里来。 +On(Coffee,Table2) 好的,我给你拿杯咖啡,放Table2那里。 +On(Coffee,Table3) 当然可以!我马上为你制作一杯咖啡,然后端到你面前的桌子上。 +On(Coffee,Table3) 行吗?我可以给你拿杯咖啡,然后放到了Table 3这里。 +On(Water,Bar) 当然可以!去吧,我给你端来水。 +On(Water,Bar) 好的,让我给您倒一杯水,然后把它端到酒吧这里来。 +On(Water,WaterTable) 当然可以!我可以帮你制作水,然后把水送到水 table 这里来。 +On(Water,WaterTable) 好的,我给你倒一杯水,然后把它放在水 table 上。 +On(Water,CoffeeTable) 当然可以!我马上为您制作水,并把水端到咖啡桌这里来。 +On(Water,CoffeeTable) 好的,我马上给您倒杯水,然后把水端到咖啡桌这里来。 +On(Water,Bar2) 当然可以!我可以帮你制作水,然后把水端到酒吧2(Bar 2)那里。你需要我马上去做吗? +On(Water,Bar2) 好的,我来给您倒杯水,送到酒吧2怎么样? +On(Water,Table1) 当然可以!请问你需要多少量的水呢?我会尽快为您准备好的。 +On(Water,Table1) 好的,我给你倒一杯水,你想要端到哪个桌子呢? +On(Water,Table2) 当然可以!我马上帮你制作水,然后把它送到 Table2 这里来。 +On(Water,Table2) 好的,我给你倒一杯水,稍等一下。 +On(Water,Table3) 当然可以!我马上帮您把水送到 Table 3 这里来。 +On(Water,Table3) 好的,我给您倒一杯水,稍等一下,我现在就去拿。请问您要放在哪个桌子上呢?是Table 1还是Table 2?还是您想要自己拿杯子接? +On(Dessert,Bar) 你好!当然可以。Dessert(甜点)是餐后享用的食物,有很多美味的选择,比如蛋糕、饼干、布丁等。请问你想制作哪一种甜点呢?我可以帮你准备材料和制作方法。制作完成后,我们可以一起把甜点带到酒吧享用。 +On(Dessert,Bar) 请给我一点甜点,然后把它送到酒吧这里来。 +On(Dessert,WaterTable) 你能否把甜点做好,然后拿到水 table 那里去呢? +On(Dessert,WaterTable) 好的,我给您准备了一些甜点,现在就端到水 table 这里来。您觉得怎么样? +On(Dessert,CoffeeTable) 当然可以!我给您制作一些甜点,然后拿到咖啡桌上去吧。请问您想尝试哪种甜点呢? +On(Dessert,CoffeeTable) 行啊,那给我来点甜点,然后把它放到咖啡桌子上。 +On(Dessert,Bar2) 当然可以!我会做一些美味的甜点,然后带到酒吧2(Bar 2)来。您想尝尝吗? +On(Dessert,Bar2) 好的,我给你准备了一些甜点,现在就端到你所在的酒吧2。 +On(Dessert,Table1) 当然可以!我马上为您制作甜点,然后把它端到Table1这里来。 +On(Dessert,Table1) 好的,我给您准备了一些美味的甜点,现在 bring it to Table1 这里。 +On(Dessert,Table2) 当然可以!我马上为您制作甜点,然后端到Table2这里来。 +On(Dessert,Table2) 好的,我给你准备了一些甜点,现在端到你面前的桌子上。 +On(Dessert,Table3) 当然可以!我马上为您制作甜点,然后把它送到Table3这里来。 +On(Dessert,Table3) 好的,我给你准备了一些甜点,现在就端到你面前的桌子上。 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output2.txt b/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output2.txt new file mode 100644 index 0000000..9c06989 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/expansion_out/output2.txt @@ -0,0 +1,57 @@ +At(Robot,Bar) 请问您需要什么帮助吗?我就在吧台附近,能否请您自己过来呢? +At(Robot,Bar) 请问你能去一下吧台吗? +At(Robot,Bar) 请问你能帮我到吧台那个位置吗? +At(Robot,WaterTable) 请问你能过来一下吗?我正在茶水桌旁。 +At(Robot,WaterTable) 请问你可以去茶水桌一下吗? +At(Robot,WaterTable) 你能带路去茶水桌吗? +At(Robot,CoffeeTable) 请问你可以过来一下吗?我在这张咖啡桌旁边。 +At(Robot,CoffeeTable) 请问你可以帮我一下,去一下咖啡桌吗? +At(Robot,CoffeeTable) 请问你能帮我前往咖啡桌那个位置吗? +At(Robot,Bar2) 您好,请问您需要什么帮助吗?我正在另一个吧台处理一些事情。 +At(Robot,Bar2) 请问你可以去一下另一个吧台吗? +At(Robot,Bar2) 你能去另一个吧台的位置吗? +At(Robot,Table1) 请问你能过来一下吗?我目前在第一桌,需要你的帮助。 +At(Robot,Table1) 请问你能去一下第一桌吗? +At(Robot,Table1) 请问你能帮我到第一张桌子那个位置吗? +At(Robot,Table2) 请问您能过来一下吗?我正在第二张桌子这里。 +At(Robot,Table2) 请问你可以去第二张桌子一下吗? +At(Robot,Table2) 请问你能帮我前往第二桌吗? +At(Robot,Table3) 请问你能过来一下吗?我正在第三张桌子旁。 +At(Robot,Table3) 请问你能去第三张桌子一下吗? +At(Robot,Table3) 你能告诉我第三张桌子的位置在哪里吗? +On(Softdrink,Bar) 您好,请问您需要我帮您把盒装冰红茶放到哪个位置呢? +On(Softdrink,Bar) 服务员,能否帮我拿来一盒冰红茶放到吧台呢? +On(Softdrink,WaterTable) 您好,请问您需要我帮忙将盒装冰红茶放到哪个位置吗? +On(Softdrink,WaterTable) 服务员,能否帮我把盒装冰红茶拿到茶水桌呢? +On(Softdrink,CoffeeTable) 请问你能把盒装冰红茶放到咖啡桌那个位置吗? +On(Softdrink,CoffeeTable) 服务员,把盒装冰红茶拿到咖啡桌 position 好吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶放到另一个吧台的位置吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶拿到另一个吧台位置吗? +On(Softdrink,Table1) 请问您能否把盒装冰红茶放在第一桌的指定位置呢? +On(Softdrink,Table1) 请您把盒装冰红茶拿到第一桌的位置。 +On(Softdrink,Table2) 服务员,您好,请问能否帮我將這盒裝冰红茶放 到第二張桌子那個位置呢? +On(Softdrink,Table2) 服务员,请把盒装冰红茶拿到第二张桌子的位置。 +On(Softdrink,Table3) 请问你可以把盒装冰红茶放到第三张桌子的那个位置吗? +On(Softdrink,Table3) 请问你能把盒装冰红茶拿到第三张桌子的位置吗? +On(BottledDrink,Bar) 您好,请问您需要我将瓶装饮料放到哪个位置呢? +On(BottledDrink,Bar) 请把瓶装饮料拿到吧台的位置。 +On(BottledDrink,WaterTable) 请问你可以把瓶装饮料放到茶水桌那个位置吗? +On(BottledDrink,WaterTable) 请问你能把瓶装饮料拿到茶水桌位置吗? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料放在咖啡桌那个位置呢? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料拿到咖啡桌附近呢? +On(BottledDrink,Bar2) 请问你能把瓶装饮料放到另一个吧台的那个位置吗? +On(BottledDrink,Bar2) 请把瓶装饮料拿到另一个吧台位置。 +On(BottledDrink,Table1) 请问您能否帮我將瓶裝飲料放至第一張桌子的那個位置呢? +On(BottledDrink,Table1) 请问你能把瓶装饮料拿到第一桌的位置吗? +On(BottledDrink,Table2) 请问,你可以把瓶装饮料放到第二张桌子的那个位置吗? +On(BottledDrink,Table2) 请问你能把瓶装饮料拿到第二张桌子的位置吗? +On(BottledDrink,Table3) 请问,你能把瓶装饮料放到第三桌的哪个位置吗? +On(BottledDrink,Table3) 请问你能把瓶装饮料拿到第三张桌子的位置吗? +On(Yogurt,Bar) 请问你能把酸奶放到吧台那个位置吗? +On(Yogurt,Bar) 请问你能把酸奶拿到吧台位置吗? +On(Yogurt,WaterTable) 请问你能把酸奶放到茶水桌那个位置吗? +On(Yogurt,WaterTable) 服务员,请把酸奶拿到茶水桌的位置。 +On(Yogurt,CoffeeTable) 请问,你能把酸奶放在咖啡桌那个位置吗? +On(Yogurt,CoffeeTable) 服务员,能否把酸奶拿到咖啡桌的位置呢? +On(Yogurt,Bar2) 请问你能把酸奶放到另一个吧台的那个位置吗? +On(Yogurt,Bar2) 请问你能把酸奶拿到另一个吧台位置吗? diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_state_similarity_match.py b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_state_similarity_match.py new file mode 100644 index 0000000..58c6d67 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_state_similarity_match.py @@ -0,0 +1,172 @@ +import copy +import re +import spacy +nlp_en = spacy.load('en_core_web_lg') + +reply = "at(coffee,Table)" +# 正则表达式 +replay_words = re.sub(r'[^A-Za-z0-9]', ' ', reply) +replay_words = replay_words.split() #['at','coffee','Table'] + +noun_words_ls = [['At','On','Is'],[]]# 完整文档n*2(动作,单词) +together_words_ls = [] +# 示例代码:如何使用Python逐行读取txt文件 +# 打开一个示例的txt文件(这里假设文件名为example.txt) +file_path = './goal_states_unique.txt' +try: + with open(file_path, 'r', encoding='utf-8') as file: + # 逐行读取文件 + for line in file: + cleaned_line = re.sub(r'[^A-Za-z0-9]', ' ', line) + words = cleaned_line.split() + # print(words) + noun_words_ls[-1].extend(words) + # print(line.strip()) # 打印每一行内容,去除行尾的换行符 + + cleaned_line = line.replace("{", "").replace("}", "").replace("\n", "") + together_words_ls.append(cleaned_line) + +except FileNotFoundError: + print(f"File not found: {file_path}") +except Exception as e: + print(f"An error occurred: {e}") + + +# 建立语料库 + +file_path = './goal_states_unique.txt' +try: + with open(file_path, 'r', encoding='utf-8') as file: + # 逐行读取文件 + for line in file: + cleaned_line = re.sub(r'[^A-Za-z0-9]', ' ', line) + words = cleaned_line.split() + # print(words) + noun_words_ls[-1].extend(words) + # print(line.strip()) # 打印每一行内容,去除行尾的换行符 + + cleaned_line = line.replace("{", "").replace("}", "").replace("\n", "") + together_words_ls.append(cleaned_line) + +except FileNotFoundError: + print(f"File not found: {file_path}") +except Exception as e: + print(f"An error occurred: {e}") + + + +# import datetime +# from gensim.models import word2vec +# import numpy as np +# from scipy import spatial +# pre_time=datetime.datetime.now() +# model = word2vec.Word2Vec(together_words_ls, +# vector_size=10,#特征向量的维度 +# alpha=0.04,#学习率 +# window=5,#一个句子内,当前词和预测词之间的最大距离 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近 +# min_count=0,#最低词频 没有大的变化 +# max_vocab_size=None, +# sample=0.0001, #随机下采样的阈值 +# seed=1,#随机数种子 +# workers=10,#进程数 +# min_alpha=0.00001,#学习率下降的最小值 +# sg=1, #训练算法的选择,sg=1,采用skip-gram,sg=0,采用CBOW---skip-gram(慢、对罕见字有利)vs CBOW(快) +# hs=1,# hs=1,采用hierarchica·softmax,hs=0,采用negative sampling +# #分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利) +# negative=0,#这个值大于0,使用negative sampling去掉'noise words'的个数(通常设置5-20);为0,不使用negative sampling +# #cbow_mean=1,#为0,使用词向量的和,为1,使用均值;只适用于cbow的情况 +# null_word = 0, +# trim_rule = None, #裁剪词汇规则,使用None(会使用最小min_count) +# sorted_vocab =1,#对词汇降序排序 +# batch_words = 8192,#训练时,每一批次的单词数量 +# compute_loss = False, +# callbacks = ()) +# model.train(together_words_ls, total_examples=len(together_words_ls), epochs=10) +# model.save("./W2V_CI.model") # 保存模型 +# post_time=datetime.datetime.now() +# print("word2vec模型训练保存结束,时间为: ",(post_time-pre_time).seconds*1.0)#1106.0s +# +# w2v_model = word2vec.Word2Vec.load("./W2V_CI.model") +# # w2v_model[word] +# +# def replay_together_w2v(reply): +# return model.wv.most_similar(reply) +# # max_similarity = -1 +# # similar_word = None +# # query_token = w2v_model[reply] +# # for state in together_words_ls: +# # word_token = w2v_model[state] +# # # 计算余弦相似度. spatial.distance.cosine 函数计算的是余弦距离 +# # # 余弦相似度(Cosine similarity),如在 Word2Vec 模型中用来比较两个向量的相似性,其值的范围是 -1 到 1。 +# # similarity = 1 - spatial.distance.cosine(query_token, word_token) +# # # print("similarity:",similarity,real_obj_name) +# # if similarity > max_similarity: +# # max_similarity = similarity +# # similar_word = state +# # if similar_word==None: +# # print("Error: Not Match!") +# # else: +# # return similar_word + + + +def replay_one_by_one(replay_words): + replace_ind = [] + replace_word = [] + for i,word in enumerate(replay_words): + query_token = nlp_en(word) + k=1 + if i==0: k=0 + if not word in noun_words_ls[k]: + max_similarity = 0 + similar_word = None + for act in noun_words_ls[k]: + word_token = nlp_en(act) + # print(act) + # print(word_token) + similarity = query_token.similarity(word_token) + # print("similarity:",similarity,real_obj_name) + if similarity > max_similarity: + max_similarity = similarity + similar_word = act + if similar_word==None: + print("Error: Not Match!") + else: + replay_words[i]=similar_word + # replace_word.append(similar_word) + # replace_ind.append(i) + new_replay = f'{replay_words[0]}({replay_words[1]},{replay_words[2]})' + return new_replay + + # print(replace_word) + # print(replace_ind) + # replace_word = ['on','Table1'] + # replace_ind = [0,2] + # 替换reply中单词 + # for new_word,ind in zip(replace_word,replace_ind): + # 把第 ind 个单词替换成 new_word + +def replay_together(reply): + max_similarity = 0 + similar_word = None + query_token = nlp_en(reply) + for state in together_words_ls: + word_token = nlp_en(state) + similarity = query_token.similarity(word_token) + # print("similarity:",similarity,real_obj_name) + if similarity > max_similarity: + max_similarity = similarity + similar_word = state + if similar_word==None: + print("Error: Not Match!") + else: + return similar_word + +print("原来的:",reply) +new_replay = replay_one_by_one(copy.deepcopy(replay_words)) +print("逐个比较后的现在的:",new_replay) +new_replay2 = replay_together(copy.deepcopy(reply)) +print("集体比较后的现在的:",new_replay2) +# new_replay3 = replay_together_w2v(copy.deepcopy(reply)) +# print("W2V比较后的现在的:",new_replay3) + diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states.txt b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states.txt new file mode 100644 index 0000000..a29c86d --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states.txt @@ -0,0 +1,3250 @@ +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,Bar)} +{At(Robot,Bar)} +{At(Robot,Table1)} +{At(Robot,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(ADMilk,Bar)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Table1)} +{On(MilkDrink,Table1)} +{On(Yogurt,BrightTable6)} +{On(Water,Bar2)} +{On(Dessert,Table1)} +{On(Bernachon,Table2)} +{On(Dessert,Bar2)} +{On(Chips,Table1)} +{On(ADMilk,BrightTable6)} +{On(NFCJuice,Bar)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,CoffeeTable)} +{On(Water,Bar)} +{On(Softdrink,Bar)} +{On(MilkDrink,Table2)} +{On(Dessert,BrightTable6)} +{On(BottledDrink,Bar)} +{On(Bernachon,Bar)} +{On(Chips,WaterTable)} +{On(Bernachon,Table2)} +{On(NFCJuice,WaterTable)} +{On(Chips,Table2)} +{On(Coffee,Table1)} +{On(Water,Table2)} +{On(Yogurt,Bar)} +{On(Dessert,BrightTable6)} +{On(BottledDrink,Bar)} +{On(Coffee,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(Coffee,Bar)} +{On(Yogurt,WaterTable)} +{On(Water,Bar)} +{On(VacuumCup,Table1)} +{On(Softdrink,CoffeeTable)} +{On(SpringWater,Table2)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Table3)} +{On(MilkDrink,Table1)} +{On(MilkDrink,WaterTable)} +{On(Water,CoffeeTable)} +{On(Coffee,CoffeeTable)} +{On(SpringWater,Bar2)} +{On(Coffee,WaterTable)} +{On(MilkDrink,Bar)} +{On(Milk,Bar)} +{On(Water,BrightTable6)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,BrightTable6)} +{On(MilkDrink,Table2)} +{On(NFCJuice,Bar)} +{On(Milk,Table1)} +{On(Chips,WaterTable)} +{On(BottledDrink,Bar2)} +{On(Water,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Milk,Table3)} +{On(Bernachon,Table1)} +{On(MilkDrink,Table3)} +{On(MilkDrink,Bar)} +{On(BottledDrink,Table2)} +{On(Coffee,CoffeeTable)} +{On(Bernachon,BrightTable6)} +{On(MilkDrink,BrightTable6)} +{On(SpringWater,Table3)} +{On(Water,Table3)} +{On(MilkDrink,CoffeeTable)} +{On(SpringWater,BrightTable6)} +{On(BottledDrink,Bar2)} +{On(SpringWater,Table3)} +{On(Dessert,Table2)} +{On(Bernachon,Table1)} +{On(Bernachon,BrightTable6)} +{On(Milk,Table1)} +{On(Water,Table3)} +{On(BottledDrink,Bar)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(Floor,Clean)} +{Is(Floor,Clean)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,Off)} +{Is(Curtain,On)} +{Is(ACTemperature,Down)} +{Is(Table1,Dirty)} +{Is(ACTemperature,Down)} +{Is(Chairs,Dirty)} +{Is(Table1,Clean)} +{Is(AC,On)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(BottledDrink)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(MilkDrink)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Yogurt)} +{Exist(VacuumCup)} +{Exist(SpringWater)} +{Exist(Bernachon)} +{Exist(NFCJuice)} +{Exist(Coffee)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(Water)} +{Exist(Coffee)} diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_generation.py b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_generation.py new file mode 100644 index 0000000..35991f9 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_generation.py @@ -0,0 +1,322 @@ +# the empty string '' represents robot holds nothing +import os +import re + +Object = ['Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup','Chips', 'NFCJuice', 'Bernachon', 'SpringWater'] +Cookable = ['Coffee', 'Water', 'Dessert'] +Place = ['Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6'] +Entity = ['Robot'] +Operable = ['AC', 'ACTemperature', 'HallLight', 'TubeLight', 'Curtain', 'Chairs', 'Floor', 'Table1'] + +import random + + +def single_predict_generation(oplist_1, oplist_2, predict_pattern) -> str: + index_1 = random.randint(0, len(oplist_1) - 1) + if oplist_2: + index_2 = random.randint(0, len(oplist_2) - 1) + + match predict_pattern: + case 'at': + return f'At({oplist_1[index_1]},{oplist_2[index_2]})' + case 'is': + return f'Is({oplist_1[index_1]},{oplist_2[index_2]})' + case 'hold': + return f'Holding({oplist_1[index_1]})' + case 'on': + return f'On({oplist_1[index_1]},{oplist_2[index_2]})' + case 'exist': + return f'Exist({oplist_1[index_1]})' + case _: + raise RuntimeError('Incorrect predict pattern!') + + +def enumerate_predict(oplist_1, oplist_2, predict_pattern) -> [int, list]: + count = 0 + res = [] + + match predict_pattern: + case 'at': + pattern = f'At(%s,%s)' + case 'is': + pattern = f'Is(%s,%s)' + case 'hold': + pattern = f'Holding(%s)' + case 'on': + pattern = f'On(%s,%s)' + case 'exist': + pattern = f'Exist(%s)' + case _: + raise RuntimeError('Incorrect predict pattern!') + + for str_1 in oplist_1: + if oplist_2: + for str_2 in oplist_2: + count += 1 + res.append(pattern % (str_1, str_2)) + else: + count += 1 + res.append(pattern % str_1) + + return count, res + + +def generate_goal_states(vln_num: int, vlm_num: int, opentask_num: int): + # res stores lists of sets, while each state represent in set. + res = [] + + # goal states for VLN + for i in range(vln_num): + res.append({single_predict_generation(['Robot'], Place, 'at')}) + + # goal states for VLM + for i in range(int(vlm_num)): + for j in range(int(vlm_num)): + res.append( + { + single_predict_generation(['Robot'], Place, 'at'), + single_predict_generation(Operable, ['0', '1'], 'is') + } + ) + + # goal states for Open-task-1 + for i in range(int(opentask_num)): + for j in range(int(opentask_num)): + res.append( + { + single_predict_generation(['Robot'], Place, 'at'), + single_predict_generation(Object, Place, 'on') + } + ) + + print(res) + print(len(res)) + + return res + + +def enumerate_goal_states(total: int): + res = [] + + point_15 = int(total * .15) + point_10 = int(total * .10) + + # goal states for VLN, .15 + count_vln, list_vln = enumerate_predict(['Robot'], Place, 'at') + list_vln = ['{%s}' % i for i in list_vln] + if count_vln < point_15: + list_vln *= point_15 // count_vln + for i in range(0, point_15 - len(list_vln)): + list_vln.append('{%s}' % single_predict_generation(['Robot'], Place, 'at')) + # print(f'VLN 任务的目标状态数:{count_vln}') + res += list_vln + + # goal states for VLM-1, 0.15 + count_vlm_1, list_vlm_1 = enumerate_predict(Object, Place, 'on') + list_vlm_1 = ['{%s}' % i for i in list_vlm_1] + if count_vlm_1 < point_15: + list_vlm_1 *= point_15 // count_vlm_1 + for i in range(0, point_15 - len(list_vlm_1)): + list_vlm_1.append('{%s}' % (single_predict_generation(Object, Place, 'on'))) + res += list_vlm_1 + + # goal states for VLM-2, 0.15 + count_vlm_2, list_vlm_2 = enumerate_predict(Operable, ['0', '1'], 'is') + list_vlm_2 = ['{%s}' % i for i in list_vlm_2] + if count_vlm_2 < point_15: + list_vlm_2 *= point_15 // count_vlm_2 + for i in range(0, point_15 - len(list_vlm_2)): + list_vlm_2.append('{%s}' % single_predict_generation(Operable, ['0', '1'], 'is')) + res += list_vlm_2 + + # goal states for VLM-3, 0.1 + count_vlm_3, list_vlm_3 = enumerate_predict(Object + ['Nothing'], None, 'hold') + list_vlm_3 = ['{%s}' % i for i in list_vlm_3] + if count_vlm_3 < point_10: + list_vlm_3 *= point_10 // count_vlm_3 + for i in range(0, point_10 - len(list_vlm_3)): + list_vlm_3.append('{%s}' % single_predict_generation(Object, None, 'hold')) + res += list_vlm_3 + + count_vlm_4, list_vlm_4 = enumerate_predict(Object, None, 'exist') + list_vlm_4 = ['{%s}' % i for i in list_vlm_4] + if count_vlm_4 < point_10: + list_vlm_4 *= point_10 // count_vlm_4 + for i in range(0, point_10 - len(list_vlm_4)): + list_vlm_4.append('{%s}' % single_predict_generation(Object, None, 'exist')) + res += list_vlm_4 + + # goal states for OT, 0.15 + # count_ot, list_ot = enumerate_predict(Cookable, Place, 'on') + # list_ot = ['{%s}' % i for i in list_ot] + # if count_ot < point_15: + # list_ot *= point_15 // count_ot + # for i in range(0, point_15 - len(list_ot)): + # list_ot.append('{%s}' % single_predict_generation(Cookable, Place, 'on')) + # res += list_ot + + # goal states for compound-1, 0.1 + # count_1, list_1 = enumerate_predict(['Robot'], Place, 'at') + # count_2, list_2 = enumerate_predict(Object, Place, 'on') + # list_tmp = [] + # for i in list_1: + # for j in list_2: + # list_tmp.append('{%s,%s}' % (i, j)) + # if len(list_tmp) < point_10: + # list_tmp *= point_10 // len(list_tmp) + # list_tmp += list_tmp[0:point_10 - len(list_tmp)] + # else: + # list_tmp = list_tmp[:point_10] + # res += list_tmp + + # goal states for compound-2, 0.1 + # count_1, list_1 = enumerate_predict(['Robot'], Place, 'at') + # count_2, list_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # list_tmp = [] + # for i in list_1: + # for j in list_2: + # list_tmp.append('{%s,%s}' % (i, j)) + # if len(list_tmp) < point_10: + # list_tmp *= point_10 // len(list_tmp) + # list_tmp += list_tmp[0:point_10 - len(list_tmp)] + # else: + # list_tmp = list_tmp[:point_10] + # res += list_tmp + + # goal states for compound-3, 0.1 + # count_1, list_1 = enumerate_predict(Cookable, Place, 'on') + # count_2, list_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # list_tmp = [] + # for i in list_1: + # for j in list_2: + # list_tmp.append('{%s,%s}' % (i, j)) + # if len(list_tmp) < point_10: + # list_tmp *= point_10 // len(list_tmp) + # list_tmp += list_tmp[0:point_10 - len(list_tmp)] + # else: + # list_tmp = list_tmp[:point_10] + # res += list_tmp + + # # goal states for VLM-1, 0.15 + # count_vlm_1, list_vlm_1 = enumerate_predict(['Robot'], Place, 'at') + # count_vlm_2, list_vlm_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # print(f'VLM 任务的目标状态数:{count_vlm_1 * count_vlm_2}') + # + # # goal states for open-task + # count_opentask_1, list_opentask_1 = enumerate_predict(['Robot'], Place, 'at') + # count_opentask_2, list_opentask_2 = enumerate_predict(Object, Place, 'on') + # print(f'Open-task-1 任务的目标状态数:{count_opentask_1 * count_opentask_2}') + + with open(os.path.join('./goal_states.txt'), 'w+') as file: + for i in res: + if 'Is' in i and 'ACTemperature' in i: + i = re.sub(',0', ',Up', i) + i = re.sub(',1', ',Down', i) + elif 'Is' in i and ('AC' in i or 'HallLight' in i or 'TubeLight' in i or 'Curtain' in i): + i = re.sub(',0', ',Off', i) + i = re.sub(',1', ',On', i) + elif 'Is' in i and ('Chairs' in i or 'Floor' in i or 'Table' in i): + i = re.sub(',0', ',Dirty', i) + i = re.sub(',1', ',Clean', i) + + file.write(i + '\n') + + +def translate_zero_one(i: str) -> str: + if 'ACTemperature' in i: + i = re.sub('On\)', '调高', i) + i = re.sub('Off\)', '调低', i) + elif 'AC' in i or 'HallLight' in i or 'TubeLight' in i or 'Curtain' in i: + i = re.sub('On\)', '关闭', i) + i = re.sub('Off\)', '打开', i) + elif 'Chairs' in i or 'Floor' in i or 'Table' in i: + i = re.sub('On\)', '脏', i) + i = re.sub('Off\)', '打扫干净', i) + + return i + + +def enumerate_goal_states_with_describe() -> str: + with open(os.path.join('./goal_states_with_description.txt'), 'w', encoding='utf-8') as file: + # vln + count, res = enumerate_predict(['Robot'], Place, 'at') + print(count) + for i in range(count): + tmp = '#' + res[i].split(',')[-1][:-1] + file.write(f'{res[i]}\t你能过来一下吗?我在{tmp}这里。\n') + file.write(f'{res[i]}\t麻烦你去一下{tmp}。\n') + file.write(f'{res[i]}\t你能去{tmp}那个位置吗?\n') + + # vlm, on + count, res = enumerate_predict(Object, Place, 'on') + print(count) + for i in range(count): + tmp = res[i].split(',') + obj = '#' + tmp[0][3:] + pla = '#' + tmp[-1][:-1] + file.write(f'{res[i]}\t麻烦你把{obj}放到{pla}那个位置。\n') + file.write(f'{res[i]}\t请你拿一下{obj}到{pla}位置。\n') + file.write(f'{res[i]}\t你好,我在{pla},请你拿一下{obj}到位置。\n') + + # vlm, is + count, res = enumerate_predict(Operable, ['On', 'Off'], 'is') + print(count) + for i in res: + tmp = i.split(',') + thing, op = '#' + tmp[0][3:], '#' + tmp[-1] + file.write('%s\t%s\n' % (i, translate_zero_one(f'你能把{thing}{op}一下吗?'))) + + + # vlm, holding + count, res = enumerate_predict(Object + ['Nothing'], None, 'hold') + print(count) + for i in res: + tmp = '#' + i.split('(')[-1][:-1] + if tmp == 'Nothing': + file.write(f'{i}\t你手里是没有东西的吗?\n') + continue + file.write(f'{i}\t你能把{tmp}抓在手里吗?\n') + file.write(f'{i}\t你能一直拿着{tmp}吗?\n') + + + count, res = enumerate_predict(Cookable, Place, 'on') + print(count) + for i in res: + tmp = i.split(',') + thing, pla = '#' + tmp[0][3:], '#' + tmp[-1][:-1] + + file.write(f'{i}\t你能制作{thing}并把它端到{pla}这里来吗?\n') + file.write(f'{i}\t给我来点{thing},并把它端到{pla}这里来。\n') + return './goal_states_with_description.txt' + + +from copy import deepcopy + + +def mutex(path: str): + with open(os.path.join(path), 'r', encoding='utf-8') as file: + lines = "".join(file.readlines()) + new_line = deepcopy(lines) + + check = ['#Bar2', '#WaterTable', '#CoffeeTable', '#Bar', '#Table1', '#Table2', '#Table3', '#BrightTable6', + '#Coffee', '#Water','#Dessert', '#Softdrink', '#BottledDrink', '#Yogurt', '#ADMilk', '#MilkDrink', '#Milk', '#VacuumCup', + '#Chips', '#NFCJuice', '#Bernachon', '#SpringWater', + '#AC', + '#ACTemperature', '#HallLight', '#TubeLight', '#Curtain', '#Chairs', '#Floor', '#Table1'] + repla = ['#另一侧的吧台', '#茶水桌', '#咖啡桌', '#吧台', '#前门斜桌子', '#大厅长桌子西侧', '#大厅长桌子东侧', '#后门靠窗边圆桌', '#咖啡', '#水', + '#点心', '#盒装冰红茶', '#瓶装饮料', '#酸奶', '#AD钙奶', '#牛奶味的饮料', '#牛奶', '#保温杯', + '#薯片', '#NFC果汁', '#贝纳颂咖啡', '#矿泉水', + '#空调', + '#空调温度', '#大厅灯', '#筒灯', '#窗帘', '#椅子', '#地板', '#前门斜桌子'] + + for i, j in zip(check, repla): + new_line = re.sub(i, j, new_line) + new_line = re.sub('#', '', new_line) + lines = re.sub('#', '', lines) + + with open(os.path.join(path), 'w', encoding='utf-8') as file: + file.write(new_line) + +# generate_goal_states(30, 6, 6) +enumerate_goal_states(5000) +mutex(enumerate_goal_states_with_describe()) diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_unique.txt b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_unique.txt new file mode 100644 index 0000000..bacfa3e --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_unique.txt @@ -0,0 +1,165 @@ +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description.jsonl b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description.jsonl new file mode 100644 index 0000000..fd2b862 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description.jsonl @@ -0,0 +1,193 @@ +{"title":"你能过来一下吗?我在吧台这里。","text":"At(Robot,Bar)"} +{"title":"麻烦你去一下吧台。","text":"At(Robot,Bar)"} +{"title":"你能去吧台那个位置吗?","text":"At(Robot,Bar)"} +{"title":"你能过来一下吗?我在茶水桌这里。","text":"At(Robot,WaterTable)"} +{"title":"麻烦你去一下茶水桌。","text":"At(Robot,WaterTable)"} +{"title":"你能去茶水桌那个位置吗?","text":"At(Robot,WaterTable)"} +{"title":"你能过来一下吗?我在咖啡桌这里。","text":"At(Robot,CoffeeTable)"} +{"title":"麻烦你去一下咖啡桌。","text":"At(Robot,CoffeeTable)"} +{"title":"你能去咖啡桌那个位置吗?","text":"At(Robot,CoffeeTable)"} +{"title":"你能过来一下吗?我在另一个吧台这里。","text":"At(Robot,Bar2)"} +{"title":"麻烦你去一下另一个吧台。","text":"At(Robot,Bar2)"} +{"title":"你能去另一个吧台那个位置吗?","text":"At(Robot,Bar2)"} +{"title":"你能过来一下吗?我在第一张桌子这里。","text":"At(Robot,Table1)"} +{"title":"麻烦你去一下第一张桌子。","text":"At(Robot,Table1)"} +{"title":"你能去第一张桌子那个位置吗?","text":"At(Robot,Table1)"} +{"title":"你能过来一下吗?我在第二张桌子这里。","text":"At(Robot,Table2)"} +{"title":"麻烦你去一下第二张桌子。","text":"At(Robot,Table2)"} +{"title":"你能去第二张桌子那个位置吗?","text":"At(Robot,Table2)"} +{"title":"你能过来一下吗?我在第三张桌子这里。","text":"At(Robot,Table3)"} +{"title":"麻烦你去一下第三张桌子。","text":"At(Robot,Table3)"} +{"title":"你能去第三张桌子那个位置吗?","text":"At(Robot,Table3)"} +{"title":"麻烦你把盒装冰红茶放到吧台那个位置。","text":"On(Softdrink,Bar)"} +{"title":"请你拿一下盒装冰红茶到吧台位置。","text":"On(Softdrink,Bar)"} +{"title":"麻烦你把盒装冰红茶放到茶水桌那个位置。","text":"On(Softdrink,WaterTable)"} +{"title":"请你拿一下盒装冰红茶到茶水桌位置。","text":"On(Softdrink,WaterTable)"} +{"title":"麻烦你把盒装冰红茶放到咖啡桌那个位置。","text":"On(Softdrink,CoffeeTable)"} +{"title":"请你拿一下盒装冰红茶到咖啡桌位置。","text":"On(Softdrink,CoffeeTable)"} +{"title":"麻烦你把盒装冰红茶放到另一个吧台那个位置。","text":"On(Softdrink,Bar2)"} +{"title":"请你拿一下盒装冰红茶到另一个吧台位置。","text":"On(Softdrink,Bar2)"} +{"title":"麻烦你把盒装冰红茶放到第一张桌子那个位置。","text":"On(Softdrink,Table1)"} +{"title":"请你拿一下盒装冰红茶到第一张桌子位置。","text":"On(Softdrink,Table1)"} +{"title":"麻烦你把盒装冰红茶放到第二张桌子那个位置。","text":"On(Softdrink,Table2)"} +{"title":"请你拿一下盒装冰红茶到第二张桌子位置。","text":"On(Softdrink,Table2)"} +{"title":"麻烦你把盒装冰红茶放到第三张桌子那个位置。","text":"On(Softdrink,Table3)"} +{"title":"请你拿一下盒装冰红茶到第三张桌子位置。","text":"On(Softdrink,Table3)"} +{"title":"麻烦你把瓶装饮料放到吧台那个位置。","text":"On(BottledDrink,Bar)"} +{"title":"请你拿一下瓶装饮料到吧台位置。","text":"On(BottledDrink,Bar)"} +{"title":"麻烦你把瓶装饮料放到茶水桌那个位置。","text":"On(BottledDrink,WaterTable)"} +{"title":"请你拿一下瓶装饮料到茶水桌位置。","text":"On(BottledDrink,WaterTable)"} +{"title":"麻烦你把瓶装饮料放到咖啡桌那个位置。","text":"On(BottledDrink,CoffeeTable)"} +{"title":"请你拿一下瓶装饮料到咖啡桌位置。","text":"On(BottledDrink,CoffeeTable)"} +{"title":"麻烦你把瓶装饮料放到另一个吧台那个位置。","text":"On(BottledDrink,Bar2)"} +{"title":"请你拿一下瓶装饮料到另一个吧台位置。","text":"On(BottledDrink,Bar2)"} +{"title":"麻烦你把瓶装饮料放到第一张桌子那个位置。","text":"On(BottledDrink,Table1)"} +{"title":"请你拿一下瓶装饮料到第一张桌子位置。","text":"On(BottledDrink,Table1)"} +{"title":"麻烦你把瓶装饮料放到第二张桌子那个位置。","text":"On(BottledDrink,Table2)"} +{"title":"请你拿一下瓶装饮料到第二张桌子位置。","text":"On(BottledDrink,Table2)"} +{"title":"麻烦你把瓶装饮料放到第三张桌子那个位置。","text":"On(BottledDrink,Table3)"} +{"title":"请你拿一下瓶装饮料到第三张桌子位置。","text":"On(BottledDrink,Table3)"} +{"title":"麻烦你把酸奶放到吧台那个位置。","text":"On(Yogurt,Bar)"} +{"title":"请你拿一下酸奶到吧台位置。","text":"On(Yogurt,Bar)"} +{"title":"麻烦你把酸奶放到茶水桌那个位置。","text":"On(Yogurt,WaterTable)"} +{"title":"请你拿一下酸奶到茶水桌位置。","text":"On(Yogurt,WaterTable)"} +{"title":"麻烦你把酸奶放到咖啡桌那个位置。","text":"On(Yogurt,CoffeeTable)"} +{"title":"请你拿一下酸奶到咖啡桌位置。","text":"On(Yogurt,CoffeeTable)"} +{"title":"麻烦你把酸奶放到另一个吧台那个位置。","text":"On(Yogurt,Bar2)"} +{"title":"请你拿一下酸奶到另一个吧台位置。","text":"On(Yogurt,Bar2)"} +{"title":"麻烦你把酸奶放到第一张桌子那个位置。","text":"On(Yogurt,Table1)"} +{"title":"请你拿一下酸奶到第一张桌子位置。","text":"On(Yogurt,Table1)"} +{"title":"麻烦你把酸奶放到第二张桌子那个位置。","text":"On(Yogurt,Table2)"} +{"title":"请你拿一下酸奶到第二张桌子位置。","text":"On(Yogurt,Table2)"} +{"title":"麻烦你把酸奶放到第三张桌子那个位置。","text":"On(Yogurt,Table3)"} +{"title":"请你拿一下酸奶到第三张桌子位置。","text":"On(Yogurt,Table3)"} +{"title":"麻烦你把AD钙奶放到吧台那个位置。","text":"On(ADMilk,Bar)"} +{"title":"请你拿一下AD钙奶到吧台位置。","text":"On(ADMilk,Bar)"} +{"title":"麻烦你把AD钙奶放到茶水桌那个位置。","text":"On(ADMilk,WaterTable)"} +{"title":"请你拿一下AD钙奶到茶水桌位置。","text":"On(ADMilk,WaterTable)"} +{"title":"麻烦你把AD钙奶放到咖啡桌那个位置。","text":"On(ADMilk,CoffeeTable)"} +{"title":"请你拿一下AD钙奶到咖啡桌位置。","text":"On(ADMilk,CoffeeTable)"} +{"title":"麻烦你把AD钙奶放到另一个吧台那个位置。","text":"On(ADMilk,Bar2)"} +{"title":"请你拿一下AD钙奶到另一个吧台位置。","text":"On(ADMilk,Bar2)"} +{"title":"麻烦你把AD钙奶放到第一张桌子那个位置。","text":"On(ADMilk,Table1)"} +{"title":"请你拿一下AD钙奶到第一张桌子位置。","text":"On(ADMilk,Table1)"} +{"title":"麻烦你把AD钙奶放到第二张桌子那个位置。","text":"On(ADMilk,Table2)"} +{"title":"请你拿一下AD钙奶到第二张桌子位置。","text":"On(ADMilk,Table2)"} +{"title":"麻烦你把AD钙奶放到第三张桌子那个位置。","text":"On(ADMilk,Table3)"} +{"title":"请你拿一下AD钙奶到第三张桌子位置。","text":"On(ADMilk,Table3)"} +{"title":"麻烦你把牛奶味的饮料放到吧台那个位置。","text":"On(MilkDrink,Bar)"} +{"title":"请你拿一下牛奶味的饮料到吧台位置。","text":"On(MilkDrink,Bar)"} +{"title":"麻烦你把牛奶味的饮料放到茶水桌那个位置。","text":"On(MilkDrink,WaterTable)"} +{"title":"请你拿一下牛奶味的饮料到茶水桌位置。","text":"On(MilkDrink,WaterTable)"} +{"title":"麻烦你把牛奶味的饮料放到咖啡桌那个位置。","text":"On(MilkDrink,CoffeeTable)"} +{"title":"请你拿一下牛奶味的饮料到咖啡桌位置。","text":"On(MilkDrink,CoffeeTable)"} +{"title":"麻烦你把牛奶味的饮料放到另一个吧台那个位置。","text":"On(MilkDrink,Bar2)"} +{"title":"请你拿一下牛奶味的饮料到另一个吧台位置。","text":"On(MilkDrink,Bar2)"} +{"title":"麻烦你把牛奶味的饮料放到第一张桌子那个位置。","text":"On(MilkDrink,Table1)"} +{"title":"请你拿一下牛奶味的饮料到第一张桌子位置。","text":"On(MilkDrink,Table1)"} +{"title":"麻烦你把牛奶味的饮料放到第二张桌子那个位置。","text":"On(MilkDrink,Table2)"} +{"title":"请你拿一下牛奶味的饮料到第二张桌子位置。","text":"On(MilkDrink,Table2)"} +{"title":"麻烦你把牛奶味的饮料放到第三张桌子那个位置。","text":"On(MilkDrink,Table3)"} +{"title":"请你拿一下牛奶味的饮料到第三张桌子位置。","text":"On(MilkDrink,Table3)"} +{"title":"麻烦你把牛奶放到吧台那个位置。","text":"On(Milk,Bar)"} +{"title":"请你拿一下牛奶到吧台位置。","text":"On(Milk,Bar)"} +{"title":"麻烦你把牛奶放到茶水桌那个位置。","text":"On(Milk,WaterTable)"} +{"title":"请你拿一下牛奶到茶水桌位置。","text":"On(Milk,WaterTable)"} +{"title":"麻烦你把牛奶放到咖啡桌那个位置。","text":"On(Milk,CoffeeTable)"} +{"title":"请你拿一下牛奶到咖啡桌位置。","text":"On(Milk,CoffeeTable)"} +{"title":"麻烦你把牛奶放到另一个吧台那个位置。","text":"On(Milk,Bar2)"} +{"title":"请你拿一下牛奶到另一个吧台位置。","text":"On(Milk,Bar2)"} +{"title":"麻烦你把牛奶放到第一张桌子那个位置。","text":"On(Milk,Table1)"} +{"title":"请你拿一下牛奶到第一张桌子位置。","text":"On(Milk,Table1)"} +{"title":"麻烦你把牛奶放到第二张桌子那个位置。","text":"On(Milk,Table2)"} +{"title":"请你拿一下牛奶到第二张桌子位置。","text":"On(Milk,Table2)"} +{"title":"麻烦你把牛奶放到第三张桌子那个位置。","text":"On(Milk,Table3)"} +{"title":"请你拿一下牛奶到第三张桌子位置。","text":"On(Milk,Table3)"} +{"title":"麻烦你把保温杯放到吧台那个位置。","text":"On(VacuumCup,Bar)"} +{"title":"请你拿一下保温杯到吧台位置。","text":"On(VacuumCup,Bar)"} +{"title":"麻烦你把保温杯放到茶水桌那个位置。","text":"On(VacuumCup,WaterTable)"} +{"title":"请你拿一下保温杯到茶水桌位置。","text":"On(VacuumCup,WaterTable)"} +{"title":"麻烦你把保温杯放到咖啡桌那个位置。","text":"On(VacuumCup,CoffeeTable)"} +{"title":"请你拿一下保温杯到咖啡桌位置。","text":"On(VacuumCup,CoffeeTable)"} +{"title":"麻烦你把保温杯放到另一个吧台那个位置。","text":"On(VacuumCup,Bar2)"} +{"title":"请你拿一下保温杯到另一个吧台位置。","text":"On(VacuumCup,Bar2)"} +{"title":"麻烦你把保温杯放到第一张桌子那个位置。","text":"On(VacuumCup,Table1)"} +{"title":"请你拿一下保温杯到第一张桌子位置。","text":"On(VacuumCup,Table1)"} +{"title":"麻烦你把保温杯放到第二张桌子那个位置。","text":"On(VacuumCup,Table2)"} +{"title":"请你拿一下保温杯到第二张桌子位置。","text":"On(VacuumCup,Table2)"} +{"title":"麻烦你把保温杯放到第三张桌子那个位置。","text":"On(VacuumCup,Table3)"} +{"title":"请你拿一下保温杯到第三张桌子位置。","text":"On(VacuumCup,Table3)"} +{"title":"你能把空调关闭一下吗?","text":"Is(AC,On)"} +{"title":"你能把空调打开一下吗?","text":"Is(AC,Off)"} +{"title":"你能把空调Temperature调高一下吗?","text":"Is(ACTemperature,On)"} +{"title":"你能把空调Temperature调低一下吗?","text":"Is(ACTemperature,Off)"} +{"title":"你能把大厅灯关闭一下吗?","text":"Is(HallLight,On)"} +{"title":"你能把大厅灯打开一下吗?","text":"Is(HallLight,Off)"} +{"title":"你能把筒灯关闭一下吗?","text":"Is(TubeLight,On)"} +{"title":"你能把筒灯打开一下吗?","text":"Is(TubeLight,Off)"} +{"title":"你能把窗帘关闭一下吗?","text":"Is(Curtain,On)"} +{"title":"你能把窗帘打开一下吗?","text":"Is(Curtain,Off)"} +{"title":"你能把椅子脏一下吗?","text":"Is(Chairs,On)"} +{"title":"你能把椅子打扫干净一下吗?","text":"Is(Chairs,Off)"} +{"title":"你能把地板脏一下吗?","text":"Is(Floor,On)"} +{"title":"你能把地板打扫干净一下吗?","text":"Is(Floor,Off)"} +{"title":"你能把第一张桌子脏一下吗?","text":"Is(Table1,On)"} +{"title":"你能把第一张桌子打扫干净一下吗?","text":"Is(Table1,Off)"} +{"title":"你能把盒装冰红茶抓在手里吗?","text":"Holding(Softdrink)"} +{"title":"你能一直拿着盒装冰红茶吗?","text":"Holding(Softdrink)"} +{"title":"你能把瓶装饮料抓在手里吗?","text":"Holding(BottledDrink)"} +{"title":"你能一直拿着瓶装饮料吗?","text":"Holding(BottledDrink)"} +{"title":"你能把酸奶抓在手里吗?","text":"Holding(Yogurt)"} +{"title":"你能一直拿着酸奶吗?","text":"Holding(Yogurt)"} +{"title":"你能把AD钙奶抓在手里吗?","text":"Holding(ADMilk)"} +{"title":"你能一直拿着AD钙奶吗?","text":"Holding(ADMilk)"} +{"title":"你能把牛奶味的饮料抓在手里吗?","text":"Holding(MilkDrink)"} +{"title":"你能一直拿着牛奶味的饮料吗?","text":"Holding(MilkDrink)"} +{"title":"你能把牛奶抓在手里吗?","text":"Holding(Milk)"} +{"title":"你能一直拿着牛奶吗?","text":"Holding(Milk)"} +{"title":"你能把保温杯抓在手里吗?","text":"Holding(VacuumCup)"} +{"title":"你能一直拿着保温杯吗?","text":"Holding(VacuumCup)"} +{"title":"你能把Nothing抓在手里吗?","text":"Holding(Nothing)"} +{"title":"你能一直拿着Nothing吗?","text":"Holding(Nothing)"} +{"title":"你能制作咖啡并把它端到吧台这里来吗?","text":"On(Coffee,Bar)"} +{"title":"给我来点咖啡,并把它端到吧台这里来。","text":"On(Coffee,Bar)"} +{"title":"你能制作咖啡并把它端到茶水桌这里来吗?","text":"On(Coffee,WaterTable)"} +{"title":"给我来点咖啡,并把它端到茶水桌这里来。","text":"On(Coffee,WaterTable)"} +{"title":"你能制作咖啡并把它端到咖啡桌这里来吗?","text":"On(Coffee,CoffeeTable)"} +{"title":"给我来点咖啡,并把它端到咖啡桌这里来。","text":"On(Coffee,CoffeeTable)"} +{"title":"你能制作咖啡并把它端到另一个吧台这里来吗?","text":"On(Coffee,Bar2)"} +{"title":"给我来点咖啡,并把它端到另一个吧台这里来。","text":"On(Coffee,Bar2)"} +{"title":"你能制作咖啡并把它端到第一张桌子这里来吗?","text":"On(Coffee,Table1)"} +{"title":"给我来点咖啡,并把它端到第一张桌子这里来。","text":"On(Coffee,Table1)"} +{"title":"你能制作咖啡并把它端到第二张桌子这里来吗?","text":"On(Coffee,Table2)"} +{"title":"给我来点咖啡,并把它端到第二张桌子这里来。","text":"On(Coffee,Table2)"} +{"title":"你能制作咖啡并把它端到第三张桌子这里来吗?","text":"On(Coffee,Table3)"} +{"title":"给我来点咖啡,并把它端到第三张桌子这里来。","text":"On(Coffee,Table3)"} +{"title":"你能制作水并把它端到吧台这里来吗?","text":"On(Water,Bar)"} +{"title":"给我来点水,并把它端到吧台这里来。","text":"On(Water,Bar)"} +{"title":"你能制作水并把它端到茶水桌这里来吗?","text":"On(Water,WaterTable)"} +{"title":"给我来点水,并把它端到茶水桌这里来。","text":"On(Water,WaterTable)"} +{"title":"你能制作水并把它端到咖啡桌这里来吗?","text":"On(Water,CoffeeTable)"} +{"title":"给我来点水,并把它端到咖啡桌这里来。","text":"On(Water,CoffeeTable)"} +{"title":"你能制作水并把它端到另一个吧台这里来吗?","text":"On(Water,Bar2)"} +{"title":"给我来点水,并把它端到另一个吧台这里来。","text":"On(Water,Bar2)"} +{"title":"你能制作水并把它端到第一张桌子这里来吗?","text":"On(Water,Table1)"} +{"title":"给我来点水,并把它端到第一张桌子这里来。","text":"On(Water,Table1)"} +{"title":"你能制作水并把它端到第二张桌子这里来吗?","text":"On(Water,Table2)"} +{"title":"给我来点水,并把它端到第二张桌子这里来。","text":"On(Water,Table2)"} +{"title":"你能制作水并把它端到第三张桌子这里来吗?","text":"On(Water,Table3)"} +{"title":"给我来点水,并把它端到第三张桌子这里来。","text":"On(Water,Table3)"} +{"title":"你能制作点心或者甜品并把它端到吧台这里来吗?","text":"On(Dessert,Bar)"} +{"title":"给我来点点心或者甜品,并把它端到吧台这里来。","text":"On(Dessert,Bar)"} +{"title":"你能制作点心或者甜品并把它端到茶水桌这里来吗?","text":"On(Dessert,WaterTable)"} +{"title":"给我来点点心或者甜品,并把它端到茶水桌这里来。","text":"On(Dessert,WaterTable)"} +{"title":"你能制作点心或者甜品并把它端到咖啡桌这里来吗?","text":"On(Dessert,CoffeeTable)"} +{"title":"给我来点点心或者甜品,并把它端到咖啡桌这里来。","text":"On(Dessert,CoffeeTable)"} +{"title":"你能制作点心或者甜品并把它端到另一个吧台这里来吗?","text":"On(Dessert,Bar2)"} +{"title":"给我来点点心或者甜品,并把它端到另一个吧台这里来。","text":"On(Dessert,Bar2)"} +{"title":"你能制作点心或者甜品并把它端到第一张桌子这里来吗?","text":"On(Dessert,Table1)"} +{"title":"给我来点点心或者甜品,并把它端到第一张桌子这里来。","text":"On(Dessert,Table1)"} +{"title":"你能制作点心或者甜品并把它端到第二张桌子这里来吗?","text":"On(Dessert,Table2)"} +{"title":"给我来点点心或者甜品,并把它端到第二张桌子这里来。","text":"On(Dessert,Table2)"} +{"title":"你能制作点心或者甜品并把它端到第三张桌子这里来吗?","text":"On(Dessert,Table3)"} +{"title":"给我来点点心或者甜品,并把它端到第三张桌子这里来。","text":"On(Dessert,Table3)"} diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description.txt b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description.txt new file mode 100644 index 0000000..7434478 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description.txt @@ -0,0 +1,454 @@ +At(Robot,Bar) 你能过来一下吗?我在吧台这里。 +At(Robot,Bar) 麻烦你去一下吧台。 +At(Robot,Bar) 你能去吧台那个位置吗? +At(Robot,Bar2) 你能过来一下吗?我在另一侧的吧台这里。 +At(Robot,Bar2) 麻烦你去一下另一侧的吧台。 +At(Robot,Bar2) 你能去另一侧的吧台那个位置吗? +At(Robot,WaterTable) 你能过来一下吗?我在茶水桌这里。 +At(Robot,WaterTable) 麻烦你去一下茶水桌。 +At(Robot,WaterTable) 你能去茶水桌那个位置吗? +At(Robot,CoffeeTable) 你能过来一下吗?我在咖啡桌这里。 +At(Robot,CoffeeTable) 麻烦你去一下咖啡桌。 +At(Robot,CoffeeTable) 你能去咖啡桌那个位置吗? +At(Robot,Table1) 你能过来一下吗?我在前门斜桌子这里。 +At(Robot,Table1) 麻烦你去一下前门斜桌子。 +At(Robot,Table1) 你能去前门斜桌子那个位置吗? +At(Robot,Table2) 你能过来一下吗?我在大厅长桌子西侧这里。 +At(Robot,Table2) 麻烦你去一下大厅长桌子西侧。 +At(Robot,Table2) 你能去大厅长桌子西侧那个位置吗? +At(Robot,Table3) 你能过来一下吗?我在大厅长桌子东侧这里。 +At(Robot,Table3) 麻烦你去一下大厅长桌子东侧。 +At(Robot,Table3) 你能去大厅长桌子东侧那个位置吗? +At(Robot,BrightTable6) 你能过来一下吗?我在后门靠窗边圆桌这里。 +At(Robot,BrightTable6) 麻烦你去一下后门靠窗边圆桌。 +At(Robot,BrightTable6) 你能去后门靠窗边圆桌那个位置吗? +On(Coffee,Bar) 麻烦你把咖啡放到吧台那个位置。 +On(Coffee,Bar) 请你拿一下咖啡到吧台位置。 +On(Coffee,Bar) 你好,我在吧台,请你拿一下咖啡到位置。 +On(Coffee,Bar2) 麻烦你把咖啡放到另一侧的吧台那个位置。 +On(Coffee,Bar2) 请你拿一下咖啡到另一侧的吧台位置。 +On(Coffee,Bar2) 你好,我在另一侧的吧台,请你拿一下咖啡到位置。 +On(Coffee,WaterTable) 麻烦你把咖啡放到茶水桌那个位置。 +On(Coffee,WaterTable) 请你拿一下咖啡到茶水桌位置。 +On(Coffee,WaterTable) 你好,我在茶水桌,请你拿一下咖啡到位置。 +On(Coffee,CoffeeTable) 麻烦你把咖啡放到咖啡桌那个位置。 +On(Coffee,CoffeeTable) 请你拿一下咖啡到咖啡桌位置。 +On(Coffee,CoffeeTable) 你好,我在咖啡桌,请你拿一下咖啡到位置。 +On(Coffee,Table1) 麻烦你把咖啡放到前门斜桌子那个位置。 +On(Coffee,Table1) 请你拿一下咖啡到前门斜桌子位置。 +On(Coffee,Table1) 你好,我在前门斜桌子,请你拿一下咖啡到位置。 +On(Coffee,Table2) 麻烦你把咖啡放到大厅长桌子西侧那个位置。 +On(Coffee,Table2) 请你拿一下咖啡到大厅长桌子西侧位置。 +On(Coffee,Table2) 你好,我在大厅长桌子西侧,请你拿一下咖啡到位置。 +On(Coffee,Table3) 麻烦你把咖啡放到大厅长桌子东侧那个位置。 +On(Coffee,Table3) 请你拿一下咖啡到大厅长桌子东侧位置。 +On(Coffee,Table3) 你好,我在大厅长桌子东侧,请你拿一下咖啡到位置。 +On(Coffee,BrightTable6) 麻烦你把咖啡放到后门靠窗边圆桌那个位置。 +On(Coffee,BrightTable6) 请你拿一下咖啡到后门靠窗边圆桌位置。 +On(Coffee,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下咖啡到位置。 +On(Water,Bar) 麻烦你把水放到吧台那个位置。 +On(Water,Bar) 请你拿一下水到吧台位置。 +On(Water,Bar) 你好,我在吧台,请你拿一下水到位置。 +On(Water,Bar2) 麻烦你把水放到另一侧的吧台那个位置。 +On(Water,Bar2) 请你拿一下水到另一侧的吧台位置。 +On(Water,Bar2) 你好,我在另一侧的吧台,请你拿一下水到位置。 +On(Water,WaterTable) 麻烦你把水放到茶水桌那个位置。 +On(Water,WaterTable) 请你拿一下水到茶水桌位置。 +On(Water,WaterTable) 你好,我在茶水桌,请你拿一下水到位置。 +On(Water,CoffeeTable) 麻烦你把水放到咖啡桌那个位置。 +On(Water,CoffeeTable) 请你拿一下水到咖啡桌位置。 +On(Water,CoffeeTable) 你好,我在咖啡桌,请你拿一下水到位置。 +On(Water,Table1) 麻烦你把水放到前门斜桌子那个位置。 +On(Water,Table1) 请你拿一下水到前门斜桌子位置。 +On(Water,Table1) 你好,我在前门斜桌子,请你拿一下水到位置。 +On(Water,Table2) 麻烦你把水放到大厅长桌子西侧那个位置。 +On(Water,Table2) 请你拿一下水到大厅长桌子西侧位置。 +On(Water,Table2) 你好,我在大厅长桌子西侧,请你拿一下水到位置。 +On(Water,Table3) 麻烦你把水放到大厅长桌子东侧那个位置。 +On(Water,Table3) 请你拿一下水到大厅长桌子东侧位置。 +On(Water,Table3) 你好,我在大厅长桌子东侧,请你拿一下水到位置。 +On(Water,BrightTable6) 麻烦你把水放到后门靠窗边圆桌那个位置。 +On(Water,BrightTable6) 请你拿一下水到后门靠窗边圆桌位置。 +On(Water,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下水到位置。 +On(Dessert,Bar) 麻烦你把点心放到吧台那个位置。 +On(Dessert,Bar) 请你拿一下点心到吧台位置。 +On(Dessert,Bar) 你好,我在吧台,请你拿一下点心到位置。 +On(Dessert,Bar2) 麻烦你把点心放到另一侧的吧台那个位置。 +On(Dessert,Bar2) 请你拿一下点心到另一侧的吧台位置。 +On(Dessert,Bar2) 你好,我在另一侧的吧台,请你拿一下点心到位置。 +On(Dessert,WaterTable) 麻烦你把点心放到茶水桌那个位置。 +On(Dessert,WaterTable) 请你拿一下点心到茶水桌位置。 +On(Dessert,WaterTable) 你好,我在茶水桌,请你拿一下点心到位置。 +On(Dessert,CoffeeTable) 麻烦你把点心放到咖啡桌那个位置。 +On(Dessert,CoffeeTable) 请你拿一下点心到咖啡桌位置。 +On(Dessert,CoffeeTable) 你好,我在咖啡桌,请你拿一下点心到位置。 +On(Dessert,Table1) 麻烦你把点心放到前门斜桌子那个位置。 +On(Dessert,Table1) 请你拿一下点心到前门斜桌子位置。 +On(Dessert,Table1) 你好,我在前门斜桌子,请你拿一下点心到位置。 +On(Dessert,Table2) 麻烦你把点心放到大厅长桌子西侧那个位置。 +On(Dessert,Table2) 请你拿一下点心到大厅长桌子西侧位置。 +On(Dessert,Table2) 你好,我在大厅长桌子西侧,请你拿一下点心到位置。 +On(Dessert,Table3) 麻烦你把点心放到大厅长桌子东侧那个位置。 +On(Dessert,Table3) 请你拿一下点心到大厅长桌子东侧位置。 +On(Dessert,Table3) 你好,我在大厅长桌子东侧,请你拿一下点心到位置。 +On(Dessert,BrightTable6) 麻烦你把点心放到后门靠窗边圆桌那个位置。 +On(Dessert,BrightTable6) 请你拿一下点心到后门靠窗边圆桌位置。 +On(Dessert,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下点心到位置。 +On(Softdrink,Bar) 麻烦你把盒装冰红茶放到吧台那个位置。 +On(Softdrink,Bar) 请你拿一下盒装冰红茶到吧台位置。 +On(Softdrink,Bar) 你好,我在吧台,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Bar2) 麻烦你把盒装冰红茶放到另一侧的吧台那个位置。 +On(Softdrink,Bar2) 请你拿一下盒装冰红茶到另一侧的吧台位置。 +On(Softdrink,Bar2) 你好,我在另一侧的吧台,请你拿一下盒装冰红茶到位置。 +On(Softdrink,WaterTable) 麻烦你把盒装冰红茶放到茶水桌那个位置。 +On(Softdrink,WaterTable) 请你拿一下盒装冰红茶到茶水桌位置。 +On(Softdrink,WaterTable) 你好,我在茶水桌,请你拿一下盒装冰红茶到位置。 +On(Softdrink,CoffeeTable) 麻烦你把盒装冰红茶放到咖啡桌那个位置。 +On(Softdrink,CoffeeTable) 请你拿一下盒装冰红茶到咖啡桌位置。 +On(Softdrink,CoffeeTable) 你好,我在咖啡桌,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Table1) 麻烦你把盒装冰红茶放到前门斜桌子那个位置。 +On(Softdrink,Table1) 请你拿一下盒装冰红茶到前门斜桌子位置。 +On(Softdrink,Table1) 你好,我在前门斜桌子,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Table2) 麻烦你把盒装冰红茶放到大厅长桌子西侧那个位置。 +On(Softdrink,Table2) 请你拿一下盒装冰红茶到大厅长桌子西侧位置。 +On(Softdrink,Table2) 你好,我在大厅长桌子西侧,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Table3) 麻烦你把盒装冰红茶放到大厅长桌子东侧那个位置。 +On(Softdrink,Table3) 请你拿一下盒装冰红茶到大厅长桌子东侧位置。 +On(Softdrink,Table3) 你好,我在大厅长桌子东侧,请你拿一下盒装冰红茶到位置。 +On(Softdrink,BrightTable6) 麻烦你把盒装冰红茶放到后门靠窗边圆桌那个位置。 +On(Softdrink,BrightTable6) 请你拿一下盒装冰红茶到后门靠窗边圆桌位置。 +On(Softdrink,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下盒装冰红茶到位置。 +On(BottledDrink,Bar) 麻烦你把瓶装饮料放到吧台那个位置。 +On(BottledDrink,Bar) 请你拿一下瓶装饮料到吧台位置。 +On(BottledDrink,Bar) 你好,我在吧台,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Bar2) 麻烦你把瓶装饮料放到另一侧的吧台那个位置。 +On(BottledDrink,Bar2) 请你拿一下瓶装饮料到另一侧的吧台位置。 +On(BottledDrink,Bar2) 你好,我在另一侧的吧台,请你拿一下瓶装饮料到位置。 +On(BottledDrink,WaterTable) 麻烦你把瓶装饮料放到茶水桌那个位置。 +On(BottledDrink,WaterTable) 请你拿一下瓶装饮料到茶水桌位置。 +On(BottledDrink,WaterTable) 你好,我在茶水桌,请你拿一下瓶装饮料到位置。 +On(BottledDrink,CoffeeTable) 麻烦你把瓶装饮料放到咖啡桌那个位置。 +On(BottledDrink,CoffeeTable) 请你拿一下瓶装饮料到咖啡桌位置。 +On(BottledDrink,CoffeeTable) 你好,我在咖啡桌,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Table1) 麻烦你把瓶装饮料放到前门斜桌子那个位置。 +On(BottledDrink,Table1) 请你拿一下瓶装饮料到前门斜桌子位置。 +On(BottledDrink,Table1) 你好,我在前门斜桌子,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Table2) 麻烦你把瓶装饮料放到大厅长桌子西侧那个位置。 +On(BottledDrink,Table2) 请你拿一下瓶装饮料到大厅长桌子西侧位置。 +On(BottledDrink,Table2) 你好,我在大厅长桌子西侧,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Table3) 麻烦你把瓶装饮料放到大厅长桌子东侧那个位置。 +On(BottledDrink,Table3) 请你拿一下瓶装饮料到大厅长桌子东侧位置。 +On(BottledDrink,Table3) 你好,我在大厅长桌子东侧,请你拿一下瓶装饮料到位置。 +On(BottledDrink,BrightTable6) 麻烦你把瓶装饮料放到后门靠窗边圆桌那个位置。 +On(BottledDrink,BrightTable6) 请你拿一下瓶装饮料到后门靠窗边圆桌位置。 +On(BottledDrink,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下瓶装饮料到位置。 +On(Yogurt,Bar) 麻烦你把酸奶放到吧台那个位置。 +On(Yogurt,Bar) 请你拿一下酸奶到吧台位置。 +On(Yogurt,Bar) 你好,我在吧台,请你拿一下酸奶到位置。 +On(Yogurt,Bar2) 麻烦你把酸奶放到另一侧的吧台那个位置。 +On(Yogurt,Bar2) 请你拿一下酸奶到另一侧的吧台位置。 +On(Yogurt,Bar2) 你好,我在另一侧的吧台,请你拿一下酸奶到位置。 +On(Yogurt,WaterTable) 麻烦你把酸奶放到茶水桌那个位置。 +On(Yogurt,WaterTable) 请你拿一下酸奶到茶水桌位置。 +On(Yogurt,WaterTable) 你好,我在茶水桌,请你拿一下酸奶到位置。 +On(Yogurt,CoffeeTable) 麻烦你把酸奶放到咖啡桌那个位置。 +On(Yogurt,CoffeeTable) 请你拿一下酸奶到咖啡桌位置。 +On(Yogurt,CoffeeTable) 你好,我在咖啡桌,请你拿一下酸奶到位置。 +On(Yogurt,Table1) 麻烦你把酸奶放到前门斜桌子那个位置。 +On(Yogurt,Table1) 请你拿一下酸奶到前门斜桌子位置。 +On(Yogurt,Table1) 你好,我在前门斜桌子,请你拿一下酸奶到位置。 +On(Yogurt,Table2) 麻烦你把酸奶放到大厅长桌子西侧那个位置。 +On(Yogurt,Table2) 请你拿一下酸奶到大厅长桌子西侧位置。 +On(Yogurt,Table2) 你好,我在大厅长桌子西侧,请你拿一下酸奶到位置。 +On(Yogurt,Table3) 麻烦你把酸奶放到大厅长桌子东侧那个位置。 +On(Yogurt,Table3) 请你拿一下酸奶到大厅长桌子东侧位置。 +On(Yogurt,Table3) 你好,我在大厅长桌子东侧,请你拿一下酸奶到位置。 +On(Yogurt,BrightTable6) 麻烦你把酸奶放到后门靠窗边圆桌那个位置。 +On(Yogurt,BrightTable6) 请你拿一下酸奶到后门靠窗边圆桌位置。 +On(Yogurt,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下酸奶到位置。 +On(ADMilk,Bar) 麻烦你把AD钙奶放到吧台那个位置。 +On(ADMilk,Bar) 请你拿一下AD钙奶到吧台位置。 +On(ADMilk,Bar) 你好,我在吧台,请你拿一下AD钙奶到位置。 +On(ADMilk,Bar2) 麻烦你把AD钙奶放到另一侧的吧台那个位置。 +On(ADMilk,Bar2) 请你拿一下AD钙奶到另一侧的吧台位置。 +On(ADMilk,Bar2) 你好,我在另一侧的吧台,请你拿一下AD钙奶到位置。 +On(ADMilk,WaterTable) 麻烦你把AD钙奶放到茶水桌那个位置。 +On(ADMilk,WaterTable) 请你拿一下AD钙奶到茶水桌位置。 +On(ADMilk,WaterTable) 你好,我在茶水桌,请你拿一下AD钙奶到位置。 +On(ADMilk,CoffeeTable) 麻烦你把AD钙奶放到咖啡桌那个位置。 +On(ADMilk,CoffeeTable) 请你拿一下AD钙奶到咖啡桌位置。 +On(ADMilk,CoffeeTable) 你好,我在咖啡桌,请你拿一下AD钙奶到位置。 +On(ADMilk,Table1) 麻烦你把AD钙奶放到前门斜桌子那个位置。 +On(ADMilk,Table1) 请你拿一下AD钙奶到前门斜桌子位置。 +On(ADMilk,Table1) 你好,我在前门斜桌子,请你拿一下AD钙奶到位置。 +On(ADMilk,Table2) 麻烦你把AD钙奶放到大厅长桌子西侧那个位置。 +On(ADMilk,Table2) 请你拿一下AD钙奶到大厅长桌子西侧位置。 +On(ADMilk,Table2) 你好,我在大厅长桌子西侧,请你拿一下AD钙奶到位置。 +On(ADMilk,Table3) 麻烦你把AD钙奶放到大厅长桌子东侧那个位置。 +On(ADMilk,Table3) 请你拿一下AD钙奶到大厅长桌子东侧位置。 +On(ADMilk,Table3) 你好,我在大厅长桌子东侧,请你拿一下AD钙奶到位置。 +On(ADMilk,BrightTable6) 麻烦你把AD钙奶放到后门靠窗边圆桌那个位置。 +On(ADMilk,BrightTable6) 请你拿一下AD钙奶到后门靠窗边圆桌位置。 +On(ADMilk,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下AD钙奶到位置。 +On(MilkDrink,Bar) 麻烦你把牛奶味的饮料放到吧台那个位置。 +On(MilkDrink,Bar) 请你拿一下牛奶味的饮料到吧台位置。 +On(MilkDrink,Bar) 你好,我在吧台,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Bar2) 麻烦你把牛奶味的饮料放到另一侧的吧台那个位置。 +On(MilkDrink,Bar2) 请你拿一下牛奶味的饮料到另一侧的吧台位置。 +On(MilkDrink,Bar2) 你好,我在另一侧的吧台,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,WaterTable) 麻烦你把牛奶味的饮料放到茶水桌那个位置。 +On(MilkDrink,WaterTable) 请你拿一下牛奶味的饮料到茶水桌位置。 +On(MilkDrink,WaterTable) 你好,我在茶水桌,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,CoffeeTable) 麻烦你把牛奶味的饮料放到咖啡桌那个位置。 +On(MilkDrink,CoffeeTable) 请你拿一下牛奶味的饮料到咖啡桌位置。 +On(MilkDrink,CoffeeTable) 你好,我在咖啡桌,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Table1) 麻烦你把牛奶味的饮料放到前门斜桌子那个位置。 +On(MilkDrink,Table1) 请你拿一下牛奶味的饮料到前门斜桌子位置。 +On(MilkDrink,Table1) 你好,我在前门斜桌子,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Table2) 麻烦你把牛奶味的饮料放到大厅长桌子西侧那个位置。 +On(MilkDrink,Table2) 请你拿一下牛奶味的饮料到大厅长桌子西侧位置。 +On(MilkDrink,Table2) 你好,我在大厅长桌子西侧,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Table3) 麻烦你把牛奶味的饮料放到大厅长桌子东侧那个位置。 +On(MilkDrink,Table3) 请你拿一下牛奶味的饮料到大厅长桌子东侧位置。 +On(MilkDrink,Table3) 你好,我在大厅长桌子东侧,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,BrightTable6) 麻烦你把牛奶味的饮料放到后门靠窗边圆桌那个位置。 +On(MilkDrink,BrightTable6) 请你拿一下牛奶味的饮料到后门靠窗边圆桌位置。 +On(MilkDrink,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下牛奶味的饮料到位置。 +On(Milk,Bar) 麻烦你把牛奶放到吧台那个位置。 +On(Milk,Bar) 请你拿一下牛奶到吧台位置。 +On(Milk,Bar) 你好,我在吧台,请你拿一下牛奶到位置。 +On(Milk,Bar2) 麻烦你把牛奶放到另一侧的吧台那个位置。 +On(Milk,Bar2) 请你拿一下牛奶到另一侧的吧台位置。 +On(Milk,Bar2) 你好,我在另一侧的吧台,请你拿一下牛奶到位置。 +On(Milk,WaterTable) 麻烦你把牛奶放到茶水桌那个位置。 +On(Milk,WaterTable) 请你拿一下牛奶到茶水桌位置。 +On(Milk,WaterTable) 你好,我在茶水桌,请你拿一下牛奶到位置。 +On(Milk,CoffeeTable) 麻烦你把牛奶放到咖啡桌那个位置。 +On(Milk,CoffeeTable) 请你拿一下牛奶到咖啡桌位置。 +On(Milk,CoffeeTable) 你好,我在咖啡桌,请你拿一下牛奶到位置。 +On(Milk,Table1) 麻烦你把牛奶放到前门斜桌子那个位置。 +On(Milk,Table1) 请你拿一下牛奶到前门斜桌子位置。 +On(Milk,Table1) 你好,我在前门斜桌子,请你拿一下牛奶到位置。 +On(Milk,Table2) 麻烦你把牛奶放到大厅长桌子西侧那个位置。 +On(Milk,Table2) 请你拿一下牛奶到大厅长桌子西侧位置。 +On(Milk,Table2) 你好,我在大厅长桌子西侧,请你拿一下牛奶到位置。 +On(Milk,Table3) 麻烦你把牛奶放到大厅长桌子东侧那个位置。 +On(Milk,Table3) 请你拿一下牛奶到大厅长桌子东侧位置。 +On(Milk,Table3) 你好,我在大厅长桌子东侧,请你拿一下牛奶到位置。 +On(Milk,BrightTable6) 麻烦你把牛奶放到后门靠窗边圆桌那个位置。 +On(Milk,BrightTable6) 请你拿一下牛奶到后门靠窗边圆桌位置。 +On(Milk,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下牛奶到位置。 +On(VacuumCup,Bar) 麻烦你把保温杯放到吧台那个位置。 +On(VacuumCup,Bar) 请你拿一下保温杯到吧台位置。 +On(VacuumCup,Bar) 你好,我在吧台,请你拿一下保温杯到位置。 +On(VacuumCup,Bar2) 麻烦你把保温杯放到另一侧的吧台那个位置。 +On(VacuumCup,Bar2) 请你拿一下保温杯到另一侧的吧台位置。 +On(VacuumCup,Bar2) 你好,我在另一侧的吧台,请你拿一下保温杯到位置。 +On(VacuumCup,WaterTable) 麻烦你把保温杯放到茶水桌那个位置。 +On(VacuumCup,WaterTable) 请你拿一下保温杯到茶水桌位置。 +On(VacuumCup,WaterTable) 你好,我在茶水桌,请你拿一下保温杯到位置。 +On(VacuumCup,CoffeeTable) 麻烦你把保温杯放到咖啡桌那个位置。 +On(VacuumCup,CoffeeTable) 请你拿一下保温杯到咖啡桌位置。 +On(VacuumCup,CoffeeTable) 你好,我在咖啡桌,请你拿一下保温杯到位置。 +On(VacuumCup,Table1) 麻烦你把保温杯放到前门斜桌子那个位置。 +On(VacuumCup,Table1) 请你拿一下保温杯到前门斜桌子位置。 +On(VacuumCup,Table1) 你好,我在前门斜桌子,请你拿一下保温杯到位置。 +On(VacuumCup,Table2) 麻烦你把保温杯放到大厅长桌子西侧那个位置。 +On(VacuumCup,Table2) 请你拿一下保温杯到大厅长桌子西侧位置。 +On(VacuumCup,Table2) 你好,我在大厅长桌子西侧,请你拿一下保温杯到位置。 +On(VacuumCup,Table3) 麻烦你把保温杯放到大厅长桌子东侧那个位置。 +On(VacuumCup,Table3) 请你拿一下保温杯到大厅长桌子东侧位置。 +On(VacuumCup,Table3) 你好,我在大厅长桌子东侧,请你拿一下保温杯到位置。 +On(VacuumCup,BrightTable6) 麻烦你把保温杯放到后门靠窗边圆桌那个位置。 +On(VacuumCup,BrightTable6) 请你拿一下保温杯到后门靠窗边圆桌位置。 +On(VacuumCup,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下保温杯到位置。 +On(Chips,Bar) 麻烦你把薯片放到吧台那个位置。 +On(Chips,Bar) 请你拿一下薯片到吧台位置。 +On(Chips,Bar) 你好,我在吧台,请你拿一下薯片到位置。 +On(Chips,Bar2) 麻烦你把薯片放到另一侧的吧台那个位置。 +On(Chips,Bar2) 请你拿一下薯片到另一侧的吧台位置。 +On(Chips,Bar2) 你好,我在另一侧的吧台,请你拿一下薯片到位置。 +On(Chips,WaterTable) 麻烦你把薯片放到茶水桌那个位置。 +On(Chips,WaterTable) 请你拿一下薯片到茶水桌位置。 +On(Chips,WaterTable) 你好,我在茶水桌,请你拿一下薯片到位置。 +On(Chips,CoffeeTable) 麻烦你把薯片放到咖啡桌那个位置。 +On(Chips,CoffeeTable) 请你拿一下薯片到咖啡桌位置。 +On(Chips,CoffeeTable) 你好,我在咖啡桌,请你拿一下薯片到位置。 +On(Chips,Table1) 麻烦你把薯片放到前门斜桌子那个位置。 +On(Chips,Table1) 请你拿一下薯片到前门斜桌子位置。 +On(Chips,Table1) 你好,我在前门斜桌子,请你拿一下薯片到位置。 +On(Chips,Table2) 麻烦你把薯片放到大厅长桌子西侧那个位置。 +On(Chips,Table2) 请你拿一下薯片到大厅长桌子西侧位置。 +On(Chips,Table2) 你好,我在大厅长桌子西侧,请你拿一下薯片到位置。 +On(Chips,Table3) 麻烦你把薯片放到大厅长桌子东侧那个位置。 +On(Chips,Table3) 请你拿一下薯片到大厅长桌子东侧位置。 +On(Chips,Table3) 你好,我在大厅长桌子东侧,请你拿一下薯片到位置。 +On(Chips,BrightTable6) 麻烦你把薯片放到后门靠窗边圆桌那个位置。 +On(Chips,BrightTable6) 请你拿一下薯片到后门靠窗边圆桌位置。 +On(Chips,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下薯片到位置。 +On(NFCJuice,Bar) 麻烦你把NFC果汁放到吧台那个位置。 +On(NFCJuice,Bar) 请你拿一下NFC果汁到吧台位置。 +On(NFCJuice,Bar) 你好,我在吧台,请你拿一下NFC果汁到位置。 +On(NFCJuice,Bar2) 麻烦你把NFC果汁放到另一侧的吧台那个位置。 +On(NFCJuice,Bar2) 请你拿一下NFC果汁到另一侧的吧台位置。 +On(NFCJuice,Bar2) 你好,我在另一侧的吧台,请你拿一下NFC果汁到位置。 +On(NFCJuice,WaterTable) 麻烦你把NFC果汁放到茶水桌那个位置。 +On(NFCJuice,WaterTable) 请你拿一下NFC果汁到茶水桌位置。 +On(NFCJuice,WaterTable) 你好,我在茶水桌,请你拿一下NFC果汁到位置。 +On(NFCJuice,CoffeeTable) 麻烦你把NFC果汁放到咖啡桌那个位置。 +On(NFCJuice,CoffeeTable) 请你拿一下NFC果汁到咖啡桌位置。 +On(NFCJuice,CoffeeTable) 你好,我在咖啡桌,请你拿一下NFC果汁到位置。 +On(NFCJuice,Table1) 麻烦你把NFC果汁放到前门斜桌子那个位置。 +On(NFCJuice,Table1) 请你拿一下NFC果汁到前门斜桌子位置。 +On(NFCJuice,Table1) 你好,我在前门斜桌子,请你拿一下NFC果汁到位置。 +On(NFCJuice,Table2) 麻烦你把NFC果汁放到大厅长桌子西侧那个位置。 +On(NFCJuice,Table2) 请你拿一下NFC果汁到大厅长桌子西侧位置。 +On(NFCJuice,Table2) 你好,我在大厅长桌子西侧,请你拿一下NFC果汁到位置。 +On(NFCJuice,Table3) 麻烦你把NFC果汁放到大厅长桌子东侧那个位置。 +On(NFCJuice,Table3) 请你拿一下NFC果汁到大厅长桌子东侧位置。 +On(NFCJuice,Table3) 你好,我在大厅长桌子东侧,请你拿一下NFC果汁到位置。 +On(NFCJuice,BrightTable6) 麻烦你把NFC果汁放到后门靠窗边圆桌那个位置。 +On(NFCJuice,BrightTable6) 请你拿一下NFC果汁到后门靠窗边圆桌位置。 +On(NFCJuice,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下NFC果汁到位置。 +On(Bernachon,Bar) 麻烦你把贝纳颂咖啡放到吧台那个位置。 +On(Bernachon,Bar) 请你拿一下贝纳颂咖啡到吧台位置。 +On(Bernachon,Bar) 你好,我在吧台,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Bar2) 麻烦你把贝纳颂咖啡放到另一侧的吧台那个位置。 +On(Bernachon,Bar2) 请你拿一下贝纳颂咖啡到另一侧的吧台位置。 +On(Bernachon,Bar2) 你好,我在另一侧的吧台,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,WaterTable) 麻烦你把贝纳颂咖啡放到茶水桌那个位置。 +On(Bernachon,WaterTable) 请你拿一下贝纳颂咖啡到茶水桌位置。 +On(Bernachon,WaterTable) 你好,我在茶水桌,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,CoffeeTable) 麻烦你把贝纳颂咖啡放到咖啡桌那个位置。 +On(Bernachon,CoffeeTable) 请你拿一下贝纳颂咖啡到咖啡桌位置。 +On(Bernachon,CoffeeTable) 你好,我在咖啡桌,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Table1) 麻烦你把贝纳颂咖啡放到前门斜桌子那个位置。 +On(Bernachon,Table1) 请你拿一下贝纳颂咖啡到前门斜桌子位置。 +On(Bernachon,Table1) 你好,我在前门斜桌子,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Table2) 麻烦你把贝纳颂咖啡放到大厅长桌子西侧那个位置。 +On(Bernachon,Table2) 请你拿一下贝纳颂咖啡到大厅长桌子西侧位置。 +On(Bernachon,Table2) 你好,我在大厅长桌子西侧,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Table3) 麻烦你把贝纳颂咖啡放到大厅长桌子东侧那个位置。 +On(Bernachon,Table3) 请你拿一下贝纳颂咖啡到大厅长桌子东侧位置。 +On(Bernachon,Table3) 你好,我在大厅长桌子东侧,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,BrightTable6) 麻烦你把贝纳颂咖啡放到后门靠窗边圆桌那个位置。 +On(Bernachon,BrightTable6) 请你拿一下贝纳颂咖啡到后门靠窗边圆桌位置。 +On(Bernachon,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下贝纳颂咖啡到位置。 +On(SpringWater,Bar) 麻烦你把矿泉水放到吧台那个位置。 +On(SpringWater,Bar) 请你拿一下矿泉水到吧台位置。 +On(SpringWater,Bar) 你好,我在吧台,请你拿一下矿泉水到位置。 +On(SpringWater,Bar2) 麻烦你把矿泉水放到另一侧的吧台那个位置。 +On(SpringWater,Bar2) 请你拿一下矿泉水到另一侧的吧台位置。 +On(SpringWater,Bar2) 你好,我在另一侧的吧台,请你拿一下矿泉水到位置。 +On(SpringWater,WaterTable) 麻烦你把矿泉水放到茶水桌那个位置。 +On(SpringWater,WaterTable) 请你拿一下矿泉水到茶水桌位置。 +On(SpringWater,WaterTable) 你好,我在茶水桌,请你拿一下矿泉水到位置。 +On(SpringWater,CoffeeTable) 麻烦你把矿泉水放到咖啡桌那个位置。 +On(SpringWater,CoffeeTable) 请你拿一下矿泉水到咖啡桌位置。 +On(SpringWater,CoffeeTable) 你好,我在咖啡桌,请你拿一下矿泉水到位置。 +On(SpringWater,Table1) 麻烦你把矿泉水放到前门斜桌子那个位置。 +On(SpringWater,Table1) 请你拿一下矿泉水到前门斜桌子位置。 +On(SpringWater,Table1) 你好,我在前门斜桌子,请你拿一下矿泉水到位置。 +On(SpringWater,Table2) 麻烦你把矿泉水放到大厅长桌子西侧那个位置。 +On(SpringWater,Table2) 请你拿一下矿泉水到大厅长桌子西侧位置。 +On(SpringWater,Table2) 你好,我在大厅长桌子西侧,请你拿一下矿泉水到位置。 +On(SpringWater,Table3) 麻烦你把矿泉水放到大厅长桌子东侧那个位置。 +On(SpringWater,Table3) 请你拿一下矿泉水到大厅长桌子东侧位置。 +On(SpringWater,Table3) 你好,我在大厅长桌子东侧,请你拿一下矿泉水到位置。 +On(SpringWater,BrightTable6) 麻烦你把矿泉水放到后门靠窗边圆桌那个位置。 +On(SpringWater,BrightTable6) 请你拿一下矿泉水到后门靠窗边圆桌位置。 +On(SpringWater,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下矿泉水到位置。 +Is(AC,On) 你能把空调关闭一下吗? +Is(AC,Off) 你能把空调打开一下吗? +Is(ACTemperature,On) 你能把空调Temperature调高一下吗? +Is(ACTemperature,Off) 你能把空调Temperature调低一下吗? +Is(HallLight,On) 你能把大厅灯关闭一下吗? +Is(HallLight,Off) 你能把大厅灯打开一下吗? +Is(TubeLight,On) 你能把筒灯关闭一下吗? +Is(TubeLight,Off) 你能把筒灯打开一下吗? +Is(Curtain,On) 你能把窗帘关闭一下吗? +Is(Curtain,Off) 你能把窗帘打开一下吗? +Is(Chairs,On) 你能把椅子脏一下吗? +Is(Chairs,Off) 你能把椅子打扫干净一下吗? +Is(Floor,On) 你能把地板脏一下吗? +Is(Floor,Off) 你能把地板打扫干净一下吗? +Is(Table1,On) 你能把前门斜桌子脏一下吗? +Is(Table1,Off) 你能把前门斜桌子打扫干净一下吗? +Holding(Coffee) 你能把咖啡抓在手里吗? +Holding(Coffee) 你能一直拿着咖啡吗? +Holding(Water) 你能把水抓在手里吗? +Holding(Water) 你能一直拿着水吗? +Holding(Dessert) 你能把点心抓在手里吗? +Holding(Dessert) 你能一直拿着点心吗? +Holding(Softdrink) 你能把盒装冰红茶抓在手里吗? +Holding(Softdrink) 你能一直拿着盒装冰红茶吗? +Holding(BottledDrink) 你能把瓶装饮料抓在手里吗? +Holding(BottledDrink) 你能一直拿着瓶装饮料吗? +Holding(Yogurt) 你能把酸奶抓在手里吗? +Holding(Yogurt) 你能一直拿着酸奶吗? +Holding(ADMilk) 你能把AD钙奶抓在手里吗? +Holding(ADMilk) 你能一直拿着AD钙奶吗? +Holding(MilkDrink) 你能把牛奶味的饮料抓在手里吗? +Holding(MilkDrink) 你能一直拿着牛奶味的饮料吗? +Holding(Milk) 你能把牛奶抓在手里吗? +Holding(Milk) 你能一直拿着牛奶吗? +Holding(VacuumCup) 你能把保温杯抓在手里吗? +Holding(VacuumCup) 你能一直拿着保温杯吗? +Holding(Chips) 你能把薯片抓在手里吗? +Holding(Chips) 你能一直拿着薯片吗? +Holding(NFCJuice) 你能把NFC果汁抓在手里吗? +Holding(NFCJuice) 你能一直拿着NFC果汁吗? +Holding(Bernachon) 你能把贝纳颂咖啡抓在手里吗? +Holding(Bernachon) 你能一直拿着贝纳颂咖啡吗? +Holding(SpringWater) 你能把矿泉水抓在手里吗? +Holding(SpringWater) 你能一直拿着矿泉水吗? +Holding(Nothing) 你能把Nothing抓在手里吗? +Holding(Nothing) 你能一直拿着Nothing吗? +On(Coffee,Bar) 你能制作咖啡并把它端到吧台这里来吗? +On(Coffee,Bar) 给我来点咖啡,并把它端到吧台这里来。 +On(Coffee,Bar2) 你能制作咖啡并把它端到另一侧的吧台这里来吗? +On(Coffee,Bar2) 给我来点咖啡,并把它端到另一侧的吧台这里来。 +On(Coffee,WaterTable) 你能制作咖啡并把它端到茶水桌这里来吗? +On(Coffee,WaterTable) 给我来点咖啡,并把它端到茶水桌这里来。 +On(Coffee,CoffeeTable) 你能制作咖啡并把它端到咖啡桌这里来吗? +On(Coffee,CoffeeTable) 给我来点咖啡,并把它端到咖啡桌这里来。 +On(Coffee,Table1) 你能制作咖啡并把它端到前门斜桌子这里来吗? +On(Coffee,Table1) 给我来点咖啡,并把它端到前门斜桌子这里来。 +On(Coffee,Table2) 你能制作咖啡并把它端到大厅长桌子西侧这里来吗? +On(Coffee,Table2) 给我来点咖啡,并把它端到大厅长桌子西侧这里来。 +On(Coffee,Table3) 你能制作咖啡并把它端到大厅长桌子东侧这里来吗? +On(Coffee,Table3) 给我来点咖啡,并把它端到大厅长桌子东侧这里来。 +On(Coffee,BrightTable6) 你能制作咖啡并把它端到后门靠窗边圆桌这里来吗? +On(Coffee,BrightTable6) 给我来点咖啡,并把它端到后门靠窗边圆桌这里来。 +On(Water,Bar) 你能制作水并把它端到吧台这里来吗? +On(Water,Bar) 给我来点水,并把它端到吧台这里来。 +On(Water,Bar2) 你能制作水并把它端到另一侧的吧台这里来吗? +On(Water,Bar2) 给我来点水,并把它端到另一侧的吧台这里来。 +On(Water,WaterTable) 你能制作水并把它端到茶水桌这里来吗? +On(Water,WaterTable) 给我来点水,并把它端到茶水桌这里来。 +On(Water,CoffeeTable) 你能制作水并把它端到咖啡桌这里来吗? +On(Water,CoffeeTable) 给我来点水,并把它端到咖啡桌这里来。 +On(Water,Table1) 你能制作水并把它端到前门斜桌子这里来吗? +On(Water,Table1) 给我来点水,并把它端到前门斜桌子这里来。 +On(Water,Table2) 你能制作水并把它端到大厅长桌子西侧这里来吗? +On(Water,Table2) 给我来点水,并把它端到大厅长桌子西侧这里来。 +On(Water,Table3) 你能制作水并把它端到大厅长桌子东侧这里来吗? +On(Water,Table3) 给我来点水,并把它端到大厅长桌子东侧这里来。 +On(Water,BrightTable6) 你能制作水并把它端到后门靠窗边圆桌这里来吗? +On(Water,BrightTable6) 给我来点水,并把它端到后门靠窗边圆桌这里来。 +On(Dessert,Bar) 你能制作点心并把它端到吧台这里来吗? +On(Dessert,Bar) 给我来点点心,并把它端到吧台这里来。 +On(Dessert,Bar2) 你能制作点心并把它端到另一侧的吧台这里来吗? +On(Dessert,Bar2) 给我来点点心,并把它端到另一侧的吧台这里来。 +On(Dessert,WaterTable) 你能制作点心并把它端到茶水桌这里来吗? +On(Dessert,WaterTable) 给我来点点心,并把它端到茶水桌这里来。 +On(Dessert,CoffeeTable) 你能制作点心并把它端到咖啡桌这里来吗? +On(Dessert,CoffeeTable) 给我来点点心,并把它端到咖啡桌这里来。 +On(Dessert,Table1) 你能制作点心并把它端到前门斜桌子这里来吗? +On(Dessert,Table1) 给我来点点心,并把它端到前门斜桌子这里来。 +On(Dessert,Table2) 你能制作点心并把它端到大厅长桌子西侧这里来吗? +On(Dessert,Table2) 给我来点点心,并把它端到大厅长桌子西侧这里来。 +On(Dessert,Table3) 你能制作点心并把它端到大厅长桌子东侧这里来吗? +On(Dessert,Table3) 给我来点点心,并把它端到大厅长桌子东侧这里来。 +On(Dessert,BrightTable6) 你能制作点心并把它端到后门靠窗边圆桌这里来吗? +On(Dessert,BrightTable6) 给我来点点心,并把它端到后门靠窗边圆桌这里来。 diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description_to_json.py b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description_to_json.py new file mode 100644 index 0000000..9b673be --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/goal_states_with_description_to_json.py @@ -0,0 +1,10 @@ +import os + +with open(os.path.join('./goal_states_with_description.txt'), 'r', encoding='utf-8') as file: + lines = file.readlines() + +with open(os.path.join('./goal_states_with_description.jsonl'), 'w', encoding='utf-8') as file: + + for line in lines: + tmp = line[:-1].split('\t') + file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) diff --git a/BTExpansionCode/EXP/behavior_tree/dataset1224/sentence_expansion.py b/BTExpansionCode/EXP/behavior_tree/dataset1224/sentence_expansion.py new file mode 100644 index 0000000..5cd2be4 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/dataset1224/sentence_expansion.py @@ -0,0 +1,61 @@ +import os +import requests +import urllib3 +from tqdm import tqdm + +######################################## +# 该文件实现了与大模型的简单通信 +######################################## + +# 忽略https的安全性警告 +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + +def single_round(question, prefix=""): + url = "https://45.125.46.134:25344/v1/chat/completions" + headers = {"Content-Type": "application/json"} + data = { + "model": "RoboWaiter", + "messages": [ + { + "role": "system", + # "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" + "content": """ + 假设现在你是咖啡厅的一个顾客,请将以下你对咖啡厅服务员说的话改写成更清晰更合理的顾客表述。注意:句中的你指的是咖啡厅服务员,也不要说能帮我。 + 例如:麻烦你去一下吧台。可以转述成:服务员,你能去下吧台吗? + 另一个例子:请你拿一下酸奶到吧台位置。可以转述成:服务员,拿一杯酸奶来吧台。 + + """ + }, + { + "role": "user", + "content": prefix + question + } + ] + } + + response = requests.post(url, headers=headers, json=data, verify=False) + + if response.status_code == 200: + result = response.json() + return result['choices'][0]['message']['content'].strip() + else: + return "大模型请求失败:", response.status_code + + +if __name__ == '__main__': + with open('./goal_states_with_description.txt', 'r', encoding='utf-8') as file: + lines = file.readlines() + + output_file = './expansion_out/output2.txt' + with open(output_file, 'a', encoding='utf-8') as file: + file.truncate(0) + for line in tqdm(lines): + tmp = line[:-1].split('\t') + # file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) + question = tmp[1] + # print(single_round(question)) + # print(tmp[1]) + with open(output_file, 'a', encoding='utf-8') as file: + file.write(tmp[0] + "\t" + single_round(question, prefix="现在改写一下句子:") + '\n') + print("输出完成") diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/BTExpansionAlgorithm.py b/BTExpansionCode/EXP/behavior_tree/obtea/BTExpansionAlgorithm.py new file mode 100644 index 0000000..0de8662 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/BTExpansionAlgorithm.py @@ -0,0 +1,316 @@ +import random +import numpy as np +import copy +import time +from robowaiter.behavior_tree.obtea.BehaviorTree import Leaf,ControlBT +from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action,generate_random_state,state_transition,conflict + + + +# 本文所提出的完备规划算法 +class BTalgorithm: + def __init__(self,verbose=False): + self.bt = None + self.nodes = [] + self.traversed = [] + self.conditions = [] + self.conditions_index = [] + self.verbose = verbose + # print (self.conditions_list[0]) + + def clear(self): + self.bt = None + self.nodes = [] + self.traversed = [] + self.conditions = [] + self.conditions_index = [] + + # 运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt + def run_algorithm_selTree(self, start, goal, actions): + # 初始行为树只包含目标条件 + bt = ControlBT(type='cond') + g_node = Leaf(type='cond', content=goal,mincost=0) + bt.add_child([g_node]) + + self.conditions.append(goal) + self.nodes.append(g_node) # condition node list + # 尝试在初始状态执行行为树 + val, obj = bt.tick(start) + canrun = False + if val == 'success' or val == 'running': + canrun = True + # 循环扩展,直到行为树能够在初始状态运行 + while not canrun: + index = -1 + for i in range(0, len(self.nodes)): + if self.nodes[i].content in self.traversed: + continue + else: + c_node = self.nodes[i] + index = i + break + if index == -1: # 树中结点扩展完毕,仍无法运行行为树,返回失败 + print('Failure') + return False + # 根据所选择条件结点扩展子树 + subtree = ControlBT(type='?') + subtree.add_child([copy.deepcopy(c_node)]) # 子树首先保留所扩展结点 + c = c_node.content # 子树所扩展结点对应的条件(一个文字的set) + + for i in range(0, len(actions)): # 选择符合条件的行动, + # print("have action") + if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set(): + # print ("pass add") + if (c - actions[i].del_set) == c: + # print("pass delete") + c_attr = (actions[i].pre | c) - actions[i].add + valid = True + + # 这样剪枝存在错误性 + if conflict(c_attr): + continue + + for j in self.traversed: # 剪枝操作 + if j <= c_attr: + valid = False + break + + if valid: + # print("pass prune") + # 构建行动的顺序结构 + sequence_structure = ControlBT(type='>') + c_attr_node = Leaf(type='cond', content=c_attr, mincost=0) + a_node = Leaf(type='act', content=actions[i], mincost=0) + sequence_structure.add_child([c_attr_node, a_node]) + # 将顺序结构添加到子树 + subtree.add_child([sequence_structure]) + + self.nodes.append(c_attr_node) + # 将原条件结点c_node替换为扩展后子树subtree + parent_of_c = c_node.parent + parent_of_c.children[0] = subtree + # 记录已扩展条件 + self.traversed.append(c) + # 尝试在初始状态运行行为树 + val, obj = bt.tick(start) + canrun = False + if val == 'success' or val == 'running': + canrun = True + return bt + + + + def run_algorithm(self, start, goal, actions): + # goal_ls = goal.replace(" ", "") + # goal_ls = goal_ls.split("|") + self.bt = ControlBT(type='cond') + subtree = ControlBT(type='?') + if len(goal) > 1: + for g in goal: + print("goal",g) + bt_sel_tree = self.run_algorithm_selTree(start, g, actions) + print("bt_sel_tree.children",bt_sel_tree.children) + # print(bt_sel_tree.children[0]) + subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])]) + self.bt.add_child([subtree]) + else: + self.bt = self.run_algorithm_selTree(start, goal[0], actions) + return True + + def print_solution(self): + print(len(self.nodes)) + # for i in self.nodes: + # if isinstance(i,Node): + # print (i.content) + # else: + # print (i) + + # 树的dfs + def dfs_ptml(self,parnode,is_root=False): + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == 'cond': + + if is_root and len(child.content) > 1: + # 把多个 cond 串起来 + self.ptml_string += "sequence{\n" + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + self.ptml_string += '}\n' + else: + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + + elif child.type == 'act': + if '(' not in child.content.name: + self.ptml_string += 'act ' + child.content.name + "()\n" + else: + self.ptml_string += 'act ' + child.content.name + "\n" + elif isinstance(child, ControlBT): + if child.type == '?': + self.ptml_string += "selector{\n" + self.dfs_ptml(parnode=child) + elif child.type == '>': + self.ptml_string += "sequence{\n" + self.dfs_ptml( parnode=child) + self.ptml_string += '}\n' + + + def get_ptml(self): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0],is_root=True) + self.ptml_string += '}\n' + return self.ptml_string + + + def save_ptml_file(self,file_name): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0]) + self.ptml_string += '}\n' + with open(f'./{file_name}.ptml', 'w') as file: + file.write(self.ptml_string) + return self.ptml_string + + +# 所对比的基准算法,具体扩展细节有差异 + + + +if __name__ == '__main__': + random.seed(1) + # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 + literals_num = 10 + depth = 10 + iters = 10 + total_tree_size = [] + total_action_num = [] + total_state_num = [] + total_steps_num = [] + # fail_count=0 + # danger_count=0 + success_count = 0 + failure_count = 0 + planning_time_total = 0.0 + # 实验1000次 + for count in range(0, 1000): + # 生成一个规划问题,包括随机的状态和行动,以及目标状态 + states = [] + actions = [] + start = generate_random_state(literals_num) + state = start + states.append(state) + # print (state) + for i in range(0, depth): + a = Action() + a.generate_from_state(state, literals_num) + if not a in actions: + actions.append(a) + state = state_transition(state, a) + if state in states: + pass + else: + states.append(state) + # print(state) + + goal = states[-1] + state = start + for i in range(0, iters): + a = Action() + a.generate_from_state(state, literals_num) + if not a in actions: + actions.append(a) + state = state_transition(state, a) + if state in states: + pass + else: + states.append(state) + state = random.sample(states, 1)[0] + # 选择测试本文算法btalgorithm,或对比算法weakalgorithm + algo = BTalgorithm() + # algo = Weakalgorithm() + start_time = time.time() + if algo.run_algorithm(start, goal, list(actions)): # 运行算法,规划后行为树为algo.bt + total_tree_size.append(algo.bt.count_size() - 1) + else: + print("error") + end_time = time.time() + planning_time_total += (end_time - start_time) + + # 开始从初始状态运行行为树,测试 + state = start + steps = 0 + val, obj = algo.bt.tick(state) # tick行为树,obj为所运行的行动 + while val != 'success' and val != 'failure': # 运行直到行为树成功或失败 + state = state_transition(state, obj) + val, obj = algo.bt.tick(state) + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if (steps >= 500): # 至多运行500步 + break + if not goal <= state: # 错误解,目标条件不在执行后状态满足 + # print ("wrong solution",steps) + failure_count += 1 + + else: # 正确解,满足目标条件 + # print ("right solution",steps) + success_count += 1 + total_steps_num.append(steps) + algo.clear() + total_action_num.append(len(actions)) + total_state_num.append(len(states)) + print(success_count, failure_count) # 算法成功和失败次数 + + print(np.mean(total_tree_size), np.std(total_tree_size, ddof=1)) # 1000次测试树大小 + print(np.mean(total_steps_num), np.std(total_steps_num, ddof=1)) + print(np.mean(total_state_num)) # 1000次问题的平均状态数 + print(np.mean(total_action_num)) # 1000次问题的平均行动数 + print(planning_time_total, planning_time_total / 1000.0) + + # print(total_state_num) + + # casestudy begin 对应论文的case study,包含三个行动的移动机械臂场景 + + actions = [] + a = Action(name='movebtob') + a.pre = {1, 2} + a.add = {3} + a.del_set = {1, 4} + actions.append(a) + a = Action(name='moveatob') + a.pre = {1} + a.add = {5, 2} + a.del_set = {1, 6} + actions.append(a) + a = Action(name='moveatoa') + a.pre = {7} + a.add = {8, 2} + a.del_set = {7, 6} + actions.append(a) + + start = {1, 7, 4, 6} + goal = {3} + algo = BTalgorithm() + algo.clear() + algo.run_algorithm(start, goal, list(actions)) + state = start + steps = 0 + val, obj = algo.bt.tick(state) + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + print(obj.name) + val, obj = algo.bt.tick(state) + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if not goal <= state: + print("wrong solution", steps) + else: + print("right solution", steps) + # algo.bt.print_nodes() + print(algo.bt.count_size() - 1) + algo.clear() + +# case study end diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/BehaviorTree.py b/BTExpansionCode/EXP/behavior_tree/obtea/BehaviorTree.py new file mode 100644 index 0000000..c8f3878 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/BehaviorTree.py @@ -0,0 +1,95 @@ + +#叶结点 +class Leaf: + def __init__(self,type,content,mincost=0): + self.type=type + self.content=content #conditionset or action + self.parent=None + self.parent_index=0 + self.mincost=mincost + + # tick 叶节点,返回返回值以及对应的条件或行动对象self.content + def tick(self,state): + if self.type=='cond': + if self.content <= state: + return 'success',self.content + else: + return 'failure',self.content + if self.type=='act': + if self.content.pre<=state: + return 'running',self.content #action + else: + return 'failure',self.content + + def __str__(self): + print( self.content) + return '' + + def print_nodes(self): + print(self.content) + + def count_size(self): + return 1 + + +#可能包含控制结点的行为树 +class ControlBT: + def __init__(self,type): + self.type=type + self.children=[] + self.parent=None + self.parent_index=0 + + + def add_child(self,subtree_list): + for subtree in subtree_list: + self.children.append(subtree) + subtree.parent=self + subtree.parent_index=len(self.children)-1 + + # tick行为树,根据不同控制结点逻辑tick子结点 + def tick(self,state): + if len(self.children) < 1: + print("error,no child") + if self.type =='?':#选择结点,即或结点 + for child in self.children: + val,obj=child.tick(state) + if val=='success': + return val,obj + if val=='running': + return val,obj + return 'failure','?fails' + if self.type =='>':#顺序结点,即与结点 + for child in self.children: + val,obj=child.tick(state) + if val=='failure': + return val,obj + if val=='running': + return val,obj + return 'success', '>success' + if self.type =='act':#行动结点 + return self.children[0].tick(state) + if self.type =='cond':#条件结点 + return self.children[0].tick(state) + + def getFirstChild(self): + return self.children[0] + + def __str__(self): + print(self.type+'\n') + for child in self.children: + print (child) + return '' + + def print_nodes(self): + print(self.type) + for child in self.children: + child.print_nodes() + + # 递归统计树中结点数 + def count_size(self): + result=1 + for child in self.children: + result+= child.count_size() + return result + diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/MakeCoffee.ptml b/BTExpansionCode/EXP/behavior_tree/obtea/MakeCoffee.ptml new file mode 100644 index 0000000..d2f0b28 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/MakeCoffee.ptml @@ -0,0 +1,59 @@ +selector{ +cond At(Table,Coffee) +selector{ +cond Holding(Coffee), At(Robot,Table) +act PutDown(Table,Coffee) +} +selector{ +cond NotHolding, At(Robot,Coffee), At(Robot,Table) +act PickUp(Coffee) +} +selector{ +cond Holding(Coffee), Available(Table) +act MoveTo(Table) +} +selector{ +cond Holding(VacuumCup), At(Robot,Coffee), At(Robot,Table) +act PutDown(Table,VacuumCup) +} +selector{ +cond NotHolding, At(Robot,CoffeeMachine), At(Robot,Table) +act OpCoffeeMachine +} +selector{ +cond NotHolding, Available(Table), At(Robot,Coffee) +act PickUp(Coffee) +} +selector{ +cond Holding(VacuumCup), At(Robot,Table), At(Robot,CoffeeMachine) +act PutDown(Table,VacuumCup) +} +selector{ +cond NotHolding, Available(Coffee), Available(Table) +act MoveTo(Coffee) +} +selector{ +cond NotHolding, Available(Table), At(Robot,CoffeeMachine) +act OpCoffeeMachine +} +selector{ +cond Holding(VacuumCup), Available(Coffee), Available(Table), At(Robot,Table) +act PutDown(Table,VacuumCup) +} +selector{ +cond Available(CoffeeMachine), NotHolding, Available(Table) +act MoveTo(CoffeeMachine) +} +selector{ +cond Holding(VacuumCup), Available(Coffee), Available(Table) +act MoveTo(Table) +} +selector{ +cond Available(CoffeeMachine), Holding(VacuumCup), Available(Table), At(Robot,Table) +act PutDown(Table,VacuumCup) +} +selector{ +cond Available(CoffeeMachine), Holding(VacuumCup), Available(Table) +act MoveTo(Table) +} +} diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py b/BTExpansionCode/EXP/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py new file mode 100644 index 0000000..5fc148f --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py @@ -0,0 +1,429 @@ +import copy +import random +from robowaiter.behavior_tree.obtea.BehaviorTree import Leaf,ControlBT + + + +class CondActPair: + def __init__(self, cond_leaf,act_leaf): + self.cond_leaf = cond_leaf + self.act_leaf = act_leaf + +#定义行动类,行动包括前提、增加和删除影响 +class Action: + def __init__(self,name='anonymous action',pre=set(),add=set(),del_set=set(),cost=1): + self.pre=copy.deepcopy(pre) + self.add=copy.deepcopy(add) + self.del_set=copy.deepcopy(del_set) + self.name=name + self.cost=cost + + def __str__(self): + return self.name + # 从状态随机生成一个行动 + def generate_from_state(self,state,num): + for i in range(0,num): + if i in state: + if random.random() >0.5: + self.pre.add(i) + if random.random() >0.5: + self.del_set.add(i) + continue + if random.random() > 0.5: + self.add.add(i) + continue + if random.random() >0.5: + self.del_set.add(i) + def print_action(self): + print (self.pre) + print(self.add) + print(self.del_set) + +#生成随机状态 +def generate_random_state(num): + result = set() + for i in range(0,num): + if random.random()>0.5: + result.add(i) + return result +#从状态和行动生成后继状态 +def state_transition(state,action): + if not action.pre <= state: + print ('error: action not applicable') + return state + new_state=(state | action.add) - action.del_set + return new_state + + +def conflict(c): + have_at = False + have_holding = False + for str in c: + if 'At' in str: + if not have_at: + have_at = True + else: + return True + + if 'Holding' in str: + if not have_holding: + have_holding = True + else: + return True + return False + + +#本文所提出的完备规划算法 +class OptBTExpAlgorithm: + def __init__(self,verbose=False): + self.bt = None + self.nodes=[] + self.traversed=[] + self.mounted=[] + self.conditions=[] + self.conditions_index=[] + self.verbose=verbose + self.goal=None + self.bt_merge = True + + def clear(self): + self.bt = None + self.goal = None + self.nodes = [] + self.traversed = [] #存cond + self.expanded = [] #存整个 + self.conditions = [] + self.conditions_index = [] + + #运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt + # def run_algorithm(self,goal,actions,scene): + def run_algorithm_selTree(self, start, goal, actions): + # self.scene = scene + self.goal = goal + if self.verbose: + print("\n算法开始!") + + + bt = ControlBT(type='cond') + # 初始行为树只包含目标条件 + gc_node = Leaf(type='cond', content=goal,mincost=0) # 为了统一,都成对出现 + ga_node = Leaf(type='act', content=None, mincost=0) + subtree = ControlBT(type='?') + subtree.add_child([copy.deepcopy(gc_node)]) # 子树首先保留所扩展结 + bt.add_child([subtree]) + + # self.conditions.append(goal) + cond_anc_pair = CondActPair(cond_leaf=gc_node,act_leaf=ga_node) + self.nodes.append(copy.deepcopy(cond_anc_pair)) # the set of explored but unexpanded conditions + self.traversed = [goal] # the set of expanded conditions + + while len(self.nodes)!=0: + + # Find the condition for the shortest cost path + pair_node = None + min_cost = float ('inf') + index= -1 + for i,cond_anc_pair in enumerate(self.nodes): + + ########### 剪枝操作 + # cond_tmp = cond_anc_pair.cond_leaf.content + # valid = True + # for pn in self.expanded: # 剪枝操作 + # if isinstance(pn.act_leaf.content,Action): + # if pn.act_leaf.content.name==cond_anc_pair.act_leaf.content.name and cond_tmp <= pn.cond_leaf.content: + # valid = False + # break + # if not valid: + # continue + ########### 剪枝操作 + + if cond_anc_pair.cond_leaf.mincost < min_cost: + min_cost = cond_anc_pair.cond_leaf.mincost + pair_node = copy.deepcopy(cond_anc_pair) + index = i + + if self.verbose: + print("选择扩展条件结点:",pair_node.cond_leaf.content) + # Update self.nodes and self.traversed + self.nodes.pop(index) # the set of explored but unexpanded conditions. self.nodes.remove(pair_node) + c = pair_node.cond_leaf.content # 子树所扩展结点对应的条件(一个文字的set) + + # Mount the action node and extend BT. T = Eapand(T,c,A(c)) + if c!=goal: + if c!=set(): + + # 挂在上去的时候判断要不要挂载 + ########### 剪枝操作 发现行不通 + # valid = True + # for pn in self.expanded: # 剪枝操作 + # if isinstance(pn.act_leaf.content,Action): + # if pn.act_leaf.content.name==pair_node.act_leaf.content.name and c <= pn.cond_leaf.content: + # valid = False + # break + # if valid: + ########### 剪枝操作 + sequence_structure = ControlBT(type='>') + sequence_structure.add_child( + [copy.deepcopy(pair_node.cond_leaf), copy.deepcopy(pair_node.act_leaf)]) + subtree.add_child([copy.deepcopy(sequence_structure)]) # subtree 是回不断变化的,它的父亲是self.bt + self.expanded.append(copy.deepcopy(pair_node)) + # 增加实时条件判断,满足条件就不再扩展 + # if c <= self.scene.state["condition_set"]: + if c <= start: + if self.bt_merge: + bt = copy.deepcopy(self.merge_adjacent_conditions_stack(bt)) + return bt,min_cost + # return True + else: + subtree.add_child([copy.deepcopy(pair_node.act_leaf)]) + + + if self.verbose: + print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \ + % (pair_node.act_leaf.content.name, pair_node.cond_leaf.content, + pair_node.cond_leaf.mincost)) + + if self.verbose: + print("遍历所有动作, 寻找符合条件的动作") + # 遍历所有动作, 寻找符合条件的动作 + current_mincost = pair_node.cond_leaf.mincost # 当前的最短路径是多少 + + for i in range(0, len(actions)): + + if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set(): + if (c - actions[i].del_set) == c: + if self.verbose: + print("———— 满足条件可以扩展:",actions[i].name) + c_attr = (actions[i].pre | c) - actions[i].add + + # 这样剪枝存在错误性 + if conflict(c_attr): + continue + + # 剪枝操作,现在的条件是以前扩展过的条件的超集 + valid = True + for j in self.traversed: # 剪枝操作 + if j <= c_attr: + valid = False + if self.verbose: + print("———— --被剪枝:",actions[i].name,"c_attr=",c_attr) + break + + if valid: + c_attr_node = Leaf(type='cond', content=c_attr, mincost=current_mincost + actions[i].cost) + a_attr_node = Leaf(type='act', content=actions[i], mincost=current_mincost + actions[i].cost) + cond_anc_pair = CondActPair(cond_leaf=c_attr_node, act_leaf=a_attr_node) + self.nodes.append(copy.deepcopy(cond_anc_pair)) # condition node list + self.traversed.append(c_attr) # 重点 the set of expanded conditions + # 把符合条件的动作节点都放到列表里 + if self.verbose: + print("———— -- %s 符合条件放入列表,对应的c为 %s" % (actions[i].name,c_attr),"cost=",current_mincost + actions[i].cost) + if self.bt_merge: + bt = copy.deepcopy(self.merge_adjacent_conditions_stack(bt)) + if self.verbose: + print("算法结束!\n") + return bt,min_cost + # return True + + def run_algorithm(self, start, goal, actions): + self.bt = ControlBT(type='cond') + subtree = ControlBT(type='?') + + subtree_with_costs_ls=[] + + if len(goal) > 1: + for g in goal: + bt_sel_tree,mincost = self.run_algorithm_selTree(start, g, actions) + subtree_with_costs_ls.append((bt_sel_tree,mincost)) + # 要排个序再一次add + # subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])]) + # self.bt.add_child([subtree]) + sorted_trees = sorted(subtree_with_costs_ls, key=lambda x: x[1]) + for tree,cost in sorted_trees: + subtree.add_child([copy.deepcopy(tree.children[0])]) + self.bt.add_child([subtree]) + else: + self.bt,mincost = self.run_algorithm_selTree(start, goal[0], actions) + return True + + def merge_adjacent_conditions_stack(self,bt_sel): + # 只针对第一层合并,之后要考虑层层递归合并 + 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(bt_sel.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] + if isinstance(last_child, ControlBT) and last_child.type == '>': + set1 = last_child.children[0].content + set2 = child.children[0].content + inter = set1 & set2 + if inter!=set(): + c1 = set1-set2 + c2 = set2-set1 + inter_node = Leaf(type='cond', content=inter) + c1_node = Leaf(type='cond', content=c1) + c2_node = Leaf(type='cond', content=c2) + a1_node = copy.deepcopy(last_child.children[1]) + a2_node = copy.deepcopy(child.children[1]) + + + # set1<=set2,此时set2对应的动作永远不会执行 + if (c1==set() and isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action)): + continue + + # 再写一个特殊情况处理,三个结点动作last 遇到 两个结点 且动作相同 + if len(last_child.children)==3 and \ + isinstance(last_child.children[2], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[2].content, Action) and isinstance( child.children[1].content, Action) \ + and last_child.children[2].content.name == child.children[1].content.name \ + and c1==set() and c2!=set(): + last_child.children[1].add_child([copy.deepcopy(c2_node)]) + continue + elif len(last_child.children)==3: + stack.append(child) + continue + + # 判断动作相不相同 + if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action) \ + and last_child.children[1].content.name == child.children[1].content.name: + + if c2==set(): + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(a1_node)]) + else: + _sel = ControlBT(type='?') + _sel.add_child([copy.deepcopy(c1_node), copy.deepcopy(c2_node)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(_sel),copy.deepcopy(a1_node)]) + else: + if c1 == set(): + seq1 = copy.deepcopy(last_child.children[1]) + else: + seq1 = ControlBT(type='>') + seq1.add_child([copy.deepcopy(c1_node), copy.deepcopy(a1_node)]) + + if c2 == set(): + seq2 = copy.deepcopy(child.children[1]) + else: + seq2 = ControlBT(type='>') + seq2.add_child([copy.deepcopy(c2_node), copy.deepcopy(a2_node)]) + sel = ControlBT(type='?') + sel.add_child([copy.deepcopy(seq1), copy.deepcopy(seq2)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(sel)]) + + stack.pop() + stack.append(tmp_tree) + + else: + stack.append(child) + else: + stack.append(child) + else: + stack.append(child) + + for tree in stack: + sbtree.add_child([tree]) + bt_sel = copy.deepcopy(bt) + return bt_sel + + + + def print_solution(self): + print("========= BT ==========") # 树的bfs遍历 + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + print("Parrent:", parnode.type) + for child in parnode.children: + if isinstance(child, Leaf): + print("---- Leaf:", child.content) + elif isinstance(child, ControlBT): + print("---- ControlBT:", child.type) + nodes_ls.append(child) + print() + nodes_ls.pop(0) + print("========= BT ==========\n") + + # 返回所有能到达目标状态的初始状态 + def get_all_state_leafs(self): + state_leafs=[] + + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == "cond": + state_leafs.append(child.content) + elif isinstance(child, ControlBT): + nodes_ls.append(child) + nodes_ls.pop(0) + + return state_leafs + + + # 树的dfs + def dfs_ptml(self,parnode,is_root=False): + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == 'cond': + + if is_root and len(child.content) > 1: + # 把多个 cond 串起来 + self.ptml_string += "sequence{\n" + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + self.ptml_string += '}\n' + else: + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + + elif child.type == 'act': + if '(' not in child.content.name: + self.ptml_string += 'act ' + child.content.name + "()\n" + else: + self.ptml_string += 'act ' + child.content.name + "\n" + elif isinstance(child, ControlBT): + if child.type == '?': + self.ptml_string += "selector{\n" + self.dfs_ptml(parnode=child) + elif child.type == '>': + self.ptml_string += "sequence{\n" + self.dfs_ptml( parnode=child) + self.ptml_string += '}\n' + + + def get_ptml(self): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0],is_root=True) + self.ptml_string += '}\n' + return self.ptml_string + + + def save_ptml_file(self,file_name): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0]) + self.ptml_string += '}\n' + with open(f'./{file_name}.ptml', 'w') as file: + file.write(self.ptml_string) + return self.ptml_string diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/README.assets/image-20231103191141047.png b/BTExpansionCode/EXP/behavior_tree/obtea/README.assets/image-20231103191141047.png new file mode 100644 index 0000000..6453647 Binary files /dev/null and b/BTExpansionCode/EXP/behavior_tree/obtea/README.assets/image-20231103191141047.png differ diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/README.md b/BTExpansionCode/EXP/behavior_tree/obtea/README.md new file mode 100644 index 0000000..1ddd4a6 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/README.md @@ -0,0 +1,125 @@ + + +## 代码说明 + +### 1. `BehaviorTree.py` 实现行为树叶子结点和非叶子结点的定义 + +- **Leaf**:表示叶节点,可以是动作(`act`)或条件(`cond`)。 +- **ControlBT**:代表可能包含控制节点的行为树。它们可以是选择器(`?`)、序列(`>`)、动作节点(`act`)或条件节点(`cond`)。 +- 上述两个类都包含 `tick` 方法。 + +### 2. `OptimalBTExpansionAlgorithm.py` 实现最优行为树扩展算法 + +![image-20231103191141047](README.assets/image-20231103191141047.png) + +定义行动类 +```python +#定义行动类,行动包括前提、增加和删除影响 +class Action: + def __init__(self,name='anonymous action',pre=set(),add=set(),del_set=set(),cost=1): + self.pre=copy.deepcopy(pre) + self.add=copy.deepcopy(add) + self.del_set=copy.deepcopy(del_set) + self.name=name + self.cost=cost + + def __str__(self): + return self.name +``` + +调用算法 +```python +algo = OptBTExpAlgorithm(verbose=True) +algo.clear() +algo.run_algorithm(start, goal, actions) # 使用算法得到行为树在 algo.bt +algo.print_solution() # 打印行为树 +val, obj = algo.bt.tick(state) # 执行行为树 +algo.save_ptml_file("bt.ptml") # 保存行为树为 ptml 文件 +``` + +### 3. **`tools.py`** 实现打印数据、行为树测试等模块 + +使用方法 + +```python +print_action_data_table(goal,start,actions) # 打印所有变量 + +# 行为树鲁棒性测试,随机生成规划问题 +# 设置生成规划问题集的超参数:文字数、解深度、迭代次数 +seed=1 +literals_num=10 +depth = 10 +iters= 10 +BTTest(seed=seed,literals_num=literals_num,depth=depth,iters=iters) +``` + +### 4. `example.py` 中设计规划案例 goals, start, actions + +```python +def MoveBtoB (): + actions=[] + a = Action(name="Move(b,ab)") + a.pre={'Free(ab)','WayClear'} + a.add={'At(b,ab)'} + a.del_set= {'Free(ab)','At(b,pb)'} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,ab)") + a.pre={'Free(ab)'} + a.add={'Free(ab)','WayClear'} + a.del_set={'Free(ab)','At(s,ps)'} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,as)") + a.pre={'Free(as)'} + a.add={'At(s,ps)','WayClear'} + a.del_set={'Free(as)','At(s,ps)'} + a.cost = 1 + actions.append(a) + + start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} + goal= {'At(b,ab)'} + return goal,start,actions +``` + +### 5. `opt_bt_exp_main.py` 为主函数,在此演示如何调用最优行为树扩展算法得到完全扩展最优行为树 + +初始化的时候:传入 actions (包含 pre,add,del,cost). +调用的时候,传入 goal 状态集合 (set类型),返回完全最优扩展行为树的 ptml 形式 (string类型) + +```python +actions=[ + Action(name='PutDown(Table,Coffee)', pre={'Holding(Coffee)','At(Robot,Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1) + ………… +] +algo = BTOptExpInterface(actions) + +goal = {'At(Table,Coffee)'} +ptml_string = algo.process(goal,start) +print(ptml_string) + +``` +两种检测方法,用于检测当前状态 `start` 能否到达目标状态 `goal` + +```python +# 判断初始状态能否到达目标状态 +start = {'At(Robot,Bar)', 'Holding(VacuumCup)', 'Available(Table)', 'Available(CoffeeMachine)','Available(FrontDesk)'} + +# 方法一:算法返回所有可能的初始状态,在里面看看有没有对应的初始状态 +right_bt = algo.find_all_leaf_states_contain_start(start) +if not right_bt: + print("ERROR1: The current state cannot reach the goal state!") +else: + print("Right1: The current state can reach the goal state!") + +# 方法二:预先跑一边行为树,看能否到达目标状态 +right_bt2 = algo.run_bt_from_start(goal,start) +if not right_bt2: + print("ERROR2: The current state cannot reach the goal state!") +else: + print("Right2: The current state can reach the goal state!") + +``` + diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/__init__.py b/BTExpansionCode/EXP/behavior_tree/obtea/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/examples.py b/BTExpansionCode/EXP/behavior_tree/obtea/examples.py new file mode 100644 index 0000000..f2d52e4 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/examples.py @@ -0,0 +1,174 @@ + +from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action + + + +def MakeCoffee(): + actions=[ + Action(name='Put(Table,Coffee)', pre={'Holding(Coffee)','At(Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1), + Action(name='Put(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1), + + Action(name='Grasp(Coffee)', pre={'NotHolding','At(Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1), + + Action(name='MoveTo(Table)', pre={'Exist(Table)'}, add={'At(Table)'}, del_set={'At(FrontDesk)','At(Coffee)','At(CoffeeMachine)'}, cost=1), + Action(name='MoveTo(Coffee)', pre={'Exist(Coffee)'}, add={'At(Coffee)'}, del_set={'At(FrontDesk)','At(Table)','At(CoffeeMachine)'}, cost=1), + Action(name='MoveTo(CoffeeMachine)', pre={'Exist(CoffeeMachine)'}, add={'At(CoffeeMachine)'}, del_set={'At(FrontDesk)','At(Coffee)','At(Table)'}, cost=1), + + Action(name='OpCoffeeMachine', pre={'At(CoffeeMachine)','NotHolding'}, add={'Exist(Coffee)','At(Coffee)'}, del_set=set(), cost=1), + ] + + start = {'At(FrontDesk)','Holding(VacuumCup)','Exist(Table)','Exist(CoffeeMachine)','Exist(FrontDesk)'} + goal = {'At(Table,Coffee)'} + return goal,start,actions + +# 本例子中,将 VacuumCup 放到 FrontDesk,比 MoveTo(Table) 再 Put(Table,VacuumCup) 的 cost 要小 +def MakeCoffeeCost(): + actions=[ + Action(name='PutDown(Table,Coffee)', pre={'Holding(Coffee)','At(Robot,Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1), + Action(name='PutDown(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Robot,Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1), + + Action(name='PickUp(Coffee)', pre={'NotHolding','At(Robot,Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1), + + Action(name='MoveTo(Table)', pre={'Available(Table)'}, add={'At(Robot,Table)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,CoffeeMachine)'}, cost=1), + Action(name='MoveTo(Coffee)', pre={'Available(Coffee)'}, add={'At(Robot,Coffee)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Table)','At(Robot,CoffeeMachine)'}, cost=1), + Action(name='MoveTo(CoffeeMachine)', pre={'Available(CoffeeMachine)'}, add={'At(Robot,CoffeeMachine)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,Table)'}, cost=1), + + Action(name='OpCoffeeMachine', pre={'At(Robot,CoffeeMachine)','NotHolding'}, add={'Available(Coffee)','At(Robot,Coffee)'}, del_set=set(), cost=1), + ] + + start = {'At(Robot,Bar)','Holding(VacuumCup)','Available(Table)','Available(CoffeeMachine)','Available(FrontDesk)'} + goal = {'At(Table,Coffee)'} + + return goal,start,actions + + +# test +def Test(): + actions=[ + Action(name='a1', pre={6}, add={0,2,4}, del_set={1,5}, cost=1), + Action(name='a2', pre=set(), add={0,1}, del_set=set(), cost=1), + Action(name='a3', pre={1,6}, add={0,2,3,5}, del_set={1,6}, cost=1), + Action(name='a4', pre={0,2,3}, add={4,5}, del_set={0,6}, cost=1), + Action(name='a5', pre={0,1,4}, add={2,3,6}, del_set={0}, cost=1), + ] + + start = {1,2,6} + goal={0,1,2,4,6} + return goal,start,actions + +# def Test(): +# actions=[ +# Action(name='a1', pre={2}, add={1}, del_set=set(), cost=1), +# Action(name='a2', pre=set(), add={1}, del_set={0,2}, cost=1), +# Action(name='a3', pre={1}, add=set(), del_set={0,2}, cost=1), +# Action(name='a4', pre=set(), add={0}, del_set=set(), cost=1), +# Action(name='a5', pre={1}, add={0,2}, del_set={1}, cost=1), +# Action(name='a6', pre={1}, add=set(), del_set={0,1,2}, cost=1), +# Action(name='a7', pre={1}, add={2}, del_set={0, 2}, cost=1), +# ] +# +# start = {1,2} +# goal={0,1} +# return goal,start,actions + + +# todo: 最原始的例子 +def MoveBtoB_num (): + actions=[] + a = Action(name='a1') + a.pre={1,4} + a.add={"c_goal"} + a.del_set={1,4} + a.cost = 1 + actions.append(a) + + a=Action(name='a2') + a.pre={1,2,3} + a.add={"c_goal"} + a.del_set={1,2,3} + a.cost = 1 + actions.append(a) + + a=Action(name='a3') + a.pre={1,2} + a.add={4} + a.del_set={2} + a.cost = 1 + actions.append(a) + + a=Action(name='a4') + a.pre={"c_start"} + a.add={1,2,3} + a.del_set={"c_start",4} + a.cost = 1 + actions.append(a) + + start = {"c_start"} + goal={"c_goal"} + return goal,start,actions + + +# todo: 最原始的例子 +def MoveBtoB (): + actions=[] + a = Action(name="Move(b,ab)") #'movebtob' + a.pre={'Free(ab)','WayClear'} #{1,2} + a.add={'At(b,ab)'} #{3} + a.del_set= {'Free(ab)','At(b,pb)'} #{1,4} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,ab)") #'moveatob' + a.pre={'Free(ab)'} #{1} + a.add={'Free(ab)','WayClear'} #{5,2} + a.del_set={'Free(ab)','At(s,ps)'} #{1,6} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,as)") #'moveatoa' + a.pre={'Free(as)'} #{7} + a.add={'At(s,ps)','WayClear'} #{8,2} + a.del_set={'Free(as)','At(s,ps)'} #{7,6} + a.cost = 1 + actions.append(a) + + start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} #{1,7,4,6} + goal= {'At(b,ab)'} #{3} + return goal,start,actions + + +# 小蔡师兄论文里的例子 +def Cond2BelongsToCond3(): + actions=[] + a = Action(name='a1') + a.pre={1,4} + a.add={"c_goal"} + a.del_set={1,4} + a.cost = 1 + actions.append(a) + + a=Action(name='a2') + a.pre={1,2,3} + a.add={"c_goal"} + a.del_set={1,2,3} + a.cost = 100 + actions.append(a) + + a=Action(name='a3') + a.pre={1,2} + a.add={4} + a.del_set={2} + a.cost = 1 + actions.append(a) + + a=Action(name='a4') + a.pre={"c_start"} + a.add={1,2,3} + a.del_set={"c_start",4} + a.cost = 1 + actions.append(a) + + start = {"c_start"} + goal={"c_goal"} + return goal,start,actions + diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/opt_bt_exp_main.py b/BTExpansionCode/EXP/behavior_tree/obtea/opt_bt_exp_main.py new file mode 100644 index 0000000..112d144 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/opt_bt_exp_main.py @@ -0,0 +1,131 @@ + +from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm,state_transition # 调用最优行为树扩展算法 +from robowaiter.behavior_tree.obtea.BTExpansionAlgorithm import BTalgorithm # 调用最优行为树扩展算法 + +from robowaiter.behavior_tree.obtea.examples import * + + +# 封装好的主接口 +class BTOptExpInterface: + def __init__(self, action_list,scene): + """ + Initialize the BTOptExpansion with a list of actions. + :param action_list: A list of actions to be used in the behavior tree. + """ + # self.actions = [] + # for act in action_list: + # a = Action(name=act.name) + # a.pre=act['pre'] + # a.add=act['add'] + # a.del_set= act['del_set'] + # a.cost = 1 + # self.actions.append(a) + self.actions = action_list + self.has_processed = False + + self.scene = scene + self.bt_algo_opt = self.scene.bt_algo_opt + + + def process(self, goal): + """ + Process the input sets and return a string result. + :param input_set: The set of goal states and the set of initial states. + :return: A PTML string representing the outcome of the behavior tree. + """ + self.goal = goal + if self.bt_algo_opt: + self.algo = OptBTExpAlgorithm(verbose=False) + else: + self.algo = BTalgorithm(verbose=False) + + self.algo.clear() + self.algo.run_algorithm(self.scene.state["condition_set"],self.goal, self.actions) # 调用算法得到行为树保存至 algo.bt + + + self.ptml_string = self.algo.get_ptml() + self.has_processed = True + # algo.print_solution() # print behavior tree + + return self.ptml_string + + # 方法一:查找所有初始状态是否包含当前状态 + def find_all_leaf_states_contain_start(self,start): + if not self.has_processed: + raise RuntimeError("The process method must be called before find_all_leaf_states_contain_start!") + # 返回所有能到达目标状态的初始状态 + state_leafs = self.algo.get_all_state_leafs() + for state in state_leafs: + if start >= state: + return True + return False + + # 方法二:模拟跑一遍行为树,看 start 能够通过执行一系列动作到达 goal + def run_bt_from_start(self,goal,start): + if not self.has_processed: + raise RuntimeError("The process method must be called before run_bt_from_start!") + # 检查是否能到达目标 + right_bt = True + state = start + steps = 0 + val, obj = self.algo.bt.tick(state) + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + val, obj = self.algo.bt.tick(state) + if (val == 'failure'): + # print("bt fails at step", steps) + right_bt = False + steps += 1 + if not goal <= state: + # print("wrong solution", steps) + right_bt = False + else: + pass + # print("right solution", steps) + return right_bt + + + + +if __name__ == '__main__' : + + # todo: Example Cafe + # todo: Define goal, start, actions + actions=[ + Action(name='PutDown(Table,Coffee)', pre={'Holding(Coffee)','At(Robot,Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1), + Action(name='PutDown(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Robot,Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1), + + Action(name='PickUp(Coffee)', pre={'NotHolding','At(Robot,Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1), + + Action(name='MoveTo(Table)', pre={'Available(Table)'}, add={'At(Robot,Table)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,CoffeeMachine)'}, cost=1), + Action(name='MoveTo(Coffee)', pre={'Available(Coffee)'}, add={'At(Robot,Coffee)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Table)','At(Robot,CoffeeMachine)'}, cost=1), + Action(name='MoveTo(CoffeeMachine)', pre={'Available(CoffeeMachine)'}, add={'At(Robot,CoffeeMachine)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,Table)'}, cost=1), + + Action(name='OpCoffeeMachine', pre={'At(Robot,CoffeeMachine)','NotHolding'}, add={'Available(Coffee)','At(Robot,Coffee)'}, del_set=set(), cost=1), + ] + algo = BTOptExpInterface(actions) + + + goal = {'At(Table,Coffee)'} + ptml_string = algo.process(goal) + print(ptml_string) + + file_name = "sub_task" + with open(f'./{file_name}.ptml', 'w') as file: + file.write(ptml_string) + + + # 判断初始状态能否到达目标状态 + start = {'At(Robot,Bar)', 'Holding(VacuumCup)', 'Available(Table)', 'Available(CoffeeMachine)','Available(FrontDesk)'} + # 方法一:算法返回所有可能的初始状态,在里面看看有没有对应的初始状态 + right_bt = algo.find_all_leaf_states_contain_start(start) + if not right_bt: + print("ERROR1: The current state cannot reach the goal state!") + else: + print("Right1: The current state can reach the goal state!") + # 方法二:预先跑一边行为树,看能否到达目标状态 + right_bt2 = algo.run_bt_from_start(goal,start) + if not right_bt2: + print("ERROR2: The current state cannot reach the goal state!") + else: + print("Right2: The current state can reach the goal state!") diff --git a/BTExpansionCode/EXP/behavior_tree/obtea/tools.py b/BTExpansionCode/EXP/behavior_tree/obtea/tools.py new file mode 100644 index 0000000..c705ce5 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/obtea/tools.py @@ -0,0 +1,167 @@ + + +from tabulate import tabulate +import numpy as np +import random +from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm +import time + + +def print_action_data_table(goal,start,actions): + data = [] + for a in actions: + data.append([a.name , a.pre , a.add , a.del_set , a.cost]) + data.append(["Goal" ,goal ," " ,"Start" ,start]) + print(tabulate(data, headers=["Name", "Pre", "Add" ,"Del" ,"Cost"], tablefmt="fancy_grid")) # grid plain simple github fancy_grid + + +# 从状态随机生成一个行动 +def generate_from_state(act,state,num): + for i in range(0,num): + if i in state: + if random.random() >0.5: + act.pre.add(i) + if random.random() >0.5: + act.del_set.add(i) + continue + if random.random() > 0.5: + act.add.add(i) + continue + if random.random() >0.5: + act.del_set.add(i) + +def print_action(act): + print (act.pre) + print(act.add) + print(act.del_set) + + + +#行为树测试代码 +def BTTest(seed=1,literals_num=10,depth=10,iters=10,total_count=1000): + print("============= BT Test ==============") + random.seed(seed) + # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 + literals_num=literals_num + depth = depth + iters= iters + total_tree_size = [] + total_action_num = [] + total_state_num = [] + total_steps_num=[] + #fail_count=0 + #danger_count=0 + success_count =0 + failure_count = 0 + planning_time_total = 0.0 + # 实验1000次 + for count in range (total_count): + + action_num = 1 + + # 生成一个规划问题,包括随机的状态和行动,以及目标状态 + states = [] + actions = [] + start = generate_random_state(literals_num) + state = start + states.append(state) + #print (state) + for i in range (0,depth): + a = Action() + generate_from_state(a,state,literals_num) + if not a in actions: + a.name = "a"+str(action_num) + action_num+=1 + actions.append(a) + state = state_transition(state,a) + if state in states: + pass + else: + states.append(state) + #print(state) + + goal = states[-1] + state = start + for i in range (0,iters): + a = Action() + generate_from_state(a,state,literals_num) + if not a in actions: + a.name = "a"+str(action_num) + action_num+=1 + actions.append(a) + state = state_transition(state,a) + if state in states: + pass + else: + states.append(state) + state = random.sample(states,1)[0] + + # 选择测试本文算法btalgorithm,或对比算法weakalgorithm + algo = OptBTExpAlgorithm() + #algo = Weakalgorithm() + start_time = time.time() + # print_action_data_table(goal, start, list(actions)) + if algo.run_algorithm(start, goal, actions):#运行算法,规划后行为树为algo.bt + total_tree_size.append( algo.bt.count_size()-1) + # algo.print_solution() # 打印行为树 + else: + print ("error") + end_time = time.time() + planning_time_total += (end_time-start_time) + + #开始从初始状态运行行为树,测试 + state=start + steps=0 + val, obj = algo.bt.tick(state)#tick行为树,obj为所运行的行动 + while val !='success' and val !='failure':#运行直到行为树成功或失败 + state = state_transition(state,obj) + val, obj = algo.bt.tick(state) + if(val == 'failure'): + print("bt fails at step",steps) + steps+=1 + if(steps>=500):#至多运行500步 + break + if not goal <= state:#错误解,目标条件不在执行后状态满足 + #print ("wrong solution",steps) + failure_count+=1 + + else:#正确解,满足目标条件 + #print ("right solution",steps) + success_count+=1 + total_steps_num.append(steps) + algo.clear() + total_action_num.append(len(actions)) + total_state_num.append(len(states)) + + print ("success:",success_count,"failure:",failure_count)#算法成功和失败次数 + print("Total Tree Size: mean=",np.mean(total_tree_size), "std=",np.std(total_tree_size, ddof=1))#1000次测试树大小 + print ("Total Steps Num: mean=",np.mean(total_steps_num),"std=",np.std(total_steps_num,ddof=1)) + print ("Average number of states:",np.mean(total_state_num))#1000次问题的平均状态数 + print ("Average number of actions",np.mean(total_action_num))#1000次问题的平均行动数 + print("Planning Time Total:",planning_time_total,planning_time_total/1000.0) + print("============ End BT Test ===========") + + # xiao cai + # success: 1000 failure: 0 + # Total Tree Size: mean= 35.303 std= 29.71336526001515 + # Total Steps Num: mean= 1.898 std= 0.970844240101644 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 0.6280641555786133 0.0006280641555786133 + + # our start + # success: 1000 failure: 0 + # Total Tree Size: mean= 17.945 std= 12.841997192488865 + # Total Steps Num: mean= 1.785 std= 0.8120556843187752 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 1.4748523235321045 0.0014748523235321046 + + # our + # success: 1000 failure: 0 + # Total Tree Size: mean= 48.764 std= 20.503626574406358 + # Total Steps Num: mean= 1.785 std= 0.8120556843187752 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 3.3271877765655518 0.0033271877765655516 + diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/__init__.py b/BTExpansionCode/EXP/behavior_tree/ptml/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/compile.sh b/BTExpansionCode/EXP/behavior_tree/ptml/compile.sh new file mode 100644 index 0000000..9b84246 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/compile.sh @@ -0,0 +1,2 @@ +cd ./robowaiter/behavior_tree/ptml +antlr4 -Dlanguage=Python3 ptml.g4 \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptml.g4 b/BTExpansionCode/EXP/behavior_tree/ptml/ptml.g4 new file mode 100644 index 0000000..24f0c03 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptml.g4 @@ -0,0 +1,20 @@ +grammar ptml; + +root : tree+ EOF; + +tree : internal_node '{' (action_sign|tree)* '}' ; +internal_node : 'sequence' | 'selector' | 'parallel' Integer ; +action_sign : ('act'|'cond') String '(' action_parm? ')'; +action_parm : (Integer|Float|boolean|String) (',' (Integer|Float|boolean|String))* ; +// var_decls : var_type Names ; +// var_type : 'int' | 'float' | 'bool' | 'string' ; +boolean : 'True' | 'False' ; + +String : [a-zA-Z_][a-zA-Z_0-9]* ; +Integer : '-'?[1-9][0-9]* | '0' ; +Float : [0-9]+'.'[0-9]* | '.'[0-9]+ ; + +// comments +LINE_COMMENT : '//' .*? '\r'?'\n' -> skip ; +// useless +WS : [ \t\u000C\r\n]+ -> skip ; diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptml.interp b/BTExpansionCode/EXP/behavior_tree/ptml/ptml.interp new file mode 100644 index 0000000..4edd60b --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptml.interp @@ -0,0 +1,51 @@ +token literal names: +null +'{' +'}' +'sequence' +'selector' +'parallel' +'act' +'cond' +'(' +')' +',' +'True' +'False' +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +String +Integer +Float +LINE_COMMENT +WS + +rule names: +root +tree +internal_node +action_sign +action_parm +boolean + + +atn: +[4, 1, 17, 65, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 4, 0, 14, 8, 0, 11, 0, 12, 0, 15, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 24, 8, 1, 10, 1, 12, 1, 27, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 35, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 41, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 49, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 56, 8, 4, 5, 4, 58, 8, 4, 10, 4, 12, 4, 61, 9, 4, 1, 5, 1, 5, 1, 5, 0, 0, 6, 0, 2, 4, 6, 8, 10, 0, 2, 1, 0, 6, 7, 1, 0, 11, 12, 71, 0, 13, 1, 0, 0, 0, 2, 19, 1, 0, 0, 0, 4, 34, 1, 0, 0, 0, 6, 36, 1, 0, 0, 0, 8, 48, 1, 0, 0, 0, 10, 62, 1, 0, 0, 0, 12, 14, 3, 2, 1, 0, 13, 12, 1, 0, 0, 0, 14, 15, 1, 0, 0, 0, 15, 13, 1, 0, 0, 0, 15, 16, 1, 0, 0, 0, 16, 17, 1, 0, 0, 0, 17, 18, 5, 0, 0, 1, 18, 1, 1, 0, 0, 0, 19, 20, 3, 4, 2, 0, 20, 25, 5, 1, 0, 0, 21, 24, 3, 6, 3, 0, 22, 24, 3, 2, 1, 0, 23, 21, 1, 0, 0, 0, 23, 22, 1, 0, 0, 0, 24, 27, 1, 0, 0, 0, 25, 23, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, 28, 1, 0, 0, 0, 27, 25, 1, 0, 0, 0, 28, 29, 5, 2, 0, 0, 29, 3, 1, 0, 0, 0, 30, 35, 5, 3, 0, 0, 31, 35, 5, 4, 0, 0, 32, 33, 5, 5, 0, 0, 33, 35, 5, 14, 0, 0, 34, 30, 1, 0, 0, 0, 34, 31, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 35, 5, 1, 0, 0, 0, 36, 37, 7, 0, 0, 0, 37, 38, 5, 13, 0, 0, 38, 40, 5, 8, 0, 0, 39, 41, 3, 8, 4, 0, 40, 39, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, 42, 1, 0, 0, 0, 42, 43, 5, 9, 0, 0, 43, 7, 1, 0, 0, 0, 44, 49, 5, 14, 0, 0, 45, 49, 5, 15, 0, 0, 46, 49, 3, 10, 5, 0, 47, 49, 5, 13, 0, 0, 48, 44, 1, 0, 0, 0, 48, 45, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 59, 1, 0, 0, 0, 50, 55, 5, 10, 0, 0, 51, 56, 5, 14, 0, 0, 52, 56, 5, 15, 0, 0, 53, 56, 3, 10, 5, 0, 54, 56, 5, 13, 0, 0, 55, 51, 1, 0, 0, 0, 55, 52, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 55, 54, 1, 0, 0, 0, 56, 58, 1, 0, 0, 0, 57, 50, 1, 0, 0, 0, 58, 61, 1, 0, 0, 0, 59, 57, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 9, 1, 0, 0, 0, 61, 59, 1, 0, 0, 0, 62, 63, 7, 1, 0, 0, 63, 11, 1, 0, 0, 0, 8, 15, 23, 25, 34, 40, 48, 55, 59] \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptml.tokens b/BTExpansionCode/EXP/behavior_tree/ptml/ptml.tokens new file mode 100644 index 0000000..6f604be --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptml.tokens @@ -0,0 +1,29 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +String=13 +Integer=14 +Float=15 +LINE_COMMENT=16 +WS=17 +'{'=1 +'}'=2 +'sequence'=3 +'selector'=4 +'parallel'=5 +'act'=6 +'cond'=7 +'('=8 +')'=9 +','=10 +'True'=11 +'False'=12 diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlCompiler.py b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlCompiler.py new file mode 100644 index 0000000..4f3f061 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlCompiler.py @@ -0,0 +1,208 @@ +import os +import sys +from antlr4 import * + +if "." in __name__: + from .ptmlTranslator import ptmlTranslator + from .ptmlParser import ptmlParser as Parser + from .ptmlLexer import ptmlLexer as Lexer + +else: + from ptmlTranslator import ptmlTranslator + from ptmlParser import ptmlParser as Parser + from ptmlLexer import ptmlLexer as Lexer + + +def load(scene, ptml_path: str, behaviour_lib_path: str): + """_summary_ + + Args: + ptml_path (str): _description_ + behaviour_lib_path (str): _description_ + + Raises: + FileNotFoundError: _description_ + FileNotFoundError: _description_ + """ + # error handle + if not os.path.exists(ptml_path): + raise FileNotFoundError("Given a fault ptml path: {}".format(ptml_path)) + if not os.path.exists(behaviour_lib_path): + raise FileNotFoundError( + "Given a fault behaviour library path: {}".format(behaviour_lib_path) + ) + + # noting fault, go next + ptml_path = format_trans_to_bracket(ptml_path) + # print(ptml_path) + input_stream = FileStream(ptml_path, encoding="utf-8") + + lexer = Lexer(input_stream) + stream = CommonTokenStream(lexer) + parser = Parser(stream) + tree = parser.root() + + walker = ParseTreeWalker() + + sys.path.append(os.path.join(behaviour_lib_path, "cond")) + sys.path.append(os.path.join(behaviour_lib_path, "act")) + + ptml = ptmlTranslator(scene, behaviour_lib_path) # listener mode + walker.walk(ptml, tree) + + return ptml.bt_root + +def parse_indentation(text): + tree = {} + stack = [(-1, tree)] # 使用栈来跟踪节点层级和父节点 + + for line in text.splitlines(): + indent = len(line) - len(line.lstrip()) + content = line.strip() + + if not content: + continue # 跳过空行 + + # 找到当前行的父级 + while stack and stack[-1][0] >= indent: + stack.pop() + + # 确保栈不为空 + if not stack: + raise ValueError("缩进错误") + + # 检查当前行是否已存在于父级中 + parent = stack[-1][1] + if content not in parent: + parent[content] = [] + + # 添加新节点 + node = {} + parent[content].append(node) + stack.append((indent, node)) + + return tree + +def format_nested_dict(d, indent=0, outermost=True): + """ 格式化嵌套字典为特定字符串格式,如果没有子级就不添加大括号 """ + indention = " " * indent # 用空格表示缩进 + formatted_str = "" + + if (not outermost) and d: # 添加大括号,除非是空字典 + formatted_str += "{\n" + + for key, value_list in d.items(): + for value in value_list: # 遍历列表中的每个字典 + formatted_str += f"{indention}{' ' if (not outermost) and d else ''}{key}\n" + + if isinstance(value, dict): + # 如果值是字典,则递归调用 + formatted_str += format_nested_dict(value, indent + (0 if outermost else 1), False) + else: + # 否则,直接添加值 + formatted_str += f"{indention}{' ' * 2}{value}\n" + + if (not outermost) and d: # 如果不是空字典,才关闭大括号 + formatted_str += indention + "}\n" + + return formatted_str.strip() + +def format_trans_to_bracket(file_path: str) -> str: + """_summary_ + + Args: + file_path (str): _description_ + + Raises: + FileNotFoundError: _description_ + + Returns: + str: the path tp temp file with '{}' form. + """ + import autopep8 + + if not os.path.exists(file_path): + raise FileNotFoundError("Given a fault ptml path: {}".format(file_path)) + + with open(file_path, 'r') as file: + f = file.read().strip() + if "{" in f: + return file_path + + parsed_tree = parse_indentation(f) + + formatted_output = format_nested_dict(parsed_tree) + + # def counter_(input: str) -> int: + # length = 0 + # for i in range(len(input)): + # if input[i] == ' ': + # length += 1 + # else: + # if length % 4 != 0: + # raise TabError('Tab length in ptml file should be 4.') + # return length + # + # with open(file_path, 'r') as file: + # ptml_new = '' + # ptml_tab = file.readlines() + # + # level = 0 + # for i in ptml_tab: + # + # if i.startswith('//'): + # continue + # + # new_level = counter_(i) // 4 + # if new_level == level: + # ptml_new += i + # elif new_level > level: + # ptml_new += '{\n' + i + # level += 1 + # elif new_level < level: + # ptml_new += '\n}' + i + # level -= 1 + # for i in range(level): + # ptml_new += '}' + + file_name = os.path.basename(file_path).split(".")[0] + dir_path = os.path.dirname(file_path) + # import re + # new_path = re.sub('\\\[a-zA-Z0-9_]*\.ptml', '/bracket_ptml.ptml', file_path) + new_path = os.path.join(dir_path,file_name+"_bracket.ptml") + with open(new_path, 'w') as file: + file.write(formatted_output) + return new_path + +# format_trans_to_bracket('C:\\Users\\Estrella\\Desktop\\RoboWaiter\\robowaiter\\behavior_tree\\ptml\\test\\Default.ptml') + +if __name__ == '__main__': + # 示例文本 + text = """ +selector + sequence + cond Chatting() + act DealChat() + sequence + cond HasSubTask() + sequence + act SubTaskPlaceHolder() + sequence + cond FocusingCustomer() + act ServeCustomer() + sequence + cond NewCustomer() + selector + cond At(Robot,Bar) + act MoveTo(Bar) + act GreetCustomer() + sequence + cond AnomalyDetected() + act ResolveAnomaly() + """ + + parsed_tree = parse_indentation(text) + print(parsed_tree) + + formatted_output = format_nested_dict(parsed_tree) + print(formatted_output) \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.interp b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.interp new file mode 100644 index 0000000..a624c96 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.interp @@ -0,0 +1,68 @@ +token literal names: +null +'{' +'}' +'sequence' +'selector' +'parallel' +'act' +'cond' +'(' +')' +',' +'True' +'False' +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +String +Integer +Float +LINE_COMMENT +WS + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +T__9 +T__10 +T__11 +String +Integer +Float +LINE_COMMENT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 17, 155, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 95, 8, 12, 10, 12, 12, 12, 98, 9, 12, 1, 13, 3, 13, 101, 8, 13, 1, 13, 1, 13, 5, 13, 105, 8, 13, 10, 13, 12, 13, 108, 9, 13, 1, 13, 3, 13, 111, 8, 13, 1, 14, 4, 14, 114, 8, 14, 11, 14, 12, 14, 115, 1, 14, 1, 14, 5, 14, 120, 8, 14, 10, 14, 12, 14, 123, 9, 14, 1, 14, 1, 14, 4, 14, 127, 8, 14, 11, 14, 12, 14, 128, 3, 14, 131, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 137, 8, 15, 10, 15, 12, 15, 140, 9, 15, 1, 15, 3, 15, 143, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 4, 16, 150, 8, 16, 11, 16, 12, 16, 151, 1, 16, 1, 16, 1, 138, 0, 17, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 1, 0, 5, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 9, 10, 12, 13, 32, 32, 165, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 1, 35, 1, 0, 0, 0, 3, 37, 1, 0, 0, 0, 5, 39, 1, 0, 0, 0, 7, 48, 1, 0, 0, 0, 9, 57, 1, 0, 0, 0, 11, 66, 1, 0, 0, 0, 13, 70, 1, 0, 0, 0, 15, 75, 1, 0, 0, 0, 17, 77, 1, 0, 0, 0, 19, 79, 1, 0, 0, 0, 21, 81, 1, 0, 0, 0, 23, 86, 1, 0, 0, 0, 25, 92, 1, 0, 0, 0, 27, 110, 1, 0, 0, 0, 29, 130, 1, 0, 0, 0, 31, 132, 1, 0, 0, 0, 33, 149, 1, 0, 0, 0, 35, 36, 5, 123, 0, 0, 36, 2, 1, 0, 0, 0, 37, 38, 5, 125, 0, 0, 38, 4, 1, 0, 0, 0, 39, 40, 5, 115, 0, 0, 40, 41, 5, 101, 0, 0, 41, 42, 5, 113, 0, 0, 42, 43, 5, 117, 0, 0, 43, 44, 5, 101, 0, 0, 44, 45, 5, 110, 0, 0, 45, 46, 5, 99, 0, 0, 46, 47, 5, 101, 0, 0, 47, 6, 1, 0, 0, 0, 48, 49, 5, 115, 0, 0, 49, 50, 5, 101, 0, 0, 50, 51, 5, 108, 0, 0, 51, 52, 5, 101, 0, 0, 52, 53, 5, 99, 0, 0, 53, 54, 5, 116, 0, 0, 54, 55, 5, 111, 0, 0, 55, 56, 5, 114, 0, 0, 56, 8, 1, 0, 0, 0, 57, 58, 5, 112, 0, 0, 58, 59, 5, 97, 0, 0, 59, 60, 5, 114, 0, 0, 60, 61, 5, 97, 0, 0, 61, 62, 5, 108, 0, 0, 62, 63, 5, 108, 0, 0, 63, 64, 5, 101, 0, 0, 64, 65, 5, 108, 0, 0, 65, 10, 1, 0, 0, 0, 66, 67, 5, 97, 0, 0, 67, 68, 5, 99, 0, 0, 68, 69, 5, 116, 0, 0, 69, 12, 1, 0, 0, 0, 70, 71, 5, 99, 0, 0, 71, 72, 5, 111, 0, 0, 72, 73, 5, 110, 0, 0, 73, 74, 5, 100, 0, 0, 74, 14, 1, 0, 0, 0, 75, 76, 5, 40, 0, 0, 76, 16, 1, 0, 0, 0, 77, 78, 5, 41, 0, 0, 78, 18, 1, 0, 0, 0, 79, 80, 5, 44, 0, 0, 80, 20, 1, 0, 0, 0, 81, 82, 5, 84, 0, 0, 82, 83, 5, 114, 0, 0, 83, 84, 5, 117, 0, 0, 84, 85, 5, 101, 0, 0, 85, 22, 1, 0, 0, 0, 86, 87, 5, 70, 0, 0, 87, 88, 5, 97, 0, 0, 88, 89, 5, 108, 0, 0, 89, 90, 5, 115, 0, 0, 90, 91, 5, 101, 0, 0, 91, 24, 1, 0, 0, 0, 92, 96, 7, 0, 0, 0, 93, 95, 7, 1, 0, 0, 94, 93, 1, 0, 0, 0, 95, 98, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 96, 97, 1, 0, 0, 0, 97, 26, 1, 0, 0, 0, 98, 96, 1, 0, 0, 0, 99, 101, 5, 45, 0, 0, 100, 99, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 106, 7, 2, 0, 0, 103, 105, 7, 3, 0, 0, 104, 103, 1, 0, 0, 0, 105, 108, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 106, 107, 1, 0, 0, 0, 107, 111, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 109, 111, 5, 48, 0, 0, 110, 100, 1, 0, 0, 0, 110, 109, 1, 0, 0, 0, 111, 28, 1, 0, 0, 0, 112, 114, 7, 3, 0, 0, 113, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 113, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 121, 5, 46, 0, 0, 118, 120, 7, 3, 0, 0, 119, 118, 1, 0, 0, 0, 120, 123, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 131, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 124, 126, 5, 46, 0, 0, 125, 127, 7, 3, 0, 0, 126, 125, 1, 0, 0, 0, 127, 128, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 113, 1, 0, 0, 0, 130, 124, 1, 0, 0, 0, 131, 30, 1, 0, 0, 0, 132, 133, 5, 47, 0, 0, 133, 134, 5, 47, 0, 0, 134, 138, 1, 0, 0, 0, 135, 137, 9, 0, 0, 0, 136, 135, 1, 0, 0, 0, 137, 140, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 138, 136, 1, 0, 0, 0, 139, 142, 1, 0, 0, 0, 140, 138, 1, 0, 0, 0, 141, 143, 5, 13, 0, 0, 142, 141, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 5, 10, 0, 0, 145, 146, 1, 0, 0, 0, 146, 147, 6, 15, 0, 0, 147, 32, 1, 0, 0, 0, 148, 150, 7, 4, 0, 0, 149, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 154, 6, 16, 0, 0, 154, 34, 1, 0, 0, 0, 12, 0, 96, 100, 106, 110, 115, 121, 128, 130, 138, 142, 151, 1, 6, 0, 0] \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.py b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.py new file mode 100644 index 0000000..0cee05f --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.py @@ -0,0 +1,118 @@ +# Generated from ptml.g4 by ANTLR 4.13.1 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4,0,17,155,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, + 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,1,0,1,0,1,1,1,1,1,2,1,2,1, + 2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1, + 6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,11,1,11, + 1,11,1,11,1,11,1,11,1,12,1,12,5,12,95,8,12,10,12,12,12,98,9,12,1, + 13,3,13,101,8,13,1,13,1,13,5,13,105,8,13,10,13,12,13,108,9,13,1, + 13,3,13,111,8,13,1,14,4,14,114,8,14,11,14,12,14,115,1,14,1,14,5, + 14,120,8,14,10,14,12,14,123,9,14,1,14,1,14,4,14,127,8,14,11,14,12, + 14,128,3,14,131,8,14,1,15,1,15,1,15,1,15,5,15,137,8,15,10,15,12, + 15,140,9,15,1,15,3,15,143,8,15,1,15,1,15,1,15,1,15,1,16,4,16,150, + 8,16,11,16,12,16,151,1,16,1,16,1,138,0,17,1,1,3,2,5,3,7,4,9,5,11, + 6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17, + 1,0,5,3,0,65,90,95,95,97,122,4,0,48,57,65,90,95,95,97,122,1,0,49, + 57,1,0,48,57,3,0,9,10,12,13,32,32,165,0,1,1,0,0,0,0,3,1,0,0,0,0, + 5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15, + 1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25, + 1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,1,35, + 1,0,0,0,3,37,1,0,0,0,5,39,1,0,0,0,7,48,1,0,0,0,9,57,1,0,0,0,11,66, + 1,0,0,0,13,70,1,0,0,0,15,75,1,0,0,0,17,77,1,0,0,0,19,79,1,0,0,0, + 21,81,1,0,0,0,23,86,1,0,0,0,25,92,1,0,0,0,27,110,1,0,0,0,29,130, + 1,0,0,0,31,132,1,0,0,0,33,149,1,0,0,0,35,36,5,123,0,0,36,2,1,0,0, + 0,37,38,5,125,0,0,38,4,1,0,0,0,39,40,5,115,0,0,40,41,5,101,0,0,41, + 42,5,113,0,0,42,43,5,117,0,0,43,44,5,101,0,0,44,45,5,110,0,0,45, + 46,5,99,0,0,46,47,5,101,0,0,47,6,1,0,0,0,48,49,5,115,0,0,49,50,5, + 101,0,0,50,51,5,108,0,0,51,52,5,101,0,0,52,53,5,99,0,0,53,54,5,116, + 0,0,54,55,5,111,0,0,55,56,5,114,0,0,56,8,1,0,0,0,57,58,5,112,0,0, + 58,59,5,97,0,0,59,60,5,114,0,0,60,61,5,97,0,0,61,62,5,108,0,0,62, + 63,5,108,0,0,63,64,5,101,0,0,64,65,5,108,0,0,65,10,1,0,0,0,66,67, + 5,97,0,0,67,68,5,99,0,0,68,69,5,116,0,0,69,12,1,0,0,0,70,71,5,99, + 0,0,71,72,5,111,0,0,72,73,5,110,0,0,73,74,5,100,0,0,74,14,1,0,0, + 0,75,76,5,40,0,0,76,16,1,0,0,0,77,78,5,41,0,0,78,18,1,0,0,0,79,80, + 5,44,0,0,80,20,1,0,0,0,81,82,5,84,0,0,82,83,5,114,0,0,83,84,5,117, + 0,0,84,85,5,101,0,0,85,22,1,0,0,0,86,87,5,70,0,0,87,88,5,97,0,0, + 88,89,5,108,0,0,89,90,5,115,0,0,90,91,5,101,0,0,91,24,1,0,0,0,92, + 96,7,0,0,0,93,95,7,1,0,0,94,93,1,0,0,0,95,98,1,0,0,0,96,94,1,0,0, + 0,96,97,1,0,0,0,97,26,1,0,0,0,98,96,1,0,0,0,99,101,5,45,0,0,100, + 99,1,0,0,0,100,101,1,0,0,0,101,102,1,0,0,0,102,106,7,2,0,0,103,105, + 7,3,0,0,104,103,1,0,0,0,105,108,1,0,0,0,106,104,1,0,0,0,106,107, + 1,0,0,0,107,111,1,0,0,0,108,106,1,0,0,0,109,111,5,48,0,0,110,100, + 1,0,0,0,110,109,1,0,0,0,111,28,1,0,0,0,112,114,7,3,0,0,113,112,1, + 0,0,0,114,115,1,0,0,0,115,113,1,0,0,0,115,116,1,0,0,0,116,117,1, + 0,0,0,117,121,5,46,0,0,118,120,7,3,0,0,119,118,1,0,0,0,120,123,1, + 0,0,0,121,119,1,0,0,0,121,122,1,0,0,0,122,131,1,0,0,0,123,121,1, + 0,0,0,124,126,5,46,0,0,125,127,7,3,0,0,126,125,1,0,0,0,127,128,1, + 0,0,0,128,126,1,0,0,0,128,129,1,0,0,0,129,131,1,0,0,0,130,113,1, + 0,0,0,130,124,1,0,0,0,131,30,1,0,0,0,132,133,5,47,0,0,133,134,5, + 47,0,0,134,138,1,0,0,0,135,137,9,0,0,0,136,135,1,0,0,0,137,140,1, + 0,0,0,138,139,1,0,0,0,138,136,1,0,0,0,139,142,1,0,0,0,140,138,1, + 0,0,0,141,143,5,13,0,0,142,141,1,0,0,0,142,143,1,0,0,0,143,144,1, + 0,0,0,144,145,5,10,0,0,145,146,1,0,0,0,146,147,6,15,0,0,147,32,1, + 0,0,0,148,150,7,4,0,0,149,148,1,0,0,0,150,151,1,0,0,0,151,149,1, + 0,0,0,151,152,1,0,0,0,152,153,1,0,0,0,153,154,6,16,0,0,154,34,1, + 0,0,0,12,0,96,100,106,110,115,121,128,130,138,142,151,1,6,0,0 + ] + +class ptmlLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + T__0 = 1 + T__1 = 2 + T__2 = 3 + T__3 = 4 + T__4 = 5 + T__5 = 6 + T__6 = 7 + T__7 = 8 + T__8 = 9 + T__9 = 10 + T__10 = 11 + T__11 = 12 + String = 13 + Integer = 14 + Float = 15 + LINE_COMMENT = 16 + WS = 17 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'{'", "'}'", "'sequence'", "'selector'", "'parallel'", "'act'", + "'cond'", "'('", "')'", "','", "'True'", "'False'" ] + + symbolicNames = [ "", + "String", "Integer", "Float", "LINE_COMMENT", "WS" ] + + ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", + "T__7", "T__8", "T__9", "T__10", "T__11", "String", "Integer", + "Float", "LINE_COMMENT", "WS" ] + + grammarFileName = "ptml.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.tokens b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.tokens new file mode 100644 index 0000000..6f604be --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlLexer.tokens @@ -0,0 +1,29 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +String=13 +Integer=14 +Float=15 +LINE_COMMENT=16 +WS=17 +'{'=1 +'}'=2 +'sequence'=3 +'selector'=4 +'parallel'=5 +'act'=6 +'cond'=7 +'('=8 +')'=9 +','=10 +'True'=11 +'False'=12 diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlListener.py b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlListener.py new file mode 100644 index 0000000..536aaf2 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlListener.py @@ -0,0 +1,66 @@ +# Generated from ptml.g4 by ANTLR 4.13.1 +from antlr4 import * +if "." in __name__: + from .ptmlParser import ptmlParser +else: + from ptmlParser import ptmlParser + +# This class defines a complete listener for a parse tree produced by ptmlParser. +class ptmlListener(ParseTreeListener): + + # Enter a parse tree produced by ptmlParser#root. + def enterRoot(self, ctx:ptmlParser.RootContext): + pass + + # Exit a parse tree produced by ptmlParser#root. + def exitRoot(self, ctx:ptmlParser.RootContext): + pass + + + # Enter a parse tree produced by ptmlParser#tree. + def enterTree(self, ctx:ptmlParser.TreeContext): + pass + + # Exit a parse tree produced by ptmlParser#tree. + def exitTree(self, ctx:ptmlParser.TreeContext): + pass + + + # Enter a parse tree produced by ptmlParser#internal_node. + def enterInternal_node(self, ctx:ptmlParser.Internal_nodeContext): + pass + + # Exit a parse tree produced by ptmlParser#internal_node. + def exitInternal_node(self, ctx:ptmlParser.Internal_nodeContext): + pass + + + # Enter a parse tree produced by ptmlParser#action_sign. + def enterAction_sign(self, ctx:ptmlParser.Action_signContext): + pass + + # Exit a parse tree produced by ptmlParser#action_sign. + def exitAction_sign(self, ctx:ptmlParser.Action_signContext): + pass + + + # Enter a parse tree produced by ptmlParser#action_parm. + def enterAction_parm(self, ctx:ptmlParser.Action_parmContext): + pass + + # Exit a parse tree produced by ptmlParser#action_parm. + def exitAction_parm(self, ctx:ptmlParser.Action_parmContext): + pass + + + # Enter a parse tree produced by ptmlParser#boolean. + def enterBoolean(self, ctx:ptmlParser.BooleanContext): + pass + + # Exit a parse tree produced by ptmlParser#boolean. + def exitBoolean(self, ctx:ptmlParser.BooleanContext): + pass + + + +del ptmlParser \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlParser.py b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlParser.py new file mode 100644 index 0000000..a3dd2d4 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlParser.py @@ -0,0 +1,528 @@ +# Generated from ptml.g4 by ANTLR 4.13.1 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +def serializedATN(): + return [ + 4,1,17,65,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,1,0,4, + 0,14,8,0,11,0,12,0,15,1,0,1,0,1,1,1,1,1,1,1,1,5,1,24,8,1,10,1,12, + 1,27,9,1,1,1,1,1,1,2,1,2,1,2,1,2,3,2,35,8,2,1,3,1,3,1,3,1,3,3,3, + 41,8,3,1,3,1,3,1,4,1,4,1,4,1,4,3,4,49,8,4,1,4,1,4,1,4,1,4,1,4,3, + 4,56,8,4,5,4,58,8,4,10,4,12,4,61,9,4,1,5,1,5,1,5,0,0,6,0,2,4,6,8, + 10,0,2,1,0,6,7,1,0,11,12,71,0,13,1,0,0,0,2,19,1,0,0,0,4,34,1,0,0, + 0,6,36,1,0,0,0,8,48,1,0,0,0,10,62,1,0,0,0,12,14,3,2,1,0,13,12,1, + 0,0,0,14,15,1,0,0,0,15,13,1,0,0,0,15,16,1,0,0,0,16,17,1,0,0,0,17, + 18,5,0,0,1,18,1,1,0,0,0,19,20,3,4,2,0,20,25,5,1,0,0,21,24,3,6,3, + 0,22,24,3,2,1,0,23,21,1,0,0,0,23,22,1,0,0,0,24,27,1,0,0,0,25,23, + 1,0,0,0,25,26,1,0,0,0,26,28,1,0,0,0,27,25,1,0,0,0,28,29,5,2,0,0, + 29,3,1,0,0,0,30,35,5,3,0,0,31,35,5,4,0,0,32,33,5,5,0,0,33,35,5,14, + 0,0,34,30,1,0,0,0,34,31,1,0,0,0,34,32,1,0,0,0,35,5,1,0,0,0,36,37, + 7,0,0,0,37,38,5,13,0,0,38,40,5,8,0,0,39,41,3,8,4,0,40,39,1,0,0,0, + 40,41,1,0,0,0,41,42,1,0,0,0,42,43,5,9,0,0,43,7,1,0,0,0,44,49,5,14, + 0,0,45,49,5,15,0,0,46,49,3,10,5,0,47,49,5,13,0,0,48,44,1,0,0,0,48, + 45,1,0,0,0,48,46,1,0,0,0,48,47,1,0,0,0,49,59,1,0,0,0,50,55,5,10, + 0,0,51,56,5,14,0,0,52,56,5,15,0,0,53,56,3,10,5,0,54,56,5,13,0,0, + 55,51,1,0,0,0,55,52,1,0,0,0,55,53,1,0,0,0,55,54,1,0,0,0,56,58,1, + 0,0,0,57,50,1,0,0,0,58,61,1,0,0,0,59,57,1,0,0,0,59,60,1,0,0,0,60, + 9,1,0,0,0,61,59,1,0,0,0,62,63,7,1,0,0,63,11,1,0,0,0,8,15,23,25,34, + 40,48,55,59 + ] + +class ptmlParser ( Parser ): + + grammarFileName = "ptml.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "'{'", "'}'", "'sequence'", "'selector'", + "'parallel'", "'act'", "'cond'", "'('", "')'", "','", + "'True'", "'False'" ] + + symbolicNames = [ "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "String", "Integer", "Float", "LINE_COMMENT", + "WS" ] + + RULE_root = 0 + RULE_tree = 1 + RULE_internal_node = 2 + RULE_action_sign = 3 + RULE_action_parm = 4 + RULE_boolean = 5 + + ruleNames = [ "root", "tree", "internal_node", "action_sign", "action_parm", + "boolean" ] + + EOF = Token.EOF + T__0=1 + T__1=2 + T__2=3 + T__3=4 + T__4=5 + T__5=6 + T__6=7 + T__7=8 + T__8=9 + T__9=10 + T__10=11 + T__11=12 + String=13 + Integer=14 + Float=15 + LINE_COMMENT=16 + WS=17 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class RootContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EOF(self): + return self.getToken(ptmlParser.EOF, 0) + + def tree(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(ptmlParser.TreeContext) + else: + return self.getTypedRuleContext(ptmlParser.TreeContext,i) + + + def getRuleIndex(self): + return ptmlParser.RULE_root + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRoot" ): + listener.enterRoot(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRoot" ): + listener.exitRoot(self) + + + + + def root(self): + + localctx = ptmlParser.RootContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_root) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 13 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 12 + self.tree() + self.state = 15 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 56) != 0)): + break + + self.state = 17 + self.match(ptmlParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TreeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def internal_node(self): + return self.getTypedRuleContext(ptmlParser.Internal_nodeContext,0) + + + def action_sign(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(ptmlParser.Action_signContext) + else: + return self.getTypedRuleContext(ptmlParser.Action_signContext,i) + + + def tree(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(ptmlParser.TreeContext) + else: + return self.getTypedRuleContext(ptmlParser.TreeContext,i) + + + def getRuleIndex(self): + return ptmlParser.RULE_tree + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTree" ): + listener.enterTree(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTree" ): + listener.exitTree(self) + + + + + def tree(self): + + localctx = ptmlParser.TreeContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_tree) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 19 + self.internal_node() + self.state = 20 + self.match(ptmlParser.T__0) + self.state = 25 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 248) != 0): + self.state = 23 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [6, 7]: + self.state = 21 + self.action_sign() + pass + elif token in [3, 4, 5]: + self.state = 22 + self.tree() + pass + else: + raise NoViableAltException(self) + + self.state = 27 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 28 + self.match(ptmlParser.T__1) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Internal_nodeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Integer(self): + return self.getToken(ptmlParser.Integer, 0) + + def getRuleIndex(self): + return ptmlParser.RULE_internal_node + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInternal_node" ): + listener.enterInternal_node(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInternal_node" ): + listener.exitInternal_node(self) + + + + + def internal_node(self): + + localctx = ptmlParser.Internal_nodeContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_internal_node) + try: + self.state = 34 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3]: + self.enterOuterAlt(localctx, 1) + self.state = 30 + self.match(ptmlParser.T__2) + pass + elif token in [4]: + self.enterOuterAlt(localctx, 2) + self.state = 31 + self.match(ptmlParser.T__3) + pass + elif token in [5]: + self.enterOuterAlt(localctx, 3) + self.state = 32 + self.match(ptmlParser.T__4) + self.state = 33 + self.match(ptmlParser.Integer) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Action_signContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def String(self): + return self.getToken(ptmlParser.String, 0) + + def action_parm(self): + return self.getTypedRuleContext(ptmlParser.Action_parmContext,0) + + + def getRuleIndex(self): + return ptmlParser.RULE_action_sign + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAction_sign" ): + listener.enterAction_sign(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAction_sign" ): + listener.exitAction_sign(self) + + + + + def action_sign(self): + + localctx = ptmlParser.Action_signContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_action_sign) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 36 + _la = self._input.LA(1) + if not(_la==6 or _la==7): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 37 + self.match(ptmlParser.String) + self.state = 38 + self.match(ptmlParser.T__7) + self.state = 40 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 63488) != 0): + self.state = 39 + self.action_parm() + + + self.state = 42 + self.match(ptmlParser.T__8) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Action_parmContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Integer(self, i:int=None): + if i is None: + return self.getTokens(ptmlParser.Integer) + else: + return self.getToken(ptmlParser.Integer, i) + + def Float(self, i:int=None): + if i is None: + return self.getTokens(ptmlParser.Float) + else: + return self.getToken(ptmlParser.Float, i) + + def boolean(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(ptmlParser.BooleanContext) + else: + return self.getTypedRuleContext(ptmlParser.BooleanContext,i) + + + def String(self, i:int=None): + if i is None: + return self.getTokens(ptmlParser.String) + else: + return self.getToken(ptmlParser.String, i) + + def getRuleIndex(self): + return ptmlParser.RULE_action_parm + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAction_parm" ): + listener.enterAction_parm(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAction_parm" ): + listener.exitAction_parm(self) + + + + + def action_parm(self): + + localctx = ptmlParser.Action_parmContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_action_parm) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 48 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [14]: + self.state = 44 + self.match(ptmlParser.Integer) + pass + elif token in [15]: + self.state = 45 + self.match(ptmlParser.Float) + pass + elif token in [11, 12]: + self.state = 46 + self.boolean() + pass + elif token in [13]: + self.state = 47 + self.match(ptmlParser.String) + pass + else: + raise NoViableAltException(self) + + self.state = 59 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==10: + self.state = 50 + self.match(ptmlParser.T__9) + self.state = 55 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [14]: + self.state = 51 + self.match(ptmlParser.Integer) + pass + elif token in [15]: + self.state = 52 + self.match(ptmlParser.Float) + pass + elif token in [11, 12]: + self.state = 53 + self.boolean() + pass + elif token in [13]: + self.state = 54 + self.match(ptmlParser.String) + pass + else: + raise NoViableAltException(self) + + self.state = 61 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BooleanContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return ptmlParser.RULE_boolean + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBoolean" ): + listener.enterBoolean(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBoolean" ): + listener.exitBoolean(self) + + + + + def boolean(self): + + localctx = ptmlParser.BooleanContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_boolean) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 62 + _la = self._input.LA(1) + if not(_la==11 or _la==12): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + + diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/ptmlTranslator.py b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlTranslator.py new file mode 100644 index 0000000..ecd89f0 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/ptmlTranslator.py @@ -0,0 +1,119 @@ +import shortuuid +import py_trees as ptree +from EXP.behavior_lib._base import Selector, Sequence +from antlr4 import * + +if "." in __name__: + from .ptmlListener import ptmlListener + from .ptmlParser import ptmlParser +else: + from ptmlListener import ptmlListener + from ptmlParser import ptmlParser + +short_uuid = lambda: shortuuid.ShortUUID().random(length=8) + + +class ptmlTranslator(ptmlListener): + """Translate the ptml language to BT. + + Args: + ptmlListener (_type_): _description_ + """ + + def __init__(self, scene, behaviour_lib_path) -> None: + super().__init__() + self.bt_root = None + self.stack = [] + self.scene = scene + self.behaviour_lib_path = behaviour_lib_path + + # Enter a parse tree produced by ptmlParser#root. + def enterRoot(self, ctx: ptmlParser.RootContext): + pass + + # Exit a parse tree produced by ptmlParser#root. + def exitRoot(self, ctx: ptmlParser.RootContext): + pass + + # Enter a parse tree produced by ptmlParser#tree. + def enterTree(self, ctx: ptmlParser.TreeContext): + type = str(ctx.internal_node().children[0]) + + if type== "sequence": + node = Sequence(name="Sequence", memory=False) + elif type=="selector": + node = Selector(name="Selector", memory=False) + elif type== "parallel": + tag = "parallel_" + short_uuid() + # threshold = int(ctx.children[1]) + # default policy, success on all + node = ptree.composites.Parallel( + name=tag, policy=ptree.common.ParallelPolicy.SuccessOnAll + ) + else: + raise TypeError("Unknown Composite Type: {}".format(type)) + + self.stack.append(node) + + # Exit a parse tree produced by ptmlParser#tree. + def exitTree(self, ctx: ptmlParser.TreeContext): + if len(self.stack) >= 2: + child = self.stack.pop() + self.stack[-1].add_child(child) + else: + self.bt_root = self.stack[0] + + # Enter a parse tree produced by ptmlParser#internal_node. + def enterInternal_node(self, ctx: ptmlParser.Internal_nodeContext): + pass + + # Exit a parse tree produced by ptmlParser#internal_node. + def exitInternal_node(self, ctx: ptmlParser.Internal_nodeContext): + pass + + # Enter a parse tree produced by ptmlParser#action_sign. + def enterAction_sign(self, ctx: ptmlParser.Action_signContext): + # cond / act + node_type = str(ctx.children[0]) + name = str(ctx.String()) + + # if have params + args = [] + if len(ctx.children) > 4: + params = ctx.action_parm() + for i in params.children: + if isinstance(i, ptmlParser.BooleanContext): + args.append(str(i.children[0])) + elif str(i) == ',': + args.append(',') + else: + args.append(f"'{i}'") + args = "".join(args) + + exec(f"from {name} import {name}") + # tag = "cond_" + short_uuid() if node_type == "cond" else "task_" + short_uuid() + + node = eval(f"{name}({args})") + node.set_scene(self.scene) + # connect + self.stack[-1].add_child(node) + + # Exit a parse tree produced by ptmlParser#action_sign. + def exitAction_sign(self, ctx: ptmlParser.Action_signContext): + pass + + # Enter a parse tree produced by ptmlParser#action_parm. + def enterAction_parm(self, ctx: ptmlParser.Action_parmContext): + pass + + # Exit a parse tree produced by ptmlParser#action_parm. + def exitAction_parm(self, ctx: ptmlParser.Action_parmContext): + pass + + # Enter a parse tree produced by ptmlParser#boolean. + def enterBoolean(self, ctx: ptmlParser.BooleanContext): + pass + + # Exit a parse tree produced by ptmlParser#boolean. + def exitBoolean(self, ctx: ptmlParser.BooleanContext): + pass diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/CoffeeDelivery.ptml b/BTExpansionCode/EXP/behavior_tree/ptml/test/CoffeeDelivery.ptml new file mode 100644 index 0000000..f6ce360 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/CoffeeDelivery.ptml @@ -0,0 +1,35 @@ +//sequence: +// act action1() +// act action2(2, 2.3, True) +// +// parallel 2: +// act action3(int a, float b) +// act action4() + +sequence{ + selector{ + cond CoffeeCupFound() + act FindCoffeeCup() + sequence{ + cond SeqTest() + act Move(1.2, 2, 2.3, True) + act Grasp() + parallel 3 { + cond Isact() + act Testact() + } + } + } + selector{ + cond CoffeeCupGrasped() + act GraspCoffeeCup() + } + selector{ + cond DestinationAReached() + act ReachDestinationA() + } + selector{ + cond CoffeeCupPlaced() + act PlaceCoffeeCup() + } +} diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/Default.ptml b/BTExpansionCode/EXP/behavior_tree/ptml/test/Default.ptml new file mode 100644 index 0000000..be4dc5e --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/Default.ptml @@ -0,0 +1,12 @@ +selector + selector + cond HasMap() + act ExploreEnv() + sequence + cond Chatting() + act DealChat() + sequence + cond HasSubTask() + sequence + cond At(Robot,Table) + // cond At(Robot,Table) \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/Test.ptml b/BTExpansionCode/EXP/behavior_tree/ptml/test/Test.ptml new file mode 100644 index 0000000..62564fa --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/Test.ptml @@ -0,0 +1,7 @@ +selector{ + sequence{ + cond Chatting() + act DealChat() + } + act At(Coffee,Table) +} diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/__init__.py b/BTExpansionCode/EXP/behavior_tree/ptml/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/bracket_ptml.ptml b/BTExpansionCode/EXP/behavior_tree/ptml/test/bracket_ptml.ptml new file mode 100644 index 0000000..7ac38d6 --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/bracket_ptml.ptml @@ -0,0 +1,20 @@ +selector +{ + selector +{ + cond HasMap() + act ExploreEnv() + +} sequence +{ + cond Chatting() + act DealChat() + +} sequence +{ + cond HasSubTask() + sequence +{ + cond At(Robot,Table) + +} // cond At(Robot,Table)}} \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/ptml_test.py b/BTExpansionCode/EXP/behavior_tree/ptml/test/ptml_test.py new file mode 100644 index 0000000..70d629f --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/ptml_test.py @@ -0,0 +1,25 @@ +# from robowaiter.scene.scene import Scene +# from robowaiter.behavior_tree.ptml.ptmlCompiler import load + +import os +from robowaiter import Robot, task_map +from robowaiter.utils.bt.draw import render_dot_tree + +if __name__ == '__main__': + TASK_NAME = 'OT' + + # create robot + project_path = "../../../" + ptml_path = os.path.join(project_path, 'behavior_tree/ptml/test/Default.ptml') + behavior_lib_path = os.path.join(project_path, 'behavior_lib') + + robot = Robot(ptml_path, behavior_lib_path) + + # create task + task = task_map[TASK_NAME](robot) + + render_dot_tree(robot.bt.root,name="test") + # build and tick + # scene.BT = ptree.trees.BehaviourTree(scene.BT) + # todo: tick this bt + print(robot.bt) \ No newline at end of file diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/test.dot b/BTExpansionCode/EXP/behavior_tree/ptml/test/test.dot new file mode 100644 index 0000000..1efeebd --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/test.dot @@ -0,0 +1,29 @@ +digraph pastafarianism { +ordering=out; +graph [fontname="times-roman"]; +node [fontname="times-roman"]; +edge [fontname="times-roman"]; +"34d1cf8a-42d6-49de-a458-0c7d3bffc436" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label="?", shape=diamond, style=filled, width=0.01]; +"33446211-2d5c-4e1d-bdb5-5ded443a713c" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label="?", shape=diamond, style=filled, width=0.01]; +"34d1cf8a-42d6-49de-a458-0c7d3bffc436" -> "33446211-2d5c-4e1d-bdb5-5ded443a713c"; +"96622c49-e2f6-4de9-9284-0c5eabbdd741" [fillcolor=yellow, fontcolor=black, fontsize=20, label=HasMap, shape=ellipse, style=filled]; +"33446211-2d5c-4e1d-bdb5-5ded443a713c" -> "96622c49-e2f6-4de9-9284-0c5eabbdd741"; +"dc007c72-0338-4616-bac2-bc39c81d2b77" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label=ExploreEnv, shape=box, style=filled]; +"33446211-2d5c-4e1d-bdb5-5ded443a713c" -> "dc007c72-0338-4616-bac2-bc39c81d2b77"; +"6fe9e522-557f-473a-a582-2f0d17d1a4f1" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=">", shape=octagon, style=filled, width=0.01]; +"34d1cf8a-42d6-49de-a458-0c7d3bffc436" -> "6fe9e522-557f-473a-a582-2f0d17d1a4f1"; +"cf3e4033-88b1-41bb-a638-26cc06e7a3dd" [fillcolor=yellow, fontcolor=black, fontsize=20, label=Chatting, shape=ellipse, style=filled]; +"6fe9e522-557f-473a-a582-2f0d17d1a4f1" -> "cf3e4033-88b1-41bb-a638-26cc06e7a3dd"; +"d2e8364e-dd83-4abb-8234-8466ff0c0483" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label=DealChat, shape=box, style=filled]; +"6fe9e522-557f-473a-a582-2f0d17d1a4f1" -> "d2e8364e-dd83-4abb-8234-8466ff0c0483"; +"d78eaf31-cc9d-484d-b564-dbd5912378fa" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=">", shape=octagon, style=filled, width=0.01]; +"34d1cf8a-42d6-49de-a458-0c7d3bffc436" -> "d78eaf31-cc9d-484d-b564-dbd5912378fa"; +"85284b02-fc8e-4418-8d6b-7a154d2004f6" [fillcolor=yellow, fontcolor=black, fontsize=20, label=HasSubTask, shape=ellipse, style=filled]; +"d78eaf31-cc9d-484d-b564-dbd5912378fa" -> "85284b02-fc8e-4418-8d6b-7a154d2004f6"; +"eb1bba56-55b1-4a71-8b31-0381812f588a" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=">", shape=octagon, style=filled, width=0.01]; +"d78eaf31-cc9d-484d-b564-dbd5912378fa" -> "eb1bba56-55b1-4a71-8b31-0381812f588a"; +"20b57b46-d59d-4b04-a4ed-eff12e6adc91" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Table)", shape=ellipse, style=filled]; +"eb1bba56-55b1-4a71-8b31-0381812f588a" -> "20b57b46-d59d-4b04-a4ed-eff12e6adc91"; +"3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Table)", shape=ellipse, style=filled]; +"d78eaf31-cc9d-484d-b564-dbd5912378fa" -> "3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8"; +} diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/test.png b/BTExpansionCode/EXP/behavior_tree/ptml/test/test.png new file mode 100644 index 0000000..df4a1f9 Binary files /dev/null and b/BTExpansionCode/EXP/behavior_tree/ptml/test/test.png differ diff --git a/BTExpansionCode/EXP/behavior_tree/ptml/test/test.svg b/BTExpansionCode/EXP/behavior_tree/ptml/test/test.svg new file mode 100644 index 0000000..fe9b90e --- /dev/null +++ b/BTExpansionCode/EXP/behavior_tree/ptml/test/test.svg @@ -0,0 +1,151 @@ + + + + + + +pastafarianism + + + +34d1cf8a-42d6-49de-a458-0c7d3bffc436 + +? + + + +33446211-2d5c-4e1d-bdb5-5ded443a713c + +? + + + +34d1cf8a-42d6-49de-a458-0c7d3bffc436->33446211-2d5c-4e1d-bdb5-5ded443a713c + + + + + +6fe9e522-557f-473a-a582-2f0d17d1a4f1 + +> + + + +34d1cf8a-42d6-49de-a458-0c7d3bffc436->6fe9e522-557f-473a-a582-2f0d17d1a4f1 + + + + + +d78eaf31-cc9d-484d-b564-dbd5912378fa + +> + + + +34d1cf8a-42d6-49de-a458-0c7d3bffc436->d78eaf31-cc9d-484d-b564-dbd5912378fa + + + + + +96622c49-e2f6-4de9-9284-0c5eabbdd741 + +HasMap + + + +33446211-2d5c-4e1d-bdb5-5ded443a713c->96622c49-e2f6-4de9-9284-0c5eabbdd741 + + + + + +dc007c72-0338-4616-bac2-bc39c81d2b77 + +ExploreEnv + + + +33446211-2d5c-4e1d-bdb5-5ded443a713c->dc007c72-0338-4616-bac2-bc39c81d2b77 + + + + + +cf3e4033-88b1-41bb-a638-26cc06e7a3dd + +Chatting + + + +6fe9e522-557f-473a-a582-2f0d17d1a4f1->cf3e4033-88b1-41bb-a638-26cc06e7a3dd + + + + + +d2e8364e-dd83-4abb-8234-8466ff0c0483 + +DealChat + + + +6fe9e522-557f-473a-a582-2f0d17d1a4f1->d2e8364e-dd83-4abb-8234-8466ff0c0483 + + + + + +85284b02-fc8e-4418-8d6b-7a154d2004f6 + +HasSubTask + + + +d78eaf31-cc9d-484d-b564-dbd5912378fa->85284b02-fc8e-4418-8d6b-7a154d2004f6 + + + + + +eb1bba56-55b1-4a71-8b31-0381812f588a + +> + + + +d78eaf31-cc9d-484d-b564-dbd5912378fa->eb1bba56-55b1-4a71-8b31-0381812f588a + + + + + +3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8 + +At(Robot,Table) + + + +d78eaf31-cc9d-484d-b564-dbd5912378fa->3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8 + + + + + +20b57b46-d59d-4b04-a4ed-eff12e6adc91 + +At(Robot,Table) + + + +eb1bba56-55b1-4a71-8b31-0381812f588a->20b57b46-d59d-4b04-a4ed-eff12e6adc91 + + + + + diff --git a/BTExpansionCode/EXP/easy.txt b/BTExpansionCode/EXP/easy.txt new file mode 100644 index 0000000..4ab3cc1 --- /dev/null +++ b/BTExpansionCode/EXP/easy.txt @@ -0,0 +1,50 @@ +On_VacuumCup_WaterTable +On_Water_Table1 +On_Yogurt_Table2 +Is_AC_On +On_BottledDrink_Table3 +On_Dessert_Bar +On_Chips_Table3 +Is_TubeLight_On +Is_Curtain_Off +Is_Table1_Clean +On_Bernachon_BrightTable6 +On_MilkDrink_Bar2 +Is_AC_Off +Is_HallLight_On +On_NFCJuice_Table2 +On_SpringWater_Table1 +Is_Floor_Clean +Is_Chairs_Clean +Is_ACTemperature_Down +On_ADMilk_CoffeeTable +On_Milk_Bar +Is_Curtain_On +Is_TubeLight_Off +On_Softdrink_Table3 +Is_Chairs_Clean +On_Dessert_Bar +Is_HallLight_Off +Is_ACTemperature_Up +On_Chips_BrightTable6 +On_Water_Bar2 +On_Coffee_Table3 +Is_AC_On +Is_ACTemperature_Down +On_Yogurt_Table2 +On_VacuumCup_Bar +Is_TubeLight_Off +On_NFCJuice_WaterTable +On_SpringWater_Table3 +Is_Floor_Clean +Is_Chairs_Clean +On_Coffee_Table2 +Is_ACTemperature_Up +Exist_Water +Is_ACTemperature_Down +Is_Floor_Clean +On_Bernachon_Bar +On_MilkDrink_Table2 +Is_AC_Off +On_VacuumCup_CoffeeTable +Is_TubeLight_On \ No newline at end of file diff --git a/BTExpansionCode/EXP/exp1.py b/BTExpansionCode/EXP/exp1.py new file mode 100644 index 0000000..168985d --- /dev/null +++ b/BTExpansionCode/EXP/exp1.py @@ -0,0 +1,220 @@ + + +from utils.bt.load import load_behavior_tree_lib +from OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm +import random +import copy +from tabulate import tabulate +import numpy as np + +from sympy import symbols, Not, Or, And, to_dnf +from OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm +from BTExpansionAlgorithm import BTExpAlgorithm # 调用最优行为树扩展算法 +import time + + +# todo: 行为树鲁棒性测试,随机生成规划问题 +# # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 +seed =1 +# BTTest(bt_algo_opt=True ,seed=seed) +# print("\n") +# BTTest(bt_algo_opt=False ,seed=seed ) + +def collect_action_nodes(): + action_list = [] + behavior_dict = load_behavior_tree_lib() + for cls in behavior_dict["act"].values(): + if cls.can_be_expanded: + print(f"可扩展动作:{cls.__name__}, 存在{len(cls.valid_args)}个有效论域组合") + if cls.num_args == 0: + for num in range(2): + cost = random.randint(1, 100) + info = cls.get_info() + info.pop('cost', None) + action_list.append(Action(name=cls.get_ins_name()+str(num),cost=cost, **info)) + if cls.num_args == 1: + for num in range(2): + for arg in cls.valid_args: + cost = random.randint(1, 100) + info = cls.get_info(arg) + info.pop('cost', None) + action_list.append(Action(name=cls.get_ins_name(arg)+str(num),cost=cost, **info)) + if cls.num_args > 1: + for num in range(2): + for args in cls.valid_args: + cost = random.randint(1, 100) + info = cls.get_info(*args) + info.pop('cost', None) + action_list.append(Action(name=cls.get_ins_name(*args)+str(num),cost=cost, **info)) + return action_list +action_list = collect_action_nodes() + +start_robowaiter = {'At(Robot,Bar)', 'Is(AC,Off)', + 'Exist(Yogurt)', 'Exist(BottledDrink)', 'Exist(Softdrink)', 'Exist(ADMilk)', + 'On(Yogurt,Bar)','On(BottledDrink,Bar)','On(ADMilk,Bar)','On(Chips,Bar)', + 'Exist(Milk)', 'On(Softdrink,Table1)', 'On(Softdrink,Table3)', + 'Exist(Chips)', 'Exist(NFCJuice)', 'Exist(Bernachon)', 'Exist(ADMilk)', 'Exist(SpringWater)', 'Exist(MilkDrink)', + 'Exist(ADMilk)','On(ADMilk,Bar)','On(Bernachon,Bar)','On(SpringWater,Bar2)','On(MilkDrink,Bar)', + 'Holding(Nothing)', + 'Exist(VacuumCup)', 'On(VacuumCup,Table2)', + 'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)', + 'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'} + +def print_action_data_table(goal,start,actions): + data = [] + for a in actions: + data.append([a.name ,a.pre ,a.add ,a.del_set ,a.cost]) + data.append(["Goal" ,goal ," " ,"Start" ,start]) + print(tabulate(data, headers=["Name", "Pre", "Add" ,"Del" ,"Cost"], tablefmt="fancy_grid")) # grid plain simple github fancy_grid + +def state_transition(state,action): + if not action.pre <= state: + print ('error: action not applicable') + return state + new_state=(state | action.add) - action.del_set + return new_state + + + +total_tree_size = [] +total_action_num = [] +total_state_num = [] +total_steps_num=[] +total_cost=[] +total_tick=[] +success_count =0 +failure_count = 0 +planning_time_total = 0.0 + +error = False + +goal_states = [] +# Open the file and read the lines +with open('easy.txt', 'r') as file: + for line in file: + # Strip newline characters and any leading/trailing whitespace + clean_line = line.strip() + # Add the cleaned line to the list + goal_states.append(clean_line) +# Now goal_states list contains all the lines from easy.txt +print(goal_states) + + +def goal_transfer_str(goal): + goal_dnf = str(to_dnf(goal, simplify=True)) + # print(goal_dnf) + goal_set = [] + if ('|' in goal or '&' in goal or 'Not' in goal) or not '(' in goal: + goal_ls = goal_dnf.split("|") + for g in goal_ls: + g_set = set() + g = g.replace(" ", "").replace("(", "").replace(")", "") + g = g.split("&") + for literal in g: + if '_' in literal: + first_part, rest = literal.split('_', 1) + literal = first_part + '(' + rest + # 添加 ')' 到末尾 + literal += ')' + # 替换剩余的 '_' 为 ',' + literal = literal.replace('_', ',') + g_set.add(literal) + goal_set.append(g_set) + + else: + g_set = set() + w = goal.split(")") + g_set.add(w[0] + ")") + if len(w) > 1: + for x in w[1:]: + if x != "": + g_set.add(x[1:] + ")") + goal_set.append(g_set) + return goal_set + +# 实验1000次 +for count,goal_str in enumerate(goal_states): + + # if count>=2: + # break + + goal = copy.deepcopy(goal_transfer_str(goal_str)) + print("count:",count,"goal:",goal) + + + # 生成一个规划问题,包括随机的状态和行动,以及目标状态 + states = [] + actions = copy.deepcopy(action_list) + start = copy.deepcopy(start_robowaiter) + state = copy.deepcopy(start) + states.append(state) + + # algo = OptBTExpAlgorithm(verbose=False) + algo = BTExpAlgorithm(verbose=False) + algo.clear() + + #algo = Weakalgorithm() + start_time = time.time() + # if count == 11 : #874: + # print_action_data_table(goal, start, list(actions)) + print_action_data_table(goal, start, list(actions)) + if algo.run_algorithm(start, goal, actions):#运行算法,规划后行为树为algo.bt + total_tree_size.append( algo.bt.count_size()-1) + # if count==11: + # algo.print_solution() + algo.print_solution() # 打印行为树 + else: + print ("error") + end_time = time.time() + planning_time_total += (end_time-start_time) + + #开始从初始状态运行行为树,测试 + state=start + steps=0 + current_cost = 0 + current_tick_time=0 + val, obj, cost, tick_time = algo.bt.cost_tick(state,0,0)#tick行为树,obj为所运行的行动 + + current_tick_time+=tick_time + current_cost += cost + while val !='success' and val !='failure':#运行直到行为树成功或失败 + state = state_transition(state,obj) + val, obj,cost, tick_time = algo.bt.cost_tick(state,0,0) + current_cost += cost + current_tick_time += tick_time + if(val == 'failure'): + print("bt fails at step",steps) + error = True + break + steps+=1 + if(steps>=500):#至多运行500步 + break + if not goal[0] <= state:#错误解,目标条件不在执行后状态满足 + #print ("wrong solution",steps) + failure_count+=1 + error = True + else:#正确解,满足目标条件 + #print ("right solution",steps) + success_count+=1 + total_steps_num.append(steps) + if error: + print_action_data_table(goal, start, list(actions)) + algo.print_solution() + break + + + algo.clear() + total_action_num.append(len(actions)) + total_state_num.append(len(states)) + total_cost.append(current_cost) + total_tick.append(current_tick_time) + +print("success:",success_count,"failure:",failure_count)#算法成功和失败次数 +print("Total Tree Size: mean=",np.mean(total_tree_size), "std=",np.std(total_tree_size, ddof=1))#1000次测试树大小 +print("Total Steps Num: mean=",np.mean(total_steps_num),"std=",np.std(total_steps_num,ddof=1)) +print("Average Number of States:",np.mean(total_state_num))#1000次问题的平均状态数 +print("Average Number of Actions",np.mean(total_action_num))#1000次问题的平均行动数 +print("Planning Time Total:",planning_time_total,planning_time_total/1000.0) +print("Average Number of Ticks", np.mean(total_tick),"std=",np.std(total_tick,ddof=1)) +print("Average Cost of Execution:", np.mean(total_cost),"std=",np.std(total_cost,ddof=1)) + diff --git a/BTExpansionCode/EXP/exp2.py b/BTExpansionCode/EXP/exp2.py new file mode 100644 index 0000000..3535971 --- /dev/null +++ b/BTExpansionCode/EXP/exp2.py @@ -0,0 +1,36 @@ + +from EXP.exp_tools import collect_action_nodes,get_start,BTTest,goal_transfer_str +import copy + + +action_list = collect_action_nodes() + +start_robowaiter = get_start() + + +goal_states = [] +with open('easy.txt', 'r') as file: + for line in file: + clean_line = line.strip() + goal_states.append(clean_line) +print(goal_states) + +# goal_set_ls=[] +# for count, goal_str in enumerate(goal_states): +# goal = copy.deepcopy(goal_transfer_str(goal_str)) +# goal_set_ls.append(goal) +# print(goal_set_ls) + +goal_states={"On_Dessert_Bar"} +goal_states={"On_MilkDrink_Bar2"} +# goal_states={"Is_TubeLight_On"} +# goal_states = goal_set_ls +# goal_states = [{'On(VacuumCup,WaterTable)'}] + +# todo: 行为树鲁棒性测试,随机生成规划问题 +# # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 +seed = 1 +BTTest(bt_algo_opt=True, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter) +print("\n") +# 对比 +BTTest(bt_algo_opt=False, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter) \ No newline at end of file diff --git a/BTExpansionCode/EXP/exp_tools.py b/BTExpansionCode/EXP/exp_tools.py new file mode 100644 index 0000000..c3ec0af --- /dev/null +++ b/BTExpansionCode/EXP/exp_tools.py @@ -0,0 +1,238 @@ + + + +from utils.bt.load import load_behavior_tree_lib +from OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm +import random +import copy +from tabulate import tabulate +import numpy as np +import os + +from sympy import symbols, Not, Or, And, to_dnf +from OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm +from BTExpansionAlgorithm import BTExpAlgorithm # 调用最优行为树扩展算法 +import time +from utils.bt.draw import render_dot_tree +from utils.bt.load import load_bt_from_ptml +root_path = os.path.abspath( + os.path.join(__file__, "../../..") + ) +def goal_transfer_str(goal): + goal_dnf = str(to_dnf(goal, simplify=True)) + # print(goal_dnf) + goal_set = [] + if ('|' in goal or '&' in goal or 'Not' in goal) or not '(' in goal: + goal_ls = goal_dnf.split("|") + for g in goal_ls: + g_set = set() + g = g.replace(" ", "").replace("(", "").replace(")", "") + g = g.split("&") + for literal in g: + if '_' in literal: + first_part, rest = literal.split('_', 1) + literal = first_part + '(' + rest + # 添加 ')' 到末尾 + literal += ')' + # 替换剩余的 '_' 为 ',' + literal = literal.replace('_', ',') + g_set.add(literal) + goal_set.append(g_set) + + else: + g_set = set() + w = goal.split(")") + g_set.add(w[0] + ")") + if len(w) > 1: + for x in w[1:]: + if x != "": + g_set.add(x[1:] + ")") + goal_set.append(g_set) + return goal_set + + +def collect_action_nodes(): + action_list = [] + behavior_dict = load_behavior_tree_lib() + for cls in behavior_dict["act"].values(): + if cls.can_be_expanded: + print(f"可扩展动作:{cls.__name__}, 存在{len(cls.valid_args)}个有效论域组合") + if cls.num_args == 0: + for num in range(2): + cost = random.randint(1, 100) + info = cls.get_info() + info.pop('cost', None) + action_list.append(Action(name=cls.get_ins_name()+str(num),cost=cost, **info)) + if cls.num_args == 1: + for num in range(2): + for arg in cls.valid_args: + cost = random.randint(1, 100) + info = cls.get_info(arg) + info.pop('cost', None) + action_list.append(Action(name=cls.get_ins_name(arg)+str(num),cost=cost, **info)) + if cls.num_args > 1: + for num in range(2): + for args in cls.valid_args: + cost = random.randint(1, 100) + info = cls.get_info(*args) + info.pop('cost', None) + action_list.append(Action(name=cls.get_ins_name(*args)+str(num),cost=cost, **info)) + return action_list + + +def get_start(): + start_robowaiter = {'At(Robot,Bar)', 'Is(AC,Off)', + 'Exist(Yogurt)', 'Exist(BottledDrink)', 'Exist(Softdrink)', 'Exist(ADMilk)', + 'On(Yogurt,Bar)','On(BottledDrink,Bar)','On(ADMilk,Bar)','On(Chips,Bar)', + 'Exist(Milk)', 'On(Softdrink,Table1)', 'On(Softdrink,Table3)', + 'Exist(Chips)', 'Exist(NFCJuice)', 'Exist(Bernachon)', 'Exist(ADMilk)', 'Exist(SpringWater)', 'Exist(MilkDrink)', + 'Exist(ADMilk)','On(ADMilk,Bar)','On(Bernachon,Bar)','On(SpringWater,Bar2)','On(MilkDrink,Bar)', + 'Holding(Nothing)', + 'Exist(VacuumCup)', 'On(VacuumCup,Table2)', + 'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)', + 'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'} + return start_robowaiter + + +def print_action_data_table(goal,start,actions): + data = [] + for a in actions: + data.append([a.name ,a.pre ,a.add ,a.del_set ,a.cost]) + data.append(["Goal" ,goal ," " ,"Start" ,start]) + print(tabulate(data, headers=["Name", "Pre", "Add" ,"Del" ,"Cost"], tablefmt="fancy_grid")) # grid plain simple github fancy_grid + + +def state_transition(state,action): + if not action.pre <= state: + print ('error: action not applicable') + return state + new_state=(state | action.add) - action.del_set + return new_state + + +def BTTest(bt_algo_opt,goal_states,action_list,start_robowaiter): + + if bt_algo_opt: + print("============= OptBT Test ==============") + else: + print("============= XiaoCai BT Test ==============") + + total_tree_size = [] + total_action_num = [] + total_state_num = [] + total_steps_num = [] + total_cost = [] + total_tick = [] + success_count = 0 + failure_count = 0 + planning_time_total = 0.0 + + states = [] + actions = copy.deepcopy(action_list) + start = copy.deepcopy(start_robowaiter) + state = copy.deepcopy(start) + states.append(state) + error=False + + for count, goal_str in enumerate(goal_states): + + # if count>=2: + # break + # goal = goal_str + goal = copy.deepcopy(goal_transfer_str(goal_str)) + print("count:", count, "goal:", goal) + + # 生成一个规划问题,包括随机的状态和行动,以及目标状态 + states = [] + actions = copy.deepcopy(action_list) + start = copy.deepcopy(start_robowaiter) + state = copy.deepcopy(start) + states.append(state) + + if bt_algo_opt: + # if count==874: + # algo = OptBTExpAlgorithm(verbose=False) + # else: + algo = OptBTExpAlgorithm(verbose=False) + else: + algo = BTExpAlgorithm(verbose=False) + algo.clear() + + # algo = Weakalgorithm() + start_time = time.time() + # if count == 11 : #874: + # print_action_data_table(goal, start, list(actions)) + # print_action_data_table(goal, start, list(actions)) + if algo.run_algorithm(start, goal, actions): # 运行算法,规划后行为树为algo.bt + total_tree_size.append(algo.bt.count_size() - 1) + # if count==11: + # algo.print_solution() + # algo.print_solution() # 打印行为树 + + # 画出行为树 + # ptml_string = algo.get_ptml() + ptml_string = algo.get_ptml_many_act() + file_name = "sub_task" + file_path = f'./{file_name}.ptml' + with open(file_path, 'w') as file: + file.write(ptml_string) + ptml_path = os.path.join(root_path, 'BTExpansionCode/EXP/sub_task.ptml') + behavior_lib_path = os.path.join(root_path, 'BTExpansionCode/EXP/behavior_lib') + bt = load_bt_from_ptml(None, ptml_path, behavior_lib_path) + render_dot_tree(bt.root, target_directory="", name="expanded_bt", png_only=False) + + else: + print("error") + end_time = time.time() + planning_time_total += (end_time - start_time) + + # 开始从初始状态运行行为树,测试 + state = start + steps = 0 + current_cost = 0 + current_tick_time = 0 + val, obj, cost, tick_time = algo.bt.cost_tick(state, 0, 0) # tick行为树,obj为所运行的行动 + + current_tick_time += tick_time + current_cost += cost + while val != 'success' and val != 'failure': # 运行直到行为树成功或失败 + state = state_transition(state, obj) + val, obj, cost, tick_time = algo.bt.cost_tick(state, 0, 0) + current_cost += cost + current_tick_time += tick_time + if (val == 'failure'): + print("bt fails at step", steps) + error = True + break + steps += 1 + if (steps >= 500): # 至多运行500步 + break + if not goal[0] <= state: # 错误解,目标条件不在执行后状态满足 + # print ("wrong solution",steps) + failure_count += 1 + error = True + else: # 正确解,满足目标条件 + # print ("right solution",steps) + success_count += 1 + total_steps_num.append(steps) + if error: + print_action_data_table(goal, start, list(actions)) + algo.print_solution() + break + + algo.clear() + total_action_num.append(len(actions)) + total_state_num.append(len(states)) + total_cost.append(current_cost) + total_tick.append(current_tick_time) + + print("success:", success_count, "failure:", failure_count) # 算法成功和失败次数 + print("Total Tree Size: mean=", np.mean(total_tree_size), "std=", np.std(total_tree_size, ddof=1)) # 1000次测试树大小 + print("Total Steps Num: mean=", np.mean(total_steps_num), "std=", np.std(total_steps_num, ddof=1)) + print("Average Number of States:", np.mean(total_state_num)) # 1000次问题的平均状态数 + print("Average Number of Actions", np.mean(total_action_num)) # 1000次问题的平均行动数 + print("Planning Time Total:", planning_time_total, planning_time_total / 1000.0) + print("Average Number of Ticks", np.mean(total_tick), "std=", np.std(total_tick, ddof=1)) + print("Average Cost of Execution:", np.mean(total_cost), "std=", np.std(total_cost, ddof=1)) + + diff --git a/BTExpansionCode/EXP/expanded_bt.dot b/BTExpansionCode/EXP/expanded_bt.dot new file mode 100644 index 0000000..784128a --- /dev/null +++ b/BTExpansionCode/EXP/expanded_bt.dot @@ -0,0 +1,641 @@ +digraph pastafarianism { +ordering=out; +graph [fontname="times-roman"]; +node [fontname="times-roman"]; +edge [fontname="times-roman"]; +"b3eb0566-c750-43a0-94cc-a5ce1383d2a8" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"cb3e3b43-c0b7-4ed3-879a-ff11e3eff193" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="On(MilkDrink,Bar2)", shape=ellipse, style=filled]; +"b3eb0566-c750-43a0-94cc-a5ce1383d2a8" -> "cb3e3b43-c0b7-4ed3-879a-ff11e3eff193"; +"7d290e06-450b-4d6a-873e-cb1add89b66a" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"b3eb0566-c750-43a0-94cc-a5ce1383d2a8" -> "7d290e06-450b-4d6a-873e-cb1add89b66a"; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"7d290e06-450b-4d6a-873e-cb1add89b66a" -> "c16089c9-362b-4a60-8c32-f5f5bff3637d"; +"2b126874-c3aa-4db5-9d9e-506d18287d98" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "2b126874-c3aa-4db5-9d9e-506d18287d98"; +"ac7a52a4-be91-4eec-b832-3d11eb642f57" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "ac7a52a4-be91-4eec-b832-3d11eb642f57"; +"cbff45f9-d7ce-46f6-a04c-33e10b807a2b" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "cbff45f9-d7ce-46f6-a04c-33e10b807a2b"; +"4cd5bc0c-dd37-49cb-ac58-6f4f9030b991" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"cbff45f9-d7ce-46f6-a04c-33e10b807a2b" -> "4cd5bc0c-dd37-49cb-ac58-6f4f9030b991"; +"30fdd783-867c-4de3-b395-7318156630f0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"4cd5bc0c-dd37-49cb-ac58-6f4f9030b991" -> "30fdd783-867c-4de3-b395-7318156630f0"; +"50d308bd-0b9f-4e78-9faf-09443718d733" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4cd5bc0c-dd37-49cb-ac58-6f4f9030b991" -> "50d308bd-0b9f-4e78-9faf-09443718d733"; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"50d308bd-0b9f-4e78-9faf-09443718d733" -> "4613e442-b6f7-4bcf-9e67-f0dc6873cdb3"; +"acc8e037-9586-4dea-b069-8352470356c7" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "acc8e037-9586-4dea-b069-8352470356c7"; +"a4c1d6fa-915c-4d11-839f-1eb1d89bcef2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "a4c1d6fa-915c-4d11-839f-1eb1d89bcef2"; +"3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5"; +"bf523e58-f4b7-48ed-bb19-ff3fbbdac825" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5" -> "bf523e58-f4b7-48ed-bb19-ff3fbbdac825"; +"d63ceb7c-64ec-4978-9c6a-dd37071eed2d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5" -> "d63ceb7c-64ec-4978-9c6a-dd37071eed2d"; +"21e5f34b-df90-426d-9ed4-a5284e71b766" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5" -> "21e5f34b-df90-426d-9ed4-a5284e71b766"; +"4cbecb8a-2176-493f-8ad7-2c978d8aee78" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Clean(Table)", shape=box, style=filled]; +"3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5" -> "4cbecb8a-2176-493f-8ad7-2c978d8aee78"; +"d6141816-9ec5-4f69-8294-95e6afedf2df" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "d6141816-9ec5-4f69-8294-95e6afedf2df"; +"dd03d5ad-298e-4879-b410-4cebe7e5301b" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"d6141816-9ec5-4f69-8294-95e6afedf2df" -> "dd03d5ad-298e-4879-b410-4cebe7e5301b"; +"6ac400ea-28fc-4579-ae01-1271cc108eef" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"d6141816-9ec5-4f69-8294-95e6afedf2df" -> "6ac400ea-28fc-4579-ae01-1271cc108eef"; +"28caac60-3bc2-4cbc-924e-592fcb75b220" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"d6141816-9ec5-4f69-8294-95e6afedf2df" -> "28caac60-3bc2-4cbc-924e-592fcb75b220"; +"fe4a0aef-1611-4dee-b36c-3d68b1768f55" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Clean(Floor)", shape=box, style=filled]; +"d6141816-9ec5-4f69-8294-95e6afedf2df" -> "fe4a0aef-1611-4dee-b36c-3d68b1768f55"; +"73993498-2bd7-42c4-92b9-af98cd9355be" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "73993498-2bd7-42c4-92b9-af98cd9355be"; +"8383d4cf-83fb-402b-8989-2eefe3527780" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"73993498-2bd7-42c4-92b9-af98cd9355be" -> "8383d4cf-83fb-402b-8989-2eefe3527780"; +"5d863aca-2e38-4d78-951a-5ee5384461ca" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"73993498-2bd7-42c4-92b9-af98cd9355be" -> "5d863aca-2e38-4d78-951a-5ee5384461ca"; +"267a5828-5a67-43fe-bc23-91883e18dd5c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"73993498-2bd7-42c4-92b9-af98cd9355be" -> "267a5828-5a67-43fe-bc23-91883e18dd5c"; +"34a9bc45-5d40-4780-9e34-435ec597b474" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Clean(Chairs)", shape=box, style=filled]; +"73993498-2bd7-42c4-92b9-af98cd9355be" -> "34a9bc45-5d40-4780-9e34-435ec597b474"; +"221a92eb-77ca-4b46-a447-6ced2dde199e" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "221a92eb-77ca-4b46-a447-6ced2dde199e"; +"46da3cba-4037-43ad-a28b-ed1713085eb1" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"221a92eb-77ca-4b46-a447-6ced2dde199e" -> "46da3cba-4037-43ad-a28b-ed1713085eb1"; +"e1270279-2b0c-451f-96ce-cf858a78fc2a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"221a92eb-77ca-4b46-a447-6ced2dde199e" -> "e1270279-2b0c-451f-96ce-cf858a78fc2a"; +"d4885691-9035-4e4c-986f-08bde5cd1140" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"221a92eb-77ca-4b46-a447-6ced2dde199e" -> "d4885691-9035-4e4c-986f-08bde5cd1140"; +"7e4fd7f6-9542-4d1a-9c5a-b561399862dd" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Clean(Table)", shape=box, style=filled]; +"221a92eb-77ca-4b46-a447-6ced2dde199e" -> "7e4fd7f6-9542-4d1a-9c5a-b561399862dd"; +"3893c45b-be0e-4870-916b-be83e76b6eca" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "3893c45b-be0e-4870-916b-be83e76b6eca"; +"ca9a5bd5-8e39-433c-9b33-0db38b7e1cef" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"3893c45b-be0e-4870-916b-be83e76b6eca" -> "ca9a5bd5-8e39-433c-9b33-0db38b7e1cef"; +"38324a6a-57a8-4f85-9287-4e4242c0b576" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"3893c45b-be0e-4870-916b-be83e76b6eca" -> "38324a6a-57a8-4f85-9287-4e4242c0b576"; +"20b6fd32-d773-4df3-897f-d8f7365fa41f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"3893c45b-be0e-4870-916b-be83e76b6eca" -> "20b6fd32-d773-4df3-897f-d8f7365fa41f"; +"81f32838-fc32-42b9-b71c-8b2837afb48b" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Clean(Floor)", shape=box, style=filled]; +"3893c45b-be0e-4870-916b-be83e76b6eca" -> "81f32838-fc32-42b9-b71c-8b2837afb48b"; +"7adf22ba-3552-42dd-973c-5083a2e9df3f" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "7adf22ba-3552-42dd-973c-5083a2e9df3f"; +"4efe8d2f-7463-4871-b406-fef9e9b849b0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"7adf22ba-3552-42dd-973c-5083a2e9df3f" -> "4efe8d2f-7463-4871-b406-fef9e9b849b0"; +"0e23d529-cc12-4590-8a80-4e5a20d1b2c4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"7adf22ba-3552-42dd-973c-5083a2e9df3f" -> "0e23d529-cc12-4590-8a80-4e5a20d1b2c4"; +"64b4013d-3084-4187-aca5-2523f3d62d9a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"7adf22ba-3552-42dd-973c-5083a2e9df3f" -> "64b4013d-3084-4187-aca5-2523f3d62d9a"; +"adfbcb36-dc0b-4be8-9b0e-93439598f01f" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Clean(Chairs)", shape=box, style=filled]; +"7adf22ba-3552-42dd-973c-5083a2e9df3f" -> "adfbcb36-dc0b-4be8-9b0e-93439598f01f"; +"318e8f0a-c94e-4004-8a50-044ba9a940e3" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "318e8f0a-c94e-4004-8a50-044ba9a940e3"; +"be2b6bb9-5aee-4e23-9395-f2abed7c7760" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"318e8f0a-c94e-4004-8a50-044ba9a940e3" -> "be2b6bb9-5aee-4e23-9395-f2abed7c7760"; +"b423d136-ceba-4ccb-b0a8-88c2a2679a65" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"318e8f0a-c94e-4004-8a50-044ba9a940e3" -> "b423d136-ceba-4ccb-b0a8-88c2a2679a65"; +"4bb85ff0-bf11-4384-bc1b-12d57d7864fc" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; +"318e8f0a-c94e-4004-8a50-044ba9a940e3" -> "4bb85ff0-bf11-4384-bc1b-12d57d7864fc"; +"bced885c-967e-492a-8f9f-ca4f60a8d3ae" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "bced885c-967e-492a-8f9f-ca4f60a8d3ae"; +"a0fd2a70-d401-4222-aac9-32dd0cafc391" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"bced885c-967e-492a-8f9f-ca4f60a8d3ae" -> "a0fd2a70-d401-4222-aac9-32dd0cafc391"; +"5d0166a7-5577-47ad-b279-67f2826a70a9" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"bced885c-967e-492a-8f9f-ca4f60a8d3ae" -> "5d0166a7-5577-47ad-b279-67f2826a70a9"; +"8ba192fa-9371-453e-8bbc-e46f9f62f67f" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Water)", shape=box, style=filled]; +"bced885c-967e-492a-8f9f-ca4f60a8d3ae" -> "8ba192fa-9371-453e-8bbc-e46f9f62f67f"; +"dd4b5f3e-d3f3-447b-939a-9fbde458f34a" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "dd4b5f3e-d3f3-447b-939a-9fbde458f34a"; +"11fcb082-2d08-4d47-9e4b-ed12ff852cf2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"dd4b5f3e-d3f3-447b-939a-9fbde458f34a" -> "11fcb082-2d08-4d47-9e4b-ed12ff852cf2"; +"059f330d-1acd-4f1d-8228-46226e35d352" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"dd4b5f3e-d3f3-447b-939a-9fbde458f34a" -> "059f330d-1acd-4f1d-8228-46226e35d352"; +"29df8bf2-d992-4b8e-ad29-954c97ac37e4" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Dessert)", shape=box, style=filled]; +"dd4b5f3e-d3f3-447b-939a-9fbde458f34a" -> "29df8bf2-d992-4b8e-ad29-954c97ac37e4"; +"c539da29-e5e0-40f5-bd90-fbeb5d318b27" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "c539da29-e5e0-40f5-bd90-fbeb5d318b27"; +"fed083fe-4ce3-45f5-933a-105002353a6d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"c539da29-e5e0-40f5-bd90-fbeb5d318b27" -> "fed083fe-4ce3-45f5-933a-105002353a6d"; +"74d447e1-9deb-493d-becd-7717cab47f1e" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"c539da29-e5e0-40f5-bd90-fbeb5d318b27" -> "74d447e1-9deb-493d-becd-7717cab47f1e"; +"39651307-860f-44d6-9e4a-f4159af82219" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; +"c539da29-e5e0-40f5-bd90-fbeb5d318b27" -> "39651307-860f-44d6-9e4a-f4159af82219"; +"a4f0ce82-2e33-4342-a7d2-7093398e97cb" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "a4f0ce82-2e33-4342-a7d2-7093398e97cb"; +"474dbf8f-fac5-43d8-a0eb-425fb2bec1b4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"a4f0ce82-2e33-4342-a7d2-7093398e97cb" -> "474dbf8f-fac5-43d8-a0eb-425fb2bec1b4"; +"c251b754-ca9a-41cc-8a05-65ee5214e948" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"a4f0ce82-2e33-4342-a7d2-7093398e97cb" -> "c251b754-ca9a-41cc-8a05-65ee5214e948"; +"6cdebed6-9524-416a-8dda-1b18430b4f5c" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Water)", shape=box, style=filled]; +"a4f0ce82-2e33-4342-a7d2-7093398e97cb" -> "6cdebed6-9524-416a-8dda-1b18430b4f5c"; +"8a67ce82-8716-4210-b50e-ccdafee410f4" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "8a67ce82-8716-4210-b50e-ccdafee410f4"; +"3348b2d0-12ee-4857-8dc8-d5e394167931" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"8a67ce82-8716-4210-b50e-ccdafee410f4" -> "3348b2d0-12ee-4857-8dc8-d5e394167931"; +"5e00ce08-f61b-4469-a8fd-1afc9b94ed63" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"8a67ce82-8716-4210-b50e-ccdafee410f4" -> "5e00ce08-f61b-4469-a8fd-1afc9b94ed63"; +"296bfdd0-7d70-4d37-b02e-6c32bc1ba261" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Dessert)", shape=box, style=filled]; +"8a67ce82-8716-4210-b50e-ccdafee410f4" -> "296bfdd0-7d70-4d37-b02e-6c32bc1ba261"; +"4de16a97-73ae-44ed-8b98-25ea2ee0725e" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "4de16a97-73ae-44ed-8b98-25ea2ee0725e"; +"2f46975d-5f7f-43ab-8f26-f3e4cd0aecb9" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"4de16a97-73ae-44ed-8b98-25ea2ee0725e" -> "2f46975d-5f7f-43ab-8f26-f3e4cd0aecb9"; +"5eed14de-c9e4-4968-b2b7-0df15ced8282" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Exist(MilkDrink)", shape=ellipse, style=filled]; +"4de16a97-73ae-44ed-8b98-25ea2ee0725e" -> "5eed14de-c9e4-4968-b2b7-0df15ced8282"; +"56f947c3-a7ef-482c-88d3-1e892d03e971" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(MilkDrink)", shape=box, style=filled]; +"4de16a97-73ae-44ed-8b98-25ea2ee0725e" -> "56f947c3-a7ef-482c-88d3-1e892d03e971"; +"9761f0df-20ad-4368-b815-7576f6c9b4f4" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "9761f0df-20ad-4368-b815-7576f6c9b4f4"; +"5fdcb93a-7d36-4d4d-a08c-a68e5ddb55f3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"9761f0df-20ad-4368-b815-7576f6c9b4f4" -> "5fdcb93a-7d36-4d4d-a08c-a68e5ddb55f3"; +"08bf7582-b422-4976-87cf-b25b746e19fb" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Exist(MilkDrink)", shape=ellipse, style=filled]; +"9761f0df-20ad-4368-b815-7576f6c9b4f4" -> "08bf7582-b422-4976-87cf-b25b746e19fb"; +"e9c25e50-1e8f-4d0f-9ad1-76ca67f37002" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(MilkDrink)", shape=box, style=filled]; +"9761f0df-20ad-4368-b815-7576f6c9b4f4" -> "e9c25e50-1e8f-4d0f-9ad1-76ca67f37002"; +"10512191-862f-45f4-b4ff-daa01cfeaa44" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "10512191-862f-45f4-b4ff-daa01cfeaa44"; +"80c77308-4fb9-4cbe-9d37-f270f324e26a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"10512191-862f-45f4-b4ff-daa01cfeaa44" -> "80c77308-4fb9-4cbe-9d37-f270f324e26a"; +"dac9f6fd-9b96-4da1-ae54-d214d02bce62" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"10512191-862f-45f4-b4ff-daa01cfeaa44" -> "dac9f6fd-9b96-4da1-ae54-d214d02bce62"; +"dbc5d392-21be-4e06-876d-2ee6b5057385" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "dbc5d392-21be-4e06-876d-2ee6b5057385"; +"38bb3c20-e2b7-429d-aff5-56d65fd2f556" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"dbc5d392-21be-4e06-876d-2ee6b5057385" -> "38bb3c20-e2b7-429d-aff5-56d65fd2f556"; +"dd5b035d-0570-4897-9f68-edf69deca78b" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"dbc5d392-21be-4e06-876d-2ee6b5057385" -> "dd5b035d-0570-4897-9f68-edf69deca78b"; +"001db2b2-a63b-4dbf-9891-d545b67b55dd" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "001db2b2-a63b-4dbf-9891-d545b67b55dd"; +"737bea98-cadc-41be-a0cf-b224c4e8d916" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"001db2b2-a63b-4dbf-9891-d545b67b55dd" -> "737bea98-cadc-41be-a0cf-b224c4e8d916"; +"3abb4835-1ade-4d5c-8f76-706728f224f4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"001db2b2-a63b-4dbf-9891-d545b67b55dd" -> "3abb4835-1ade-4d5c-8f76-706728f224f4"; +"d1091912-39d2-4121-8498-f1028f426d91" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,Off)", shape=ellipse, style=filled]; +"001db2b2-a63b-4dbf-9891-d545b67b55dd" -> "d1091912-39d2-4121-8498-f1028f426d91"; +"c16e8314-3dae-4e78-b3be-67c178fcb824" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(AC,On)", shape=box, style=filled]; +"001db2b2-a63b-4dbf-9891-d545b67b55dd" -> "c16e8314-3dae-4e78-b3be-67c178fcb824"; +"ba9a025d-704e-46ad-8914-f1c3cb37bf9b" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "ba9a025d-704e-46ad-8914-f1c3cb37bf9b"; +"b7f165c3-8330-4d5f-a4dd-7b49ed02a2ca" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"ba9a025d-704e-46ad-8914-f1c3cb37bf9b" -> "b7f165c3-8330-4d5f-a4dd-7b49ed02a2ca"; +"25286e27-8a1d-43a7-9d45-5d45f6013ddf" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"ba9a025d-704e-46ad-8914-f1c3cb37bf9b" -> "25286e27-8a1d-43a7-9d45-5d45f6013ddf"; +"4fa868aa-8de3-4309-8962-8b111bfbe118" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"ba9a025d-704e-46ad-8914-f1c3cb37bf9b" -> "4fa868aa-8de3-4309-8962-8b111bfbe118"; +"5c24e079-1cc0-4108-ab42-3d6c70fca4eb" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(AC,Off)", shape=box, style=filled]; +"ba9a025d-704e-46ad-8914-f1c3cb37bf9b" -> "5c24e079-1cc0-4108-ab42-3d6c70fca4eb"; +"6e642af8-2255-4359-96b0-20ef4e019923" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "6e642af8-2255-4359-96b0-20ef4e019923"; +"955e69c2-7ed0-4d8f-a5fc-00204a52250a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"6e642af8-2255-4359-96b0-20ef4e019923" -> "955e69c2-7ed0-4d8f-a5fc-00204a52250a"; +"0b8fbdd3-8217-49da-a772-b03c38e46479" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(TubeLight,Off)", shape=ellipse, style=filled]; +"6e642af8-2255-4359-96b0-20ef4e019923" -> "0b8fbdd3-8217-49da-a772-b03c38e46479"; +"2a766e0f-b111-40d8-9e25-eddd17a632b4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"6e642af8-2255-4359-96b0-20ef4e019923" -> "2a766e0f-b111-40d8-9e25-eddd17a632b4"; +"ddcdd6cf-30db-44a4-a0c9-c1a9d8c137d8" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(TubeLight,On)", shape=box, style=filled]; +"6e642af8-2255-4359-96b0-20ef4e019923" -> "ddcdd6cf-30db-44a4-a0c9-c1a9d8c137d8"; +"34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab"; +"50ce95f0-3c0f-422d-95f9-8afafdbe63a3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab" -> "50ce95f0-3c0f-422d-95f9-8afafdbe63a3"; +"7841cb82-d316-4229-831e-2e0cc9264060" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(TubeLight,On)", shape=ellipse, style=filled]; +"34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab" -> "7841cb82-d316-4229-831e-2e0cc9264060"; +"3bce6c5b-78cd-4a98-9670-e26d7a997274" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab" -> "3bce6c5b-78cd-4a98-9670-e26d7a997274"; +"84cf96c8-87a2-4f74-a9f3-273ffaca42fb" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(TubeLight,Off)", shape=box, style=filled]; +"34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab" -> "84cf96c8-87a2-4f74-a9f3-273ffaca42fb"; +"d081bc62-37e9-456c-a712-33f0416040a7" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "d081bc62-37e9-456c-a712-33f0416040a7"; +"a8acf507-a0a6-47b9-b107-17519abe05ce" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"d081bc62-37e9-456c-a712-33f0416040a7" -> "a8acf507-a0a6-47b9-b107-17519abe05ce"; +"9b15dd48-fa96-4f58-93e2-685297c63e8d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,Off)", shape=ellipse, style=filled]; +"d081bc62-37e9-456c-a712-33f0416040a7" -> "9b15dd48-fa96-4f58-93e2-685297c63e8d"; +"708c11c8-5c85-4e04-99a3-756a736688d9" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"d081bc62-37e9-456c-a712-33f0416040a7" -> "708c11c8-5c85-4e04-99a3-756a736688d9"; +"6de67c8e-3a77-4f5d-9b31-e283d79b4095" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(HallLight,On)", shape=box, style=filled]; +"d081bc62-37e9-456c-a712-33f0416040a7" -> "6de67c8e-3a77-4f5d-9b31-e283d79b4095"; +"939040ff-67a9-48b2-9454-35dba4ea130a" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "939040ff-67a9-48b2-9454-35dba4ea130a"; +"6c935d52-7772-4a9b-bc87-bc268bed9756" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"939040ff-67a9-48b2-9454-35dba4ea130a" -> "6c935d52-7772-4a9b-bc87-bc268bed9756"; +"242fe73d-0383-4ab4-93fd-160d423c771c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"939040ff-67a9-48b2-9454-35dba4ea130a" -> "242fe73d-0383-4ab4-93fd-160d423c771c"; +"8b928a54-08d2-4e09-beae-54650a7449a3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"939040ff-67a9-48b2-9454-35dba4ea130a" -> "8b928a54-08d2-4e09-beae-54650a7449a3"; +"22de8e14-52c5-48ca-8860-f2951858f8e2" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(HallLight,Off)", shape=box, style=filled]; +"939040ff-67a9-48b2-9454-35dba4ea130a" -> "22de8e14-52c5-48ca-8860-f2951858f8e2"; +"32864bf8-4a64-4301-9ab6-24bec24e9836" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "32864bf8-4a64-4301-9ab6-24bec24e9836"; +"81364b16-3506-491d-8392-1adf51543636" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"32864bf8-4a64-4301-9ab6-24bec24e9836" -> "81364b16-3506-491d-8392-1adf51543636"; +"ff4c4c05-b10d-4e36-9975-a8ad9ea0cd29" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"32864bf8-4a64-4301-9ab6-24bec24e9836" -> "ff4c4c05-b10d-4e36-9975-a8ad9ea0cd29"; +"422e8f14-6c84-4e8f-802e-f73ea4ce3d81" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"32864bf8-4a64-4301-9ab6-24bec24e9836" -> "422e8f14-6c84-4e8f-802e-f73ea4ce3d81"; +"d37c83f7-5b70-4f65-be46-9bab9fc47868" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(ACTemperature,Up)", shape=box, style=filled]; +"32864bf8-4a64-4301-9ab6-24bec24e9836" -> "d37c83f7-5b70-4f65-be46-9bab9fc47868"; +"7459d628-3506-4bdd-a0fd-7325819e626c" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "7459d628-3506-4bdd-a0fd-7325819e626c"; +"9fc39acf-713f-495a-b972-874d3c793f99" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"7459d628-3506-4bdd-a0fd-7325819e626c" -> "9fc39acf-713f-495a-b972-874d3c793f99"; +"269b4979-a414-44c6-9c01-fdd61158ac2c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"7459d628-3506-4bdd-a0fd-7325819e626c" -> "269b4979-a414-44c6-9c01-fdd61158ac2c"; +"b83da396-4a42-47ea-977d-df965e2ff3cd" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"7459d628-3506-4bdd-a0fd-7325819e626c" -> "b83da396-4a42-47ea-977d-df965e2ff3cd"; +"17a1ebd7-5cb6-4fff-b37f-bd7333ab4ddd" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(ACTemperature,Down)", shape=box, style=filled]; +"7459d628-3506-4bdd-a0fd-7325819e626c" -> "17a1ebd7-5cb6-4fff-b37f-bd7333ab4ddd"; +"a3ad5938-33c0-47a7-be37-686168a53b55" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "a3ad5938-33c0-47a7-be37-686168a53b55"; +"cc12b125-bff5-42ed-b7a3-2b80725e8dec" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"a3ad5938-33c0-47a7-be37-686168a53b55" -> "cc12b125-bff5-42ed-b7a3-2b80725e8dec"; +"76fc0d73-28cc-49d5-8a5c-cad3be059655" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"a3ad5938-33c0-47a7-be37-686168a53b55" -> "76fc0d73-28cc-49d5-8a5c-cad3be059655"; +"249cb1d0-00b0-4833-96d9-cd11d92ea7c2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,Off)", shape=ellipse, style=filled]; +"a3ad5938-33c0-47a7-be37-686168a53b55" -> "249cb1d0-00b0-4833-96d9-cd11d92ea7c2"; +"2a83e205-f096-45d9-983e-4343ab93e058" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(AC,On)", shape=box, style=filled]; +"a3ad5938-33c0-47a7-be37-686168a53b55" -> "2a83e205-f096-45d9-983e-4343ab93e058"; +"073e0971-7d89-4eca-9c94-95eb314eda8f" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "073e0971-7d89-4eca-9c94-95eb314eda8f"; +"5bd43615-d488-42fc-b758-09eee1cec801" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"073e0971-7d89-4eca-9c94-95eb314eda8f" -> "5bd43615-d488-42fc-b758-09eee1cec801"; +"02a46df5-6bd1-4fab-ac60-c9f0b47d3182" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"073e0971-7d89-4eca-9c94-95eb314eda8f" -> "02a46df5-6bd1-4fab-ac60-c9f0b47d3182"; +"98bfaf44-89ee-4ca3-ae79-8c13bd067c98" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"073e0971-7d89-4eca-9c94-95eb314eda8f" -> "98bfaf44-89ee-4ca3-ae79-8c13bd067c98"; +"28e3cc40-e68f-4191-b6f0-7f9f011dcc55" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(AC,Off)", shape=box, style=filled]; +"073e0971-7d89-4eca-9c94-95eb314eda8f" -> "28e3cc40-e68f-4191-b6f0-7f9f011dcc55"; +"f7cc45fb-a77c-4abd-aff2-7109ccc9e494" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "f7cc45fb-a77c-4abd-aff2-7109ccc9e494"; +"a936bbd6-d791-4cda-abb3-434ac6da461b" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"f7cc45fb-a77c-4abd-aff2-7109ccc9e494" -> "a936bbd6-d791-4cda-abb3-434ac6da461b"; +"14797305-0794-4fe2-8703-51a5eb4e8344" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(TubeLight,Off)", shape=ellipse, style=filled]; +"f7cc45fb-a77c-4abd-aff2-7109ccc9e494" -> "14797305-0794-4fe2-8703-51a5eb4e8344"; +"ec5db45f-f9c8-4827-b31a-5a4b7e28de15" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"f7cc45fb-a77c-4abd-aff2-7109ccc9e494" -> "ec5db45f-f9c8-4827-b31a-5a4b7e28de15"; +"78e72fcf-00a6-4d70-86df-e38413cc8ad4" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(TubeLight,On)", shape=box, style=filled]; +"f7cc45fb-a77c-4abd-aff2-7109ccc9e494" -> "78e72fcf-00a6-4d70-86df-e38413cc8ad4"; +"e6811893-4a0d-4533-8b5c-9a9c711c361a" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "e6811893-4a0d-4533-8b5c-9a9c711c361a"; +"34701c0b-cbff-4873-9a07-e6d0ed8c6f2c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"e6811893-4a0d-4533-8b5c-9a9c711c361a" -> "34701c0b-cbff-4873-9a07-e6d0ed8c6f2c"; +"b89d488d-787d-4ccd-bfed-ae956f89c508" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(TubeLight,On)", shape=ellipse, style=filled]; +"e6811893-4a0d-4533-8b5c-9a9c711c361a" -> "b89d488d-787d-4ccd-bfed-ae956f89c508"; +"0a55efd3-5cb0-46b8-85a2-10a714cfea3f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"e6811893-4a0d-4533-8b5c-9a9c711c361a" -> "0a55efd3-5cb0-46b8-85a2-10a714cfea3f"; +"2bf92f3e-eb03-4c76-9745-167718e64f69" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(TubeLight,Off)", shape=box, style=filled]; +"e6811893-4a0d-4533-8b5c-9a9c711c361a" -> "2bf92f3e-eb03-4c76-9745-167718e64f69"; +"01869c3a-f558-44b5-aae2-1af1bd0b666f" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "01869c3a-f558-44b5-aae2-1af1bd0b666f"; +"6c6c52df-e609-4e06-8b72-1ac98530a9b6" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"01869c3a-f558-44b5-aae2-1af1bd0b666f" -> "6c6c52df-e609-4e06-8b72-1ac98530a9b6"; +"a9c0da3d-8cbf-4a6b-9f0e-0a43e3983dd2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,Off)", shape=ellipse, style=filled]; +"01869c3a-f558-44b5-aae2-1af1bd0b666f" -> "a9c0da3d-8cbf-4a6b-9f0e-0a43e3983dd2"; +"1d08bf09-a00d-44c6-bd2a-d324c076e80b" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"01869c3a-f558-44b5-aae2-1af1bd0b666f" -> "1d08bf09-a00d-44c6-bd2a-d324c076e80b"; +"c6127297-a8db-4ff9-a09b-a7c6f63a52bf" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(HallLight,On)", shape=box, style=filled]; +"01869c3a-f558-44b5-aae2-1af1bd0b666f" -> "c6127297-a8db-4ff9-a09b-a7c6f63a52bf"; +"cd593bf4-6f41-4455-a5df-d67372db6211" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "cd593bf4-6f41-4455-a5df-d67372db6211"; +"be40bff1-fdb0-4523-9a3a-0b711b0eef27" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"cd593bf4-6f41-4455-a5df-d67372db6211" -> "be40bff1-fdb0-4523-9a3a-0b711b0eef27"; +"e921cc5b-d565-461d-b685-6b3a70aec1f3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(HallLight,On)", shape=ellipse, style=filled]; +"cd593bf4-6f41-4455-a5df-d67372db6211" -> "e921cc5b-d565-461d-b685-6b3a70aec1f3"; +"e6810aaf-ac01-4f22-8837-a9f0d313c3f7" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"cd593bf4-6f41-4455-a5df-d67372db6211" -> "e6810aaf-ac01-4f22-8837-a9f0d313c3f7"; +"a3cfb0c8-0a2a-4284-87e0-3f36389969fa" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(HallLight,Off)", shape=box, style=filled]; +"cd593bf4-6f41-4455-a5df-d67372db6211" -> "a3cfb0c8-0a2a-4284-87e0-3f36389969fa"; +"255c953a-e35c-4bd7-a12b-374f106d6d1a" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "255c953a-e35c-4bd7-a12b-374f106d6d1a"; +"2746be80-fc4a-4165-a13a-966b5613685c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"255c953a-e35c-4bd7-a12b-374f106d6d1a" -> "2746be80-fc4a-4165-a13a-966b5613685c"; +"4f88c26f-a89b-4029-8d34-024796a7180c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"255c953a-e35c-4bd7-a12b-374f106d6d1a" -> "4f88c26f-a89b-4029-8d34-024796a7180c"; +"14561f75-02ea-46de-804f-c16bf350be29" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"255c953a-e35c-4bd7-a12b-374f106d6d1a" -> "14561f75-02ea-46de-804f-c16bf350be29"; +"c7654899-39ad-468d-9730-9396e8174808" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(ACTemperature,Up)", shape=box, style=filled]; +"255c953a-e35c-4bd7-a12b-374f106d6d1a" -> "c7654899-39ad-468d-9730-9396e8174808"; +"4a17d628-61fa-4ce2-af96-54b974553d66" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4613e442-b6f7-4bcf-9e67-f0dc6873cdb3" -> "4a17d628-61fa-4ce2-af96-54b974553d66"; +"99b783b6-25f7-4119-ae88-b04aee929420" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"4a17d628-61fa-4ce2-af96-54b974553d66" -> "99b783b6-25f7-4119-ae88-b04aee929420"; +"0df71fd0-3dbb-470c-bca5-4ffc0dc02e08" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"4a17d628-61fa-4ce2-af96-54b974553d66" -> "0df71fd0-3dbb-470c-bca5-4ffc0dc02e08"; +"d21a5e33-b4c6-446a-b5a8-5e4136682612" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"4a17d628-61fa-4ce2-af96-54b974553d66" -> "d21a5e33-b4c6-446a-b5a8-5e4136682612"; +"8ab02be1-32af-42e7-a1db-e528e916656d" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(ACTemperature,Down)", shape=box, style=filled]; +"4a17d628-61fa-4ce2-af96-54b974553d66" -> "8ab02be1-32af-42e7-a1db-e528e916656d"; +"e3534efa-3884-4192-8ca5-9bf7b8047ca3" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PickUp(MilkDrink)", shape=box, style=filled]; +"50d308bd-0b9f-4e78-9faf-09443718d733" -> "e3534efa-3884-4192-8ca5-9bf7b8047ca3"; +"1d7380cc-249b-44dc-9cfe-c4bf8988f0a2" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4cd5bc0c-dd37-49cb-ac58-6f4f9030b991" -> "1d7380cc-249b-44dc-9cfe-c4bf8988f0a2"; +"be6b509f-4e17-4fc9-95e6-b091cf2a0064" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"1d7380cc-249b-44dc-9cfe-c4bf8988f0a2" -> "be6b509f-4e17-4fc9-95e6-b091cf2a0064"; +"46f12db5-5245-4e82-89e7-e819024ec4fe" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,MilkDrink)", shape=ellipse, style=filled]; +"1d7380cc-249b-44dc-9cfe-c4bf8988f0a2" -> "46f12db5-5245-4e82-89e7-e819024ec4fe"; +"3830f76b-a181-4db5-9cc1-36203fe66bea" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PickUp(MilkDrink)", shape=box, style=filled]; +"1d7380cc-249b-44dc-9cfe-c4bf8988f0a2" -> "3830f76b-a181-4db5-9cc1-36203fe66bea"; +"a466cc8d-2b66-47e0-9381-99369e6ab41b" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(Bar)", shape=box, style=filled]; +"cbff45f9-d7ce-46f6-a04c-33e10b807a2b" -> "a466cc8d-2b66-47e0-9381-99369e6ab41b"; +"c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c"; +"1644107b-3086-48a6-8323-e8962edc3656" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c" -> "1644107b-3086-48a6-8323-e8962edc3656"; +"3fe13d3c-0a08-419a-92aa-3de1c52116e1" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(Bar)", shape=box, style=filled]; +"c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c" -> "3fe13d3c-0a08-419a-92aa-3de1c52116e1"; +"bf1fa06b-1e89-484c-8a4c-dcfcc37e568c" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "bf1fa06b-1e89-484c-8a4c-dcfcc37e568c"; +"37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"bf1fa06b-1e89-484c-8a4c-dcfcc37e568c" -> "37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0"; +"dfb9ad02-9898-4ad8-a861-8121da623ae5" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0" -> "dfb9ad02-9898-4ad8-a861-8121da623ae5"; +"be2dcdfb-39d1-40a6-b78d-b0b6376e9c3a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Softdrink)", shape=ellipse, style=filled]; +"37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0" -> "be2dcdfb-39d1-40a6-b78d-b0b6376e9c3a"; +"083586cc-9313-4246-a37c-322179f894ba" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0" -> "083586cc-9313-4246-a37c-322179f894ba"; +"488f979d-00cf-493b-9f41-e46a1ab3deed" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Softdrink,Bar)", shape=box, style=filled]; +"bf1fa06b-1e89-484c-8a4c-dcfcc37e568c" -> "488f979d-00cf-493b-9f41-e46a1ab3deed"; +"f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f"; +"bc5dee25-9b6c-409a-ac8f-0e7272de2250" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f" -> "bc5dee25-9b6c-409a-ac8f-0e7272de2250"; +"6a154453-6991-414c-9222-558a75a4d7ed" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"bc5dee25-9b6c-409a-ac8f-0e7272de2250" -> "6a154453-6991-414c-9222-558a75a4d7ed"; +"879d0bd0-941c-4793-81a2-6d5185b32780" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"bc5dee25-9b6c-409a-ac8f-0e7272de2250" -> "879d0bd0-941c-4793-81a2-6d5185b32780"; +"147bd700-e355-42bd-9eb2-d9e848b9cb2a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Bernachon)", shape=ellipse, style=filled]; +"bc5dee25-9b6c-409a-ac8f-0e7272de2250" -> "147bd700-e355-42bd-9eb2-d9e848b9cb2a"; +"adddbafa-7866-447f-b51c-cc6fd375097e" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Bernachon,Bar)", shape=box, style=filled]; +"f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f" -> "adddbafa-7866-447f-b51c-cc6fd375097e"; +"a250d5e9-3079-478b-9bab-b92bc372a6ef" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "a250d5e9-3079-478b-9bab-b92bc372a6ef"; +"542f7157-5919-4494-b1c7-8347fde1ba81" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"a250d5e9-3079-478b-9bab-b92bc372a6ef" -> "542f7157-5919-4494-b1c7-8347fde1ba81"; +"4203eb66-331b-4523-9e0d-bd352085372e" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"542f7157-5919-4494-b1c7-8347fde1ba81" -> "4203eb66-331b-4523-9e0d-bd352085372e"; +"1344d196-da12-4225-9e6f-694dc08cb6e4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(NFCJuice)", shape=ellipse, style=filled]; +"542f7157-5919-4494-b1c7-8347fde1ba81" -> "1344d196-da12-4225-9e6f-694dc08cb6e4"; +"01e9f37e-743e-491a-b156-20321d0e08de" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"542f7157-5919-4494-b1c7-8347fde1ba81" -> "01e9f37e-743e-491a-b156-20321d0e08de"; +"e645636e-828d-4340-9322-5e77c021fa79" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(NFCJuice,Bar)", shape=box, style=filled]; +"a250d5e9-3079-478b-9bab-b92bc372a6ef" -> "e645636e-828d-4340-9322-5e77c021fa79"; +"7940c5fc-8811-458c-8ba6-20c1af78eb78" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "7940c5fc-8811-458c-8ba6-20c1af78eb78"; +"a6aa9a54-860b-47a0-a740-56f627904462" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"7940c5fc-8811-458c-8ba6-20c1af78eb78" -> "a6aa9a54-860b-47a0-a740-56f627904462"; +"423f937e-01a3-4792-9289-69802f12f401" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"a6aa9a54-860b-47a0-a740-56f627904462" -> "423f937e-01a3-4792-9289-69802f12f401"; +"6a7a49d5-c4ab-4e2a-9a88-b53a34c13344" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"a6aa9a54-860b-47a0-a740-56f627904462" -> "6a7a49d5-c4ab-4e2a-9a88-b53a34c13344"; +"ba9d685b-2598-403f-bcda-db7037e42d3a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Chips)", shape=ellipse, style=filled]; +"a6aa9a54-860b-47a0-a740-56f627904462" -> "ba9d685b-2598-403f-bcda-db7037e42d3a"; +"4478c605-5af6-4de4-b76f-0153ce265b80" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Chips,Bar)", shape=box, style=filled]; +"7940c5fc-8811-458c-8ba6-20c1af78eb78" -> "4478c605-5af6-4de4-b76f-0153ce265b80"; +"01dcea8e-eca2-4b08-994f-b91577ff857d" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "01dcea8e-eca2-4b08-994f-b91577ff857d"; +"29d46846-cbac-4f70-bd03-79b1cef1c6ef" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"01dcea8e-eca2-4b08-994f-b91577ff857d" -> "29d46846-cbac-4f70-bd03-79b1cef1c6ef"; +"de004850-94e6-4951-a449-1f67780d4234" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Water)", shape=ellipse, style=filled]; +"29d46846-cbac-4f70-bd03-79b1cef1c6ef" -> "de004850-94e6-4951-a449-1f67780d4234"; +"bb964d79-cc71-49e4-b3d5-b7640ebbdb4d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"29d46846-cbac-4f70-bd03-79b1cef1c6ef" -> "bb964d79-cc71-49e4-b3d5-b7640ebbdb4d"; +"a7d83f00-dba0-4ee2-bfc5-f48c0a0cfd33" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"29d46846-cbac-4f70-bd03-79b1cef1c6ef" -> "a7d83f00-dba0-4ee2-bfc5-f48c0a0cfd33"; +"b2cb2241-6e78-4bb4-be39-b8a5f8de311a" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Water,Bar)", shape=box, style=filled]; +"01dcea8e-eca2-4b08-994f-b91577ff857d" -> "b2cb2241-6e78-4bb4-be39-b8a5f8de311a"; +"182ba254-1346-40aa-b578-4a6bb67fee5a" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "182ba254-1346-40aa-b578-4a6bb67fee5a"; +"e036ee91-0689-4407-9702-89c9cb1df247" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"182ba254-1346-40aa-b578-4a6bb67fee5a" -> "e036ee91-0689-4407-9702-89c9cb1df247"; +"3c2592a4-0500-413b-89ac-636b75739834" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(BottledDrink)", shape=ellipse, style=filled]; +"e036ee91-0689-4407-9702-89c9cb1df247" -> "3c2592a4-0500-413b-89ac-636b75739834"; +"6278e4b6-e5c0-47ab-a869-6e5203caa2f0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"e036ee91-0689-4407-9702-89c9cb1df247" -> "6278e4b6-e5c0-47ab-a869-6e5203caa2f0"; +"d4f187d2-0da7-403b-aca9-3b6f997ee8c3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"e036ee91-0689-4407-9702-89c9cb1df247" -> "d4f187d2-0da7-403b-aca9-3b6f997ee8c3"; +"5ba8a58b-b041-4aee-8a04-9b3b45a9f16d" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(BottledDrink,Bar)", shape=box, style=filled]; +"182ba254-1346-40aa-b578-4a6bb67fee5a" -> "5ba8a58b-b041-4aee-8a04-9b3b45a9f16d"; +"51c6f61b-112c-4e76-9cfa-b2bea8a11ec0" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "51c6f61b-112c-4e76-9cfa-b2bea8a11ec0"; +"0768ab4b-fdd9-4996-8834-a162ea5de5ef" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"51c6f61b-112c-4e76-9cfa-b2bea8a11ec0" -> "0768ab4b-fdd9-4996-8834-a162ea5de5ef"; +"3929c98a-3444-4f2b-9f23-9572bf5bfbeb" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"0768ab4b-fdd9-4996-8834-a162ea5de5ef" -> "3929c98a-3444-4f2b-9f23-9572bf5bfbeb"; +"22181a9b-e398-491a-9c57-d53c16ed51ea" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"0768ab4b-fdd9-4996-8834-a162ea5de5ef" -> "22181a9b-e398-491a-9c57-d53c16ed51ea"; +"3118f39d-cf42-4209-bfee-6ef3461dafc6" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Dessert)", shape=ellipse, style=filled]; +"0768ab4b-fdd9-4996-8834-a162ea5de5ef" -> "3118f39d-cf42-4209-bfee-6ef3461dafc6"; +"9d0993d8-e2db-4cac-aba1-218bec400b24" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Dessert,Bar)", shape=box, style=filled]; +"51c6f61b-112c-4e76-9cfa-b2bea8a11ec0" -> "9d0993d8-e2db-4cac-aba1-218bec400b24"; +"17e658ad-112c-4274-b068-a8357db2555e" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "17e658ad-112c-4274-b068-a8357db2555e"; +"54d7cc55-402c-4390-9d36-17f5bbeef1e8" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"17e658ad-112c-4274-b068-a8357db2555e" -> "54d7cc55-402c-4390-9d36-17f5bbeef1e8"; +"6947e039-aa99-47b9-9294-78fcbc113cc9" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"54d7cc55-402c-4390-9d36-17f5bbeef1e8" -> "6947e039-aa99-47b9-9294-78fcbc113cc9"; +"bc51cc2e-26a2-47a1-85c9-ab3a6317aeb3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(SpringWater)", shape=ellipse, style=filled]; +"54d7cc55-402c-4390-9d36-17f5bbeef1e8" -> "bc51cc2e-26a2-47a1-85c9-ab3a6317aeb3"; +"b7e3228e-a634-4073-8bdc-99b2d4b7dc45" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"54d7cc55-402c-4390-9d36-17f5bbeef1e8" -> "b7e3228e-a634-4073-8bdc-99b2d4b7dc45"; +"abfb9be4-85cc-4ab5-bc95-bbee33a0ddd3" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(SpringWater,Bar)", shape=box, style=filled]; +"17e658ad-112c-4274-b068-a8357db2555e" -> "abfb9be4-85cc-4ab5-bc95-bbee33a0ddd3"; +"f6e6bf0b-5751-4c23-a432-4dcea9143cda" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "f6e6bf0b-5751-4c23-a432-4dcea9143cda"; +"291447ed-1951-4814-b8be-730d9b57e51a" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"f6e6bf0b-5751-4c23-a432-4dcea9143cda" -> "291447ed-1951-4814-b8be-730d9b57e51a"; +"2774cd34-2c04-4174-84c6-81548241f78f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"291447ed-1951-4814-b8be-730d9b57e51a" -> "2774cd34-2c04-4174-84c6-81548241f78f"; +"b1e770ad-c211-475f-b3d8-a13e23063a1d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"291447ed-1951-4814-b8be-730d9b57e51a" -> "b1e770ad-c211-475f-b3d8-a13e23063a1d"; +"26cbe8ac-83b4-4b6b-bf66-c4a591e3031b" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Milk)", shape=ellipse, style=filled]; +"291447ed-1951-4814-b8be-730d9b57e51a" -> "26cbe8ac-83b4-4b6b-bf66-c4a591e3031b"; +"a970259e-20f6-434f-8ded-4f37db6d76cf" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Milk,Bar)", shape=box, style=filled]; +"f6e6bf0b-5751-4c23-a432-4dcea9143cda" -> "a970259e-20f6-434f-8ded-4f37db6d76cf"; +"b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f"; +"3746b6f6-0c15-4b64-94e5-ec74246cc303" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f" -> "3746b6f6-0c15-4b64-94e5-ec74246cc303"; +"b43c7cd5-f898-44b7-a6e4-5d12667ee735" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"3746b6f6-0c15-4b64-94e5-ec74246cc303" -> "b43c7cd5-f898-44b7-a6e4-5d12667ee735"; +"dc10f464-b59f-4bdb-8782-6b92d0a78ddc" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(VacuumCup)", shape=ellipse, style=filled]; +"3746b6f6-0c15-4b64-94e5-ec74246cc303" -> "dc10f464-b59f-4bdb-8782-6b92d0a78ddc"; +"8ec27e4a-a76d-4518-917a-226a6926b9c1" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"3746b6f6-0c15-4b64-94e5-ec74246cc303" -> "8ec27e4a-a76d-4518-917a-226a6926b9c1"; +"c3989486-941b-4098-9f3a-240f3fe88e4b" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(VacuumCup,Bar)", shape=box, style=filled]; +"b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f" -> "c3989486-941b-4098-9f3a-240f3fe88e4b"; +"a7d48b08-1bb2-4a73-9c65-42491a102689" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "a7d48b08-1bb2-4a73-9c65-42491a102689"; +"382a4b70-3888-42ec-8f64-fea45299647e" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"a7d48b08-1bb2-4a73-9c65-42491a102689" -> "382a4b70-3888-42ec-8f64-fea45299647e"; +"2076aeb9-be66-4686-bb73-358ba2022941" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Yogurt)", shape=ellipse, style=filled]; +"382a4b70-3888-42ec-8f64-fea45299647e" -> "2076aeb9-be66-4686-bb73-358ba2022941"; +"f4b6f980-21fa-4cf6-b803-7c07221cebc5" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"382a4b70-3888-42ec-8f64-fea45299647e" -> "f4b6f980-21fa-4cf6-b803-7c07221cebc5"; +"fb5c1657-e9c5-485f-bd4f-a8dd29aed3ae" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"382a4b70-3888-42ec-8f64-fea45299647e" -> "fb5c1657-e9c5-485f-bd4f-a8dd29aed3ae"; +"12d87012-108b-439e-883f-1b419e84041a" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Yogurt,Bar)", shape=box, style=filled]; +"a7d48b08-1bb2-4a73-9c65-42491a102689" -> "12d87012-108b-439e-883f-1b419e84041a"; +"4bc12752-f3d7-4627-a627-ec1f43520d8f" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "4bc12752-f3d7-4627-a627-ec1f43520d8f"; +"4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"4bc12752-f3d7-4627-a627-ec1f43520d8f" -> "4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5"; +"523fd084-b5f2-4657-9dc0-0033395e59c9" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5" -> "523fd084-b5f2-4657-9dc0-0033395e59c9"; +"22bc3fe5-d861-4798-915b-51e7f785c223" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(ADMilk)", shape=ellipse, style=filled]; +"4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5" -> "22bc3fe5-d861-4798-915b-51e7f785c223"; +"a95802ce-bf2a-44ee-aae6-0fa4a95e3a25" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5" -> "a95802ce-bf2a-44ee-aae6-0fa4a95e3a25"; +"4d8f8dc8-71c7-439a-aa6c-9864cd9601ad" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(ADMilk,Bar)", shape=box, style=filled]; +"4bc12752-f3d7-4627-a627-ec1f43520d8f" -> "4d8f8dc8-71c7-439a-aa6c-9864cd9601ad"; +"4d7755da-33ed-47e1-9983-a20a75a8f42e" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "4d7755da-33ed-47e1-9983-a20a75a8f42e"; +"848a2572-11f3-4d2c-bb7b-628b79b7dc70" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"4d7755da-33ed-47e1-9983-a20a75a8f42e" -> "848a2572-11f3-4d2c-bb7b-628b79b7dc70"; +"918a6e60-f9f6-4354-b865-4498cca28ff4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"848a2572-11f3-4d2c-bb7b-628b79b7dc70" -> "918a6e60-f9f6-4354-b865-4498cca28ff4"; +"e4e4c515-81e2-4261-8e59-5dc3109fb871" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"848a2572-11f3-4d2c-bb7b-628b79b7dc70" -> "e4e4c515-81e2-4261-8e59-5dc3109fb871"; +"3fc7322f-76f4-4513-a768-97f564d246b8" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"848a2572-11f3-4d2c-bb7b-628b79b7dc70" -> "3fc7322f-76f4-4513-a768-97f564d246b8"; +"10cabde0-a935-4cda-b210-c773ccc0ded6" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,Bar)", shape=box, style=filled]; +"4d7755da-33ed-47e1-9983-a20a75a8f42e" -> "10cabde0-a935-4cda-b210-c773ccc0ded6"; +"dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9"; +"36b36b29-fa15-4d42-b625-f2c234167673" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9" -> "36b36b29-fa15-4d42-b625-f2c234167673"; +"08c98ebc-1ac7-4a01-93cd-9bccd7a48e72" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Softdrink)", shape=ellipse, style=filled]; +"dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9" -> "08c98ebc-1ac7-4a01-93cd-9bccd7a48e72"; +"b0d4dfdb-2e86-4116-ab4b-7aca1c0c253f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9" -> "b0d4dfdb-2e86-4116-ab4b-7aca1c0c253f"; +"78351f8b-40d9-4ca2-a7e4-51ecc67cdbdb" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Softdrink,Bar)", shape=box, style=filled]; +"dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9" -> "78351f8b-40d9-4ca2-a7e4-51ecc67cdbdb"; +"7798fb41-706e-4fdc-86f5-73f69e98d58b" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "7798fb41-706e-4fdc-86f5-73f69e98d58b"; +"cd2b377e-a73a-4d23-b97a-caebd44d093b" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"7798fb41-706e-4fdc-86f5-73f69e98d58b" -> "cd2b377e-a73a-4d23-b97a-caebd44d093b"; +"f119569e-3499-41d1-9017-e5549bdbd17b" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"7798fb41-706e-4fdc-86f5-73f69e98d58b" -> "f119569e-3499-41d1-9017-e5549bdbd17b"; +"9f75f355-b50f-4af9-87ca-3dbc72919f27" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Bernachon)", shape=ellipse, style=filled]; +"7798fb41-706e-4fdc-86f5-73f69e98d58b" -> "9f75f355-b50f-4af9-87ca-3dbc72919f27"; +"67338261-a68a-4a3e-a228-d031f7fd49d5" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Bernachon,Bar)", shape=box, style=filled]; +"7798fb41-706e-4fdc-86f5-73f69e98d58b" -> "67338261-a68a-4a3e-a228-d031f7fd49d5"; +"d27bfb36-f2e6-492a-87f7-0c6517348697" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "d27bfb36-f2e6-492a-87f7-0c6517348697"; +"03893732-2163-41b9-afb8-f31b900d5bcd" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"d27bfb36-f2e6-492a-87f7-0c6517348697" -> "03893732-2163-41b9-afb8-f31b900d5bcd"; +"5ce16741-ca81-4f3d-97f3-042a79f2ae1d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(NFCJuice)", shape=ellipse, style=filled]; +"d27bfb36-f2e6-492a-87f7-0c6517348697" -> "5ce16741-ca81-4f3d-97f3-042a79f2ae1d"; +"0445fc42-f9cd-49c5-b561-66d220e95c20" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"d27bfb36-f2e6-492a-87f7-0c6517348697" -> "0445fc42-f9cd-49c5-b561-66d220e95c20"; +"60e2142c-ca48-4936-9f74-15860e8c388a" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(NFCJuice,Bar)", shape=box, style=filled]; +"d27bfb36-f2e6-492a-87f7-0c6517348697" -> "60e2142c-ca48-4936-9f74-15860e8c388a"; +"40493118-57ee-4082-952d-147f8ef32b53" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "40493118-57ee-4082-952d-147f8ef32b53"; +"46f3f8a7-d9e3-4500-b125-6b65fad814f2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"40493118-57ee-4082-952d-147f8ef32b53" -> "46f3f8a7-d9e3-4500-b125-6b65fad814f2"; +"e834c89f-c3a1-481a-964f-d17712a234b2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"40493118-57ee-4082-952d-147f8ef32b53" -> "e834c89f-c3a1-481a-964f-d17712a234b2"; +"f6581294-8006-4897-96f0-2f8a63d43faf" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Chips)", shape=ellipse, style=filled]; +"40493118-57ee-4082-952d-147f8ef32b53" -> "f6581294-8006-4897-96f0-2f8a63d43faf"; +"07a610ed-90d4-4f8c-9c3d-60cf62877f5a" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Chips,Bar)", shape=box, style=filled]; +"40493118-57ee-4082-952d-147f8ef32b53" -> "07a610ed-90d4-4f8c-9c3d-60cf62877f5a"; +"b8b7c80e-ab74-4167-b090-d911d9279854" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "b8b7c80e-ab74-4167-b090-d911d9279854"; +"7c4fe8f0-3960-40ec-9c6b-ed86e85e4300" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Water)", shape=ellipse, style=filled]; +"b8b7c80e-ab74-4167-b090-d911d9279854" -> "7c4fe8f0-3960-40ec-9c6b-ed86e85e4300"; +"ae561e81-6131-4f61-a626-8c7007d609d4" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"b8b7c80e-ab74-4167-b090-d911d9279854" -> "ae561e81-6131-4f61-a626-8c7007d609d4"; +"724134fb-4b97-4949-8501-4cde449d3859" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"b8b7c80e-ab74-4167-b090-d911d9279854" -> "724134fb-4b97-4949-8501-4cde449d3859"; +"70572626-cfc5-4864-9696-3f39ea3e7c72" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Water,Bar)", shape=box, style=filled]; +"b8b7c80e-ab74-4167-b090-d911d9279854" -> "70572626-cfc5-4864-9696-3f39ea3e7c72"; +"083162b7-6455-4358-809e-6ee578edc7ae" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "083162b7-6455-4358-809e-6ee578edc7ae"; +"d12c3c7a-2c88-4636-9b73-6f782f771e9d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(BottledDrink)", shape=ellipse, style=filled]; +"083162b7-6455-4358-809e-6ee578edc7ae" -> "d12c3c7a-2c88-4636-9b73-6f782f771e9d"; +"3fe89acf-9022-47a4-9d61-1d2b250ed0f6" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"083162b7-6455-4358-809e-6ee578edc7ae" -> "3fe89acf-9022-47a4-9d61-1d2b250ed0f6"; +"01b8ff5c-8365-4c6e-9c4f-edceed501fa0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"083162b7-6455-4358-809e-6ee578edc7ae" -> "01b8ff5c-8365-4c6e-9c4f-edceed501fa0"; +"e7e046b8-72d5-4c9d-89c3-b07456dc7b73" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(BottledDrink,Bar)", shape=box, style=filled]; +"083162b7-6455-4358-809e-6ee578edc7ae" -> "e7e046b8-72d5-4c9d-89c3-b07456dc7b73"; +"b83f73a7-b5e8-4049-ae43-05e6a16e96c2" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "b83f73a7-b5e8-4049-ae43-05e6a16e96c2"; +"b41a7721-c955-4184-a1ed-72047647e3c1" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"b83f73a7-b5e8-4049-ae43-05e6a16e96c2" -> "b41a7721-c955-4184-a1ed-72047647e3c1"; +"9fb804e2-044d-44a9-8c41-40174ff70004" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"b83f73a7-b5e8-4049-ae43-05e6a16e96c2" -> "9fb804e2-044d-44a9-8c41-40174ff70004"; +"01c6142c-2ff7-4a92-a91e-27575850af81" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Dessert)", shape=ellipse, style=filled]; +"b83f73a7-b5e8-4049-ae43-05e6a16e96c2" -> "01c6142c-2ff7-4a92-a91e-27575850af81"; +"d9c9a356-a5f8-42ad-b3f0-9129ed5d35c2" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Dessert,Bar)", shape=box, style=filled]; +"b83f73a7-b5e8-4049-ae43-05e6a16e96c2" -> "d9c9a356-a5f8-42ad-b3f0-9129ed5d35c2"; +"89cd87e5-f4a0-493c-9460-819a9d0f8870" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "89cd87e5-f4a0-493c-9460-819a9d0f8870"; +"aefd565a-f6c7-4911-85cf-188476492418" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"89cd87e5-f4a0-493c-9460-819a9d0f8870" -> "aefd565a-f6c7-4911-85cf-188476492418"; +"c0ccd327-af6f-4fef-adb7-b1411d14a59e" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(SpringWater)", shape=ellipse, style=filled]; +"89cd87e5-f4a0-493c-9460-819a9d0f8870" -> "c0ccd327-af6f-4fef-adb7-b1411d14a59e"; +"466fe1ba-2890-4691-861f-d29b70a5e11f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"89cd87e5-f4a0-493c-9460-819a9d0f8870" -> "466fe1ba-2890-4691-861f-d29b70a5e11f"; +"2abeda39-c181-4b3e-b5fb-fa9517c4c17d" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(SpringWater,Bar)", shape=box, style=filled]; +"89cd87e5-f4a0-493c-9460-819a9d0f8870" -> "2abeda39-c181-4b3e-b5fb-fa9517c4c17d"; +"47e4b3b0-160e-47c7-952c-ba6301d69ca7" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "47e4b3b0-160e-47c7-952c-ba6301d69ca7"; +"b98ba6db-8280-4490-9e84-49487fde3390" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"47e4b3b0-160e-47c7-952c-ba6301d69ca7" -> "b98ba6db-8280-4490-9e84-49487fde3390"; +"4e420313-0d1c-48dd-966d-ea13066fc57c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"47e4b3b0-160e-47c7-952c-ba6301d69ca7" -> "4e420313-0d1c-48dd-966d-ea13066fc57c"; +"4c67a617-c585-4cff-a7af-80a296d284bd" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Milk)", shape=ellipse, style=filled]; +"47e4b3b0-160e-47c7-952c-ba6301d69ca7" -> "4c67a617-c585-4cff-a7af-80a296d284bd"; +"c02c9dd2-069f-4e1b-a172-f4aa3e47efb9" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Milk,Bar)", shape=box, style=filled]; +"47e4b3b0-160e-47c7-952c-ba6301d69ca7" -> "c02c9dd2-069f-4e1b-a172-f4aa3e47efb9"; +"64b7af7f-af4e-4ac0-a762-454230c2182b" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "64b7af7f-af4e-4ac0-a762-454230c2182b"; +"4255d0f0-5351-47ec-8bcc-cb920993938e" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"64b7af7f-af4e-4ac0-a762-454230c2182b" -> "4255d0f0-5351-47ec-8bcc-cb920993938e"; +"100f8154-f3d0-477e-a5ec-73ee2073c26a" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(VacuumCup)", shape=ellipse, style=filled]; +"64b7af7f-af4e-4ac0-a762-454230c2182b" -> "100f8154-f3d0-477e-a5ec-73ee2073c26a"; +"166c120d-cb73-44c6-8731-c1424a64cbc0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"64b7af7f-af4e-4ac0-a762-454230c2182b" -> "166c120d-cb73-44c6-8731-c1424a64cbc0"; +"271a95d8-3651-4c9e-936c-dbdcc69e354e" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(VacuumCup,Bar)", shape=box, style=filled]; +"64b7af7f-af4e-4ac0-a762-454230c2182b" -> "271a95d8-3651-4c9e-936c-dbdcc69e354e"; +"7b9e2e65-34e2-4727-b92a-6e433410a967" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "7b9e2e65-34e2-4727-b92a-6e433410a967"; +"e374c32a-9a09-4f00-9776-c568b38c7838" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Yogurt)", shape=ellipse, style=filled]; +"7b9e2e65-34e2-4727-b92a-6e433410a967" -> "e374c32a-9a09-4f00-9776-c568b38c7838"; +"7ec7305a-ee6e-4410-9e7d-8fdbb72a9d91" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"7b9e2e65-34e2-4727-b92a-6e433410a967" -> "7ec7305a-ee6e-4410-9e7d-8fdbb72a9d91"; +"be476221-722d-4cb4-9113-5e359e524e71" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"7b9e2e65-34e2-4727-b92a-6e433410a967" -> "be476221-722d-4cb4-9113-5e359e524e71"; +"0605a547-3a8f-4502-8efa-1896d0b6cf1e" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Yogurt,Bar)", shape=box, style=filled]; +"7b9e2e65-34e2-4727-b92a-6e433410a967" -> "0605a547-3a8f-4502-8efa-1896d0b6cf1e"; +"d86a7a63-841b-427c-bfb1-a0348e95f899" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "d86a7a63-841b-427c-bfb1-a0348e95f899"; +"680344f3-a7c8-4c39-a0d2-8235f99a7d5e" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"d86a7a63-841b-427c-bfb1-a0348e95f899" -> "680344f3-a7c8-4c39-a0d2-8235f99a7d5e"; +"6d77ce27-4ee9-4d98-aa6a-2dc0d80af7c3" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(ADMilk)", shape=ellipse, style=filled]; +"d86a7a63-841b-427c-bfb1-a0348e95f899" -> "6d77ce27-4ee9-4d98-aa6a-2dc0d80af7c3"; +"68455b9a-fe5a-4b55-b34a-3b286769af32" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"d86a7a63-841b-427c-bfb1-a0348e95f899" -> "68455b9a-fe5a-4b55-b34a-3b286769af32"; +"c2c8a77b-4424-4660-b04a-1badc4d4c918" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(ADMilk,Bar)", shape=box, style=filled]; +"d86a7a63-841b-427c-bfb1-a0348e95f899" -> "c2c8a77b-4424-4660-b04a-1badc4d4c918"; +"992d22b0-61b3-4bff-a0b3-ffb39ed57a83" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"c16089c9-362b-4a60-8c32-f5f5bff3637d" -> "992d22b0-61b3-4bff-a0b3-ffb39ed57a83"; +"0304efc1-278b-4123-9279-e81912d89f27" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"992d22b0-61b3-4bff-a0b3-ffb39ed57a83" -> "0304efc1-278b-4123-9279-e81912d89f27"; +"7a2a94bc-9582-496d-bd8e-49d683fedfaf" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"992d22b0-61b3-4bff-a0b3-ffb39ed57a83" -> "7a2a94bc-9582-496d-bd8e-49d683fedfaf"; +"82ebb4a8-ecd2-421b-8477-59c0795e76cc" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"992d22b0-61b3-4bff-a0b3-ffb39ed57a83" -> "82ebb4a8-ecd2-421b-8477-59c0795e76cc"; +"0a56cf17-de4c-4dea-b77f-fd201707d0f3" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,Bar)", shape=box, style=filled]; +"992d22b0-61b3-4bff-a0b3-ffb39ed57a83" -> "0a56cf17-de4c-4dea-b77f-fd201707d0f3"; +"64bdab11-8733-486c-8be1-42ee6ea6972e" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(MilkDrink,Bar)", shape=box, style=filled]; +"7d290e06-450b-4d6a-873e-cb1add89b66a" -> "64bdab11-8733-486c-8be1-42ee6ea6972e"; +"fffb61a5-c080-435f-b642-96656a4c8bd1" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"b3eb0566-c750-43a0-94cc-a5ce1383d2a8" -> "fffb61a5-c080-435f-b642-96656a4c8bd1"; +"91f406b6-4141-4b9d-8685-3358c1f38016" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(MilkDrink)", shape=ellipse, style=filled]; +"fffb61a5-c080-435f-b642-96656a4c8bd1" -> "91f406b6-4141-4b9d-8685-3358c1f38016"; +"461000b9-b5b4-41d8-93be-0daca9273dcf" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar2)", shape=ellipse, style=filled]; +"fffb61a5-c080-435f-b642-96656a4c8bd1" -> "461000b9-b5b4-41d8-93be-0daca9273dcf"; +"4a2642bb-b191-45e1-82f5-7303cb7dddd8" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(MilkDrink,Bar)", shape=box, style=filled]; +"fffb61a5-c080-435f-b642-96656a4c8bd1" -> "4a2642bb-b191-45e1-82f5-7303cb7dddd8"; +} diff --git a/BTExpansionCode/EXP/expanded_bt.png b/BTExpansionCode/EXP/expanded_bt.png new file mode 100644 index 0000000..501bdcb Binary files /dev/null and b/BTExpansionCode/EXP/expanded_bt.png differ diff --git a/BTExpansionCode/EXP/expanded_bt.svg b/BTExpansionCode/EXP/expanded_bt.svg new file mode 100644 index 0000000..05090e9 --- /dev/null +++ b/BTExpansionCode/EXP/expanded_bt.svg @@ -0,0 +1,3823 @@ + + + + + + +pastafarianism + + + +b3eb0566-c750-43a0-94cc-a5ce1383d2a8 + +? + + + +cb3e3b43-c0b7-4ed3-879a-ff11e3eff193 + +On(MilkDrink,Bar2) + + + +b3eb0566-c750-43a0-94cc-a5ce1383d2a8->cb3e3b43-c0b7-4ed3-879a-ff11e3eff193 + + + + + +7d290e06-450b-4d6a-873e-cb1add89b66a + + + + + +b3eb0566-c750-43a0-94cc-a5ce1383d2a8->7d290e06-450b-4d6a-873e-cb1add89b66a + + + + + +fffb61a5-c080-435f-b642-96656a4c8bd1 + + + + + +b3eb0566-c750-43a0-94cc-a5ce1383d2a8->fffb61a5-c080-435f-b642-96656a4c8bd1 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d + +? + + + +7d290e06-450b-4d6a-873e-cb1add89b66a->c16089c9-362b-4a60-8c32-f5f5bff3637d + + + + + +64bdab11-8733-486c-8be1-42ee6ea6972e + +PutDown(MilkDrink,Bar) + + + +7d290e06-450b-4d6a-873e-cb1add89b66a->64bdab11-8733-486c-8be1-42ee6ea6972e + + + + + +2b126874-c3aa-4db5-9d9e-506d18287d98 + +At(Robot,Bar2) + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->2b126874-c3aa-4db5-9d9e-506d18287d98 + + + + + +ac7a52a4-be91-4eec-b832-3d11eb642f57 + +Holding(MilkDrink) + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->ac7a52a4-be91-4eec-b832-3d11eb642f57 + + + + + +cbff45f9-d7ce-46f6-a04c-33e10b807a2b + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->cbff45f9-d7ce-46f6-a04c-33e10b807a2b + + + + + +c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c + + + + + +bf1fa06b-1e89-484c-8a4c-dcfcc37e568c + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->bf1fa06b-1e89-484c-8a4c-dcfcc37e568c + + + + + +f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f + + + + + +a250d5e9-3079-478b-9bab-b92bc372a6ef + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->a250d5e9-3079-478b-9bab-b92bc372a6ef + + + + + +7940c5fc-8811-458c-8ba6-20c1af78eb78 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->7940c5fc-8811-458c-8ba6-20c1af78eb78 + + + + + +01dcea8e-eca2-4b08-994f-b91577ff857d + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->01dcea8e-eca2-4b08-994f-b91577ff857d + + + + + +182ba254-1346-40aa-b578-4a6bb67fee5a + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->182ba254-1346-40aa-b578-4a6bb67fee5a + + + + + +51c6f61b-112c-4e76-9cfa-b2bea8a11ec0 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->51c6f61b-112c-4e76-9cfa-b2bea8a11ec0 + + + + + +17e658ad-112c-4274-b068-a8357db2555e + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->17e658ad-112c-4274-b068-a8357db2555e + + + + + +f6e6bf0b-5751-4c23-a432-4dcea9143cda + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->f6e6bf0b-5751-4c23-a432-4dcea9143cda + + + + + +b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f + + + + + +a7d48b08-1bb2-4a73-9c65-42491a102689 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->a7d48b08-1bb2-4a73-9c65-42491a102689 + + + + + +4bc12752-f3d7-4627-a627-ec1f43520d8f + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->4bc12752-f3d7-4627-a627-ec1f43520d8f + + + + + +4d7755da-33ed-47e1-9983-a20a75a8f42e + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->4d7755da-33ed-47e1-9983-a20a75a8f42e + + + + + +dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9 + + + + + +7798fb41-706e-4fdc-86f5-73f69e98d58b + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->7798fb41-706e-4fdc-86f5-73f69e98d58b + + + + + +d27bfb36-f2e6-492a-87f7-0c6517348697 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->d27bfb36-f2e6-492a-87f7-0c6517348697 + + + + + +40493118-57ee-4082-952d-147f8ef32b53 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->40493118-57ee-4082-952d-147f8ef32b53 + + + + + +b8b7c80e-ab74-4167-b090-d911d9279854 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->b8b7c80e-ab74-4167-b090-d911d9279854 + + + + + +083162b7-6455-4358-809e-6ee578edc7ae + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->083162b7-6455-4358-809e-6ee578edc7ae + + + + + +b83f73a7-b5e8-4049-ae43-05e6a16e96c2 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->b83f73a7-b5e8-4049-ae43-05e6a16e96c2 + + + + + +89cd87e5-f4a0-493c-9460-819a9d0f8870 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->89cd87e5-f4a0-493c-9460-819a9d0f8870 + + + + + +47e4b3b0-160e-47c7-952c-ba6301d69ca7 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->47e4b3b0-160e-47c7-952c-ba6301d69ca7 + + + + + +64b7af7f-af4e-4ac0-a762-454230c2182b + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->64b7af7f-af4e-4ac0-a762-454230c2182b + + + + + +7b9e2e65-34e2-4727-b92a-6e433410a967 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->7b9e2e65-34e2-4727-b92a-6e433410a967 + + + + + +d86a7a63-841b-427c-bfb1-a0348e95f899 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->d86a7a63-841b-427c-bfb1-a0348e95f899 + + + + + +992d22b0-61b3-4bff-a0b3-ffb39ed57a83 + + + + + +c16089c9-362b-4a60-8c32-f5f5bff3637d->992d22b0-61b3-4bff-a0b3-ffb39ed57a83 + + + + + +4cd5bc0c-dd37-49cb-ac58-6f4f9030b991 + +? + + + +cbff45f9-d7ce-46f6-a04c-33e10b807a2b->4cd5bc0c-dd37-49cb-ac58-6f4f9030b991 + + + + + +a466cc8d-2b66-47e0-9381-99369e6ab41b + +MoveTo(Bar) + + + +cbff45f9-d7ce-46f6-a04c-33e10b807a2b->a466cc8d-2b66-47e0-9381-99369e6ab41b + + + + + +30fdd783-867c-4de3-b395-7318156630f0 + +Holding(MilkDrink) + + + +4cd5bc0c-dd37-49cb-ac58-6f4f9030b991->30fdd783-867c-4de3-b395-7318156630f0 + + + + + +50d308bd-0b9f-4e78-9faf-09443718d733 + + + + + +4cd5bc0c-dd37-49cb-ac58-6f4f9030b991->50d308bd-0b9f-4e78-9faf-09443718d733 + + + + + +1d7380cc-249b-44dc-9cfe-c4bf8988f0a2 + + + + + +4cd5bc0c-dd37-49cb-ac58-6f4f9030b991->1d7380cc-249b-44dc-9cfe-c4bf8988f0a2 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3 + +? + + + +50d308bd-0b9f-4e78-9faf-09443718d733->4613e442-b6f7-4bcf-9e67-f0dc6873cdb3 + + + + + +e3534efa-3884-4192-8ca5-9bf7b8047ca3 + +PickUp(MilkDrink) + + + +50d308bd-0b9f-4e78-9faf-09443718d733->e3534efa-3884-4192-8ca5-9bf7b8047ca3 + + + + + +acc8e037-9586-4dea-b069-8352470356c7 + +Holding(Nothing) + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->acc8e037-9586-4dea-b069-8352470356c7 + + + + + +a4c1d6fa-915c-4d11-839f-1eb1d89bcef2 + +At(Robot,MilkDrink) + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->a4c1d6fa-915c-4d11-839f-1eb1d89bcef2 + + + + + +3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5 + + + + + +d6141816-9ec5-4f69-8294-95e6afedf2df + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->d6141816-9ec5-4f69-8294-95e6afedf2df + + + + + +73993498-2bd7-42c4-92b9-af98cd9355be + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->73993498-2bd7-42c4-92b9-af98cd9355be + + + + + +221a92eb-77ca-4b46-a447-6ced2dde199e + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->221a92eb-77ca-4b46-a447-6ced2dde199e + + + + + +3893c45b-be0e-4870-916b-be83e76b6eca + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->3893c45b-be0e-4870-916b-be83e76b6eca + + + + + +7adf22ba-3552-42dd-973c-5083a2e9df3f + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->7adf22ba-3552-42dd-973c-5083a2e9df3f + + + + + +318e8f0a-c94e-4004-8a50-044ba9a940e3 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->318e8f0a-c94e-4004-8a50-044ba9a940e3 + + + + + +bced885c-967e-492a-8f9f-ca4f60a8d3ae + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->bced885c-967e-492a-8f9f-ca4f60a8d3ae + + + + + +dd4b5f3e-d3f3-447b-939a-9fbde458f34a + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->dd4b5f3e-d3f3-447b-939a-9fbde458f34a + + + + + +c539da29-e5e0-40f5-bd90-fbeb5d318b27 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->c539da29-e5e0-40f5-bd90-fbeb5d318b27 + + + + + +a4f0ce82-2e33-4342-a7d2-7093398e97cb + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->a4f0ce82-2e33-4342-a7d2-7093398e97cb + + + + + +8a67ce82-8716-4210-b50e-ccdafee410f4 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->8a67ce82-8716-4210-b50e-ccdafee410f4 + + + + + +4de16a97-73ae-44ed-8b98-25ea2ee0725e + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->4de16a97-73ae-44ed-8b98-25ea2ee0725e + + + + + +9761f0df-20ad-4368-b815-7576f6c9b4f4 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->9761f0df-20ad-4368-b815-7576f6c9b4f4 + + + + + +10512191-862f-45f4-b4ff-daa01cfeaa44 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->10512191-862f-45f4-b4ff-daa01cfeaa44 + + + + + +dbc5d392-21be-4e06-876d-2ee6b5057385 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->dbc5d392-21be-4e06-876d-2ee6b5057385 + + + + + +001db2b2-a63b-4dbf-9891-d545b67b55dd + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->001db2b2-a63b-4dbf-9891-d545b67b55dd + + + + + +ba9a025d-704e-46ad-8914-f1c3cb37bf9b + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->ba9a025d-704e-46ad-8914-f1c3cb37bf9b + + + + + +6e642af8-2255-4359-96b0-20ef4e019923 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->6e642af8-2255-4359-96b0-20ef4e019923 + + + + + +34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab + + + + + +d081bc62-37e9-456c-a712-33f0416040a7 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->d081bc62-37e9-456c-a712-33f0416040a7 + + + + + +939040ff-67a9-48b2-9454-35dba4ea130a + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->939040ff-67a9-48b2-9454-35dba4ea130a + + + + + +32864bf8-4a64-4301-9ab6-24bec24e9836 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->32864bf8-4a64-4301-9ab6-24bec24e9836 + + + + + +7459d628-3506-4bdd-a0fd-7325819e626c + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->7459d628-3506-4bdd-a0fd-7325819e626c + + + + + +a3ad5938-33c0-47a7-be37-686168a53b55 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->a3ad5938-33c0-47a7-be37-686168a53b55 + + + + + +073e0971-7d89-4eca-9c94-95eb314eda8f + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->073e0971-7d89-4eca-9c94-95eb314eda8f + + + + + +f7cc45fb-a77c-4abd-aff2-7109ccc9e494 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->f7cc45fb-a77c-4abd-aff2-7109ccc9e494 + + + + + +e6811893-4a0d-4533-8b5c-9a9c711c361a + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->e6811893-4a0d-4533-8b5c-9a9c711c361a + + + + + +01869c3a-f558-44b5-aae2-1af1bd0b666f + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->01869c3a-f558-44b5-aae2-1af1bd0b666f + + + + + +cd593bf4-6f41-4455-a5df-d67372db6211 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->cd593bf4-6f41-4455-a5df-d67372db6211 + + + + + +255c953a-e35c-4bd7-a12b-374f106d6d1a + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->255c953a-e35c-4bd7-a12b-374f106d6d1a + + + + + +4a17d628-61fa-4ce2-af96-54b974553d66 + + + + + +4613e442-b6f7-4bcf-9e67-f0dc6873cdb3->4a17d628-61fa-4ce2-af96-54b974553d66 + + + + + +bf523e58-f4b7-48ed-bb19-ff3fbbdac825 + +Holding(Nothing) + + + +3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5->bf523e58-f4b7-48ed-bb19-ff3fbbdac825 + + + + + +d63ceb7c-64ec-4978-9c6a-dd37071eed2d + +Is(HallLight,On) + + + +3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5->d63ceb7c-64ec-4978-9c6a-dd37071eed2d + + + + + +21e5f34b-df90-426d-9ed4-a5284e71b766 + +At(Robot,MilkDrink) + + + +3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5->21e5f34b-df90-426d-9ed4-a5284e71b766 + + + + + +4cbecb8a-2176-493f-8ad7-2c978d8aee78 + +Clean(Table) + + + +3c6f0dc6-37d2-4c2e-a7d5-48d4989f50b5->4cbecb8a-2176-493f-8ad7-2c978d8aee78 + + + + + +dd03d5ad-298e-4879-b410-4cebe7e5301b + +Holding(Nothing) + + + +d6141816-9ec5-4f69-8294-95e6afedf2df->dd03d5ad-298e-4879-b410-4cebe7e5301b + + + + + +6ac400ea-28fc-4579-ae01-1271cc108eef + +Is(HallLight,On) + + + +d6141816-9ec5-4f69-8294-95e6afedf2df->6ac400ea-28fc-4579-ae01-1271cc108eef + + + + + +28caac60-3bc2-4cbc-924e-592fcb75b220 + +At(Robot,MilkDrink) + + + +d6141816-9ec5-4f69-8294-95e6afedf2df->28caac60-3bc2-4cbc-924e-592fcb75b220 + + + + + +fe4a0aef-1611-4dee-b36c-3d68b1768f55 + +Clean(Floor) + + + +d6141816-9ec5-4f69-8294-95e6afedf2df->fe4a0aef-1611-4dee-b36c-3d68b1768f55 + + + + + +8383d4cf-83fb-402b-8989-2eefe3527780 + +Holding(Nothing) + + + +73993498-2bd7-42c4-92b9-af98cd9355be->8383d4cf-83fb-402b-8989-2eefe3527780 + + + + + +5d863aca-2e38-4d78-951a-5ee5384461ca + +Is(HallLight,On) + + + +73993498-2bd7-42c4-92b9-af98cd9355be->5d863aca-2e38-4d78-951a-5ee5384461ca + + + + + +267a5828-5a67-43fe-bc23-91883e18dd5c + +At(Robot,MilkDrink) + + + +73993498-2bd7-42c4-92b9-af98cd9355be->267a5828-5a67-43fe-bc23-91883e18dd5c + + + + + +34a9bc45-5d40-4780-9e34-435ec597b474 + +Clean(Chairs) + + + +73993498-2bd7-42c4-92b9-af98cd9355be->34a9bc45-5d40-4780-9e34-435ec597b474 + + + + + +46da3cba-4037-43ad-a28b-ed1713085eb1 + +Holding(Nothing) + + + +221a92eb-77ca-4b46-a447-6ced2dde199e->46da3cba-4037-43ad-a28b-ed1713085eb1 + + + + + +e1270279-2b0c-451f-96ce-cf858a78fc2a + +Is(HallLight,On) + + + +221a92eb-77ca-4b46-a447-6ced2dde199e->e1270279-2b0c-451f-96ce-cf858a78fc2a + + + + + +d4885691-9035-4e4c-986f-08bde5cd1140 + +At(Robot,MilkDrink) + + + +221a92eb-77ca-4b46-a447-6ced2dde199e->d4885691-9035-4e4c-986f-08bde5cd1140 + + + + + +7e4fd7f6-9542-4d1a-9c5a-b561399862dd + +Clean(Table) + + + +221a92eb-77ca-4b46-a447-6ced2dde199e->7e4fd7f6-9542-4d1a-9c5a-b561399862dd + + + + + +ca9a5bd5-8e39-433c-9b33-0db38b7e1cef + +Holding(Nothing) + + + +3893c45b-be0e-4870-916b-be83e76b6eca->ca9a5bd5-8e39-433c-9b33-0db38b7e1cef + + + + + +38324a6a-57a8-4f85-9287-4e4242c0b576 + +Is(HallLight,On) + + + +3893c45b-be0e-4870-916b-be83e76b6eca->38324a6a-57a8-4f85-9287-4e4242c0b576 + + + + + +20b6fd32-d773-4df3-897f-d8f7365fa41f + +At(Robot,MilkDrink) + + + +3893c45b-be0e-4870-916b-be83e76b6eca->20b6fd32-d773-4df3-897f-d8f7365fa41f + + + + + +81f32838-fc32-42b9-b71c-8b2837afb48b + +Clean(Floor) + + + +3893c45b-be0e-4870-916b-be83e76b6eca->81f32838-fc32-42b9-b71c-8b2837afb48b + + + + + +4efe8d2f-7463-4871-b406-fef9e9b849b0 + +Holding(Nothing) + + + +7adf22ba-3552-42dd-973c-5083a2e9df3f->4efe8d2f-7463-4871-b406-fef9e9b849b0 + + + + + +0e23d529-cc12-4590-8a80-4e5a20d1b2c4 + +Is(HallLight,On) + + + +7adf22ba-3552-42dd-973c-5083a2e9df3f->0e23d529-cc12-4590-8a80-4e5a20d1b2c4 + + + + + +64b4013d-3084-4187-aca5-2523f3d62d9a + +At(Robot,MilkDrink) + + + +7adf22ba-3552-42dd-973c-5083a2e9df3f->64b4013d-3084-4187-aca5-2523f3d62d9a + + + + + +adfbcb36-dc0b-4be8-9b0e-93439598f01f + +Clean(Chairs) + + + +7adf22ba-3552-42dd-973c-5083a2e9df3f->adfbcb36-dc0b-4be8-9b0e-93439598f01f + + + + + +be2b6bb9-5aee-4e23-9395-f2abed7c7760 + +Holding(Nothing) + + + +318e8f0a-c94e-4004-8a50-044ba9a940e3->be2b6bb9-5aee-4e23-9395-f2abed7c7760 + + + + + +b423d136-ceba-4ccb-b0a8-88c2a2679a65 + +At(Robot,MilkDrink) + + + +318e8f0a-c94e-4004-8a50-044ba9a940e3->b423d136-ceba-4ccb-b0a8-88c2a2679a65 + + + + + +4bb85ff0-bf11-4384-bc1b-12d57d7864fc + +Make(Coffee) + + + +318e8f0a-c94e-4004-8a50-044ba9a940e3->4bb85ff0-bf11-4384-bc1b-12d57d7864fc + + + + + +a0fd2a70-d401-4222-aac9-32dd0cafc391 + +Holding(Nothing) + + + +bced885c-967e-492a-8f9f-ca4f60a8d3ae->a0fd2a70-d401-4222-aac9-32dd0cafc391 + + + + + +5d0166a7-5577-47ad-b279-67f2826a70a9 + +At(Robot,MilkDrink) + + + +bced885c-967e-492a-8f9f-ca4f60a8d3ae->5d0166a7-5577-47ad-b279-67f2826a70a9 + + + + + +8ba192fa-9371-453e-8bbc-e46f9f62f67f + +Make(Water) + + + +bced885c-967e-492a-8f9f-ca4f60a8d3ae->8ba192fa-9371-453e-8bbc-e46f9f62f67f + + + + + +11fcb082-2d08-4d47-9e4b-ed12ff852cf2 + +Holding(Nothing) + + + +dd4b5f3e-d3f3-447b-939a-9fbde458f34a->11fcb082-2d08-4d47-9e4b-ed12ff852cf2 + + + + + +059f330d-1acd-4f1d-8228-46226e35d352 + +At(Robot,MilkDrink) + + + +dd4b5f3e-d3f3-447b-939a-9fbde458f34a->059f330d-1acd-4f1d-8228-46226e35d352 + + + + + +29df8bf2-d992-4b8e-ad29-954c97ac37e4 + +Make(Dessert) + + + +dd4b5f3e-d3f3-447b-939a-9fbde458f34a->29df8bf2-d992-4b8e-ad29-954c97ac37e4 + + + + + +fed083fe-4ce3-45f5-933a-105002353a6d + +Holding(Nothing) + + + +c539da29-e5e0-40f5-bd90-fbeb5d318b27->fed083fe-4ce3-45f5-933a-105002353a6d + + + + + +74d447e1-9deb-493d-becd-7717cab47f1e + +At(Robot,MilkDrink) + + + +c539da29-e5e0-40f5-bd90-fbeb5d318b27->74d447e1-9deb-493d-becd-7717cab47f1e + + + + + +39651307-860f-44d6-9e4a-f4159af82219 + +Make(Coffee) + + + +c539da29-e5e0-40f5-bd90-fbeb5d318b27->39651307-860f-44d6-9e4a-f4159af82219 + + + + + +474dbf8f-fac5-43d8-a0eb-425fb2bec1b4 + +Holding(Nothing) + + + +a4f0ce82-2e33-4342-a7d2-7093398e97cb->474dbf8f-fac5-43d8-a0eb-425fb2bec1b4 + + + + + +c251b754-ca9a-41cc-8a05-65ee5214e948 + +At(Robot,MilkDrink) + + + +a4f0ce82-2e33-4342-a7d2-7093398e97cb->c251b754-ca9a-41cc-8a05-65ee5214e948 + + + + + +6cdebed6-9524-416a-8dda-1b18430b4f5c + +Make(Water) + + + +a4f0ce82-2e33-4342-a7d2-7093398e97cb->6cdebed6-9524-416a-8dda-1b18430b4f5c + + + + + +3348b2d0-12ee-4857-8dc8-d5e394167931 + +Holding(Nothing) + + + +8a67ce82-8716-4210-b50e-ccdafee410f4->3348b2d0-12ee-4857-8dc8-d5e394167931 + + + + + +5e00ce08-f61b-4469-a8fd-1afc9b94ed63 + +At(Robot,MilkDrink) + + + +8a67ce82-8716-4210-b50e-ccdafee410f4->5e00ce08-f61b-4469-a8fd-1afc9b94ed63 + + + + + +296bfdd0-7d70-4d37-b02e-6c32bc1ba261 + +Make(Dessert) + + + +8a67ce82-8716-4210-b50e-ccdafee410f4->296bfdd0-7d70-4d37-b02e-6c32bc1ba261 + + + + + +2f46975d-5f7f-43ab-8f26-f3e4cd0aecb9 + +Holding(Nothing) + + + +4de16a97-73ae-44ed-8b98-25ea2ee0725e->2f46975d-5f7f-43ab-8f26-f3e4cd0aecb9 + + + + + +5eed14de-c9e4-4968-b2b7-0df15ced8282 + +Exist(MilkDrink) + + + +4de16a97-73ae-44ed-8b98-25ea2ee0725e->5eed14de-c9e4-4968-b2b7-0df15ced8282 + + + + + +56f947c3-a7ef-482c-88d3-1e892d03e971 + +MoveTo(MilkDrink) + + + +4de16a97-73ae-44ed-8b98-25ea2ee0725e->56f947c3-a7ef-482c-88d3-1e892d03e971 + + + + + +5fdcb93a-7d36-4d4d-a08c-a68e5ddb55f3 + +Holding(Nothing) + + + +9761f0df-20ad-4368-b815-7576f6c9b4f4->5fdcb93a-7d36-4d4d-a08c-a68e5ddb55f3 + + + + + +08bf7582-b422-4976-87cf-b25b746e19fb + +Exist(MilkDrink) + + + +9761f0df-20ad-4368-b815-7576f6c9b4f4->08bf7582-b422-4976-87cf-b25b746e19fb + + + + + +e9c25e50-1e8f-4d0f-9ad1-76ca67f37002 + +MoveTo(MilkDrink) + + + +9761f0df-20ad-4368-b815-7576f6c9b4f4->e9c25e50-1e8f-4d0f-9ad1-76ca67f37002 + + + + + +80c77308-4fb9-4cbe-9d37-f270f324e26a + +At(Robot,MilkDrink) + + + +10512191-862f-45f4-b4ff-daa01cfeaa44->80c77308-4fb9-4cbe-9d37-f270f324e26a + + + + + +dac9f6fd-9b96-4da1-ae54-d214d02bce62 + +PutDown(Anything,Anywhere) + + + +10512191-862f-45f4-b4ff-daa01cfeaa44->dac9f6fd-9b96-4da1-ae54-d214d02bce62 + + + + + +38bb3c20-e2b7-429d-aff5-56d65fd2f556 + +At(Robot,MilkDrink) + + + +dbc5d392-21be-4e06-876d-2ee6b5057385->38bb3c20-e2b7-429d-aff5-56d65fd2f556 + + + + + +dd5b035d-0570-4897-9f68-edf69deca78b + +PutDown(Anything,Anywhere) + + + +dbc5d392-21be-4e06-876d-2ee6b5057385->dd5b035d-0570-4897-9f68-edf69deca78b + + + + + +737bea98-cadc-41be-a0cf-b224c4e8d916 + +Holding(Nothing) + + + +001db2b2-a63b-4dbf-9891-d545b67b55dd->737bea98-cadc-41be-a0cf-b224c4e8d916 + + + + + +3abb4835-1ade-4d5c-8f76-706728f224f4 + +At(Robot,MilkDrink) + + + +001db2b2-a63b-4dbf-9891-d545b67b55dd->3abb4835-1ade-4d5c-8f76-706728f224f4 + + + + + +d1091912-39d2-4121-8498-f1028f426d91 + +Is(AC,Off) + + + +001db2b2-a63b-4dbf-9891-d545b67b55dd->d1091912-39d2-4121-8498-f1028f426d91 + + + + + +c16e8314-3dae-4e78-b3be-67c178fcb824 + +Turn(AC,On) + + + +001db2b2-a63b-4dbf-9891-d545b67b55dd->c16e8314-3dae-4e78-b3be-67c178fcb824 + + + + + +b7f165c3-8330-4d5f-a4dd-7b49ed02a2ca + +Holding(Nothing) + + + +ba9a025d-704e-46ad-8914-f1c3cb37bf9b->b7f165c3-8330-4d5f-a4dd-7b49ed02a2ca + + + + + +25286e27-8a1d-43a7-9d45-5d45f6013ddf + +Is(AC,On) + + + +ba9a025d-704e-46ad-8914-f1c3cb37bf9b->25286e27-8a1d-43a7-9d45-5d45f6013ddf + + + + + +4fa868aa-8de3-4309-8962-8b111bfbe118 + +At(Robot,MilkDrink) + + + +ba9a025d-704e-46ad-8914-f1c3cb37bf9b->4fa868aa-8de3-4309-8962-8b111bfbe118 + + + + + +5c24e079-1cc0-4108-ab42-3d6c70fca4eb + +Turn(AC,Off) + + + +ba9a025d-704e-46ad-8914-f1c3cb37bf9b->5c24e079-1cc0-4108-ab42-3d6c70fca4eb + + + + + +955e69c2-7ed0-4d8f-a5fc-00204a52250a + +Holding(Nothing) + + + +6e642af8-2255-4359-96b0-20ef4e019923->955e69c2-7ed0-4d8f-a5fc-00204a52250a + + + + + +0b8fbdd3-8217-49da-a772-b03c38e46479 + +Is(TubeLight,Off) + + + +6e642af8-2255-4359-96b0-20ef4e019923->0b8fbdd3-8217-49da-a772-b03c38e46479 + + + + + +2a766e0f-b111-40d8-9e25-eddd17a632b4 + +At(Robot,MilkDrink) + + + +6e642af8-2255-4359-96b0-20ef4e019923->2a766e0f-b111-40d8-9e25-eddd17a632b4 + + + + + +ddcdd6cf-30db-44a4-a0c9-c1a9d8c137d8 + +Turn(TubeLight,On) + + + +6e642af8-2255-4359-96b0-20ef4e019923->ddcdd6cf-30db-44a4-a0c9-c1a9d8c137d8 + + + + + +50ce95f0-3c0f-422d-95f9-8afafdbe63a3 + +Holding(Nothing) + + + +34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab->50ce95f0-3c0f-422d-95f9-8afafdbe63a3 + + + + + +7841cb82-d316-4229-831e-2e0cc9264060 + +Is(TubeLight,On) + + + +34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab->7841cb82-d316-4229-831e-2e0cc9264060 + + + + + +3bce6c5b-78cd-4a98-9670-e26d7a997274 + +At(Robot,MilkDrink) + + + +34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab->3bce6c5b-78cd-4a98-9670-e26d7a997274 + + + + + +84cf96c8-87a2-4f74-a9f3-273ffaca42fb + +Turn(TubeLight,Off) + + + +34b7a2df-c9ad-4f1f-9cb4-ec26ea94ebab->84cf96c8-87a2-4f74-a9f3-273ffaca42fb + + + + + +a8acf507-a0a6-47b9-b107-17519abe05ce + +Holding(Nothing) + + + +d081bc62-37e9-456c-a712-33f0416040a7->a8acf507-a0a6-47b9-b107-17519abe05ce + + + + + +9b15dd48-fa96-4f58-93e2-685297c63e8d + +Is(HallLight,Off) + + + +d081bc62-37e9-456c-a712-33f0416040a7->9b15dd48-fa96-4f58-93e2-685297c63e8d + + + + + +708c11c8-5c85-4e04-99a3-756a736688d9 + +At(Robot,MilkDrink) + + + +d081bc62-37e9-456c-a712-33f0416040a7->708c11c8-5c85-4e04-99a3-756a736688d9 + + + + + +6de67c8e-3a77-4f5d-9b31-e283d79b4095 + +Turn(HallLight,On) + + + +d081bc62-37e9-456c-a712-33f0416040a7->6de67c8e-3a77-4f5d-9b31-e283d79b4095 + + + + + +6c935d52-7772-4a9b-bc87-bc268bed9756 + +Holding(Nothing) + + + +939040ff-67a9-48b2-9454-35dba4ea130a->6c935d52-7772-4a9b-bc87-bc268bed9756 + + + + + +242fe73d-0383-4ab4-93fd-160d423c771c + +Is(HallLight,On) + + + +939040ff-67a9-48b2-9454-35dba4ea130a->242fe73d-0383-4ab4-93fd-160d423c771c + + + + + +8b928a54-08d2-4e09-beae-54650a7449a3 + +At(Robot,MilkDrink) + + + +939040ff-67a9-48b2-9454-35dba4ea130a->8b928a54-08d2-4e09-beae-54650a7449a3 + + + + + +22de8e14-52c5-48ca-8860-f2951858f8e2 + +Turn(HallLight,Off) + + + +939040ff-67a9-48b2-9454-35dba4ea130a->22de8e14-52c5-48ca-8860-f2951858f8e2 + + + + + +81364b16-3506-491d-8392-1adf51543636 + +Holding(Nothing) + + + +32864bf8-4a64-4301-9ab6-24bec24e9836->81364b16-3506-491d-8392-1adf51543636 + + + + + +ff4c4c05-b10d-4e36-9975-a8ad9ea0cd29 + +Is(AC,On) + + + +32864bf8-4a64-4301-9ab6-24bec24e9836->ff4c4c05-b10d-4e36-9975-a8ad9ea0cd29 + + + + + +422e8f14-6c84-4e8f-802e-f73ea4ce3d81 + +At(Robot,MilkDrink) + + + +32864bf8-4a64-4301-9ab6-24bec24e9836->422e8f14-6c84-4e8f-802e-f73ea4ce3d81 + + + + + +d37c83f7-5b70-4f65-be46-9bab9fc47868 + +Turn(ACTemperature,Up) + + + +32864bf8-4a64-4301-9ab6-24bec24e9836->d37c83f7-5b70-4f65-be46-9bab9fc47868 + + + + + +9fc39acf-713f-495a-b972-874d3c793f99 + +Holding(Nothing) + + + +7459d628-3506-4bdd-a0fd-7325819e626c->9fc39acf-713f-495a-b972-874d3c793f99 + + + + + +269b4979-a414-44c6-9c01-fdd61158ac2c + +Is(AC,On) + + + +7459d628-3506-4bdd-a0fd-7325819e626c->269b4979-a414-44c6-9c01-fdd61158ac2c + + + + + +b83da396-4a42-47ea-977d-df965e2ff3cd + +At(Robot,MilkDrink) + + + +7459d628-3506-4bdd-a0fd-7325819e626c->b83da396-4a42-47ea-977d-df965e2ff3cd + + + + + +17a1ebd7-5cb6-4fff-b37f-bd7333ab4ddd + +Turn(ACTemperature,Down) + + + +7459d628-3506-4bdd-a0fd-7325819e626c->17a1ebd7-5cb6-4fff-b37f-bd7333ab4ddd + + + + + +cc12b125-bff5-42ed-b7a3-2b80725e8dec + +Holding(Nothing) + + + +a3ad5938-33c0-47a7-be37-686168a53b55->cc12b125-bff5-42ed-b7a3-2b80725e8dec + + + + + +76fc0d73-28cc-49d5-8a5c-cad3be059655 + +At(Robot,MilkDrink) + + + +a3ad5938-33c0-47a7-be37-686168a53b55->76fc0d73-28cc-49d5-8a5c-cad3be059655 + + + + + +249cb1d0-00b0-4833-96d9-cd11d92ea7c2 + +Is(AC,Off) + + + +a3ad5938-33c0-47a7-be37-686168a53b55->249cb1d0-00b0-4833-96d9-cd11d92ea7c2 + + + + + +2a83e205-f096-45d9-983e-4343ab93e058 + +Turn(AC,On) + + + +a3ad5938-33c0-47a7-be37-686168a53b55->2a83e205-f096-45d9-983e-4343ab93e058 + + + + + +5bd43615-d488-42fc-b758-09eee1cec801 + +Holding(Nothing) + + + +073e0971-7d89-4eca-9c94-95eb314eda8f->5bd43615-d488-42fc-b758-09eee1cec801 + + + + + +02a46df5-6bd1-4fab-ac60-c9f0b47d3182 + +Is(AC,On) + + + +073e0971-7d89-4eca-9c94-95eb314eda8f->02a46df5-6bd1-4fab-ac60-c9f0b47d3182 + + + + + +98bfaf44-89ee-4ca3-ae79-8c13bd067c98 + +At(Robot,MilkDrink) + + + +073e0971-7d89-4eca-9c94-95eb314eda8f->98bfaf44-89ee-4ca3-ae79-8c13bd067c98 + + + + + +28e3cc40-e68f-4191-b6f0-7f9f011dcc55 + +Turn(AC,Off) + + + +073e0971-7d89-4eca-9c94-95eb314eda8f->28e3cc40-e68f-4191-b6f0-7f9f011dcc55 + + + + + +a936bbd6-d791-4cda-abb3-434ac6da461b + +Holding(Nothing) + + + +f7cc45fb-a77c-4abd-aff2-7109ccc9e494->a936bbd6-d791-4cda-abb3-434ac6da461b + + + + + +14797305-0794-4fe2-8703-51a5eb4e8344 + +Is(TubeLight,Off) + + + +f7cc45fb-a77c-4abd-aff2-7109ccc9e494->14797305-0794-4fe2-8703-51a5eb4e8344 + + + + + +ec5db45f-f9c8-4827-b31a-5a4b7e28de15 + +At(Robot,MilkDrink) + + + +f7cc45fb-a77c-4abd-aff2-7109ccc9e494->ec5db45f-f9c8-4827-b31a-5a4b7e28de15 + + + + + +78e72fcf-00a6-4d70-86df-e38413cc8ad4 + +Turn(TubeLight,On) + + + +f7cc45fb-a77c-4abd-aff2-7109ccc9e494->78e72fcf-00a6-4d70-86df-e38413cc8ad4 + + + + + +34701c0b-cbff-4873-9a07-e6d0ed8c6f2c + +Holding(Nothing) + + + +e6811893-4a0d-4533-8b5c-9a9c711c361a->34701c0b-cbff-4873-9a07-e6d0ed8c6f2c + + + + + +b89d488d-787d-4ccd-bfed-ae956f89c508 + +Is(TubeLight,On) + + + +e6811893-4a0d-4533-8b5c-9a9c711c361a->b89d488d-787d-4ccd-bfed-ae956f89c508 + + + + + +0a55efd3-5cb0-46b8-85a2-10a714cfea3f + +At(Robot,MilkDrink) + + + +e6811893-4a0d-4533-8b5c-9a9c711c361a->0a55efd3-5cb0-46b8-85a2-10a714cfea3f + + + + + +2bf92f3e-eb03-4c76-9745-167718e64f69 + +Turn(TubeLight,Off) + + + +e6811893-4a0d-4533-8b5c-9a9c711c361a->2bf92f3e-eb03-4c76-9745-167718e64f69 + + + + + +6c6c52df-e609-4e06-8b72-1ac98530a9b6 + +Holding(Nothing) + + + +01869c3a-f558-44b5-aae2-1af1bd0b666f->6c6c52df-e609-4e06-8b72-1ac98530a9b6 + + + + + +a9c0da3d-8cbf-4a6b-9f0e-0a43e3983dd2 + +Is(HallLight,Off) + + + +01869c3a-f558-44b5-aae2-1af1bd0b666f->a9c0da3d-8cbf-4a6b-9f0e-0a43e3983dd2 + + + + + +1d08bf09-a00d-44c6-bd2a-d324c076e80b + +At(Robot,MilkDrink) + + + +01869c3a-f558-44b5-aae2-1af1bd0b666f->1d08bf09-a00d-44c6-bd2a-d324c076e80b + + + + + +c6127297-a8db-4ff9-a09b-a7c6f63a52bf + +Turn(HallLight,On) + + + +01869c3a-f558-44b5-aae2-1af1bd0b666f->c6127297-a8db-4ff9-a09b-a7c6f63a52bf + + + + + +be40bff1-fdb0-4523-9a3a-0b711b0eef27 + +Holding(Nothing) + + + +cd593bf4-6f41-4455-a5df-d67372db6211->be40bff1-fdb0-4523-9a3a-0b711b0eef27 + + + + + +e921cc5b-d565-461d-b685-6b3a70aec1f3 + +Is(HallLight,On) + + + +cd593bf4-6f41-4455-a5df-d67372db6211->e921cc5b-d565-461d-b685-6b3a70aec1f3 + + + + + +e6810aaf-ac01-4f22-8837-a9f0d313c3f7 + +At(Robot,MilkDrink) + + + +cd593bf4-6f41-4455-a5df-d67372db6211->e6810aaf-ac01-4f22-8837-a9f0d313c3f7 + + + + + +a3cfb0c8-0a2a-4284-87e0-3f36389969fa + +Turn(HallLight,Off) + + + +cd593bf4-6f41-4455-a5df-d67372db6211->a3cfb0c8-0a2a-4284-87e0-3f36389969fa + + + + + +2746be80-fc4a-4165-a13a-966b5613685c + +Holding(Nothing) + + + +255c953a-e35c-4bd7-a12b-374f106d6d1a->2746be80-fc4a-4165-a13a-966b5613685c + + + + + +4f88c26f-a89b-4029-8d34-024796a7180c + +Is(AC,On) + + + +255c953a-e35c-4bd7-a12b-374f106d6d1a->4f88c26f-a89b-4029-8d34-024796a7180c + + + + + +14561f75-02ea-46de-804f-c16bf350be29 + +At(Robot,MilkDrink) + + + +255c953a-e35c-4bd7-a12b-374f106d6d1a->14561f75-02ea-46de-804f-c16bf350be29 + + + + + +c7654899-39ad-468d-9730-9396e8174808 + +Turn(ACTemperature,Up) + + + +255c953a-e35c-4bd7-a12b-374f106d6d1a->c7654899-39ad-468d-9730-9396e8174808 + + + + + +99b783b6-25f7-4119-ae88-b04aee929420 + +Holding(Nothing) + + + +4a17d628-61fa-4ce2-af96-54b974553d66->99b783b6-25f7-4119-ae88-b04aee929420 + + + + + +0df71fd0-3dbb-470c-bca5-4ffc0dc02e08 + +Is(AC,On) + + + +4a17d628-61fa-4ce2-af96-54b974553d66->0df71fd0-3dbb-470c-bca5-4ffc0dc02e08 + + + + + +d21a5e33-b4c6-446a-b5a8-5e4136682612 + +At(Robot,MilkDrink) + + + +4a17d628-61fa-4ce2-af96-54b974553d66->d21a5e33-b4c6-446a-b5a8-5e4136682612 + + + + + +8ab02be1-32af-42e7-a1db-e528e916656d + +Turn(ACTemperature,Down) + + + +4a17d628-61fa-4ce2-af96-54b974553d66->8ab02be1-32af-42e7-a1db-e528e916656d + + + + + +be6b509f-4e17-4fc9-95e6-b091cf2a0064 + +Holding(Nothing) + + + +1d7380cc-249b-44dc-9cfe-c4bf8988f0a2->be6b509f-4e17-4fc9-95e6-b091cf2a0064 + + + + + +46f12db5-5245-4e82-89e7-e819024ec4fe + +At(Robot,MilkDrink) + + + +1d7380cc-249b-44dc-9cfe-c4bf8988f0a2->46f12db5-5245-4e82-89e7-e819024ec4fe + + + + + +3830f76b-a181-4db5-9cc1-36203fe66bea + +PickUp(MilkDrink) + + + +1d7380cc-249b-44dc-9cfe-c4bf8988f0a2->3830f76b-a181-4db5-9cc1-36203fe66bea + + + + + +1644107b-3086-48a6-8323-e8962edc3656 + +Holding(MilkDrink) + + + +c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c->1644107b-3086-48a6-8323-e8962edc3656 + + + + + +3fe13d3c-0a08-419a-92aa-3de1c52116e1 + +MoveTo(Bar) + + + +c08b5eb3-0fb4-4dd6-8bb4-0dd32ab0f57c->3fe13d3c-0a08-419a-92aa-3de1c52116e1 + + + + + +37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0 + +? + + + +bf1fa06b-1e89-484c-8a4c-dcfcc37e568c->37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0 + + + + + +488f979d-00cf-493b-9f41-e46a1ab3deed + +PutDown(Softdrink,Bar) + + + +bf1fa06b-1e89-484c-8a4c-dcfcc37e568c->488f979d-00cf-493b-9f41-e46a1ab3deed + + + + + +dfb9ad02-9898-4ad8-a861-8121da623ae5 + +Holding(MilkDrink) + + + +37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0->dfb9ad02-9898-4ad8-a861-8121da623ae5 + + + + + +be2dcdfb-39d1-40a6-b78d-b0b6376e9c3a + +Holding(Softdrink) + + + +37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0->be2dcdfb-39d1-40a6-b78d-b0b6376e9c3a + + + + + +083586cc-9313-4246-a37c-322179f894ba + +At(Robot,Bar2) + + + +37cc0bd8-70d6-486f-9cfc-a4bd51f2f9a0->083586cc-9313-4246-a37c-322179f894ba + + + + + +bc5dee25-9b6c-409a-ac8f-0e7272de2250 + +? + + + +f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f->bc5dee25-9b6c-409a-ac8f-0e7272de2250 + + + + + +adddbafa-7866-447f-b51c-cc6fd375097e + +PutDown(Bernachon,Bar) + + + +f8204ec2-b0b6-4cd6-b3a1-c7b88a69bb6f->adddbafa-7866-447f-b51c-cc6fd375097e + + + + + +6a154453-6991-414c-9222-558a75a4d7ed + +Holding(MilkDrink) + + + +bc5dee25-9b6c-409a-ac8f-0e7272de2250->6a154453-6991-414c-9222-558a75a4d7ed + + + + + +879d0bd0-941c-4793-81a2-6d5185b32780 + +At(Robot,Bar2) + + + +bc5dee25-9b6c-409a-ac8f-0e7272de2250->879d0bd0-941c-4793-81a2-6d5185b32780 + + + + + +147bd700-e355-42bd-9eb2-d9e848b9cb2a + +Holding(Bernachon) + + + +bc5dee25-9b6c-409a-ac8f-0e7272de2250->147bd700-e355-42bd-9eb2-d9e848b9cb2a + + + + + +542f7157-5919-4494-b1c7-8347fde1ba81 + +? + + + +a250d5e9-3079-478b-9bab-b92bc372a6ef->542f7157-5919-4494-b1c7-8347fde1ba81 + + + + + +e645636e-828d-4340-9322-5e77c021fa79 + +PutDown(NFCJuice,Bar) + + + +a250d5e9-3079-478b-9bab-b92bc372a6ef->e645636e-828d-4340-9322-5e77c021fa79 + + + + + +4203eb66-331b-4523-9e0d-bd352085372e + +Holding(MilkDrink) + + + +542f7157-5919-4494-b1c7-8347fde1ba81->4203eb66-331b-4523-9e0d-bd352085372e + + + + + +1344d196-da12-4225-9e6f-694dc08cb6e4 + +Holding(NFCJuice) + + + +542f7157-5919-4494-b1c7-8347fde1ba81->1344d196-da12-4225-9e6f-694dc08cb6e4 + + + + + +01e9f37e-743e-491a-b156-20321d0e08de + +At(Robot,Bar2) + + + +542f7157-5919-4494-b1c7-8347fde1ba81->01e9f37e-743e-491a-b156-20321d0e08de + + + + + +a6aa9a54-860b-47a0-a740-56f627904462 + +? + + + +7940c5fc-8811-458c-8ba6-20c1af78eb78->a6aa9a54-860b-47a0-a740-56f627904462 + + + + + +4478c605-5af6-4de4-b76f-0153ce265b80 + +PutDown(Chips,Bar) + + + +7940c5fc-8811-458c-8ba6-20c1af78eb78->4478c605-5af6-4de4-b76f-0153ce265b80 + + + + + +423f937e-01a3-4792-9289-69802f12f401 + +Holding(MilkDrink) + + + +a6aa9a54-860b-47a0-a740-56f627904462->423f937e-01a3-4792-9289-69802f12f401 + + + + + +6a7a49d5-c4ab-4e2a-9a88-b53a34c13344 + +At(Robot,Bar2) + + + +a6aa9a54-860b-47a0-a740-56f627904462->6a7a49d5-c4ab-4e2a-9a88-b53a34c13344 + + + + + +ba9d685b-2598-403f-bcda-db7037e42d3a + +Holding(Chips) + + + +a6aa9a54-860b-47a0-a740-56f627904462->ba9d685b-2598-403f-bcda-db7037e42d3a + + + + + +29d46846-cbac-4f70-bd03-79b1cef1c6ef + +? + + + +01dcea8e-eca2-4b08-994f-b91577ff857d->29d46846-cbac-4f70-bd03-79b1cef1c6ef + + + + + +b2cb2241-6e78-4bb4-be39-b8a5f8de311a + +PutDown(Water,Bar) + + + +01dcea8e-eca2-4b08-994f-b91577ff857d->b2cb2241-6e78-4bb4-be39-b8a5f8de311a + + + + + +de004850-94e6-4951-a449-1f67780d4234 + +Holding(Water) + + + +29d46846-cbac-4f70-bd03-79b1cef1c6ef->de004850-94e6-4951-a449-1f67780d4234 + + + + + +bb964d79-cc71-49e4-b3d5-b7640ebbdb4d + +Holding(MilkDrink) + + + +29d46846-cbac-4f70-bd03-79b1cef1c6ef->bb964d79-cc71-49e4-b3d5-b7640ebbdb4d + + + + + +a7d83f00-dba0-4ee2-bfc5-f48c0a0cfd33 + +At(Robot,Bar2) + + + +29d46846-cbac-4f70-bd03-79b1cef1c6ef->a7d83f00-dba0-4ee2-bfc5-f48c0a0cfd33 + + + + + +e036ee91-0689-4407-9702-89c9cb1df247 + +? + + + +182ba254-1346-40aa-b578-4a6bb67fee5a->e036ee91-0689-4407-9702-89c9cb1df247 + + + + + +5ba8a58b-b041-4aee-8a04-9b3b45a9f16d + +PutDown(BottledDrink,Bar) + + + +182ba254-1346-40aa-b578-4a6bb67fee5a->5ba8a58b-b041-4aee-8a04-9b3b45a9f16d + + + + + +3c2592a4-0500-413b-89ac-636b75739834 + +Holding(BottledDrink) + + + +e036ee91-0689-4407-9702-89c9cb1df247->3c2592a4-0500-413b-89ac-636b75739834 + + + + + +6278e4b6-e5c0-47ab-a869-6e5203caa2f0 + +At(Robot,Bar2) + + + +e036ee91-0689-4407-9702-89c9cb1df247->6278e4b6-e5c0-47ab-a869-6e5203caa2f0 + + + + + +d4f187d2-0da7-403b-aca9-3b6f997ee8c3 + +Holding(MilkDrink) + + + +e036ee91-0689-4407-9702-89c9cb1df247->d4f187d2-0da7-403b-aca9-3b6f997ee8c3 + + + + + +0768ab4b-fdd9-4996-8834-a162ea5de5ef + +? + + + +51c6f61b-112c-4e76-9cfa-b2bea8a11ec0->0768ab4b-fdd9-4996-8834-a162ea5de5ef + + + + + +9d0993d8-e2db-4cac-aba1-218bec400b24 + +PutDown(Dessert,Bar) + + + +51c6f61b-112c-4e76-9cfa-b2bea8a11ec0->9d0993d8-e2db-4cac-aba1-218bec400b24 + + + + + +3929c98a-3444-4f2b-9f23-9572bf5bfbeb + +Holding(MilkDrink) + + + +0768ab4b-fdd9-4996-8834-a162ea5de5ef->3929c98a-3444-4f2b-9f23-9572bf5bfbeb + + + + + +22181a9b-e398-491a-9c57-d53c16ed51ea + +At(Robot,Bar2) + + + +0768ab4b-fdd9-4996-8834-a162ea5de5ef->22181a9b-e398-491a-9c57-d53c16ed51ea + + + + + +3118f39d-cf42-4209-bfee-6ef3461dafc6 + +Holding(Dessert) + + + +0768ab4b-fdd9-4996-8834-a162ea5de5ef->3118f39d-cf42-4209-bfee-6ef3461dafc6 + + + + + +54d7cc55-402c-4390-9d36-17f5bbeef1e8 + +? + + + +17e658ad-112c-4274-b068-a8357db2555e->54d7cc55-402c-4390-9d36-17f5bbeef1e8 + + + + + +abfb9be4-85cc-4ab5-bc95-bbee33a0ddd3 + +PutDown(SpringWater,Bar) + + + +17e658ad-112c-4274-b068-a8357db2555e->abfb9be4-85cc-4ab5-bc95-bbee33a0ddd3 + + + + + +6947e039-aa99-47b9-9294-78fcbc113cc9 + +Holding(MilkDrink) + + + +54d7cc55-402c-4390-9d36-17f5bbeef1e8->6947e039-aa99-47b9-9294-78fcbc113cc9 + + + + + +bc51cc2e-26a2-47a1-85c9-ab3a6317aeb3 + +Holding(SpringWater) + + + +54d7cc55-402c-4390-9d36-17f5bbeef1e8->bc51cc2e-26a2-47a1-85c9-ab3a6317aeb3 + + + + + +b7e3228e-a634-4073-8bdc-99b2d4b7dc45 + +At(Robot,Bar2) + + + +54d7cc55-402c-4390-9d36-17f5bbeef1e8->b7e3228e-a634-4073-8bdc-99b2d4b7dc45 + + + + + +291447ed-1951-4814-b8be-730d9b57e51a + +? + + + +f6e6bf0b-5751-4c23-a432-4dcea9143cda->291447ed-1951-4814-b8be-730d9b57e51a + + + + + +a970259e-20f6-434f-8ded-4f37db6d76cf + +PutDown(Milk,Bar) + + + +f6e6bf0b-5751-4c23-a432-4dcea9143cda->a970259e-20f6-434f-8ded-4f37db6d76cf + + + + + +2774cd34-2c04-4174-84c6-81548241f78f + +Holding(MilkDrink) + + + +291447ed-1951-4814-b8be-730d9b57e51a->2774cd34-2c04-4174-84c6-81548241f78f + + + + + +b1e770ad-c211-475f-b3d8-a13e23063a1d + +At(Robot,Bar2) + + + +291447ed-1951-4814-b8be-730d9b57e51a->b1e770ad-c211-475f-b3d8-a13e23063a1d + + + + + +26cbe8ac-83b4-4b6b-bf66-c4a591e3031b + +Holding(Milk) + + + +291447ed-1951-4814-b8be-730d9b57e51a->26cbe8ac-83b4-4b6b-bf66-c4a591e3031b + + + + + +3746b6f6-0c15-4b64-94e5-ec74246cc303 + +? + + + +b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f->3746b6f6-0c15-4b64-94e5-ec74246cc303 + + + + + +c3989486-941b-4098-9f3a-240f3fe88e4b + +PutDown(VacuumCup,Bar) + + + +b8ae0f43-a7a9-4705-b9e3-3eb3bb5bd64f->c3989486-941b-4098-9f3a-240f3fe88e4b + + + + + +b43c7cd5-f898-44b7-a6e4-5d12667ee735 + +Holding(MilkDrink) + + + +3746b6f6-0c15-4b64-94e5-ec74246cc303->b43c7cd5-f898-44b7-a6e4-5d12667ee735 + + + + + +dc10f464-b59f-4bdb-8782-6b92d0a78ddc + +Holding(VacuumCup) + + + +3746b6f6-0c15-4b64-94e5-ec74246cc303->dc10f464-b59f-4bdb-8782-6b92d0a78ddc + + + + + +8ec27e4a-a76d-4518-917a-226a6926b9c1 + +At(Robot,Bar2) + + + +3746b6f6-0c15-4b64-94e5-ec74246cc303->8ec27e4a-a76d-4518-917a-226a6926b9c1 + + + + + +382a4b70-3888-42ec-8f64-fea45299647e + +? + + + +a7d48b08-1bb2-4a73-9c65-42491a102689->382a4b70-3888-42ec-8f64-fea45299647e + + + + + +12d87012-108b-439e-883f-1b419e84041a + +PutDown(Yogurt,Bar) + + + +a7d48b08-1bb2-4a73-9c65-42491a102689->12d87012-108b-439e-883f-1b419e84041a + + + + + +2076aeb9-be66-4686-bb73-358ba2022941 + +Holding(Yogurt) + + + +382a4b70-3888-42ec-8f64-fea45299647e->2076aeb9-be66-4686-bb73-358ba2022941 + + + + + +f4b6f980-21fa-4cf6-b803-7c07221cebc5 + +At(Robot,Bar2) + + + +382a4b70-3888-42ec-8f64-fea45299647e->f4b6f980-21fa-4cf6-b803-7c07221cebc5 + + + + + +fb5c1657-e9c5-485f-bd4f-a8dd29aed3ae + +Holding(MilkDrink) + + + +382a4b70-3888-42ec-8f64-fea45299647e->fb5c1657-e9c5-485f-bd4f-a8dd29aed3ae + + + + + +4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5 + +? + + + +4bc12752-f3d7-4627-a627-ec1f43520d8f->4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5 + + + + + +4d8f8dc8-71c7-439a-aa6c-9864cd9601ad + +PutDown(ADMilk,Bar) + + + +4bc12752-f3d7-4627-a627-ec1f43520d8f->4d8f8dc8-71c7-439a-aa6c-9864cd9601ad + + + + + +523fd084-b5f2-4657-9dc0-0033395e59c9 + +Holding(MilkDrink) + + + +4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5->523fd084-b5f2-4657-9dc0-0033395e59c9 + + + + + +22bc3fe5-d861-4798-915b-51e7f785c223 + +Holding(ADMilk) + + + +4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5->22bc3fe5-d861-4798-915b-51e7f785c223 + + + + + +a95802ce-bf2a-44ee-aae6-0fa4a95e3a25 + +At(Robot,Bar2) + + + +4f162e9a-e745-49e2-b92d-7a6c6cf0b2e5->a95802ce-bf2a-44ee-aae6-0fa4a95e3a25 + + + + + +848a2572-11f3-4d2c-bb7b-628b79b7dc70 + +? + + + +4d7755da-33ed-47e1-9983-a20a75a8f42e->848a2572-11f3-4d2c-bb7b-628b79b7dc70 + + + + + +10cabde0-a935-4cda-b210-c773ccc0ded6 + +PutDown(Coffee,Bar) + + + +4d7755da-33ed-47e1-9983-a20a75a8f42e->10cabde0-a935-4cda-b210-c773ccc0ded6 + + + + + +918a6e60-f9f6-4354-b865-4498cca28ff4 + +Holding(MilkDrink) + + + +848a2572-11f3-4d2c-bb7b-628b79b7dc70->918a6e60-f9f6-4354-b865-4498cca28ff4 + + + + + +e4e4c515-81e2-4261-8e59-5dc3109fb871 + +At(Robot,Bar2) + + + +848a2572-11f3-4d2c-bb7b-628b79b7dc70->e4e4c515-81e2-4261-8e59-5dc3109fb871 + + + + + +3fc7322f-76f4-4513-a768-97f564d246b8 + +Holding(Coffee) + + + +848a2572-11f3-4d2c-bb7b-628b79b7dc70->3fc7322f-76f4-4513-a768-97f564d246b8 + + + + + +36b36b29-fa15-4d42-b625-f2c234167673 + +At(Robot,Bar2) + + + +dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9->36b36b29-fa15-4d42-b625-f2c234167673 + + + + + +08c98ebc-1ac7-4a01-93cd-9bccd7a48e72 + +Holding(Softdrink) + + + +dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9->08c98ebc-1ac7-4a01-93cd-9bccd7a48e72 + + + + + +b0d4dfdb-2e86-4116-ab4b-7aca1c0c253f + +Holding(MilkDrink) + + + +dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9->b0d4dfdb-2e86-4116-ab4b-7aca1c0c253f + + + + + +78351f8b-40d9-4ca2-a7e4-51ecc67cdbdb + +PutDown(Softdrink,Bar) + + + +dc5cb3dd-f6e7-4b93-b788-9f2862a0cfa9->78351f8b-40d9-4ca2-a7e4-51ecc67cdbdb + + + + + +cd2b377e-a73a-4d23-b97a-caebd44d093b + +At(Robot,Bar2) + + + +7798fb41-706e-4fdc-86f5-73f69e98d58b->cd2b377e-a73a-4d23-b97a-caebd44d093b + + + + + +f119569e-3499-41d1-9017-e5549bdbd17b + +Holding(MilkDrink) + + + +7798fb41-706e-4fdc-86f5-73f69e98d58b->f119569e-3499-41d1-9017-e5549bdbd17b + + + + + +9f75f355-b50f-4af9-87ca-3dbc72919f27 + +Holding(Bernachon) + + + +7798fb41-706e-4fdc-86f5-73f69e98d58b->9f75f355-b50f-4af9-87ca-3dbc72919f27 + + + + + +67338261-a68a-4a3e-a228-d031f7fd49d5 + +PutDown(Bernachon,Bar) + + + +7798fb41-706e-4fdc-86f5-73f69e98d58b->67338261-a68a-4a3e-a228-d031f7fd49d5 + + + + + +03893732-2163-41b9-afb8-f31b900d5bcd + +At(Robot,Bar2) + + + +d27bfb36-f2e6-492a-87f7-0c6517348697->03893732-2163-41b9-afb8-f31b900d5bcd + + + + + +5ce16741-ca81-4f3d-97f3-042a79f2ae1d + +Holding(NFCJuice) + + + +d27bfb36-f2e6-492a-87f7-0c6517348697->5ce16741-ca81-4f3d-97f3-042a79f2ae1d + + + + + +0445fc42-f9cd-49c5-b561-66d220e95c20 + +Holding(MilkDrink) + + + +d27bfb36-f2e6-492a-87f7-0c6517348697->0445fc42-f9cd-49c5-b561-66d220e95c20 + + + + + +60e2142c-ca48-4936-9f74-15860e8c388a + +PutDown(NFCJuice,Bar) + + + +d27bfb36-f2e6-492a-87f7-0c6517348697->60e2142c-ca48-4936-9f74-15860e8c388a + + + + + +46f3f8a7-d9e3-4500-b125-6b65fad814f2 + +At(Robot,Bar2) + + + +40493118-57ee-4082-952d-147f8ef32b53->46f3f8a7-d9e3-4500-b125-6b65fad814f2 + + + + + +e834c89f-c3a1-481a-964f-d17712a234b2 + +Holding(MilkDrink) + + + +40493118-57ee-4082-952d-147f8ef32b53->e834c89f-c3a1-481a-964f-d17712a234b2 + + + + + +f6581294-8006-4897-96f0-2f8a63d43faf + +Holding(Chips) + + + +40493118-57ee-4082-952d-147f8ef32b53->f6581294-8006-4897-96f0-2f8a63d43faf + + + + + +07a610ed-90d4-4f8c-9c3d-60cf62877f5a + +PutDown(Chips,Bar) + + + +40493118-57ee-4082-952d-147f8ef32b53->07a610ed-90d4-4f8c-9c3d-60cf62877f5a + + + + + +7c4fe8f0-3960-40ec-9c6b-ed86e85e4300 + +Holding(Water) + + + +b8b7c80e-ab74-4167-b090-d911d9279854->7c4fe8f0-3960-40ec-9c6b-ed86e85e4300 + + + + + +ae561e81-6131-4f61-a626-8c7007d609d4 + +At(Robot,Bar2) + + + +b8b7c80e-ab74-4167-b090-d911d9279854->ae561e81-6131-4f61-a626-8c7007d609d4 + + + + + +724134fb-4b97-4949-8501-4cde449d3859 + +Holding(MilkDrink) + + + +b8b7c80e-ab74-4167-b090-d911d9279854->724134fb-4b97-4949-8501-4cde449d3859 + + + + + +70572626-cfc5-4864-9696-3f39ea3e7c72 + +PutDown(Water,Bar) + + + +b8b7c80e-ab74-4167-b090-d911d9279854->70572626-cfc5-4864-9696-3f39ea3e7c72 + + + + + +d12c3c7a-2c88-4636-9b73-6f782f771e9d + +Holding(BottledDrink) + + + +083162b7-6455-4358-809e-6ee578edc7ae->d12c3c7a-2c88-4636-9b73-6f782f771e9d + + + + + +3fe89acf-9022-47a4-9d61-1d2b250ed0f6 + +At(Robot,Bar2) + + + +083162b7-6455-4358-809e-6ee578edc7ae->3fe89acf-9022-47a4-9d61-1d2b250ed0f6 + + + + + +01b8ff5c-8365-4c6e-9c4f-edceed501fa0 + +Holding(MilkDrink) + + + +083162b7-6455-4358-809e-6ee578edc7ae->01b8ff5c-8365-4c6e-9c4f-edceed501fa0 + + + + + +e7e046b8-72d5-4c9d-89c3-b07456dc7b73 + +PutDown(BottledDrink,Bar) + + + +083162b7-6455-4358-809e-6ee578edc7ae->e7e046b8-72d5-4c9d-89c3-b07456dc7b73 + + + + + +b41a7721-c955-4184-a1ed-72047647e3c1 + +At(Robot,Bar2) + + + +b83f73a7-b5e8-4049-ae43-05e6a16e96c2->b41a7721-c955-4184-a1ed-72047647e3c1 + + + + + +9fb804e2-044d-44a9-8c41-40174ff70004 + +Holding(MilkDrink) + + + +b83f73a7-b5e8-4049-ae43-05e6a16e96c2->9fb804e2-044d-44a9-8c41-40174ff70004 + + + + + +01c6142c-2ff7-4a92-a91e-27575850af81 + +Holding(Dessert) + + + +b83f73a7-b5e8-4049-ae43-05e6a16e96c2->01c6142c-2ff7-4a92-a91e-27575850af81 + + + + + +d9c9a356-a5f8-42ad-b3f0-9129ed5d35c2 + +PutDown(Dessert,Bar) + + + +b83f73a7-b5e8-4049-ae43-05e6a16e96c2->d9c9a356-a5f8-42ad-b3f0-9129ed5d35c2 + + + + + +aefd565a-f6c7-4911-85cf-188476492418 + +At(Robot,Bar2) + + + +89cd87e5-f4a0-493c-9460-819a9d0f8870->aefd565a-f6c7-4911-85cf-188476492418 + + + + + +c0ccd327-af6f-4fef-adb7-b1411d14a59e + +Holding(SpringWater) + + + +89cd87e5-f4a0-493c-9460-819a9d0f8870->c0ccd327-af6f-4fef-adb7-b1411d14a59e + + + + + +466fe1ba-2890-4691-861f-d29b70a5e11f + +Holding(MilkDrink) + + + +89cd87e5-f4a0-493c-9460-819a9d0f8870->466fe1ba-2890-4691-861f-d29b70a5e11f + + + + + +2abeda39-c181-4b3e-b5fb-fa9517c4c17d + +PutDown(SpringWater,Bar) + + + +89cd87e5-f4a0-493c-9460-819a9d0f8870->2abeda39-c181-4b3e-b5fb-fa9517c4c17d + + + + + +b98ba6db-8280-4490-9e84-49487fde3390 + +At(Robot,Bar2) + + + +47e4b3b0-160e-47c7-952c-ba6301d69ca7->b98ba6db-8280-4490-9e84-49487fde3390 + + + + + +4e420313-0d1c-48dd-966d-ea13066fc57c + +Holding(MilkDrink) + + + +47e4b3b0-160e-47c7-952c-ba6301d69ca7->4e420313-0d1c-48dd-966d-ea13066fc57c + + + + + +4c67a617-c585-4cff-a7af-80a296d284bd + +Holding(Milk) + + + +47e4b3b0-160e-47c7-952c-ba6301d69ca7->4c67a617-c585-4cff-a7af-80a296d284bd + + + + + +c02c9dd2-069f-4e1b-a172-f4aa3e47efb9 + +PutDown(Milk,Bar) + + + +47e4b3b0-160e-47c7-952c-ba6301d69ca7->c02c9dd2-069f-4e1b-a172-f4aa3e47efb9 + + + + + +4255d0f0-5351-47ec-8bcc-cb920993938e + +At(Robot,Bar2) + + + +64b7af7f-af4e-4ac0-a762-454230c2182b->4255d0f0-5351-47ec-8bcc-cb920993938e + + + + + +100f8154-f3d0-477e-a5ec-73ee2073c26a + +Holding(VacuumCup) + + + +64b7af7f-af4e-4ac0-a762-454230c2182b->100f8154-f3d0-477e-a5ec-73ee2073c26a + + + + + +166c120d-cb73-44c6-8731-c1424a64cbc0 + +Holding(MilkDrink) + + + +64b7af7f-af4e-4ac0-a762-454230c2182b->166c120d-cb73-44c6-8731-c1424a64cbc0 + + + + + +271a95d8-3651-4c9e-936c-dbdcc69e354e + +PutDown(VacuumCup,Bar) + + + +64b7af7f-af4e-4ac0-a762-454230c2182b->271a95d8-3651-4c9e-936c-dbdcc69e354e + + + + + +e374c32a-9a09-4f00-9776-c568b38c7838 + +Holding(Yogurt) + + + +7b9e2e65-34e2-4727-b92a-6e433410a967->e374c32a-9a09-4f00-9776-c568b38c7838 + + + + + +7ec7305a-ee6e-4410-9e7d-8fdbb72a9d91 + +At(Robot,Bar2) + + + +7b9e2e65-34e2-4727-b92a-6e433410a967->7ec7305a-ee6e-4410-9e7d-8fdbb72a9d91 + + + + + +be476221-722d-4cb4-9113-5e359e524e71 + +Holding(MilkDrink) + + + +7b9e2e65-34e2-4727-b92a-6e433410a967->be476221-722d-4cb4-9113-5e359e524e71 + + + + + +0605a547-3a8f-4502-8efa-1896d0b6cf1e + +PutDown(Yogurt,Bar) + + + +7b9e2e65-34e2-4727-b92a-6e433410a967->0605a547-3a8f-4502-8efa-1896d0b6cf1e + + + + + +680344f3-a7c8-4c39-a0d2-8235f99a7d5e + +At(Robot,Bar2) + + + +d86a7a63-841b-427c-bfb1-a0348e95f899->680344f3-a7c8-4c39-a0d2-8235f99a7d5e + + + + + +6d77ce27-4ee9-4d98-aa6a-2dc0d80af7c3 + +Holding(ADMilk) + + + +d86a7a63-841b-427c-bfb1-a0348e95f899->6d77ce27-4ee9-4d98-aa6a-2dc0d80af7c3 + + + + + +68455b9a-fe5a-4b55-b34a-3b286769af32 + +Holding(MilkDrink) + + + +d86a7a63-841b-427c-bfb1-a0348e95f899->68455b9a-fe5a-4b55-b34a-3b286769af32 + + + + + +c2c8a77b-4424-4660-b04a-1badc4d4c918 + +PutDown(ADMilk,Bar) + + + +d86a7a63-841b-427c-bfb1-a0348e95f899->c2c8a77b-4424-4660-b04a-1badc4d4c918 + + + + + +0304efc1-278b-4123-9279-e81912d89f27 + +At(Robot,Bar2) + + + +992d22b0-61b3-4bff-a0b3-ffb39ed57a83->0304efc1-278b-4123-9279-e81912d89f27 + + + + + +7a2a94bc-9582-496d-bd8e-49d683fedfaf + +Holding(MilkDrink) + + + +992d22b0-61b3-4bff-a0b3-ffb39ed57a83->7a2a94bc-9582-496d-bd8e-49d683fedfaf + + + + + +82ebb4a8-ecd2-421b-8477-59c0795e76cc + +Holding(Coffee) + + + +992d22b0-61b3-4bff-a0b3-ffb39ed57a83->82ebb4a8-ecd2-421b-8477-59c0795e76cc + + + + + +0a56cf17-de4c-4dea-b77f-fd201707d0f3 + +PutDown(Coffee,Bar) + + + +992d22b0-61b3-4bff-a0b3-ffb39ed57a83->0a56cf17-de4c-4dea-b77f-fd201707d0f3 + + + + + +91f406b6-4141-4b9d-8685-3358c1f38016 + +Holding(MilkDrink) + + + +fffb61a5-c080-435f-b642-96656a4c8bd1->91f406b6-4141-4b9d-8685-3358c1f38016 + + + + + +461000b9-b5b4-41d8-93be-0daca9273dcf + +At(Robot,Bar2) + + + +fffb61a5-c080-435f-b642-96656a4c8bd1->461000b9-b5b4-41d8-93be-0daca9273dcf + + + + + +4a2642bb-b191-45e1-82f5-7303cb7dddd8 + +PutDown(MilkDrink,Bar) + + + +fffb61a5-c080-435f-b642-96656a4c8bd1->4a2642bb-b191-45e1-82f5-7303cb7dddd8 + + + + + diff --git a/BTExpansionCode/Examples.py b/BTExpansionCode/Examples.py new file mode 100644 index 0000000..1544816 --- /dev/null +++ b/BTExpansionCode/Examples.py @@ -0,0 +1,195 @@ + +from OptimalBTExpansionAlgorithm_single_goal import Action + + +# 本例子中,将 VacuumCup 放到 FrontDesk,比 MoveTo(Table) 再 Put(Table,VacuumCup) 的 cost 要小 +def SoftdrinkCost(): + actions=[ + Action(name='PutDown(Softdrink,WaterTable)', pre={'Holding(Softdrink)','At(Robot,WaterTable)'}, add={'Holding(Nothing)','On(Softdrink,WaterTable)'}, del_set={'Holding(Softdrink)'}, cost=3), + Action(name='PickUp(Softdrink)', pre={'At(Robot,Softdrink)','Holding(Nothing)'}, add={'Holding(Softdrink)'}, del_set={'Holding(Nothing)'}, cost=2), + Action(name='MoveTo(WaterTable)', pre=set(), add={'At(Robot,WaterTable)'}, del_set={'At(Robot,Softdrink)','At(Robot,Bar)','At(Robot,Coffee)'}, cost=5), + Action(name='MoveTo(Softdrink)', pre={'Exist(Softdrink)'}, add={'At(Robot,Softdrink)'}, del_set={'At(Robot,WaterTable)','At(Robot,Bar)','At(Robot,Coffee)'}, cost=5), + Action(name='PutDown(Coffee,WaterTable)', pre={'Holding(Coffee)'}, add={'Holding(Nothing)'},del_set={'Holding(Softdrink)', 'Holding(Coffee)'}, cost=10), + + Action(name='PutDown(Anything,Anywhere)', pre=set(), add={'Holding(Nothing)'},del_set={'Holding(Softdrink)', 'Holding(Coffee)'}, cost=0), + + ] + + start = {'At(Robot,Bar)','Holding(Coffee)','Exist(Softdrink)'} + goal = {'On(Softdrink,WaterTable)'} + + return goal,start,actions + + + +def MakeCoffee(): + actions=[ + Action(name='Put(Table,Coffee)', pre={'Holding(Coffee)','At(Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1), + Action(name='Put(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1), + + Action(name='Grasp(Coffee)', pre={'NotHolding','At(Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1), + + Action(name='MoveTo(Table)', pre={'Exist(Table)'}, add={'At(Table)'}, del_set={'At(FrontDesk)','At(Coffee)','At(CoffeeMachine)'}, cost=1), + Action(name='MoveTo(Coffee)', pre={'Exist(Coffee)'}, add={'At(Coffee)'}, del_set={'At(FrontDesk)','At(Table)','At(CoffeeMachine)'}, cost=1), + Action(name='MoveTo(CoffeeMachine)', pre={'Exist(CoffeeMachine)'}, add={'At(CoffeeMachine)'}, del_set={'At(FrontDesk)','At(Coffee)','At(Table)'}, cost=1), + + Action(name='OpCoffeeMachine', pre={'At(CoffeeMachine)','NotHolding'}, add={'Exist(Coffee)','At(Coffee)'}, del_set=set(), cost=1), + ] + + start = {'At(FrontDesk)','Holding(VacuumCup)','Exist(Table)','Exist(CoffeeMachine)','Exist(FrontDesk)'} + goal = {'At(Table,Coffee)'} + return goal,start,actions + +# 本例子中,将 VacuumCup 放到 FrontDesk,比 MoveTo(Table) 再 Put(Table,VacuumCup) 的 cost 要小 +def MakeCoffeeCost(): + actions=[ + Action(name='PutDown(Table,Coffee)', pre={'Holding(Coffee)','At(Robot,Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1), + Action(name='PutDown(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Robot,Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1), + + Action(name='PickUp(Coffee)', pre={'NotHolding','At(Robot,Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1), + + Action(name='MoveTo(Table)', pre={'Available(Table)'}, add={'At(Robot,Table)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,CoffeeMachine)'}, cost=1), + Action(name='MoveTo(Coffee)', pre={'Available(Coffee)'}, add={'At(Robot,Coffee)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Table)','At(Robot,CoffeeMachine)'}, cost=1), + Action(name='MoveTo(CoffeeMachine)', pre={'Available(CoffeeMachine)'}, add={'At(Robot,CoffeeMachine)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,Table)'}, cost=1), + + Action(name='OpCoffeeMachine', pre={'At(Robot,CoffeeMachine)','NotHolding'}, add={'Available(Coffee)','At(Robot,Coffee)'}, del_set=set(), cost=1), + ] + + start = {'At(Robot,Bar)','Holding(VacuumCup)','Available(Table)','Available(CoffeeMachine)','Available(FrontDesk)'} + goal = {'At(Table,Coffee)'} + + return goal,start,actions + + + + +# test +def Test(): + actions=[ + Action(name='a1', pre={6}, add={0,2,4}, del_set={1,5}, cost=1), + Action(name='a2', pre=set(), add={0,1}, del_set=set(), cost=1), + Action(name='a3', pre={1,6}, add={0,2,3,5}, del_set={1,6}, cost=1), + Action(name='a4', pre={0,2,3}, add={4,5}, del_set={0,6}, cost=1), + Action(name='a5', pre={0,1,4}, add={2,3,6}, del_set={0}, cost=1), + ] + + start = {1,2,6} + goal={0,1,2,4,6} + return goal,start,actions + +# def Test(): +# actions=[ +# Action(name='a1', pre={2}, add={1}, del_set=set(), cost=1), +# Action(name='a2', pre=set(), add={1}, del_set={0,2}, cost=1), +# Action(name='a3', pre={1}, add=set(), del_set={0,2}, cost=1), +# Action(name='a4', pre=set(), add={0}, del_set=set(), cost=1), +# Action(name='a5', pre={1}, add={0,2}, del_set={1}, cost=1), +# Action(name='a6', pre={1}, add=set(), del_set={0,1,2}, cost=1), +# Action(name='a7', pre={1}, add={2}, del_set={0, 2}, cost=1), +# ] +# +# start = {1,2} +# goal={0,1} +# return goal,start,actions + + +# todo: 最原始的例子 +def MoveBtoB_num (): + actions=[] + a = Action(name='a1') + a.pre={1,4} + a.add={"c_goal"} + a.del_set={1,4} + a.cost = 1 + actions.append(a) + + a=Action(name='a2') + a.pre={1,2,3} + a.add={"c_goal"} + a.del_set={1,2,3} + a.cost = 1 + actions.append(a) + + a=Action(name='a3') + a.pre={1,2} + a.add={4} + a.del_set={2} + a.cost = 1 + actions.append(a) + + a=Action(name='a4') + a.pre={"c_start"} + a.add={1,2,3} + a.del_set={"c_start",4} + a.cost = 1 + actions.append(a) + + start = {"c_start"} + goal={"c_goal"} + return goal,start,actions + + +# todo: 最原始的例子 +def MoveBtoB (): + actions=[] + a = Action(name="Move(b,ab)") #'movebtob' + a.pre={'Free(ab)','WayClear'} #{1,2} + a.add={'At(b,ab)'} #{3} + a.del_set= {'Free(ab)','At(b,pb)'} #{1,4} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,ab)") #'moveatob' + a.pre={'Free(ab)'} #{1} + a.add={'Free(ab)','WayClear'} #{5,2} + a.del_set={'Free(ab)','At(s,ps)'} #{1,6} + a.cost = 2 + actions.append(a) + + a=Action(name="Move(s,as)") #'moveatoa' + a.pre={'Free(as)'} #{7} + a.add={'At(s,ps)','WayClear'} #{8,2} + a.del_set={'Free(as)','At(s,ps)'} #{7,6} + a.cost = 3 + actions.append(a) + + start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} #{1,7,4,6} + goal= {'At(b,ab)'} #{3} + return goal,start,actions + + +# 小蔡师兄论文里的例子 +def Cond2BelongsToCond3(): + actions=[] + a = Action(name='a1') + a.pre={1,4} + a.add={"c_goal"} + a.del_set={1,4} + a.cost = 1 + actions.append(a) + + a=Action(name='a2') + a.pre={1,2,3} + a.add={"c_goal"} + a.del_set={1,2,3} + a.cost = 1 #100 + actions.append(a) + + a=Action(name='a3') + a.pre={1,2} + a.add={4} + a.del_set={2} + a.cost = 1 + actions.append(a) + + a=Action(name='a4') + a.pre={"c_start"} + a.add={1,2,3} + a.del_set={"c_start",4} + a.cost = 1 + actions.append(a) + + start = {"c_start"} + goal={"c_goal"} + return goal,start,actions + diff --git a/BTExpansionCode/MakeCoffee.ptml b/BTExpansionCode/MakeCoffee.ptml new file mode 100644 index 0000000..8a952dd --- /dev/null +++ b/BTExpansionCode/MakeCoffee.ptml @@ -0,0 +1,63 @@ +selector{ +cond At(Table,Coffee) +sequence{ +cond At(Robot,Table) + cond Holding(Coffee) +act PutDown(Table,Coffee) +} +sequence{ +cond Available(Table) + cond Holding(Coffee) +act MoveTo(Table) +} +sequence{ +cond At(Robot,Coffee) + cond Available(Table) + cond NotHolding +act PickUp(Coffee) +} +sequence{ +cond Available(Coffee) + cond Available(Table) + cond NotHolding +act MoveTo(Coffee) +} +sequence{ +cond Holding(VacuumCup) + cond At(Robot,Table) + cond Available(Table) + cond Available(Coffee) +act PutDown(Table,VacuumCup) +} +sequence{ +cond At(Robot,CoffeeMachine) + cond Available(Table) + cond NotHolding +act OpCoffeeMachine() +} +sequence{ +cond Holding(VacuumCup) + cond Available(Table) + cond Available(Coffee) +act MoveTo(Table) +} +sequence{ +cond Available(CoffeeMachine) + cond Available(Table) + cond NotHolding +act MoveTo(CoffeeMachine) +} +sequence{ +cond Holding(VacuumCup) + cond At(Robot,Table) + cond Available(Table) + cond Available(CoffeeMachine) +act PutDown(Table,VacuumCup) +} +sequence{ +cond Holding(VacuumCup) + cond Available(Table) + cond Available(CoffeeMachine) +act MoveTo(Table) +} +} diff --git a/BTExpansionCode/OptimalBTExpansionAlgorithm.py b/BTExpansionCode/OptimalBTExpansionAlgorithm.py new file mode 100644 index 0000000..92b6a28 --- /dev/null +++ b/BTExpansionCode/OptimalBTExpansionAlgorithm.py @@ -0,0 +1,701 @@ +import copy +import random +from BehaviorTree import Leaf,ControlBT +import re + + +class CondActPair: + def __init__(self, cond_leaf,act_leaf): + self.cond_leaf = cond_leaf + self.act_leaf = act_leaf + +#定义行动类,行动包括前提、增加和删除影响 +class Action: + def __init__(self,name='anonymous action',pre=set(),add=set(),del_set=set(),cost=1): + self.pre=copy.deepcopy(pre) + self.add=copy.deepcopy(add) + self.del_set=copy.deepcopy(del_set) + self.name=name + self.cost=cost + + def __str__(self): + return self.name + # 从状态随机生成一个行动 + def generate_from_state(self,state,num): + for i in range(0,num): + if i in state: + if random.random() >0.5: + self.pre.add(i) + if random.random() >0.5: + self.del_set.add(i) + continue + if random.random() > 0.5: + self.add.add(i) + continue + if random.random() >0.5: + self.del_set.add(i) + def print_action(self): + print (self.pre) + print(self.add) + print(self.del_set) + +#生成随机状态 +def generate_random_state(num): + result = set() + for i in range(0,num): + if random.random()>0.5: + result.add(i) + return result +#从状态和行动生成后继状态 +def state_transition(state,action): + if not action.pre <= state: + print ('error: action not applicable') + return state + new_state=(state | action.add) - action.del_set + return new_state + + +def conflict(c): + have_at = False + for str in c: + if 'At' in str: + if not have_at: + have_at = True + else: + return True + return False + + +#本文所提出的完备规划算法 +class OptBTExpAlgorithm: + def __init__(self,verbose=False): + self.bt = None + self.nodes=[] + self.traversed=[] + self.mounted=[] + self.conditions=[] + self.conditions_index=[] + self.verbose=verbose + self.goal=None + self.bt_merge = True + + def clear(self): + self.bt = None + self.nodes = [] + self.traversed = [] #存cond + self.expanded = [] #存整个 + self.conditions = [] + self.conditions_index = [] + + #运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt + # def run_algorithm(self,goal,actions,scene): + def run_algorithm_selTree(self, start, goal, actions): + # self.scene = scene + + self.goal = goal + + if self.verbose: + print("\n算法开始!") + + + bt = ControlBT(type='cond') + # 初始行为树只包含目标条件 + gc_node = Leaf(type='cond', content=goal, mincost=0) # 为了统一,都成对出现 + ga_node = Leaf(type='act', content=None, mincost=0) + subtree = ControlBT(type='?') + subtree.add_child([copy.deepcopy(gc_node)]) # 子树首先保留所扩展结 + bt.add_child([subtree]) + + # self.conditions.append(goal) + cond_anc_pair = CondActPair(cond_leaf=gc_node,act_leaf=ga_node) + self.nodes.append(copy.deepcopy(cond_anc_pair)) # the set of explored but unexpanded conditions + self.traversed = [goal] # the set of expanded conditions + + while len(self.nodes)!=0: + + # Find the condition for the shortest cost path + pair_node = None + min_cost = float ('inf') + index= -1 + for i,cond_anc_pair in enumerate(self.nodes): + + ########### 剪枝操作 + # cond_tmp = cond_anc_pair.cond_leaf.content + # valid = True + # for pn in self.expanded: # 剪枝操作 + # if isinstance(pn.act_leaf.content,Action): + # if pn.act_leaf.content.name==cond_anc_pair.act_leaf.content.name and cond_tmp <= pn.cond_leaf.content: + # valid = False + # break + # if not valid: + # continue + ########### 剪枝操作 + + if cond_anc_pair.cond_leaf.mincost < min_cost: + min_cost = cond_anc_pair.cond_leaf.mincost + pair_node = copy.deepcopy(cond_anc_pair) + index = i + + if self.verbose: + print("选择扩展条件结点:",pair_node.cond_leaf.content) + # Update self.nodes and self.traversed + self.nodes.pop(index) # the set of explored but unexpanded conditions. self.nodes.remove(pair_node) + c = pair_node.cond_leaf.content # 子树所扩展结点对应的条件(一个文字的set) + + # Mount the action node and extend BT. T = Eapand(T,c,A(c)) + if c!=goal: + if c!=set(): + + # 挂在上去的时候判断要不要挂载 + ########### 剪枝操作 发现行不通 + # valid = True + # for pn in self.expanded: # 剪枝操作 + # if isinstance(pn.act_leaf.content,Action): + # if pn.act_leaf.content.name==pair_node.act_leaf.content.name and c <= pn.cond_leaf.content: + # valid = False + # break + # if valid: + ########### 剪枝操作 + sequence_structure = ControlBT(type='>') + sequence_structure.add_child( + [copy.deepcopy(pair_node.cond_leaf), copy.deepcopy(pair_node.act_leaf)]) + subtree.add_child([copy.deepcopy(sequence_structure)]) # subtree 是回不断变化的,它的父亲是self.bt + self.expanded.append(copy.deepcopy(pair_node)) + # 增加实时条件判断,满足条件就不再扩展 + # if c <= self.scene.state["condition_set"]: + # if c <= start: + # # 要不要继续扩展完全 + # # self.merge_adjacent_conditions_stack() + # # self.merge_adjacent_conditions_stack_old() + # # self.merge_adjacent_conditions() + # return True + + if c <= start: + if self.bt_merge: + bt = copy.deepcopy(self.merge_adjacent_conditions_stack(bt)) + return bt,min_cost + else: + subtree.add_child([copy.deepcopy(pair_node.act_leaf)]) + + + if self.verbose: + print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \ + % (cond_anc_pair.act_leaf.content.name, cond_anc_pair.cond_leaf.content, + cond_anc_pair.cond_leaf.mincost)) + + if self.verbose: + print("遍历所有动作, 寻找符合条件的动作") + # 遍历所有动作, 寻找符合条件的动作 + current_mincost = pair_node.cond_leaf.mincost # 当前的最短路径是多少 + + for i in range(0, len(actions)): + + if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set() : + if (c - actions[i].del_set) == c: + if self.verbose: + print("———— 满足条件可以扩展") + c_attr = (actions[i].pre | c) - actions[i].add + + # 这样剪枝存在错误性 + # if conflict(c_attr): + # continue + + # 剪枝操作,现在的条件是以前扩展过的条件的超集 + valid = True + for j in self.traversed: # 剪枝操作 + if j <= c_attr: + valid = False + if self.verbose: + print("———— --被剪枝") + break + + if valid: + c_attr_node = Leaf(type='cond', content=c_attr, mincost=current_mincost + actions[i].cost) + a_attr_node = Leaf(type='act', content=actions[i], mincost=current_mincost + actions[i].cost) + cond_anc_pair = CondActPair(cond_leaf=c_attr_node, act_leaf=a_attr_node) + self.nodes.append(copy.deepcopy(cond_anc_pair)) # condition node list + self.traversed.append(c_attr) # 重点 the set of expanded conditions + # 把符合条件的动作节点都放到列表里 + if self.verbose: + print("———— -- %s 符合条件放入列表,对应的c为 %s" % (actions[i].name,c_attr)) + + # self.merge_adjacent_conditions_stack() + # self.merge_adjacent_conditions_stack_old() + # self.merge_adjacent_conditions() + # if self.verbose: + # print("算法结束!\n") + # return True + if self.bt_merge: + bt = copy.deepcopy(self.merge_adjacent_conditions_stack(bt)) + if self.verbose: + print("算法结束!\n") + return bt,min_cost + + + def run_algorithm(self, start, goal, actions): + self.bt = ControlBT(type='cond') + subtree = ControlBT(type='?') + + subtree_with_costs_ls=[] + + if len(goal) > 1: + for g in goal: + bt_sel_tree,mincost = self.run_algorithm_selTree(start, g, actions) + subtree_with_costs_ls.append((bt_sel_tree,mincost)) + # 要排个序再一次add + # subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])]) + # self.bt.add_child([subtree]) + sorted_trees = sorted(subtree_with_costs_ls, key=lambda x: x[1]) + for tree,cost in sorted_trees: + subtree.add_child([copy.deepcopy(tree.children[0])]) + self.bt.add_child([subtree]) + else: + self.bt,mincost = self.run_algorithm_selTree(start, goal[0], actions) + return True + + + def merge_adjacent_conditions_stack(self,bt_sel): + # 只针对第一层合并,之后要考虑层层递归合并 + 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 = bt_sel.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] + if isinstance(last_child, ControlBT) and last_child.type == '>': + set1 = last_child.children[0].content + set2 = child.children[0].content + inter = set1 & set2 + if inter!=set(): + c1 = set1-set2 + c2 = set2-set1 + inter_node = Leaf(type='cond', content=inter) + c1_node = Leaf(type='cond', content=c1) + c2_node = Leaf(type='cond', content=c2) + a1_node = last_child.children[1] + a2_node = child.children[1] + + + # set1<=set2,此时set2对应的动作永远不会执行 + if (c1==set() and isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action)): + continue + + # 再写一个特殊情况处理,三个结点动作last 遇到 两个结点 且动作相同 + if len(last_child.children)==3 and \ + isinstance(last_child.children[2], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[2].content, Action) and isinstance( child.children[1].content, Action) \ + and last_child.children[2].content.name == child.children[1].content.name \ + and c1==set() and c2!=set(): + last_child.children[1].add_child([copy.deepcopy(c2_node)]) + continue + elif len(last_child.children)==3: + stack.append(child) + continue + + # 判断动作相不相同 + if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action) \ + and last_child.children[1].content.name == child.children[1].content.name: + + if c2==set(): + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(a1_node)]) + else: + _sel = ControlBT(type='?') + _sel.add_child([copy.deepcopy(c1_node), copy.deepcopy(c2_node)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(_sel),copy.deepcopy(a1_node)]) + else: + if c1 == set(): + seq1 = copy.deepcopy(last_child.children[1]) + else: + seq1 = ControlBT(type='>') + seq1.add_child([copy.deepcopy(c1_node), copy.deepcopy(a1_node)]) + + if c2 == set(): + seq2 = copy.deepcopy(child.children[1]) + else: + seq2 = ControlBT(type='>') + seq2.add_child([copy.deepcopy(c2_node), copy.deepcopy(a2_node)]) + sel = ControlBT(type='?') + sel.add_child([seq1, seq2]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(sel)]) + + stack.pop() + stack.append(tmp_tree) + + else: + stack.append(child) + else: + stack.append(child) + else: + stack.append(child) + + for tree in stack: + sbtree.add_child([tree]) + bt_sel = copy.deepcopy(bt) + return bt_sel + + + def merge_adjacent_conditions_stack_correct_2023(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] + if isinstance(last_child, ControlBT) and last_child.type == '>': + + 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: + 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_node = Leaf(type='cond', content=c1) + a1 = copy.deepcopy(last_child.children[1]) + seq1.add_child( + [copy.deepcopy(c1_node), copy.deepcopy(a1)]) + else: + seq1 = copy.deepcopy(last_child.children[1]) + + if c2!=set(): + seq2 = ControlBT(type='>') + c2_node = Leaf(type='cond', content=c2) + a2 = copy.deepcopy(child.children[1]) + seq2.add_child( + [copy.deepcopy(c2_node), copy.deepcopy(a2)]) + else: + seq2 = copy.deepcopy(child.children[1]) + + + # 如果动作还是一样的 + # if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + # and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action)\ + # and last_child.children[1].content.name == child.children[1].content.name: # a1=a2 + # # 第三次优化合并 + # # 将来这些地方都写成递归的 + # + # if c1!=set() and c2!=set(): + # _sel = ControlBT(type='?') + # c1_node = Leaf(type='cond', content=c1) + # c2_node = Leaf(type='cond', content=c2) + # _sel.add_child([copy.deepcopy(c1_node), copy.deepcopy(c2_node)]) + # tmp_tree = ControlBT(type='>') + # inter_c = Leaf(type='cond', content=inter) + # tmp_tree.add_child( + # [copy.deepcopy(inter_c), copy.deepcopy(_sel),copy.deepcopy(last_child.children[1])]) + # elif c1!=set() and c2==set(): + # tmp_tree = ControlBT(type='>') + # # inter_c = Leaf(type='cond', content=inter) + # # c1_node = Leaf(type='cond', content=c1) + # # a1 = copy.deepcopy(last_child.children[1]) + # tmp_tree.add_child( + # [copy.deepcopy(last_child.children[0]), copy.deepcopy(last_child.children[1])]) + # else: + # tmp_tree = ControlBT(type='>') + # inter_c = Leaf(type='cond', content=inter) + # a1 = copy.deepcopy(last_child.children[1]) + # tmp_tree.add_child( + # [copy.deepcopy(inter_c), copy.deepcopy(a1)]) + # # 下面这个是以前写错的 + # # sel.add_child([copy.deepcopy(c1), copy.deepcopy(c2),copy.deepcopy(last_child.children[1])]) + # else: + sel = ControlBT(type='?') + sel.add_child([copy.deepcopy(seq1), copy.deepcopy(seq2)]) + tmp_tree = ControlBT(type='>') + inter_c = Leaf(type='cond', content=inter) + tmp_tree.add_child( + [copy.deepcopy(inter_c), copy.deepcopy(sel)]) + + stack.pop() + stack.append(tmp_tree) + else: + stack.append(child) + else: + stack.append(child) + 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='?') + 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] + + if isinstance(last_child, ControlBT) and last_child.type == '>': + + set1 = last_child.children[0].content + set2 = child.children[0].content + + if set1>=set2: + inter = set1 & set2 + dif = set1 - set2 + + tmp_sub_seq = ControlBT(type='>') + c2 = Leaf(type='cond', content=dif) + a1 = copy.deepcopy(last_child.children[1]) + tmp_sub_seq.add_child( + [copy.deepcopy(c2), copy.deepcopy(a1)]) + + tmp_sub_tree_sel = ControlBT(type='?') + a2 = copy.deepcopy(child.children[1]) + tmp_sub_tree_sel.add_child( + [copy.deepcopy(tmp_sub_seq), copy.deepcopy(a2)]) + + tmp_tree = ControlBT(type='>') + c1 = Leaf(type='cond', content=inter) + tmp_tree.add_child( + [copy.deepcopy(c1), copy.deepcopy(tmp_sub_tree_sel)]) + + stack.pop() + stack.append(tmp_tree) + else: + stack.append(child) + else: + stack.append(child) + else: + stack.append(child) + + for tree in stack: + sbtree.add_child([tree]) + self.bt = copy.deepcopy(bt) + + + def merge_adjacent_conditions(self): + # bt合并==================================================== + 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]) + skip_next = False + for i in range(len(parnode.children) - 1): + current_child = parnode.children[i] + next_child = parnode.children[i + 1] + + if isinstance(current_child, ControlBT) and isinstance(next_child, ControlBT) and current_child.type == '>' and next_child.type == '>': + + if not skip_next: + # 检查合并的条件,前面一个的条件包含了后面的条件,把包含部分提取出来 + set1 = current_child.children[0].content + set2 = next_child.children[0].content + if set1>=set2: + inter = set1 & set2 + dif = set1 - set2 + + + tmp_sub_seq = ControlBT(type='>') + c2 = Leaf(type='cond', content=dif) + a1 = Leaf(type='act', content=current_child.children[1].content) + tmp_sub_seq.add_child( + [copy.deepcopy(c2), copy.deepcopy(a1)]) + + tmp_sub_tree_sel = ControlBT(type='?') + a2 = Leaf(type='act', content=next_child.children[1].content) + tmp_sub_tree_sel.add_child( + [copy.deepcopy(tmp_sub_seq), copy.deepcopy(a2)]) + + tmp_tree = ControlBT(type='>') + c1 = Leaf(type='cond', content=inter) + tmp_tree.add_child( + [copy.deepcopy(c1), copy.deepcopy(tmp_sub_tree_sel)]) + + sbtree.add_child([tmp_tree]) + skip_next = True + + elif skip_next: + sbtree.add_child([current_child]) + else: + # 否咋要放进去 + sbtree.add_child([current_child]) + + # 还有最后一个孩子还没放进去 + sbtree.add_child([next_child]) + + self.bt = copy.deepcopy(bt) + # bt合并==================================================== + + + def print_solution(self): + print("========= BT ==========") # 树的bfs遍历 + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + print("Parrent:", parnode.type) + for child in parnode.children: + if isinstance(child, Leaf): + print("---- Leaf:", child.content) + elif isinstance(child, ControlBT): + print("---- ControlBT:", child.type) + nodes_ls.append(child) + print() + nodes_ls.pop(0) + print("========= BT ==========\n") + + # 返回所有能到达目标状态的初始状态 + def get_all_state_leafs(self): + state_leafs=[] + + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == "cond": + state_leafs.append(child.content) + elif isinstance(child, ControlBT): + nodes_ls.append(child) + nodes_ls.pop(0) + + return state_leafs + + + # 树的dfs + def dfs_ptml(self,parnode,is_root=False): + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == 'cond': + + if is_root and len(child.content) > 1: + # 把多个 cond 串起来 + self.ptml_string += "sequence{\n" + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + self.ptml_string += '}\n' + else: + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + + elif child.type == 'act': + if '(' not in child.content.name: + self.ptml_string += 'act ' + child.content.name + "()\n" + else: + self.ptml_string += 'act ' + child.content.name + "\n" + elif isinstance(child, ControlBT): + if child.type == '?': + self.ptml_string += "selector{\n" + self.dfs_ptml(parnode=child) + elif child.type == '>': + self.ptml_string += "sequence{\n" + self.dfs_ptml( parnode=child) + self.ptml_string += '}\n' + + + def get_ptml(self): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0],is_root=True) + self.ptml_string += '}\n' + return self.ptml_string + + def dfs_ptml_many_act(self, parnode, is_root=False): + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == 'cond': + + if is_root and len(child.content) > 1: + # 把多个 cond 串起来 + self.ptml_string += "sequence{\n" + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + self.ptml_string += '}\n' + else: + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + + elif child.type == 'act': + + child.content.name = re.sub(r'\d+', '', child.content.name) + + if '(' not in child.content.name: + self.ptml_string += 'act ' + child.content.name + "()\n" + else: + self.ptml_string += 'act ' + child.content.name + "\n" + elif isinstance(child, ControlBT): + if child.type == '?': + self.ptml_string += "selector{\n" + self.dfs_ptml_many_act(parnode=child) + elif child.type == '>': + self.ptml_string += "sequence{\n" + self.dfs_ptml_many_act(parnode=child) + self.ptml_string += '}\n' + + def get_ptml_many_act(self): + self.ptml_string = "selector{\n" + self.dfs_ptml_many_act(self.bt.children[0],is_root=True) + self.ptml_string += '}\n' + return self.ptml_string + + def save_ptml_file(self,file_name): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0]) + self.ptml_string += '}\n' + with open(f'./{file_name}.ptml', 'w') as file: + file.write(self.ptml_string) + return self.ptml_string diff --git a/BTExpansionCode/OptimalBTExpansionAlgorithm_single_goal.py b/BTExpansionCode/OptimalBTExpansionAlgorithm_single_goal.py new file mode 100644 index 0000000..ea300cc --- /dev/null +++ b/BTExpansionCode/OptimalBTExpansionAlgorithm_single_goal.py @@ -0,0 +1,630 @@ +import copy +import random +from BehaviorTree import Leaf,ControlBT + + + +class CondActPair: + def __init__(self, cond_leaf,act_leaf): + self.cond_leaf = cond_leaf + self.act_leaf = act_leaf + +#定义行动类,行动包括前提、增加和删除影响 +class Action: + def __init__(self,name='anonymous action',pre=set(),add=set(),del_set=set(),cost=1): + self.pre=copy.deepcopy(pre) + self.add=copy.deepcopy(add) + self.del_set=copy.deepcopy(del_set) + self.name=name + self.cost=cost + + def __str__(self): + return self.name + # 从状态随机生成一个行动 + def generate_from_state(self,state,num): + for i in range(0,num): + if i in state: + if random.random() >0.5: + self.pre.add(i) + if random.random() >0.5: + self.del_set.add(i) + continue + if random.random() > 0.5: + self.add.add(i) + continue + if random.random() >0.5: + self.del_set.add(i) + def print_action(self): + print (self.pre) + print(self.add) + print(self.del_set) + +#生成随机状态 +def generate_random_state(num): + result = set() + for i in range(0,num): + if random.random()>0.5: + result.add(i) + return result +#从状态和行动生成后继状态 +def state_transition(state,action): + if not action.pre <= state: + print ('error: action not applicable') + return state + new_state=(state | action.add) - action.del_set + return new_state + + +def conflict(c): + have_at = False + for str in c: + if 'At' in str: + if not have_at: + have_at = True + else: + return True + return False + + +#本文所提出的完备规划算法 +class OptBTExpAlgorithm: + def __init__(self,verbose=False): + self.bt = None + self.nodes=[] + self.traversed=[] + self.mounted=[] + self.conditions=[] + self.conditions_index=[] + self.verbose=verbose + self.goal=None + + def clear(self): + self.bt = None + self.nodes = [] + self.traversed = [] #存cond + self.expanded = [] #存整个 + self.conditions = [] + self.conditions_index = [] + + #运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt + # def run_algorithm(self,goal,actions,scene): + def run_algorithm(self, start, goal, actions): + # self.scene = scene + + self.goal = goal + + if self.verbose: + print("\n算法开始!") + + + self.bt = ControlBT(type='cond') + # 初始行为树只包含目标条件 + gc_node = Leaf(type='cond', content=goal, mincost=0) # 为了统一,都成对出现 + ga_node = Leaf(type='act', content=None, mincost=0) + subtree = ControlBT(type='?') + subtree.add_child([copy.deepcopy(gc_node)]) # 子树首先保留所扩展结 + self.bt.add_child([subtree]) + + # self.conditions.append(goal) + cond_anc_pair = CondActPair(cond_leaf=gc_node,act_leaf=ga_node) + self.nodes.append(copy.deepcopy(cond_anc_pair)) # the set of explored but unexpanded conditions + self.traversed = [goal] # the set of expanded conditions + + while len(self.nodes)!=0: + + # Find the condition for the shortest cost path + pair_node = None + min_cost = float ('inf') + index= -1 + for i,cond_anc_pair in enumerate(self.nodes): + + ########### 剪枝操作 + # cond_tmp = cond_anc_pair.cond_leaf.content + # valid = True + # for pn in self.expanded: # 剪枝操作 + # if isinstance(pn.act_leaf.content,Action): + # if pn.act_leaf.content.name==cond_anc_pair.act_leaf.content.name and cond_tmp <= pn.cond_leaf.content: + # valid = False + # break + # if not valid: + # continue + ########### 剪枝操作 + + if cond_anc_pair.cond_leaf.mincost < min_cost: + min_cost = cond_anc_pair.cond_leaf.mincost + pair_node = copy.deepcopy(cond_anc_pair) + index = i + + if self.verbose: + print("选择扩展条件结点:",pair_node.cond_leaf.content) + # Update self.nodes and self.traversed + self.nodes.pop(index) # the set of explored but unexpanded conditions. self.nodes.remove(pair_node) + c = pair_node.cond_leaf.content # 子树所扩展结点对应的条件(一个文字的set) + + # Mount the action node and extend BT. T = Eapand(T,c,A(c)) + if c!=goal: + if c!=set(): + + # 挂在上去的时候判断要不要挂载 + ########### 剪枝操作 发现行不通 + # valid = True + # for pn in self.expanded: # 剪枝操作 + # if isinstance(pn.act_leaf.content,Action): + # if pn.act_leaf.content.name==pair_node.act_leaf.content.name and c <= pn.cond_leaf.content: + # valid = False + # break + # if valid: + ########### 剪枝操作 + sequence_structure = ControlBT(type='>') + sequence_structure.add_child( + [copy.deepcopy(pair_node.cond_leaf), copy.deepcopy(pair_node.act_leaf)]) + subtree.add_child([copy.deepcopy(sequence_structure)]) # subtree 是回不断变化的,它的父亲是self.bt + self.expanded.append(copy.deepcopy(pair_node)) + # 增加实时条件判断,满足条件就不再扩展 + # if c <= self.scene.state["condition_set"]: + if c <= start: + + # 要不要继续扩展完全 + + # self.merge_adjacent_conditions_stack() + # self.merge_adjacent_conditions_stack_old() + # self.merge_adjacent_conditions() + return True + else: + subtree.add_child([copy.deepcopy(pair_node.act_leaf)]) + + + if self.verbose: + print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \ + % (cond_anc_pair.act_leaf.content.name, cond_anc_pair.cond_leaf.content, + cond_anc_pair.cond_leaf.mincost)) + + if self.verbose: + print("遍历所有动作, 寻找符合条件的动作") + # 遍历所有动作, 寻找符合条件的动作 + current_mincost = pair_node.cond_leaf.mincost # 当前的最短路径是多少 + + for i in range(0, len(actions)): + + if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set() : + if (c - actions[i].del_set) == c: + if self.verbose: + print("———— 满足条件可以扩展") + c_attr = (actions[i].pre | c) - actions[i].add + + # 这样剪枝存在错误性 + # if conflict(c_attr): + # continue + + # 剪枝操作,现在的条件是以前扩展过的条件的超集 + valid = True + for j in self.traversed: # 剪枝操作 + if j <= c_attr: + valid = False + if self.verbose: + print("———— --被剪枝") + break + + if valid: + c_attr_node = Leaf(type='cond', content=c_attr, mincost=current_mincost + actions[i].cost) + a_attr_node = Leaf(type='act', content=actions[i], mincost=current_mincost + actions[i].cost) + cond_anc_pair = CondActPair(cond_leaf=c_attr_node, act_leaf=a_attr_node) + self.nodes.append(copy.deepcopy(cond_anc_pair)) # condition node list + self.traversed.append(c_attr) # 重点 the set of expanded conditions + # 把符合条件的动作节点都放到列表里 + if self.verbose: + print("———— -- %s 符合条件放入列表,对应的c为 %s" % (actions[i].name,c_attr)) + + # self.merge_adjacent_conditions_stack() + # self.merge_adjacent_conditions_stack_old() + # self.merge_adjacent_conditions() + 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] + if isinstance(last_child, ControlBT) and last_child.type == '>': + set1 = last_child.children[0].content + set2 = child.children[0].content + inter = set1 & set2 + if inter!=set(): + c1 = set1-set2 + c2 = set2-set1 + inter_node = Leaf(type='cond', content=inter) + c1_node = Leaf(type='cond', content=c1) + c2_node = Leaf(type='cond', content=c2) + a1_node = copy.deepcopy(last_child.children[1]) + a2_node = copy.deepcopy(child.children[1]) + + + # set1<=set2,此时set2对应的动作永远不会执行 + if (c1==set() and isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action)): + continue + + # 再写一个特殊情况处理,三个结点动作last 遇到 两个结点 且动作相同 + if len(last_child.children)==3 and \ + isinstance(last_child.children[2], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[2].content, Action) and isinstance( child.children[1].content, Action) \ + and last_child.children[2].content.name == child.children[1].content.name \ + and c1==set() and c2!=set(): + last_child.children[1].add_child([copy.deepcopy(c2_node)]) + continue + elif len(last_child.children)==3: + stack.append(child) + continue + + # 判断动作相不相同 + if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action) \ + and last_child.children[1].content.name == child.children[1].content.name: + + if c2==set(): + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(a1_node)]) + else: + _sel = ControlBT(type='?') + _sel.add_child([copy.deepcopy(c1_node), copy.deepcopy(c2_node)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(_sel),copy.deepcopy(a1_node)]) + else: + if c1 == set(): + seq1 = copy.deepcopy(last_child.children[1]) + else: + seq1 = ControlBT(type='>') + seq1.add_child([copy.deepcopy(c1_node), copy.deepcopy(a1_node)]) + + if c2 == set(): + seq2 = copy.deepcopy(child.children[1]) + else: + seq2 = ControlBT(type='>') + seq2.add_child([copy.deepcopy(c2_node), copy.deepcopy(a2_node)]) + sel = ControlBT(type='?') + sel.add_child([copy.deepcopy(seq1), copy.deepcopy(seq2)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(sel)]) + + stack.pop() + stack.append(tmp_tree) + + else: + stack.append(child) + else: + stack.append(child) + else: + stack.append(child) + + for tree in stack: + sbtree.add_child([tree]) + self.bt = copy.deepcopy(bt) + + + + def merge_adjacent_conditions_stack_correct_2023(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] + if isinstance(last_child, ControlBT) and last_child.type == '>': + + 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: + 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_node = Leaf(type='cond', content=c1) + a1 = copy.deepcopy(last_child.children[1]) + seq1.add_child( + [copy.deepcopy(c1_node), copy.deepcopy(a1)]) + else: + seq1 = copy.deepcopy(last_child.children[1]) + + if c2!=set(): + seq2 = ControlBT(type='>') + c2_node = Leaf(type='cond', content=c2) + a2 = copy.deepcopy(child.children[1]) + seq2.add_child( + [copy.deepcopy(c2_node), copy.deepcopy(a2)]) + else: + seq2 = copy.deepcopy(child.children[1]) + + + # 如果动作还是一样的 + # if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + # and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action)\ + # and last_child.children[1].content.name == child.children[1].content.name: # a1=a2 + # # 第三次优化合并 + # # 将来这些地方都写成递归的 + # + # if c1!=set() and c2!=set(): + # _sel = ControlBT(type='?') + # c1_node = Leaf(type='cond', content=c1) + # c2_node = Leaf(type='cond', content=c2) + # _sel.add_child([copy.deepcopy(c1_node), copy.deepcopy(c2_node)]) + # tmp_tree = ControlBT(type='>') + # inter_c = Leaf(type='cond', content=inter) + # tmp_tree.add_child( + # [copy.deepcopy(inter_c), copy.deepcopy(_sel),copy.deepcopy(last_child.children[1])]) + # elif c1!=set() and c2==set(): + # tmp_tree = ControlBT(type='>') + # # inter_c = Leaf(type='cond', content=inter) + # # c1_node = Leaf(type='cond', content=c1) + # # a1 = copy.deepcopy(last_child.children[1]) + # tmp_tree.add_child( + # [copy.deepcopy(last_child.children[0]), copy.deepcopy(last_child.children[1])]) + # else: + # tmp_tree = ControlBT(type='>') + # inter_c = Leaf(type='cond', content=inter) + # a1 = copy.deepcopy(last_child.children[1]) + # tmp_tree.add_child( + # [copy.deepcopy(inter_c), copy.deepcopy(a1)]) + # # 下面这个是以前写错的 + # # sel.add_child([copy.deepcopy(c1), copy.deepcopy(c2),copy.deepcopy(last_child.children[1])]) + # else: + sel = ControlBT(type='?') + sel.add_child([copy.deepcopy(seq1), copy.deepcopy(seq2)]) + tmp_tree = ControlBT(type='>') + inter_c = Leaf(type='cond', content=inter) + tmp_tree.add_child( + [copy.deepcopy(inter_c), copy.deepcopy(sel)]) + + stack.pop() + stack.append(tmp_tree) + else: + stack.append(child) + else: + stack.append(child) + 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='?') + 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] + + if isinstance(last_child, ControlBT) and last_child.type == '>': + + set1 = last_child.children[0].content + set2 = child.children[0].content + + if set1>=set2: + inter = set1 & set2 + dif = set1 - set2 + + tmp_sub_seq = ControlBT(type='>') + c2 = Leaf(type='cond', content=dif) + a1 = copy.deepcopy(last_child.children[1]) + tmp_sub_seq.add_child( + [copy.deepcopy(c2), copy.deepcopy(a1)]) + + tmp_sub_tree_sel = ControlBT(type='?') + a2 = copy.deepcopy(child.children[1]) + tmp_sub_tree_sel.add_child( + [copy.deepcopy(tmp_sub_seq), copy.deepcopy(a2)]) + + tmp_tree = ControlBT(type='>') + c1 = Leaf(type='cond', content=inter) + tmp_tree.add_child( + [copy.deepcopy(c1), copy.deepcopy(tmp_sub_tree_sel)]) + + stack.pop() + stack.append(tmp_tree) + else: + stack.append(child) + else: + stack.append(child) + else: + stack.append(child) + + for tree in stack: + sbtree.add_child([tree]) + self.bt = copy.deepcopy(bt) + + + def merge_adjacent_conditions(self): + # bt合并==================================================== + 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]) + skip_next = False + for i in range(len(parnode.children) - 1): + current_child = parnode.children[i] + next_child = parnode.children[i + 1] + + if isinstance(current_child, ControlBT) and isinstance(next_child, ControlBT) and current_child.type == '>' and next_child.type == '>': + + if not skip_next: + # 检查合并的条件,前面一个的条件包含了后面的条件,把包含部分提取出来 + set1 = current_child.children[0].content + set2 = next_child.children[0].content + if set1>=set2: + inter = set1 & set2 + dif = set1 - set2 + + + tmp_sub_seq = ControlBT(type='>') + c2 = Leaf(type='cond', content=dif) + a1 = Leaf(type='act', content=current_child.children[1].content) + tmp_sub_seq.add_child( + [copy.deepcopy(c2), copy.deepcopy(a1)]) + + tmp_sub_tree_sel = ControlBT(type='?') + a2 = Leaf(type='act', content=next_child.children[1].content) + tmp_sub_tree_sel.add_child( + [copy.deepcopy(tmp_sub_seq), copy.deepcopy(a2)]) + + tmp_tree = ControlBT(type='>') + c1 = Leaf(type='cond', content=inter) + tmp_tree.add_child( + [copy.deepcopy(c1), copy.deepcopy(tmp_sub_tree_sel)]) + + sbtree.add_child([tmp_tree]) + skip_next = True + + elif skip_next: + sbtree.add_child([current_child]) + else: + # 否咋要放进去 + sbtree.add_child([current_child]) + + # 还有最后一个孩子还没放进去 + sbtree.add_child([next_child]) + + self.bt = copy.deepcopy(bt) + # bt合并==================================================== + + + def print_solution(self): + print("========= BT ==========") # 树的bfs遍历 + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + print("Parrent:", parnode.type) + for child in parnode.children: + if isinstance(child, Leaf): + print("---- Leaf:", child.content) + elif isinstance(child, ControlBT): + print("---- ControlBT:", child.type) + nodes_ls.append(child) + print() + nodes_ls.pop(0) + print("========= BT ==========\n") + + # 返回所有能到达目标状态的初始状态 + def get_all_state_leafs(self): + state_leafs=[] + + nodes_ls = [] + nodes_ls.append(self.bt) + while len(nodes_ls) != 0: + parnode = nodes_ls[0] + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == "cond": + state_leafs.append(child.content) + elif isinstance(child, ControlBT): + nodes_ls.append(child) + nodes_ls.pop(0) + + return state_leafs + + + # 树的dfs + def dfs_ptml(self,parnode,is_root=False): + for child in parnode.children: + if isinstance(child, Leaf): + if child.type == 'cond': + + if is_root and len(child.content) > 1: + # 把多个 cond 串起来 + self.ptml_string += "sequence{\n" + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + self.ptml_string += '}\n' + else: + self.ptml_string += "cond " + c_set_str = '\n cond '.join(map(str, child.content)) + "\n" + self.ptml_string += c_set_str + + elif child.type == 'act': + if '(' not in child.content.name: + self.ptml_string += 'act ' + child.content.name + "()\n" + else: + self.ptml_string += 'act ' + child.content.name + "\n" + elif isinstance(child, ControlBT): + if child.type == '?': + self.ptml_string += "selector{\n" + self.dfs_ptml(parnode=child) + elif child.type == '>': + self.ptml_string += "sequence{\n" + self.dfs_ptml( parnode=child) + self.ptml_string += '}\n' + + + def get_ptml(self): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0],is_root=True) + self.ptml_string += '}\n' + return self.ptml_string + + + def save_ptml_file(self,file_name): + self.ptml_string = "selector{\n" + self.dfs_ptml(self.bt.children[0]) + self.ptml_string += '}\n' + with open(f'./{file_name}.ptml', 'w') as file: + file.write(self.ptml_string) + return self.ptml_string diff --git a/BTExpansionCode/README.assets/image-20231103191141047.png b/BTExpansionCode/README.assets/image-20231103191141047.png new file mode 100644 index 0000000..6453647 Binary files /dev/null and b/BTExpansionCode/README.assets/image-20231103191141047.png differ diff --git a/BTExpansionCode/README.md b/BTExpansionCode/README.md new file mode 100644 index 0000000..15369c5 --- /dev/null +++ b/BTExpansionCode/README.md @@ -0,0 +1,72 @@ + + +## 代码说明 + +### 1. `BehaviorTree.py` 实现行为树叶子结点和非叶子结点的定义 + +- **Leaf **:表示叶节点,可以是动作(`act`)或条件(`cond`)。 +- **ControlBT**:代表可能包含控制节点的行为树。它们可以是选择器(`?`)、序列(`>`)、动作节点(`act`)或条件节点(`cond`)。 +- 上述两个类都包含 `tick` 方法。 + +### 2. `BTExpansionAlgorithm.py` 实现最优行为树扩展算法 + +![image-20231103191141047](README.assets/image-20231103191141047.png) + +使用方法 + +``` + algo = BTalgorithm(verbose=True) + algo.clear() + algo.run_algorithm(start, goal, actions) # 使用算法得到行为树在 algo.bt + algo.print_solution() # 打印行为树 + val, obj = algo.bt.tick(state) # 执行行为树 +``` + +### 3. **`tools.py`** 实现打印数据、行为树测试等模块 + +使用方法 + +```python +print_action_data_table(goal,start,actions) # 打印所有变量 + +# 行为树鲁棒性测试,随机生成规划问题 +# 设置生成规划问题集的超参数:文字数、解深度、迭代次数 +seed=1 +literals_num=10 +depth = 10 +iters= 10 +BTTest(seed=seed,literals_num=literals_num,depth=depth,iters=iters) +``` + +### 4. `Example.py` 中设计规划案例 goals, start,actions + +```python +def MoveBtoB (): + actions=[] + a = Action(name="Move(b,ab)") + a.pre={'Free(ab)','WayClear'} + a.add={'At(b,ab)'} + a.del_set= {'Free(ab)','At(b,pb)'} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,ab)") + a.pre={'Free(ab)'} + a.add={'Free(ab)','WayClear'} + a.del_set={'Free(ab)','At(s,ps)'} + a.cost = 1 + actions.append(a) + + a=Action(name="Move(s,as)") + a.pre={'Free(as)'} + a.add={'At(s,ps)','WayClear'} + a.del_set={'Free(as)','At(s,ps)'} + a.cost = 1 + actions.append(a) + + start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} + goal= {'At(b,ab)'} + return goal,start,actions +``` + +### 5. `main.py` 为主函数,实现 规划生成、行为树生成、行为树执行、行为树测试 的整个流程 diff --git a/BTExpansionCode/SoftdrinkCost.ptml b/BTExpansionCode/SoftdrinkCost.ptml new file mode 100644 index 0000000..aed010a --- /dev/null +++ b/BTExpansionCode/SoftdrinkCost.ptml @@ -0,0 +1,43 @@ +selector{ +cond On(Softdrink,WaterTable) +sequence{ +cond At(Robot,WaterTable) + cond Holding(Softdrink) +act PutDown(Softdrink,WaterTable) +} +sequence{ +cond At(Robot,WaterTable) + cond At(Robot,Softdrink) +selector{ +sequence{ +cond Holding(Nothing) +act PickUp(Softdrink) +} +act PutDown(Anything,Anywhere) +} +} +sequence{ +cond Holding(Softdrink) +act MoveTo(WaterTable) +} +sequence{ +cond At(Robot,Softdrink) +selector{ +sequence{ +cond Holding(Nothing) +act PickUp(Softdrink) +} +act PutDown(Anything,Anywhere) +} +} +sequence{ +cond Exist(Softdrink) +selector{ +sequence{ +cond Holding(Nothing) +act MoveTo(Softdrink) +} +act MoveTo(Softdrink) +} +} +} diff --git a/BTExpansionCode/goal_states_unique.txt b/BTExpansionCode/goal_states_unique.txt new file mode 100644 index 0000000..bacfa3e --- /dev/null +++ b/BTExpansionCode/goal_states_unique.txt @@ -0,0 +1,165 @@ +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} diff --git a/BTExpansionCode/main.py b/BTExpansionCode/main.py new file mode 100644 index 0000000..830ffb2 --- /dev/null +++ b/BTExpansionCode/main.py @@ -0,0 +1,165 @@ +import random +import numpy as np +import copy +import time +from BehaviorTree import Leaf,ControlBT # 行为结点类:叶子结点和非叶子节点 +from OptimalBTExpansionAlgorithm_single_goal import Action,OptBTExpAlgorithm # 调用最优行为树扩展算法 +from BTExpansionAlgorithm import BTExpAlgorithm +from OptimalBTExpansionAlgorithm_single_goal import generate_random_state,state_transition +from tools import print_action_data_table,BTTest +from Examples import MoveBtoB_num,MoveBtoB,Cond2BelongsToCond3 # 导入三个例子 +from Examples import * +# from utils.bt.draw import render_dot_tree +# from utils.bt.load import load_bt_from_ptml,find_node_by_name,print_tree_from_root +import os +output_path = os.path.join(os.path.dirname(__file__), "outputs") + +if __name__ == '__main__' : + + # todo: Example Cafe + # todo: Define goal, start, actions + # actions=[] + # a = Action(name="Move(b,ab)") + # a.pre={'Free(ab)','WayClear'} + # a.add={'At(b,ab)'} #{3} + # a.del_set= {'Free(ab)','At(b,pb)'} + # a.cost = 1 + # actions.append(a) + # …………………… + # start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} + # goal= {'At(b,ab)'} + + # Put(P,O) pre={'Holding(O)','At(Robot,P)'}, add={'At(P,O)','NotHolding'}, del_set={'Holding(O)'} + # Grasp(O) pre={'NotHolding','At(Robot,O)'}, add={'Holding(O)'}, del_set={'NotHolding'} + # MoveTo(P) pre={'Available(P)'}, add={'At(Robot,P)'}, del_set={'At(……)'} + + # actions=[ + # Action(name='PutDown(Table,Coffee)', pre={'Holding(Coffee)','At(Robot,Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1), + # Action(name='PutDown(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Robot,Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1), + # + # Action(name='PickUp(Coffee)', pre={'NotHolding','At(Robot,Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=2), + # + # Action(name='MoveTo(Table)', pre={'Available(Table)'}, add={'At(Robot,Table)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,CoffeeMachine)'}, cost=5), + # Action(name='MoveTo(Coffee)', pre={'Available(Coffee)'}, add={'At(Robot,Coffee)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Table)','At(Robot,CoffeeMachine)'}, cost=6), + # Action(name='MoveTo(CoffeeMachine)', pre={'Available(CoffeeMachine)'}, add={'At(Robot,CoffeeMachine)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,Table)'}, cost=7), + # + # Action(name='OpCoffeeMachine', pre={'At(Robot,CoffeeMachine)','NotHolding'}, add={'Available(Coffee)','At(Robot,Coffee)'}, del_set=set(), cost=10), + # ] + # + # start = {'At(Robot,Bar)','Holding(VacuumCup)','Available(Table)','Available(CoffeeMachine)','Available(FrontDesk)'} + # goal = {'At(Table,Coffee)'} + # + ptml_file_name = "SoftdrinkCost" #MakeCoffee + + + # 从已定义好的例子中直接导入 + goal, start, actions = Cond2BelongsToCond3() # Examples里的例子: MoveBtoB_num,MoveBtoB,Cond2BelongsToCond3,SoftdrinkCost + # goal, start, actions = Test() + # goal, start, actions = MakeCoffeeCost() + # print_action_data_table(goal,start,actions) # 打印所有变量 + + ''' + # todo: 运行算法得到行为树为 algo.bt + algo = OptBTExpAlgorithm(verbose=True) + algo.clear() + algo.run_algorithm(start, goal, actions) + # algo.print_solution() # 打印行为树 + # todo: 输出 MakeCoffee.ptml + print("=========== PTML ============") + ptml_string = algo.save_ptml_file(ptml_file_name) + print(ptml_string) + print("========= End PTML ==========\n") + + + + # todo: 执行行为树查看结果 + print("=========== Run BT ============") + state = start + steps = 0 + val, obj = algo.bt.tick(state) + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + print (obj.name) + val, obj = algo.bt.tick(state) + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if not goal <= state: + print ("wrong solution",steps) + else: + print ("right solution",steps) + #algo.bt.print_nodes() + print ("The number of nodes in BT:",algo.bt.count_size()-1) + algo.clear() + print("============ End Run BT ===========\n") + ''' + + ''' + # 新增测试 cost + algo = OptBTExpAlgorithm(verbose=False) + algo.clear() + algo.run_algorithm(start, goal, actions) + # algo.print_solution() # 打印行为树 + print("=========== Run OptBT ============") + state = start + steps = 0 + cost_tatol = 0 + val, obj,cost,ticks = algo.bt.cost_tick(state,0,0) + cost_tatol+=cost + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + print (obj.name) + val, obj,cost,ticks = algo.bt.cost_tick(state,0,ticks) + cost_tatol += cost + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if not goal <= state: + print ("wrong solution steps",steps) + else: + print ("right solution steps",steps) + algo.clear() + print("OptBT cost:", cost_tatol) + print("OptBT ticks:", ticks) + print("============ End Run OptBT ===========\n") + + + algo2 = BTExpAlgorithm(verbose=False) + algo2.clear() + algo2.run_algorithm(start, goal, actions) + # algo2.print_solution() # 打印行为树 + print("=========== Run XiaoCaiBT ============") + state = start + steps = 0 + cost_tatol2 = 0 + val, obj,cost,ticks = algo2.bt.cost_tick(state,0,0) + cost_tatol2+=cost + while val != 'success' and val != 'failure': + state = state_transition(state, obj) + print (obj.name) + val, obj,cost,ticks = algo2.bt.cost_tick(state,0,ticks) + cost_tatol2 += cost + if (val == 'failure'): + print("bt fails at step", steps) + steps += 1 + if not goal <= state: + print ("wrong solution steps",steps) + else: + print ("right solution steps",steps) + algo2.clear() + print("XiaoCaiBT cost:", cost_tatol2) + print("XiaoCaiBT ticks:", ticks) + print("============ End Run XiaoCaiBT ===========\n") + ''' + + + # todo: 行为树鲁棒性测试,随机生成规划问题 + # # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 + seed=1 + literals_num= 10 + depth = 50 + iters= 10 + BTTest(bt_algo_opt=True,seed=seed,literals_num=literals_num,depth=depth,iters=iters) + print("\n") + # 对比 + BTTest(bt_algo_opt=False,seed=seed,literals_num=literals_num,depth=depth,iters=iters) diff --git a/BTExpansionCode/others/FreeHands.py b/BTExpansionCode/others/FreeHands.py new file mode 100644 index 0000000..f3e6ca7 --- /dev/null +++ b/BTExpansionCode/others/FreeHands.py @@ -0,0 +1,35 @@ +import py_trees as ptree +from typing import Any +from robowaiter.behavior_lib._base.Act import Act +from robowaiter.behavior_lib._base.Behavior import Status + +class FreeHands(Act): + can_be_expanded = True + num_args = 0 + valid_args = set() + + def __init__(self, *args): + super().__init__(*args) + + + @classmethod + def get_info(cls): + info = {} + # info["pre"]= set() + info["pre"] ={f'Holding(Nothing)'} + info['add'] = {f'Holding(Nothing)'} + info['del_set'] = {f'Holding({obj})' for obj in cls.all_object} + info['cost'] = 0 + return info + + def _update(self) -> ptree.common.Status: + + + if self.scene.show_ui: + self.scene.get_obstacle_point(self.scene.db, self.status, map_ratio=self.scene.map_ratio,update_info_count=1) + + self.scene.state["condition_set"] |= (self.info["add"]) + self.scene.state["condition_set"] -= self.info["del_set"] + + + return Status.RUNNING \ No newline at end of file diff --git a/BTExpansionCode/test.py b/BTExpansionCode/test.py new file mode 100644 index 0000000..d851589 --- /dev/null +++ b/BTExpansionCode/test.py @@ -0,0 +1,38 @@ + +# goal = "AND[NOT[On(Yogurt,Table1)],[(On(Coffee,Table1))OR(On(ADMilk,Table1))]]" +from sympy.parsing.sympy_parser import parse_expr +from sympy import symbols, Not, Or, And, to_dnf +# 定义逻辑变量 +# YogurtOnTable1 = symbols('On(Yogurt,Table1)') +# CoffeeOnTable1 = symbols('On(Coffee,Table1)') +# ADMilkOnTable1 = symbols('On(ADMilk,Table1)') + +On_Yogurt_Table1, On_Coffee_Table1, On_ADMilk_Table1 = symbols('On_Yogurt_Table1 On_Coffee_Table1 On_ADMilk_Table1') +# YogurtOnTable1, CoffeeOnTable1, ADMilkOnTable1 = symbols('YogurtOnTable1 CoffeeOnTable1 ADMilkOnTable1') +# YogurtOnTable1 = symbols('On[Yogurt,Table1]') +# CoffeeOnTable1 = symbols('On(Coffee,Table1)') +# ADMilkOnTable1 = symbols('On(ADMilk,Table1)') + +# 构造原始表达式 +# expression = (And(Not(YogurtOnTable1), Or(CoffeeOnTable1, ADMilkOnTable1))) +# 定义字符串形式的逻辑表达式 +# goal = "Not(On[Yogurt,Table1]) & (On]Coffee,Table1) | On(ADMilk,Table1))" +# expr_str = "Not(YogurtOnTable1) & (CoffeeOnTable1 | ADMilkOnTable1)" + +# expr_str = "Not(On(Yogurt,Table1)) & (On(Coffee,Table1) | On(ADMilk,Table1))" +expr_str = "Not(On_Yogurt_Table1) & (On_Coffee_Table1 | On_ADMilk_Table1 & At_Robot_Bar)" +# expr_str = "Not(YogurtOnTable1) & (CoffeeOnTable1 | ADMilkOnTable1 & Not(YogurtOnTable1) )" + +# 将字符串解析为 SymPy 表达式 +expr = parse_expr(expr_str, local_dict={ + 'On(Yogurt,Table1)': On_Yogurt_Table1, + 'On(Coffee,Table1)': On_Coffee_Table1, + 'On(ADMilk,Table1)': On_ADMilk_Table1 +}) + + +dnf_expr = to_dnf(expr, simplify=True) +print(dnf_expr) +# 转换为析取范式 +# dnf_expression = to_dnf(expression, simplify=True) +# print(dnf_expression) diff --git a/BTExpansionCode/test2.py b/BTExpansionCode/test2.py new file mode 100644 index 0000000..c6073c8 --- /dev/null +++ b/BTExpansionCode/test2.py @@ -0,0 +1,32 @@ +from pyparsing import infixNotation, opAssoc, Keyword, Word, alphas, ParserElement + +# 启用忽略大小写的关键字 +ParserElement.enablePackrat() + +# 定义基础元素 +variable = Word(alphas) +predicate = variable + '(' + variable + ',' + variable + ')' + +# 定义逻辑运算符 +and_ = Keyword("And") +or_ = Keyword("Or") +not_ = Keyword("Not") + +# 由于你的表达式使用 "&" 和 "|" +and_sym = Word("&", exact=1) +or_sym = Word("|", exact=1) + +# 定义逻辑表达式的语法 +expr = infixNotation(predicate, + [ + (not_, 1, opAssoc.RIGHT), + (and_sym, 2, opAssoc.LEFT, and_), + (or_sym, 2, opAssoc.LEFT, or_), + ]) + +# 解析示例表达式 +goal = "Not(On(Yogurt,Table1)) & (On(Coffee,Table1) | On(ADMilk,Table1)) & At(Robot,Bar)" +parsed_expr = expr.parseString(goal) + +# 打印解析结果 +print(parsed_expr.asList()) diff --git a/BTExpansionCode/test3.py b/BTExpansionCode/test3.py new file mode 100644 index 0000000..d1a68b7 --- /dev/null +++ b/BTExpansionCode/test3.py @@ -0,0 +1,40 @@ + + +from sympy.parsing.sympy_parser import parse_expr +from sympy import symbols, Not, Or, And, to_dnf + + +goal = "(On_Coffee_Bar | On_Yogur_Bar) & At_Robot_Bar" +# goal = "On(Coffee,WaterTable),On(Coffee,BrightTable6)" + +goal_dnf = str(to_dnf(goal, simplify=True)) +# print(goal_dnf) +goal_set=[] +if '|' in goal or '&' in goal or 'Not' in goal: + goal_ls = goal_dnf.split("|") + for g in goal_ls: + g_set = set() + g = g.replace(" ", "").replace("(", "").replace(")", "") + g = g.split("&") + for literal in g: + if '_' in literal: + first_part, rest = literal.split('_', 1) + literal = first_part + '(' + rest + # 添加 ')' 到末尾 + literal += ')' + # 替换剩余的 '_' 为 ',' + literal = literal.replace('_', ',') + g_set.add(literal) + goal_set.append(g_set) +else: + g_set = set() + w = goal.split(")") + g_set.add(w[0] + ")") + if len(w) > 1: + for x in w[1:]: + if x != "": + g_set.add(x[1:] + ")") + goal_set.append(g_set) + +# goal_set = [set(["On(Coffee,Bar)", "At(Robot,Bar)"]), set(["On(Yogurt,Bar)", "At(Robot,Bar)"])] +print(goal_set) \ No newline at end of file diff --git a/BTExpansionCode/tools.py b/BTExpansionCode/tools.py new file mode 100644 index 0000000..d974bb8 --- /dev/null +++ b/BTExpansionCode/tools.py @@ -0,0 +1,370 @@ +import copy + +from tabulate import tabulate +import numpy as np +import random + +from OptimalBTExpansionAlgorithm_single_goal import generate_random_state,state_transition +from OptimalBTExpansionAlgorithm_single_goal import Action,OptBTExpAlgorithm +from BTExpansionAlgorithm import BTExpAlgorithm # 调用最优行为树扩展算法 + + +import time + + +def print_action_data_table(goal,start,actions): + data = [] + for a in actions: + data.append([a.name ,a.pre ,a.add ,a.del_set ,a.cost]) + data.append(["Goal" ,goal ," " ,"Start" ,start]) + print(tabulate(data, headers=["Name", "Pre", "Add" ,"Del" ,"Cost"], tablefmt="fancy_grid")) # grid plain simple github fancy_grid + + +#行为树测试代码 +def BTTest_old(bt_algo_opt=True,seed=1,literals_num=10,depth=10,iters=10,total_count=1000): + + if bt_algo_opt: + print("============= OptBT Test ==============") + else: + print("============= XiaoCai BT Test ==============") + random.seed(seed) + # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 + literals_num=literals_num + depth = depth + iters= iters + total_tree_size = [] + total_action_num = [] + total_state_num = [] + total_steps_num=[] + total_cost=[] + total_tick=[] + #fail_count=0 + #danger_count=0 + success_count =0 + failure_count = 0 + planning_time_total = 0.0 + + error = False + + # 实验1000次 + for count in range (total_count): + + action_num = 1 + + # 生成一个规划问题,包括随机的状态和行动,以及目标状态 + states = [] + actions = [] + start = generate_random_state(literals_num) + state = copy.deepcopy(start) + states.append(state) + #print (state) + for i in range (0,depth): + a = Action() + a.generate_from_state(state,literals_num) + a.cost = random.randint(1, 100) + if not a in actions: + a.name = "a"+str(action_num) + action_num+=1 + actions.append(a) + state = state_transition(state,a) + if state in states: + pass + else: + states.append(state) + #print(state) + + goal = states[-1] + state = copy.deepcopy(start) + for i in range (0,iters): + a = Action() + a.generate_from_state(state,literals_num) + if not a in actions: + a.name = "a"+str(action_num) + action_num+=1 + actions.append(a) + state = state_transition(state,a) + if state in states: + pass + else: + states.append(state) + state = random.sample(states,1)[0] + + # 选择测试本文算法btalgorithm,或对比算法weakalgorithm + + if bt_algo_opt: + # if count==874: + # algo = OptBTExpAlgorithm(verbose=False) + # else: + algo = OptBTExpAlgorithm(verbose=False) + else: + algo = BTExpAlgorithm(verbose=False) + algo.clear() + + #algo = Weakalgorithm() + start_time = time.time() + # if count == 352 : #874: + # print_action_data_table(goal, start, list(actions)) + # print_action_data_table(goal, start, list(actions)) + if algo.run_algorithm(start, goal, actions):#运行算法,规划后行为树为algo.bt + total_tree_size.append( algo.bt.count_size()-1) + # if count==352: + # algo.print_solution() + # algo.print_solution() # 打印行为树 + else: + print ("error") + end_time = time.time() + planning_time_total += (end_time-start_time) + + #开始从初始状态运行行为树,测试 + state=start + steps=0 + current_cost = 0 + current_tick_time=0 + val, obj, cost, tick_time = algo.bt.cost_tick(state,0,0)#tick行为树,obj为所运行的行动 + + current_tick_time+=tick_time + current_cost += cost + while val !='success' and val !='failure':#运行直到行为树成功或失败 + state = state_transition(state,obj) + val, obj,cost, tick_time = algo.bt.cost_tick(state,0,0) + current_cost += cost + current_tick_time += tick_time + if(val == 'failure'): + print("bt fails at step",steps) + error = True + break + steps+=1 + if(steps>=500):#至多运行500步 + break + if not goal <= state:#错误解,目标条件不在执行后状态满足 + #print ("wrong solution",steps) + failure_count+=1 + error = True + else:#正确解,满足目标条件 + #print ("right solution",steps) + success_count+=1 + total_steps_num.append(steps) + if error: + print_action_data_table(goal, start, list(actions)) + algo.print_solution() + break + + + algo.clear() + total_action_num.append(len(actions)) + total_state_num.append(len(states)) + total_cost.append(current_cost) + total_tick.append(current_tick_time) + + print("success:",success_count,"failure:",failure_count)#算法成功和失败次数 + print("Total Tree Size: mean=",np.mean(total_tree_size), "std=",np.std(total_tree_size, ddof=1))#1000次测试树大小 + print("Total Steps Num: mean=",np.mean(total_steps_num),"std=",np.std(total_steps_num,ddof=1)) + print("Average Number of States:",np.mean(total_state_num))#1000次问题的平均状态数 + print("Average Number of Actions",np.mean(total_action_num))#1000次问题的平均行动数 + print("Planning Time Total:",planning_time_total,planning_time_total/1000.0) + print("Average Number of Ticks", np.mean(total_tick),"std=",np.std(total_tick,ddof=1)) + print("Average Cost of Execution:", np.mean(total_cost),"std=",np.std(total_cost,ddof=1)) + # print(total_steps_num) 第21个 + if bt_algo_opt: + print("============= End OptBT Test ==============") + else: + print("============= End XiaoCai BT Test ==============") + + # xiao cai + # success: 1000 failure: 0 + # Total Tree Size: mean= 35.303 std= 29.71336526001515 + # Total Steps Num: mean= 1.898 std= 0.970844240101644 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 0.6280641555786133 0.0006280641555786133 + + # our start + # success: 1000 failure: 0 + # Total Tree Size: mean= 17.945 std= 12.841997192488865 + # Total Steps Num: mean= 1.785 std= 0.8120556843187752 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 1.4748523235321045 0.0014748523235321046 + + # our + # success: 1000 failure: 0 + # Total Tree Size: mean= 48.764 std= 20.503626574406358 + # Total Steps Num: mean= 1.785 std= 0.8120556843187752 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 3.3271877765655518 0.0033271877765655516 + + + +def BTTest(bt_algo_opt=True,seed=1,literals_num=10,depth=10,iters=10,total_count=1000): + + if bt_algo_opt: + print("============= OptBT Test ==============") + else: + print("============= XiaoCai BT Test ==============") + random.seed(seed) + # 设置生成规划问题集的超参数:文字数、解深度、迭代次数 + literals_num=literals_num + depth = depth + iters= iters + total_tree_size = [] + total_action_num = [] + total_state_num = [] + total_steps_num=[] + total_cost=[] + total_tick=[] + #fail_count=0 + #danger_count=0 + success_count =0 + failure_count = 0 + planning_time_total = 0.0 + + error = False + + # 实验1000次 + for count in range (total_count): + + action_num = 1 + + # 生成一个规划问题,包括随机的状态和行动,以及目标状态 + states = [] + actions = [] + start = generate_random_state(literals_num) + state = copy.deepcopy(start) + states.append(state) + #print (state) + for i in range (0,depth): + a = Action() + a.generate_from_state(state,literals_num) + a.cost = random.randint(1, 100) + if not a in actions: + a.name = "a"+str(action_num) + action_num+=1 + actions.append(a) + state = state_transition(state,a) + if state in states: + pass + else: + states.append(state) + #print(state) + + goal = states[-1] + state = copy.deepcopy(start) + for i in range (0,iters): + a = Action() + a.generate_from_state(state,literals_num) + if not a in actions: + a.name = "a"+str(action_num) + action_num+=1 + actions.append(a) + state = state_transition(state,a) + if state in states: + pass + else: + states.append(state) + state = random.sample(states,1)[0] + + # 选择测试本文算法btalgorithm,或对比算法weakalgorithm + + if bt_algo_opt: + # if count==874: + # algo = OptBTExpAlgorithm(verbose=False) + # else: + algo = OptBTExpAlgorithm(verbose=False) + else: + algo = BTExpAlgorithm(verbose=False) + algo.clear() + + #algo = Weakalgorithm() + start_time = time.time() + # if count == 352 : #874: + # print_action_data_table(goal, start, list(actions)) + # print_action_data_table(goal, start, list(actions)) + if algo.run_algorithm(start, goal, actions):#运行算法,规划后行为树为algo.bt + total_tree_size.append( algo.bt.count_size()-1) + # if count==352: + # algo.print_solution() + # algo.print_solution() # 打印行为树 + else: + print ("error") + end_time = time.time() + planning_time_total += (end_time-start_time) + + #开始从初始状态运行行为树,测试 + state=start + steps=0 + current_cost = 0 + current_tick_time=0 + val, obj, cost, tick_time = algo.bt.cost_tick(state,0,0)#tick行为树,obj为所运行的行动 + + current_tick_time+=tick_time + current_cost += cost + while val !='success' and val !='failure':#运行直到行为树成功或失败 + state = state_transition(state,obj) + val, obj,cost, tick_time = algo.bt.cost_tick(state,0,0) + current_cost += cost + current_tick_time += tick_time + if(val == 'failure'): + print("bt fails at step",steps) + error = True + break + steps+=1 + if(steps>=500):#至多运行500步 + break + if not goal <= state:#错误解,目标条件不在执行后状态满足 + #print ("wrong solution",steps) + failure_count+=1 + error = True + else:#正确解,满足目标条件 + #print ("right solution",steps) + success_count+=1 + total_steps_num.append(steps) + if error: + print_action_data_table(goal, start, list(actions)) + algo.print_solution() + break + + + algo.clear() + total_action_num.append(len(actions)) + total_state_num.append(len(states)) + total_cost.append(current_cost) + total_tick.append(current_tick_time) + + print("success:",success_count,"failure:",failure_count)#算法成功和失败次数 + print("Total Tree Size: mean=",np.mean(total_tree_size), "std=",np.std(total_tree_size, ddof=1))#1000次测试树大小 + print("Total Steps Num: mean=",np.mean(total_steps_num),"std=",np.std(total_steps_num,ddof=1)) + print("Average Number of States:",np.mean(total_state_num))#1000次问题的平均状态数 + print("Average Number of Actions",np.mean(total_action_num))#1000次问题的平均行动数 + print("Planning Time Total:",planning_time_total,planning_time_total/1000.0) + print("Average Number of Ticks", np.mean(total_tick),"std=",np.std(total_tick,ddof=1)) + print("Average Cost of Execution:", np.mean(total_cost),"std=",np.std(total_cost,ddof=1)) + # print(total_steps_num) 第21个 + if bt_algo_opt: + print("============= End OptBT Test ==============") + else: + print("============= End XiaoCai BT Test ==============") + + # xiao cai + # success: 1000 failure: 0 + # Total Tree Size: mean= 35.303 std= 29.71336526001515 + # Total Steps Num: mean= 1.898 std= 0.970844240101644 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 0.6280641555786133 0.0006280641555786133 + + # our start + # success: 1000 failure: 0 + # Total Tree Size: mean= 17.945 std= 12.841997192488865 + # Total Steps Num: mean= 1.785 std= 0.8120556843187752 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 1.4748523235321045 0.0014748523235321046 + + # our + # success: 1000 failure: 0 + # Total Tree Size: mean= 48.764 std= 20.503626574406358 + # Total Steps Num: mean= 1.785 std= 0.8120556843187752 + # Average number of states: 20.678 + # Average number of actions 20.0 + # Planning Time Total: 3.3271877765655518 0.0033271877765655516 \ No newline at end of file diff --git a/BTExpansionCode/utils/__init__.py b/BTExpansionCode/utils/__init__.py new file mode 100644 index 0000000..7cffb5e --- /dev/null +++ b/BTExpansionCode/utils/__init__.py @@ -0,0 +1,5 @@ +import os + +from utils import * +from utils import * +from utils.basic import get_root_path \ No newline at end of file diff --git a/BTExpansionCode/utils/basic.py b/BTExpansionCode/utils/basic.py new file mode 100644 index 0000000..2d7c60d --- /dev/null +++ b/BTExpansionCode/utils/basic.py @@ -0,0 +1,6 @@ +import os + +def get_root_path(): + return os.path.abspath( + os.path.join(__file__, "../../..") + ) diff --git a/BTExpansionCode/utils/bt/__init__.py b/BTExpansionCode/utils/bt/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/utils/bt/draw.py b/BTExpansionCode/utils/bt/draw.py new file mode 100644 index 0000000..cfce6c3 --- /dev/null +++ b/BTExpansionCode/utils/bt/draw.py @@ -0,0 +1,338 @@ + +############################################################################## +# Imports +############################################################################## + +import os +import typing +import uuid + +import pydot +from py_trees import behaviour +from py_trees import blackboard +from py_trees import common +from py_trees import composites +from py_trees import decorators +from py_trees import utilities + +COMPOSITE_NODE_SIZE = 0.01 + + +def dot_tree( + root: behaviour.Behaviour, + visibility_level: common.VisibilityLevel = common.VisibilityLevel.DETAIL, + collapse_decorators: bool = False, + with_blackboard_variables: bool = False, + with_qualified_names: bool = False): + """ + Paint your tree on a pydot graph. + + .. seealso:: :py:func:`render_dot_tree`. + + Args: + root (:class:`~py_trees.behaviour.Behaviour`): the root of a tree, or subtree + visibility_level (optional): collapse subtrees at or under this level + collapse_decorators (optional): only show the decorator (not the child), defaults to False + with_blackboard_variables (optional): add nodes for the blackboard variables + with_qualified_names (optional): print the class information for each behaviour in each node, defaults to False + + Returns: + pydot.Dot: graph + + Examples: + + .. code-block:: python + + # convert the pydot graph to a string object + print("{}".format(py_trees.display.dot_graph(root).to_string())) + """ + + def get_node_attributes(node): + blackbox_font_colours = {common.BlackBoxLevel.DETAIL: "dodgerblue", + common.BlackBoxLevel.COMPONENT: "lawngreen", + common.BlackBoxLevel.BIG_PICTURE: "white" + } + if node.type =="Selector": + attributes = ('box', '#B0FFFF', 'black') # octagon + elif node.type =="Sequence": + attributes = ('box', '#FF8080', 'black') + elif isinstance(node, composites.Parallel): + attributes = ('parallelogram', 'lightgold', 'black') + elif isinstance(node, decorators.Decorator): + attributes = ('ellipse', 'ghostwhite', 'black') + elif node.type =="Act": + attributes = ('box', 'lightgreen', 'black') + else: + attributes = ('ellipse', '#FFFF80', 'black') + + try: + if node.blackbox_level != common.BlackBoxLevel.NOT_A_BLACKBOX: + attributes = (attributes[0], 'gray20', blackbox_font_colours[node.blackbox_level]) + except AttributeError: + # it's a blackboard client, not a behaviour, just pass + pass + return attributes + + def get_node_label(node_name, behaviour): + """ + This extracts a more detailed string (when applicable) to append to + that which will be used for the node name. + """ + # Custom handling of composites provided by this library. Not currently + # providing a generic mechanism for others to customise visualisations + # for their derived composites. + # prefix = "" + # policy = "" + ''' + if isinstance(behaviour, composites.Composite): + try: + if behaviour.memory: + prefix += console.circled_m + except AttributeError: + pass + try: + if behaviour.policy.synchronise: + prefix += console.lightning_bolt + except AttributeError: + pass + try: + policy = behaviour.policy.__class__.__name__ + except AttributeError: + pass + try: + indices = [str(behaviour.children.index(child)) for child in behaviour.policy.children] + policy += "({})".format(', '.join(sorted(indices))) + except AttributeError: + pass + + node_label = f"{prefix} {node_name}" if prefix else node_name + if policy: + node_label += f"\n{str(policy)}" + if with_qualified_names: + node_label += f"\n({utilities.get_fully_qualified_name(behaviour)})" + ''' + if node_name == "Sequence": + node_name = "→" + if node_name == "Selector": + node_name = "?" + return node_name + + fontsize = 20 + blackboard_colour = "blue" # "dimgray" + graph = pydot.Dot(graph_type='digraph', ordering="out") + graph.set_name("pastafarianism") # consider making this unique to the tree sometime, e.g. based on the root name + # fonts: helvetica, times-bold, arial (times-roman is the default, but this helps some viewers, like kgraphviewer) + graph.set_graph_defaults(fontname='times-roman') # splines='curved' is buggy on 16.04, but would be nice to have + graph.set_node_defaults(fontname='times-roman') + graph.set_edge_defaults(fontname='times-roman') + (node_shape, node_colour, node_font_colour) = get_node_attributes(root) + root_name = str(root.id) + node_root = pydot.Node( + name=root_name, + label=get_node_label(root.ins_name, root), + shape=node_shape, + style="filled", + fillcolor=node_colour, + fontsize=fontsize, + fontcolor=node_font_colour, + ) + if isinstance(root, composites.Composite): + node_root.set_height(COMPOSITE_NODE_SIZE) + node_root.set_width(COMPOSITE_NODE_SIZE) + graph.add_node(node_root) + behaviour_id_name_map = {root.id: str(root.id)} + + def add_children_and_edges(root, root_node, root_dot_name, visibility_level, collapse_decorators): + if isinstance(root, decorators.Decorator) and collapse_decorators: + return + if visibility_level < root.blackbox_level: + node_names = [] + for c in root.children: + (node_shape, node_colour, node_font_colour) = get_node_attributes(c) + node_name = str(c.id) + # while node_name in behaviour_id_name_map.values(): + # node_name += "" + behaviour_id_name_map[c.id] = node_name + # Node attributes can be found on page 5 of + # https://graphviz.gitlab.io/_pages/pdf/dot.1.pdf + # Attributes that may be useful: tooltip, xlabel + node = pydot.Node( + name=str(c.id), + label=get_node_label(c.name, c), + shape=node_shape, + style="filled", + fillcolor=node_colour, + fontsize=fontsize, + fontcolor=node_font_colour, + ) + if isinstance(c, composites.Composite): + node.set_height(COMPOSITE_NODE_SIZE) + node.set_width(COMPOSITE_NODE_SIZE) + node_names.append(node_name) + graph.add_node(node) + edge = pydot.Edge(root_dot_name, node_name) + graph.add_edge(edge) + if c.children != []: + add_children_and_edges(c, node, node_name, visibility_level, collapse_decorators) + + add_children_and_edges(root, node_root, root_name, visibility_level, collapse_decorators) + + def create_blackboard_client_node(blackboard_client_name: str): + return pydot.Node( + name=blackboard_client_name, + label=blackboard_client_name, + shape="ellipse", + style="filled", + color=blackboard_colour, + fillcolor="gray", + fontsize=fontsize - 2, + fontcolor=blackboard_colour, + ) + + def add_blackboard_nodes(blackboard_id_name_map: typing.Dict[uuid.UUID, str]): + data = blackboard.Blackboard.storage + metadata = blackboard.Blackboard.metadata + clients = blackboard.Blackboard.clients + # add client (that are not behaviour) nodes + subgraph = pydot.Subgraph( + graph_name="Blackboard", + id="Blackboard", + label="Blackboard", + rank="sink", + ) + + for unique_identifier, client_name in clients.items(): + if unique_identifier not in blackboard_id_name_map: + subgraph.add_node( + create_blackboard_client_node(client_name) + ) + # add key nodes + for key in blackboard.Blackboard.keys(): + try: + value = utilities.truncate(str(data[key]), 20) + label = key + ": " + "{}".format(value) + except KeyError: + label = key + ": " + "-" + blackboard_node = pydot.Node( + key, + label=label, + shape='box', + style="filled", + color=blackboard_colour, + fillcolor='white', + fontsize=fontsize - 1, + fontcolor=blackboard_colour, + width=0, height=0, fixedsize=False, # only big enough to fit text + ) + subgraph.add_node(blackboard_node) + for unique_identifier in metadata[key].read: + try: + edge = pydot.Edge( + blackboard_node, + blackboard_id_name_map[unique_identifier], + color="green", + constraint=False, + weight=0, + ) + except KeyError: + edge = pydot.Edge( + blackboard_node, + clients[unique_identifier].__getattribute__("name"), + color="green", + constraint=False, + weight=0, + ) + graph.add_edge(edge) + for unique_identifier in metadata[key].write: + try: + edge = pydot.Edge( + blackboard_id_name_map[unique_identifier], + blackboard_node, + color=blackboard_colour, + constraint=False, + weight=0, + ) + except KeyError: + edge = pydot.Edge( + clients[unique_identifier].__getattribute__("name"), + blackboard_node, + color=blackboard_colour, + constraint=False, + weight=0, + ) + graph.add_edge(edge) + graph.add_subgraph(subgraph) + + if with_blackboard_variables: + blackboard_id_name_map = {} + for b in root.iterate(): + for bb in b.blackboards: + blackboard_id_name_map[bb.id()] = behaviour_id_name_map[b.id] + add_blackboard_nodes(blackboard_id_name_map) + + return graph + + +def render_dot_tree(root: behaviour.Behaviour, + visibility_level: common.VisibilityLevel = common.VisibilityLevel.DETAIL, + collapse_decorators: bool = False, + name: str = None, + target_directory: str = os.getcwd(), + with_blackboard_variables: bool = False, + with_qualified_names: bool = False, + png_only = True): + """ + Render the dot tree to .dot, .svg, .png. files in the current + working directory. These will be named with the root behaviour name. + + Args: + root: the root of a tree, or subtree + visibility_level: collapse subtrees at or under this level + collapse_decorators: only show the decorator (not the child) + name: name to use for the created files (defaults to the root behaviour name) + target_directory: default is to use the current working directory, set this to redirect elsewhere + with_blackboard_variables: add nodes for the blackboard variables + with_qualified_names: print the class names of each behaviour in the dot node + + Example: + + Render a simple tree to dot/svg/png file: + + .. graphviz:: dot/sequence.dot + + .. code-block:: python + + root = py_trees.composites.Sequence("Sequence") + for job in ["Action 1", "Action 2", "Action 3"]: + success_after_two = py_trees.behaviours.Count(name=job, + fail_until=0, + running_until=1, + success_until=10) + root.add_child(success_after_two) + py_trees.display.render_dot_tree(root) + + .. tip:: + + A good practice is to provide a command line argument for optional rendering of a program so users + can quickly visualise what tree the program will execute. + """ + graph = dot_tree( + root, visibility_level, collapse_decorators, + with_blackboard_variables=with_blackboard_variables, + with_qualified_names=with_qualified_names) + filename_wo_extension_to_convert = root.ins_name if name is None else name + filename_wo_extension = utilities.get_valid_filename(filename_wo_extension_to_convert) + filenames = {} + + if png_only: + write_dict = {"png": graph.write_png} + else: + write_dict = {"dot": graph.write, "png": graph.write_png, "svg": graph.write_svg} + + for extension, writer in write_dict.items(): + filename = filename_wo_extension + '.' + extension + pathname = os.path.join(target_directory, filename) + print("Writing {}".format(pathname)) + writer(pathname) + filenames[extension] = pathname + return filenames["png"] diff --git a/BTExpansionCode/utils/bt/load.py b/BTExpansionCode/utils/bt/load.py new file mode 100644 index 0000000..00b87f1 --- /dev/null +++ b/BTExpansionCode/utils/bt/load.py @@ -0,0 +1,90 @@ +import py_trees as ptree +from EXP.behavior_tree.ptml import ptmlCompiler +import os +import importlib.util +from utils.basic import get_root_path + +def load_bt_from_ptml(scene, ptml_path, behavior_lib_path): + ptml_bt = ptmlCompiler.load(scene, ptml_path, behavior_lib_path) + bt = ptree.trees.BehaviourTree(ptml_bt) + + with open(ptml_path, 'r') as f: + ptml = f.read() + + # print(f'BT loaded:') + # print_tree_from_root(bt.root) + # print("行为树子树加载完毕") + # print(ptree.display.unicode_tree(root=bt.root, show_status=True)) + return bt + + +def print_tree_from_root(node, indent=0): + """ + Recursively prints the tree, each child with increased indentation. + + :param node: The current tree node to print. + :param indent: The number of '\t' to prefix the line with. + """ + # 打印当前节点,增加缩进来表示层级 + print(f"{' ' * indent}{node.print_name}") + # 如果该节点有子节点,递归打印子节点 + if hasattr(node, "children"): + for child in node.children: + print_tree_from_root(child, indent + 1) + +def find_node_by_name(tree, name): + """ + Find a node in the behavior tree with the specified name. + + :param tree: The root of the behavior tree or subtree. + :param name: The name of the node to find. + :return: Node with the specified name, or None if not found. + """ + if tree.name == name: + return tree + elif hasattr(tree, "children"): # Check if the tree has children + for child in tree.children: + result = find_node_by_name(child, name) + if result is not None: + return result + return None + + + +def get_classes_from_folder(folder_path): + cls_dict = {} + for filename in os.listdir(folder_path): + if filename.endswith('.py'): + # 构建模块的完整路径 + module_path = os.path.join(folder_path, filename) + # 获取模块名(不含.py扩展名) + module_name = os.path.splitext(filename)[0] + + # 动态导入模块 + spec = importlib.util.spec_from_file_location(module_name, module_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + # 获取模块中定义的所有类 + for name, obj in module.__dict__.items(): + if isinstance(obj, type): + cls_dict[module_name] = obj + + return cls_dict + + +def load_behavior_tree_lib(): + root_path = get_root_path() + type_list = ["act","cond"] + behavior_dict = {} + for type in type_list: + path = os.path.join(root_path,"BTExpansionCode","EXP/behavior_lib",type) + behavior_dict[type] = get_classes_from_folder(path) + + return behavior_dict + +if __name__ == '__main__': + print(load_behavior_tree_lib()) +# class BehaviorTree(ptree): +# def __init__(self): +# super().__init__() \ No newline at end of file diff --git a/BTExpansionCode/utils/bt/visitor.py b/BTExpansionCode/utils/bt/visitor.py new file mode 100644 index 0000000..8353ab6 --- /dev/null +++ b/BTExpansionCode/utils/bt/visitor.py @@ -0,0 +1,30 @@ + +from py_trees.visitors import VisitorBase + + +class StatusVisitor(VisitorBase): + """ + Logging is done with the behaviour's logger. + """ + + def __init__(self) -> None: + super(StatusVisitor, self).__init__(full=False) + self.output_str = "" + + def initialise(self) -> None: + """Override if any resetting of variables needs to be performed between ticks (i.e. visitations).""" + self.output_str = "" + + + def run(self, behavior) -> None: + """ + Log behaviour information on the debug channel. + + Args: + behavior: behaviour being visited. + """ + if behavior.type in ("Sequence","Selector"): + return + else: + self.output_str += f"{behavior.print_name}: {behavior.status.value}\n" + diff --git a/BTExpansionCode/utils/draw_bt/Default.ptml b/BTExpansionCode/utils/draw_bt/Default.ptml new file mode 100644 index 0000000..faa7387 --- /dev/null +++ b/BTExpansionCode/utils/draw_bt/Default.ptml @@ -0,0 +1,23 @@ +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) + act PutDown(Anything,Anywhere) \ No newline at end of file diff --git a/BTExpansionCode/utils/draw_bt/Default_bracket.ptml b/BTExpansionCode/utils/draw_bt/Default_bracket.ptml new file mode 100644 index 0000000..ced19d5 --- /dev/null +++ b/BTExpansionCode/utils/draw_bt/Default_bracket.ptml @@ -0,0 +1,33 @@ +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) + } act PutDown(Anything,Anywhere) +} \ No newline at end of file diff --git a/BTExpansionCode/utils/draw_bt/__init__.py b/BTExpansionCode/utils/draw_bt/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/BTExpansionCode/utils/draw_bt/draw_bt.py b/BTExpansionCode/utils/draw_bt/draw_bt.py new file mode 100644 index 0000000..e4f8e91 --- /dev/null +++ b/BTExpansionCode/utils/draw_bt/draw_bt.py @@ -0,0 +1,20 @@ +# from robowaiter.scene.scene import Scene +# from robowaiter.behavior_tree.ptml.ptmlCompiler import load + +import os +from robowaiter.utils.basic import get_root_path +from robowaiter.utils.bt.draw import render_dot_tree +from robowaiter.utils.bt.load import load_bt_from_ptml + +if __name__ == '__main__': + + # create robot + root_path = get_root_path() + ptml_path = os.path.join(root_path, 'robowaiter/utils/draw_bt/Default.ptml') + behavior_lib_path = os.path.join(root_path, 'robowaiter/behavior_lib') + bt = load_bt_from_ptml(None, ptml_path, behavior_lib_path) + + + + render_dot_tree(bt.root,name="test",png_only = False) + # build and tick diff --git a/BTExpansionCode/utils/draw_bt/test.dot b/BTExpansionCode/utils/draw_bt/test.dot new file mode 100644 index 0000000..be7a354 --- /dev/null +++ b/BTExpansionCode/utils/draw_bt/test.dot @@ -0,0 +1,51 @@ +digraph pastafarianism { +ordering=out; +graph [fontname="times-roman"]; +node [fontname="times-roman"]; +edge [fontname="times-roman"]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"beefe100-69d4-42c8-943e-7e6a44cf6dba" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="On(Coffee,Bar)", shape=ellipse, style=filled]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "beefe100-69d4-42c8-943e-7e6a44cf6dba"; +"46e28392-6794-4550-b6e2-0e73ec120193" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "46e28392-6794-4550-b6e2-0e73ec120193"; +"0d7304bc-7515-400b-80e2-c01196ec55a2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"46e28392-6794-4550-b6e2-0e73ec120193" -> "0d7304bc-7515-400b-80e2-c01196ec55a2"; +"4829a7d0-0f74-4826-9d82-94e0503d0e38" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"46e28392-6794-4550-b6e2-0e73ec120193" -> "4829a7d0-0f74-4826-9d82-94e0503d0e38"; +"93fb3deb-6e14-4cb7-b90b-d885e6be0af7" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4829a7d0-0f74-4826-9d82-94e0503d0e38" -> "93fb3deb-6e14-4cb7-b90b-d885e6be0af7"; +"9765c81a-a42e-469c-9617-28c7a2314e0f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar)", shape=ellipse, style=filled]; +"93fb3deb-6e14-4cb7-b90b-d885e6be0af7" -> "9765c81a-a42e-469c-9617-28c7a2314e0f"; +"2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,Bar)", shape=box, style=filled]; +"93fb3deb-6e14-4cb7-b90b-d885e6be0af7" -> "2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d"; +"38414809-7783-46fc-9b2b-4191032e7936" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(Bar)", shape=box, style=filled]; +"4829a7d0-0f74-4826-9d82-94e0503d0e38" -> "38414809-7783-46fc-9b2b-4191032e7936"; +"e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d"; +"7e87efb6-6091-413d-8b22-dd66ebe60767" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; +"e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d" -> "7e87efb6-6091-413d-8b22-dd66ebe60767"; +"afa21845-cfa3-447a-ac96-a83cf1951a6b" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d" -> "afa21845-cfa3-447a-ac96-a83cf1951a6b"; +"9567c5fd-7666-4887-b871-5aa129200fbb" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"afa21845-cfa3-447a-ac96-a83cf1951a6b" -> "9567c5fd-7666-4887-b871-5aa129200fbb"; +"31863371-28b9-441b-a0c0-80b0175ebc9d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"9567c5fd-7666-4887-b871-5aa129200fbb" -> "31863371-28b9-441b-a0c0-80b0175ebc9d"; +"c0da3640-d486-436b-836f-684d165e1870" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled]; +"9567c5fd-7666-4887-b871-5aa129200fbb" -> "c0da3640-d486-436b-836f-684d165e1870"; +"6781847e-5cc9-43aa-864a-15d6b1ea991e" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"afa21845-cfa3-447a-ac96-a83cf1951a6b" -> "6781847e-5cc9-43aa-864a-15d6b1ea991e"; +"18fffbc9-1a98-40f8-a8ef-3a8f6564e041" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "18fffbc9-1a98-40f8-a8ef-3a8f6564e041"; +"17aa2547-5d2a-4100-b1cc-9e6795a0bed1" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"18fffbc9-1a98-40f8-a8ef-3a8f6564e041" -> "17aa2547-5d2a-4100-b1cc-9e6795a0bed1"; +"7540b9ff-e074-459b-a197-a13019794d30" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; +"18fffbc9-1a98-40f8-a8ef-3a8f6564e041" -> "7540b9ff-e074-459b-a197-a13019794d30"; +"16721d61-c6ad-455f-8c14-c628d04337fb" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "16721d61-c6ad-455f-8c14-c628d04337fb"; +"67a45deb-eea1-405c-b956-f27b4aba93a0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"16721d61-c6ad-455f-8c14-c628d04337fb" -> "67a45deb-eea1-405c-b956-f27b4aba93a0"; +"54a17c08-13b6-420a-bccb-ef411c9a6924" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; +"16721d61-c6ad-455f-8c14-c628d04337fb" -> "54a17c08-13b6-420a-bccb-ef411c9a6924"; +"13731b58-283a-4ec4-9f51-12f86a9f29ea" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "13731b58-283a-4ec4-9f51-12f86a9f29ea"; +} diff --git a/BTExpansionCode/utils/draw_bt/test.png b/BTExpansionCode/utils/draw_bt/test.png new file mode 100644 index 0000000..5186de1 Binary files /dev/null and b/BTExpansionCode/utils/draw_bt/test.png differ diff --git a/BTExpansionCode/utils/draw_bt/test.svg b/BTExpansionCode/utils/draw_bt/test.svg new file mode 100644 index 0000000..d158e4f --- /dev/null +++ b/BTExpansionCode/utils/draw_bt/test.svg @@ -0,0 +1,283 @@ + + + + + + +pastafarianism + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c + +? + + + +beefe100-69d4-42c8-943e-7e6a44cf6dba + +On(Coffee,Bar) + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->beefe100-69d4-42c8-943e-7e6a44cf6dba + + + + + +46e28392-6794-4550-b6e2-0e73ec120193 + + + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->46e28392-6794-4550-b6e2-0e73ec120193 + + + + + +e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d + + + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d + + + + + +18fffbc9-1a98-40f8-a8ef-3a8f6564e041 + + + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->18fffbc9-1a98-40f8-a8ef-3a8f6564e041 + + + + + +16721d61-c6ad-455f-8c14-c628d04337fb + + + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->16721d61-c6ad-455f-8c14-c628d04337fb + + + + + +13731b58-283a-4ec4-9f51-12f86a9f29ea + +PutDown(Anything,Anywhere) + + + +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->13731b58-283a-4ec4-9f51-12f86a9f29ea + + + + + +0d7304bc-7515-400b-80e2-c01196ec55a2 + +Holding(Coffee) + + + +46e28392-6794-4550-b6e2-0e73ec120193->0d7304bc-7515-400b-80e2-c01196ec55a2 + + + + + +4829a7d0-0f74-4826-9d82-94e0503d0e38 + +? + + + +46e28392-6794-4550-b6e2-0e73ec120193->4829a7d0-0f74-4826-9d82-94e0503d0e38 + + + + + +93fb3deb-6e14-4cb7-b90b-d885e6be0af7 + + + + + +4829a7d0-0f74-4826-9d82-94e0503d0e38->93fb3deb-6e14-4cb7-b90b-d885e6be0af7 + + + + + +38414809-7783-46fc-9b2b-4191032e7936 + +MoveTo(Bar) + + + +4829a7d0-0f74-4826-9d82-94e0503d0e38->38414809-7783-46fc-9b2b-4191032e7936 + + + + + +9765c81a-a42e-469c-9617-28c7a2314e0f + +At(Robot,Bar) + + + +93fb3deb-6e14-4cb7-b90b-d885e6be0af7->9765c81a-a42e-469c-9617-28c7a2314e0f + + + + + +2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d + +PutDown(Coffee,Bar) + + + +93fb3deb-6e14-4cb7-b90b-d885e6be0af7->2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d + + + + + +7e87efb6-6091-413d-8b22-dd66ebe60767 + +At(Robot,Coffee) + + + +e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d->7e87efb6-6091-413d-8b22-dd66ebe60767 + + + + + +afa21845-cfa3-447a-ac96-a83cf1951a6b + +? + + + +e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d->afa21845-cfa3-447a-ac96-a83cf1951a6b + + + + + +9567c5fd-7666-4887-b871-5aa129200fbb + + + + + +afa21845-cfa3-447a-ac96-a83cf1951a6b->9567c5fd-7666-4887-b871-5aa129200fbb + + + + + +6781847e-5cc9-43aa-864a-15d6b1ea991e + +PutDown(Anything,Anywhere) + + + +afa21845-cfa3-447a-ac96-a83cf1951a6b->6781847e-5cc9-43aa-864a-15d6b1ea991e + + + + + +31863371-28b9-441b-a0c0-80b0175ebc9d + +Holding(Nothing) + + + +9567c5fd-7666-4887-b871-5aa129200fbb->31863371-28b9-441b-a0c0-80b0175ebc9d + + + + + +c0da3640-d486-436b-836f-684d165e1870 + +PickUp(Coffee) + + + +9567c5fd-7666-4887-b871-5aa129200fbb->c0da3640-d486-436b-836f-684d165e1870 + + + + + +17aa2547-5d2a-4100-b1cc-9e6795a0bed1 + +Exist(Coffee) + + + +18fffbc9-1a98-40f8-a8ef-3a8f6564e041->17aa2547-5d2a-4100-b1cc-9e6795a0bed1 + + + + + +7540b9ff-e074-459b-a197-a13019794d30 + +MoveTo(Coffee) + + + +18fffbc9-1a98-40f8-a8ef-3a8f6564e041->7540b9ff-e074-459b-a197-a13019794d30 + + + + + +67a45deb-eea1-405c-b956-f27b4aba93a0 + +Holding(Nothing) + + + +16721d61-c6ad-455f-8c14-c628d04337fb->67a45deb-eea1-405c-b956-f27b4aba93a0 + + + + + +54a17c08-13b6-420a-bccb-ef411c9a6924 + +Make(Coffee) + + + +16721d61-c6ad-455f-8c14-c628d04337fb->54a17c08-13b6-420a-bccb-ef411c9a6924 + + + + + diff --git a/BTExpansionCode/utils/draw_bt/test.zip b/BTExpansionCode/utils/draw_bt/test.zip new file mode 100644 index 0000000..eee42a8 Binary files /dev/null and b/BTExpansionCode/utils/draw_bt/test.zip differ diff --git a/robowaiter/behavior_lib/_base/Behavior.py b/robowaiter/behavior_lib/_base/Behavior.py index 173ae8f..425f547 100644 --- a/robowaiter/behavior_lib/_base/Behavior.py +++ b/robowaiter/behavior_lib/_base/Behavior.py @@ -14,17 +14,17 @@ class Bahavior(ptree.behaviour.Behaviour): ''' scene = None print_name_prefix = "" - tables_for_placement = {'Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3',"BrightTable6"} + tables_for_placement = {'Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6'} all_object = { 'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup', - 'Chips', 'NFCJuice', 'Bernachon', 'ADMilk', 'SpringWater'} + 'Chips', 'NFCJuice', 'Bernachon', 'SpringWater'} tables_for_guiding = {"QuietTable1","QuietTable2", "BrightTable1","BrightTable2","BrightTable3","BrightTable4","BrightTable5","BrightTable6", 'CoffeeTable','WaterTable','Table1', 'Table2', 'Table3'} # tables_for_placement = {'Bar', 'CoffeeTable', 'Table2',"BrightTable6", 'WaterTable'} - # all_object = {'Coffee'} + # all_object = {'Coffee', 'Yogurt'} num_of_obj_on_place={ @@ -65,9 +65,9 @@ class Bahavior(ptree.behaviour.Behaviour): 'Bar2': "另一侧的吧台", 'WaterTable': "大厅的茶水桌", 'CoffeeTable': "咖啡桌", - 'Table1': "前门的斜桌子", - 'Table2': "大厅长桌子", - 'Table3': "大厅长桌子", + 'Table1': "前门斜桌子", + 'Table2': "大厅长桌子西侧", + 'Table3': "大厅长桌子东侧", 'BrightTable6': "后门靠窗边圆桌", 'QuietTable1': "前门角落双人圆桌", 'QuietTable2': "后门角落三人圆桌", diff --git a/robowaiter/behavior_lib/act/DealChat.py b/robowaiter/behavior_lib/act/DealChat.py index 0991a34..aef5530 100644 --- a/robowaiter/behavior_lib/act/DealChat.py +++ b/robowaiter/behavior_lib/act/DealChat.py @@ -7,6 +7,7 @@ import random from collections import deque from translate import Translator +from sympy import to_dnf translator = Translator(to_lang="zh") @@ -82,18 +83,59 @@ class DealChat(Act): def create_sub_task(self, **args): try: goal = args['goal'] + # + # w = goal.split(")") + # goal_set = set() + # goal_set.add(w[0] + ")") + # if len(w) > 1: + # for x in w[1:]: + # if x != "": + # goal_set.add(x[1:] + ")") + # self.function_success = True - w = goal.split(")") - goal_set = set() - goal_set.add(w[0] + ")") - if len(w) > 1: - for x in w[1:]: - if x != "": - goal_set.add(x[1:] + ")") + # 解析谓词公式 + # 如果不正确, + + # 如果正确,传入两个set + # goal = "On_Coffee_Bar | On_Yogur_Bar & At_Robot_Bar" + goal_dnf = str(to_dnf(goal, simplify=True)) + # print(goal_dnf) + goal_set = [] + if '|' in goal or '&' in goal or 'Not' in goal or '_' in goal: + goal_ls = goal_dnf.split("|") + for g in goal_ls: + g_set = set() + g = g.replace(" ", "").replace("(", "").replace(")", "") + g = g.split("&") + for literal in g: + if '_' in literal: + first_part, rest = literal.split('_', 1) + literal = first_part + '(' + rest + # 添加 ')' 到末尾 + literal += ')' + # 替换剩余的 '_' 为 ',' + literal = literal.replace('_', ',') + g_set.add(literal) + goal_set.append(g_set) + else: + g_set = set() + w = goal.split(")") + g_set.add(w[0] + ")") + if len(w) > 1: + for x in w[1:]: + if x != "": + g_set.add(x[1:] + ")") + goal_set.append(g_set) + + print("goal_set:",goal_set) + # goal_set = [set(["On(Coffee,Bar)", "At(Robot,Bar)"]), set(["On(Yogurt,Bar)", "At(Robot,Bar)"])] self.function_success = True + except: print("参数解析错误") + # 添加相似性比较 + self.scene.robot.expand_sub_task_tree(goal_set) diff --git a/robowaiter/behavior_lib/act/GreetCustomer.py b/robowaiter/behavior_lib/act/GreetCustomer.py index 629c3cf..8dd5e73 100644 --- a/robowaiter/behavior_lib/act/GreetCustomer.py +++ b/robowaiter/behavior_lib/act/GreetCustomer.py @@ -3,7 +3,7 @@ from robowaiter.behavior_lib._base.Act import Act from robowaiter.algos.navigator.navigate import Navigator class GreetCustomer(Act): - can_be_expanded = True + can_be_expanded = False num_args = 0 valid_args = () @@ -30,7 +30,8 @@ class GreetCustomer(Act): if self.scene.show_bubble: # self.scene.chat_bubble("欢迎光临!") - self.scene.chat_bubble("欢迎光临!请问有什么可以帮您?") + # self.scene.chat_bubble("欢迎光临!请问有什么可以帮您?") + self.scene.chat_bubble("Welcome! How may I assist you today?") customer_name = self.scene.state['attention']['customer'] self.scene.state['greeted_customers'].add(customer_name) diff --git a/robowaiter/behavior_lib/act/MoveTo.py b/robowaiter/behavior_lib/act/MoveTo.py index fd4588e..e5194ce 100644 --- a/robowaiter/behavior_lib/act/MoveTo.py +++ b/robowaiter/behavior_lib/act/MoveTo.py @@ -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'] = 10 + info['cost'] = 1 #10 # if arg!='Anything': # info['cost']=5 # else: diff --git a/robowaiter/behavior_lib/act/PutDown.py b/robowaiter/behavior_lib/act/PutDown.py index cccea27..ca52fd3 100644 --- a/robowaiter/behavior_lib/act/PutDown.py +++ b/robowaiter/behavior_lib/act/PutDown.py @@ -25,7 +25,7 @@ class PutDown(Act): info["pre"] = {f'Holding({arg[0]})',f'At(Robot,{arg[1]})'} info["add"] = {f'Holding(Nothing)',f'On({arg[0]},{arg[1]})'} info["del_set"] = {f'Holding({arg[0]})'} - info['cost'] = 3 + info['cost'] = 100 #1000 else: info = {} info["pre"] = set() diff --git a/robowaiter/behavior_tree/dataset1224/W2V_CI.model b/robowaiter/behavior_tree/dataset1224/W2V_CI.model new file mode 100644 index 0000000..8a38237 Binary files /dev/null and b/robowaiter/behavior_tree/dataset1224/W2V_CI.model differ diff --git a/robowaiter/behavior_tree/dataset1224/__init__.py b/robowaiter/behavior_tree/dataset1224/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/robowaiter/behavior_tree/dataset1224/expansion_out/output.txt b/robowaiter/behavior_tree/dataset1224/expansion_out/output.txt new file mode 100644 index 0000000..929c465 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/expansion_out/output.txt @@ -0,0 +1,386 @@ +At(Robot,Bar) 请给我带来菜单。 +At(Robot,Bar) 请帮我前往吧台。 +At(Robot,Bar) 您好,我需要去吧台那个位置,请问可以帮我吗? +At(Robot,WaterTable) 请送一些茶水到茶水桌。 +At(Robot,WaterTable) 请帮我前往茶水桌。 +At(Robot,WaterTable) 您好,请问您需要我前往哪个位置呢? +At(Robot,CoffeeTable) 请问能帮我来到这个咖啡桌吗? +At(Robot,CoffeeTable) 请前往咖啡桌。 +At(Robot,CoffeeTable) 您好!请问您能帮我前往咖啡桌的位置吗? +At(Robot,Bar2) 您好,请问您需要前往哪个吧台呢? +At(Robot,Bar2) 请帮我前往另一个吧台。 +At(Robot,Bar2) 您好,机器人服务员!请问您能告诉我如何前往另一个吧台的位置吗? +At(Robot,Table1) 请给我送一份菜单到第一桌。 +At(Robot,Table1) 请帮我前往第一桌,谢谢! +At(Robot,Table1) 您好,我是一名AI助手,请问有什么我可以帮您的? +At(Robot,Table2) 请帮我来到第二张桌子。 +At(Robot,Table2) 请帮我前往第二桌,谢谢! +At(Robot,Table2) 您好,机器人服务员!请问您能否前往第二桌的位置提供服务? +At(Robot,Table3) 请给我带来第三桌子的服务。 +At(Robot,Table3) 请前往第三张桌子。 +At(Robot,Table3) 您好,请问您需要我前往第三张桌子所在的方位吗? +On(Softdrink,Bar) 请将软饮料放在吧台那个位置。 +On(Softdrink,Bar) 请将软饮料拿到吧台位置。 +On(Softdrink,WaterTable) 请将软饮料放在茶水桌那个位置。 +On(Softdrink,WaterTable) 请给我拿一罐软饮料,放在茶水桌的位置。 +On(Softdrink,CoffeeTable) 请将软饮料放在咖啡桌上的指定位置。 +On(Softdrink,CoffeeTable) 请把软饮料拿到我的咖啡桌位置。 +On(Softdrink,Bar2) 请将软饮料放在另一个酒吧台的位置。 +On(Softdrink,Bar2) 请将软饮料拿到另一个酒吧台位置。 +On(Softdrink,Table1) 请将软饮料放在第一桌的指定位置。 +On(Softdrink,Table1) 请给我拿一罐软饮料,放在第一桌子的位置。 +On(Softdrink,Table2) 请将软饮料放在第二桌的位置。 +On(Softdrink,Table2) 请帮我从一个位置(可能是吧台或货架)取来一瓶软饮料,然后将其放在第二张桌子上。 +On(Softdrink,Table3) 请将软饮料放在第三桌的具体位置。 +On(Softdrink,Table3) 请给我拿一罐软饮料,放 到第三张桌子的位置。 +On(BottledDrink,Bar) 您好,我想让您将瓶装饮料放在吧台那个位置。 +On(BottledDrink,Bar) 请帮我取一下瓶装饮料,放到吧台那里。 +On(BottledDrink,WaterTable) 您好,机器人服务员,我想让您放一瓶饮料在茶水桌上,可以吗? +On(BottledDrink,WaterTable) 请帮我拿一下瓶装饮料,放到茶水桌的位置。 +On(BottledDrink,CoffeeTable) 请将瓶装饮料放在咖啡桌上的指定位置。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料拿到我的咖啡桌位置。 +On(BottledDrink,Bar2) 请将瓶装饮料放在另一个酒吧台的位置。 +On(BottledDrink,Bar2) 请帮我从一个吧台位置取一个瓶装饮料,然后将其拿到另一个吧台位置。 +On(BottledDrink,Table1) 请将瓶装饮料放在第一桌的指定位置。 +On(BottledDrink,Table1) 您好,我需要您帮忙将瓶装饮料拿到第一桌的位置。 +On(BottledDrink,Table2) 您好,我需要您帮助将瓶装饮料放在第二桌的具体位置。 +On(BottledDrink,Table2) 请给我拿一罐饮料,放在第二桌的位置。 +On(BottledDrink,Table3) 请将瓶装饮料放在第三桌的位置。 +On(BottledDrink,Table3) 请给我取一瓶饮料,放到了第三桌子上。 +On(Yogurt,Bar) 您好,我需要您将酸奶放在吧台上的哪个位置。 +On(Yogurt,Bar) 请您把酸奶拿到吧台。 +On(Yogurt,WaterTable) 请将酸奶放在茶水桌那个位置。 +On(Yogurt,WaterTable) 请将酸奶放在茶水桌的位置。 +On(Yogurt,CoffeeTable) 请将酸奶放在咖啡桌上的指定位置。 +On(Yogurt,CoffeeTable) 请把酸奶放在咖啡桌的位置。 +On(Yogurt,Bar2) 请将酸奶放在另一个吧台上的那个位置。 +On(Yogurt,Bar2) 您好,机器人服务员!请问您可以帮我拿一下酸奶,放到那个靠近窗户的吧台位置吗?谢谢! +On(Yogurt,Table1) 请将酸奶放在第一桌的第一位置。 +On(Yogurt,Table1) 请将酸奶放在第一桌的位置。 +On(Yogurt,Table2) 您好,请问能帮我将酸奶放在第二张桌子的位置吗?谢谢! +On(Yogurt,Table2) 请把酸奶放在第二桌的位置。 +On(Yogurt,Table3) 您好,机器人服务员,我想让您把酸奶放到第三张桌子的位置。谢谢! +On(Yogurt,Table3) 请把酸奶放在第三桌的位置。 +On(ADMilk,Bar) 请将AD钙奶放在吧台那个位置。 +On(ADMilk,Bar) 请把AD钙奶放到 bar 位置。 +On(ADMilk,WaterTable) 请将AD钙奶放在茶水桌那个位置。 +On(ADMilk,WaterTable) 请帮我取一份AD钙奶,放在茶水桌的位置上。 +On(ADMilk,CoffeeTable) 请将AD钙奶放在咖啡桌上的指定位置。 +On(ADMilk,CoffeeTable) 请将AD钙奶送到我的咖啡桌位置。 +On(ADMilk,Bar2) 请将AD钙奶放在另一个酒吧台的位置。 +On(ADMilk,Bar2) 您好,机器人服务员!请问能帮我拿一下AD钙奶,放到另一个吧台位置吗?谢谢! +On(ADMilk,Table1) 请将AD钙奶放在第一桌的指定位置。 +On(ADMilk,Table1) 请把AD钙奶放在第一桌的位置。 +On(ADMilk,Table2) 请将AD钙奶放在第二桌的位置。 +On(ADMilk,Table2) 请把AD钙奶放在第二桌的位置。 +On(ADMilk,Table3) 您好,机器人服务员!请问能帮我将AD钙奶放到第三张桌子的位置吗?谢谢! +On(ADMilk,Table3) 请帮我取一份AD钙奶,放至第三桌。 +On(MilkDrink,Bar) 请将牛奶饮料放在吧台那个位置。 +On(MilkDrink,Bar) 请帮我拿一罐牛奶饮料放到吧台的位置。 +On(MilkDrink,WaterTable) 请将牛奶饮料放在茶水桌那个位置。 +On(MilkDrink,WaterTable) 请帮我递一下牛奶饮料,放到茶水桌的位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在咖啡桌上的指定位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在我的咖啡桌上。 +On(MilkDrink,Bar2) 请将牛奶饮料放在另一个酒吧台的位置。 +On(MilkDrink,Bar2) 您好,机器人服务员!请问能否帮我拿一下牛奶饮料,并将其放在另一个吧台位置?谢谢! +On(MilkDrink,Table1) 请将牛奶饮料放在第一桌的指定位置。 +On(MilkDrink,Table1) 请将牛奶饮料拿到第一桌。 +On(MilkDrink,Table2) 请将牛奶饮料放在第二桌的位置上。 +On(MilkDrink,Table2) 请给我拿一罐牛奶饮料,放在第二桌的位置。 +On(MilkDrink,Table3) 请将牛奶饮料放在第三桌的具体位置。 +On(MilkDrink,Table3) 请给我拿一罐牛奶饮料,放到第三张桌子的位置。 +On(Milk,Bar) 请将牛奶放在吧台那个地方。 +On(Milk,Bar) 请把牛奶拿到吧台。 +On(Milk,WaterTable) 请将牛奶放在茶水桌那个位置。 +On(Milk,WaterTable) 请将牛奶放在茶水桌附近。 +On(Milk,CoffeeTable) 请将牛奶放在咖啡桌上的指定位置。 +On(Milk,CoffeeTable) 请把牛奶放在我的咖啡桌上。 +On(Milk,Bar2) 请将牛奶放在另一个酒吧台的位置上。 +On(Milk,Bar2) 请将牛奶拿到另一个吧台位置。 +On(Milk,Table1) 请将牛奶放在第一桌的位置上。 +On(Milk,Table1) 请把牛奶放在第一桌的位置上。 +On(Milk,Table2) 请将牛奶放在第二桌那个位置。 +On(Milk,Table2) 请给我拿一罐牛奶,放的第二张桌子上。 +On(Milk,Table3) 您好,我需要您将牛奶放在第三张桌子的位置。谢谢! +On(Milk,Table3) 请给我拿一罐牛奶,放到第三桌子的位置。 +On(VacuumCup,Bar) 请将我的保温杯放在吧台上的那个位置。 +On(VacuumCup,Bar) 请将我的保温杯拿到吧台。 +On(VacuumCup,WaterTable) 请将我的保温杯放在茶水桌那个地方。 +On(VacuumCup,WaterTable) 请将保温杯拿到茶水桌那里。 +On(VacuumCup,CoffeeTable) 请将保温杯放置在咖啡桌上的指定位置。 +On(VacuumCup,CoffeeTable) 请把保温杯放在咖啡桌附近。 +On(VacuumCup,Bar2) 请将我的保温杯放在另一个酒吧台上的那个位置。 +On(VacuumCup,Bar2) 请帮我把保温杯拿到另一个吧台位置。 +On(VacuumCup,Table1) 请将保温杯放在第一桌的指定位置。 +On(VacuumCup,Table1) 请把保温杯拿到第一桌子的位置。 +On(VacuumCup,Table2) 请将保温杯放在第二桌的具体位置。 +On(VacuumCup,Table2) 请帮我递一个保温杯到第二桌。 +On(VacuumCup,Table3) 请将保温杯放在第三桌的指定位置。 +On(VacuumCup,Table3) 请把保温杯拿到第三桌的位置。 +Is(AC,0) 当然可以,请问需要我为您执行这个操作吗? +Is(AC,1) 您好!请问您需要我为您打开空调吗? +Is(ACTemperature,0) 尊敬的服务员,可以请您把空调温度调高一些吗?谢谢! +Is(ACTemperature,1) 尊敬的服务员,能否请您将空调温度调低一些呢? +Is(HallLight,0) 当然可以,请您稍等,我这就帮您关闭大厅灯。 +Is(HallLight,1) 您好!请问您需要我为您做些什么呢? +Is(TubeLight,0) 尊敬的服务员,请问你能把筒灯调暗一些吗? +Is(TubeLight,1) 您好,请问您需要我帮您打开筒灯吗? +Is(Curtain,0) 您好,我能为您做什么? +Is(Curtain,1) 您好,请问您需要我帮您打开窗帘吗? +Is(Chairs,0) 您好!请问需要我为您做什么? +Is(Chairs,1) 您好,请问能帮我清理一下座位上的灰尘吗? +Is(Floor,0) 抱歉,我理解您的意思了。请问需要我帮忙做些什么来清理地板呢? +Is(Floor,1) 请问你能帮我打扫一下地板吗? +Is(Table1,0) 您好,请问需要我帮助您做什么呢?如果您需要我清理桌子的灰尘或者污渍,麻烦您告诉我哪一张桌子需要清洁。 +Is(Table1,1) 请帮我清理一下这张桌子的灰尘和垃圾。 +Holding(Softdrink) 您好,我是您的机器人服务员。请问您需要什么帮助呢? +Holding(Softdrink) 您好,我是一个机器人服务员。请问您需要什么帮助?如果您想要点软饮料,您可以告诉我您的喜好,我会为您推荐一些适合的选项。 +Holding(BottledDrink) 您好,请问您需要什么帮助?我会尽力满足您的需求。 +Holding(BottledDrink) 您好,我是一名机器人服务员。请问您需要我帮忙拿着一瓶装饮料吗? +Holding(Yogurt) 您好,我可以帮助您点餐和回答问题。请问您需要什么食物或饮料? +Holding(Yogurt) 请问你能一直帮我拿着这个酸奶吗? +Holding(ADMilk) 你好,尊敬的服务员!能否帮我抓住AD钙奶并递给我呢? +Holding(ADMilk) 您好,我无法长时间拿着 AD 钙奶。作为一个机器人服务员,我的任务是帮助您解决问题和回答问题,而不是提供物理服务。如果您需要AD钙奶,我可以告诉您在哪里可以找到它,或者指导您如何自己获取它。 +Holding(MilkDrink) 您好!请问有什么我可以帮您的吗? +Holding(MilkDrink) 您好,我是您的机器人服务员。请问您需要我为您一直拿着这杯牛奶饮料吗? +Holding(Milk) 你好,尊敬的服务员,能帮我拿一下牛奶吗? +Holding(Milk) 请问你能一直拿着牛奶吗? +Holding(VacuumCup) 您好,请问您需要什么帮助?我可以为您提供服务。 +Holding(VacuumCup) 您好,我是一名AI机器人,无法直接为您拿保温杯。但是,我可以为您提供购买保温杯的建议,或者推荐其他相关商品。请问您需要什么帮助吗? +Holding(Nothing) 抱歉,我需要更多的信息来理解您的请求。请问您能告诉我您具体想要什么帮助吗?我会尽力回答您的问题。 +Holding(Nothing) 请问您能一直拿着无所事事吗? +On(Coffee,Bar) 您好,我需要一杯咖啡,并希望它能够被送到吧台。 +On(Coffee,Bar) 请帮我准备一杯咖啡,然后把咖啡端到吧台这里。 +On(Coffee,WaterTable) 您好!请问您能帮我制作一杯咖啡并将其端到茶水桌 here 吗?谢谢! +On(Coffee,WaterTable) 请帮我准备一杯咖啡,然后将它端到茶水桌旁边。 +On(Coffee,CoffeeTable) 当然可以,请问您想喝什么类型的咖啡呢? +On(Coffee,CoffeeTable) 请帮我准备一杯咖啡,然后将它端到这个咖啡桌上来。 +On(Coffee,Bar2) 您好,机器人服务员!请问您能帮我制作一杯咖啡,然后把咖啡端到这个吧台这里来吗?谢谢! +On(Coffee,Bar2) 请帮我准备一杯咖啡,然后把咖啡端到这个吧台这里。 +On(Coffee,Table1) 您好,我是一名人工智能助手。请问您需要什么帮助? +On(Coffee,Table1) 请给我一杯咖啡,并将其放在第一桌子上。 +On(Coffee,Table2) 您好,机器人服务员!我想要一杯咖啡,并且希望它能够被送到第二张桌子上。 +On(Coffee,Table2) 请为我准备一杯咖啡,并将其送到第二桌。 +On(Coffee,Table3) 您好!请问您能否帮我制作一杯咖啡,然后把咖啡端到第三张桌子上呢?谢谢! +On(Coffee,Table3) 请为我准备一杯咖啡,并将其送到第三张桌子上。 +On(Water,Bar) 您好,我需要一杯水,并且希望它能够被端到吧台那里。 +On(Water,Bar) 请为我准备一杯水,并将其送到吧台。 +On(Water,WaterTable) 您好,我需要一杯水,并希望您能将其端到茶水桌这里。 +On(Water,WaterTable) 请为我送一杯水,并将其放在茶水桌上。 +On(Water,CoffeeTable) 您好,我是一名机器人服务员。请问您需要一杯水,我可以为您制作并在准备好后将其端到咖啡桌旁边。 +On(Water,CoffeeTable) 请给我一杯水,并将其递送到我的咖啡桌上。 +On(Water,Bar2) 您好,机器人服务员!请问你能帮我制作一杯水,然后将其端到距离这里较远的另一个吧台吗?谢谢! +On(Water,Bar2) 请给我倒一杯水,然后把水端到这个吧台这里。 +On(Water,Table1) 您好,我需要一杯水,并希望它能够被送到我所在的桌子上。 +On(Water,Table1) 请为我准备一杯水,并将其送到这张桌子的位置上。 +On(Water,Table2) 您好,我需要一杯水,并希望你能将它端到第二张桌子上。 +On(Water,Table2) 请给我倒一杯水,并把水杯端到第二桌子上。 +On(Water,Table3) 您好,机器人服务员!请问能否为您制作一杯水,并将其送到第三张桌子呢? +On(Water,Table3) 请为我准备一杯水,并将其送到第三桌。 +On(Dessert,Bar) 您好,我需要点心和甜品。请帮我制作一下,然后把它们带到吧台来。 +On(Dessert,Bar) 您好,我可以帮您点一些点心或甜品,然后将它们送到吧台。请问您想点什么? +On(Dessert,WaterTable) 您好,我需要点心和甜品,并将它们端到茶水桌 here。 +On(Dessert,WaterTable) 请为我准备一些点心或甜品,并将其递送到我的茶水桌子上。 +On(Dessert,CoffeeTable) 您好,我是一个人工智能助手,虽然我不能直接为您制作点心或甜品,但我可以帮助您找到附近的餐厅或店铺,为您推荐美味的点心或甜品,您可以品尝一下。如果您有其他需要帮助的地方,也请随时告诉我。 +On(Dessert,CoffeeTable) 请为我准备一些点心或甜品,然后将其放置在咖啡桌附近。 +On(Dessert,Bar2) 您好,我需要点心和甜品。请问您能帮我制作吗?然后把它们端到这里来。谢谢! +On(Dessert,Bar2) 请帮我点一份点心或甜品,然后把它端到另一个吧台那里。 +On(Dessert,Table1) 您好,我是一位AI助手,无法直接为您制作点心或甜品。但我可以为您推荐菜单上的点心或甜品,或者帮您下单购买。请问您需要什么帮助? +On(Dessert,Table1) 请帮我点一些点心或甜品,并把它们放在这张桌子上。 +On(Dessert,Table2) 您好,机器人服务员!我需要点心和甜品,可以帮我制作吗?把它们送到第二桌来,谢谢! +On(Dessert,Table2) 您好,请问有什么我可以帮您的吗?您可以点一些点心或甜品,然后告诉我放在哪一张桌子上,我会马上为您送过去。 +On(Dessert,Table3) 您好,我需要点心和甜品,请把它们送到第三桌。 +On(Dessert,Table3) 您好,机器人服务员!请问您能帮我点些点心或甜品吗?我要把它们送到第三桌。 +At(Robot,Bar) 您好,机器人服务员!请问您能带路来到 Bar 吗?我想要一杯饮料和一些小吃。谢谢! +At(Robot,Bar) 请帮我前往Bar。 +At(Robot,Bar) 请问你能带我前往Bar位置吗? +At(Robot,WaterTable) 请帮我找到WaterTable。 +At(Robot,WaterTable) 您好,机器人服务员!请问您能帮我订一张去WaterTable的桌子吗? +At(Robot,WaterTable) 当然可以!请问您需要我向WaterTable位置发送消息吗? +At(Robot,CoffeeTable) 请把咖啡机移到CoffeeTable附近。 +At(Robot,CoffeeTable) 请前往CoffeeTable。 +At(Robot,CoffeeTable) 您好,我是一名人工智能助手,请问有什么我可以帮您的? +At(Robot,Bar2) 您好,我需要去Bar2。 +At(Robot,Bar2) 您好,机器人服务员,请问您能帮我前往Bar2吗? +At(Robot,Bar2) 您好,我是一名AI助手,无法移动到特定的位置。但我会尽力为您提供帮助。您想前往Bar2吗?如果有其他问题,欢迎随时告诉我。 +At(Robot,Table1) 请把菜单送到Table 1。 +At(Robot,Table1) 请前往Table1。 +At(Robot,Table1) 您好,我能前往Table1位置吗? +At(Robot,Table2) 请带领我到Table 2。 +At(Robot,Table2) 请前往Table2。 +At(Robot,Table2) 您好!请问您需要我前往Table2位置吗? +At(Robot,Table3) 请把服务生叫来Table 3。 +At(Robot,Table3) 请去Table3。 +At(Robot,Table3) 您好,我需要您前往Table3位置。 +On(Softdrink,Bar) 请将Softdrink放在Bar那个位置。 +On(Softdrink,Bar) 请把Softdrink拿到Bar位置。 +On(Softdrink,WaterTable) 您好,机器人服务员!请问能帮我将Softdrink放在WaterTable的位置上吗?谢谢! +On(Softdrink,WaterTable) 请把Softdrink拿到WaterTable的位置。 +On(Softdrink,CoffeeTable) 请将Softdrink放在CoffeeTable那个位置。 +On(Softdrink,CoffeeTable) 请将Softdrink拿到CoffeeTable的位置。 +On(Softdrink,Bar2) 您好,机器人服务员!请问能否帮我放一下Softdrink到Bar2的位置呢?谢谢! +On(Softdrink,Bar2) 请把Softdrink拿到Bar2的位置。 +On(Softdrink,Table1) 请将Softdrink放在Table1的位置。 +On(Softdrink,Table1) 请把Softdrink拿到Table 1的位置。 +On(Softdrink,Table2) 您好,机器人服务员!请将Softdrink放在Table 2的位置。谢谢! +On(Softdrink,Table2) 请将Softdrink拿到Table 2的位置。 +On(Softdrink,Table3) 您好,机器人服务员!请问能否将Softdrink放在Table3的位置上? +On(Softdrink,Table3) 请将Softdrink拿到Table 3的位置。 +On(BottledDrink,Bar) 请将瓶装饮料放在酒吧那个位置。 +On(BottledDrink,Bar) 请将瓶装饮料送到酒吧区域。 +On(BottledDrink,WaterTable) 请将瓶装饮料放在水桌那个位置。 +On(BottledDrink,WaterTable) 请把瓶装饮料拿到水桌的位置。 +On(BottledDrink,CoffeeTable) 请将瓶装饮料放在咖啡桌那个位置。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料放在咖啡桌的位置。 +On(BottledDrink,Bar2) 请将瓶装饮料放在 Bar 2 的位置。 +On(BottledDrink,Bar2) 请把瓶装饮料送到酒吧2号位置。 +On(BottledDrink,Table1) 您好,机器人服务员!请将瓶装饮料放在Table1的位置上。谢谢! +On(BottledDrink,Table1) 请将瓶装饮料拿到Table 1的位置。 +On(BottledDrink,Table2) 请将Bottled Drink放在Table 2的位置。 +On(BottledDrink,Table2) 请把瓶装饮料送到Table2位置。 +On(BottledDrink,Table3) 请将瓶装饮料放在Table3的位置上。 +On(BottledDrink,Table3) 请把瓶装饮料拿到Table3的位置。 +On(Yogurt,Bar) 您好,请问您需要将酸奶放在哪个位置? +On(Yogurt,Bar) 请把Yogurt送到Bar位置。 +On(Yogurt,WaterTable) 请将Yogurt放在WaterTable的位置上。 +On(Yogurt,WaterTable) 请把Yogurt送到WaterTable位置。 +On(Yogurt,CoffeeTable) 请将Yogurt放在CoffeeTable那个位置。 +On(Yogurt,CoffeeTable) 请把Yogurt送到CoffeeTable那里。 +On(Yogurt,Bar2) 您好,机器人服务员!请帮我将酸奶(Yogurt)放在 Bar2 的位置上。谢谢! +On(Yogurt,Bar2) 请将Yogurt送到Bar2位置。 +On(Yogurt,Table1) 您好,机器人服务员!请将酸奶(Yogurt)放到Table1的位置上。谢谢! +On(Yogurt,Table1) 请将Yogurt拿到Table 1的位置。 +On(Yogurt,Table2) 请将 Yogurt 放在 Table2 的那个位置。 +On(Yogurt,Table2) 请将 Yogurt 拿到 Table 2 的位置。 +On(Yogurt,Table3) 您好,请问可以帮我将Yogurt放在Table3的位置吗? +On(Yogurt,Table3) 请将Yogurt放在Table 3的位置上。 +On(ADMilk,Bar) 请将AD Milk放在Bar位置。 +On(ADMilk,Bar) 请把ADMilk拿到Bar位置。 +On(ADMilk,WaterTable) 请将AD Milk放在 WaterTable 的那个位置。 +On(ADMilk,WaterTable) 您好,请问能帮我拿一下ADMilk到WaterTable的位置吗? +On(ADMilk,CoffeeTable) 您好,我需要您将ADMilk放在CoffeeTable那个位置。 +On(ADMilk,CoffeeTable) 请将AD Milk拿到Coffee Table的位置。 +On(ADMilk,Bar2) 请将AD Milk放置在Bar 2的位置。 +On(ADMilk,Bar2) 请把ADMilk拿到Bar2位置。 +On(ADMilk,Table1) 请将ADMilk放到Table1的位置。 +On(ADMilk,Table1) 请将ADMilk搬到Table1的位置。 +On(ADMilk,Table2) 请将ADMilk放在Table2的位置。 +On(ADMilk,Table2) 请把ADMilk搬到Table2的位置。 +On(ADMilk,Table3) 请将ADMilk放在Table3的位置。 +On(ADMilk,Table3) 您好,服务员!能帮我拿一下ADMilk到Table3位置吗? +On(MilkDrink,Bar) 请将牛奶饮料放在吧台那个位置。 +On(MilkDrink,Bar) 请把牛奶饮料拿到酒吧位置。 +On(MilkDrink,WaterTable) 请将牛奶饮料放在水桌那个位置。 +On(MilkDrink,WaterTable) 请把牛奶饮料拿到水 table 位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料放在咖啡桌那个位置。 +On(MilkDrink,CoffeeTable) 请将牛奶饮料递送到咖啡桌位置。 +On(MilkDrink,Bar2) 请将牛奶饮料放在吧台2的位置。 +On(MilkDrink,Bar2) 请把牛奶饮料递送到酒吧2号位置。 +On(MilkDrink,Table1) 请将牛奶饮料放在Table1的位置上。 +On(MilkDrink,Table1) 请把牛奶饮料拿到Table1的位置。 +On(MilkDrink,Table2) 请将牛奶饮料放到桌子2的位置。 +On(MilkDrink,Table2) 请把牛奶饮料送到Table2位置。 +On(MilkDrink,Table3) 请将牛奶饮料放在桌3的位置。 +On(MilkDrink,Table3) 请将牛奶饮料拿到 table 3 的位置。 +On(Milk,Bar) 请将牛奶放在酒吧那个位置。 +On(Milk,Bar) 请把牛奶拿到酒吧位置。 +On(Milk,WaterTable) 请将牛奶放在水 table 的那个位置。 +On(Milk,WaterTable) 请把牛奶拿到 WaterTable 那里。 +On(Milk,CoffeeTable) 请将牛奶放在咖啡桌上的指定位置。 +On(Milk,CoffeeTable) 请把牛奶拿到咖啡桌的位置。 +On(Milk,Bar2) 请将牛奶放在 Bar2 的位置。 +On(Milk,Bar2) 请把牛奶放到Bar2的位置。 +On(Milk,Table1) 您好,机器人服务员!请将牛奶放在Table1的位置。 +On(Milk,Table1) 请把牛奶拿到Table1的位置。 +On(Milk,Table2) 请将牛奶放在Table2的位置。 +On(Milk,Table2) 请把牛奶放在Table2的位置上。 +On(Milk,Table3) 请将牛奶放在Table3的位置上。 +On(Milk,Table3) 请把牛奶拿到Table3的位置。 +On(VacuumCup,Bar) 请将VacuumCup放置在Bar位置。 +On(VacuumCup,Bar) 请把VacuumCup放到Bar位置。 +On(VacuumCup,WaterTable) 请将VacuumCup放置在WaterTable上。 +On(VacuumCup,WaterTable) 请把VacuumCup放到WaterTable的位置。 +On(VacuumCup,CoffeeTable) 请将VacuumCup放在CoffeeTable那个地方。 +On(VacuumCup,CoffeeTable) 请把VacuumCup放到CoffeeTable上。 +On(VacuumCup,Bar2) 请将VacuumCup放置在Bar2的位置上。 +On(VacuumCup,Bar2) 请把VacuumCup移到Bar2的位置。 +On(VacuumCup,Table1) 请将VacuumCup放置在Table1的位置上。 +On(VacuumCup,Table1) 请把VacuumCup移到Table1的位置。 +On(VacuumCup,Table2) 请将VacuumCup放到Table2的位置。 +On(VacuumCup,Table2) 请把VacuumCup放到Table2的位置。 +On(VacuumCup,Table3) 请将VacuumCup放置在Table3的位置上。 +On(VacuumCup,Table3) 请将VacuumCup移至Table3位置。 +Is(AC,0) 请问你能帮我关掉AC吗? +Is(AC,1) 请问你能帮我打开空调吗? +Is(ACTemperature,0) 尊敬的服务员,请问您能否将温度调高一些呢? +Is(ACTemperature,1) 请问你能将咖啡厅的温度调低一些吗? +Is(HallLight,0) 当然可以,请问需要我使用哪个开关来关闭HallLight呢? +Is(HallLight,1) 您好!请问您需要我帮助您开启还是关闭HallLight呢? +Is(TubeLight,0) 当然可以,请问您需要我使用哪个遥控器来关闭它呢? +Is(TubeLight,1) 您好,机器人服务员!请问您能帮我打开一下 tube light 吗?谢谢! +Is(Curtain,0) 请问你能把窗帘关上吗? +Is(Curtain,1) 请问你能把窗户帘打开一下吗? +Is(Chairs,0) 您好,请问您需要我帮助清理座位上的污渍吗? +Is(Chairs,1) 您好,我是您的顾客。我想请问您是否能帮我清理一下座位上的灰尘和垃圾? +Is(Floor,0) 您好,我能为您做些什么呢?如果您需要我帮忙打扫地板,请告诉我哪里需要清理,我会尽快为您处理。 +Is(Floor,1) 您好,我需要您帮助打扫一下地板。 +Is(Table1,0) 您好!请问您需要我为您做什么呢?如果您需要我清理Table1,请您告诉我需要使用什么清洁用品,我会按照您的指示进行操作。 +Is(Table1,1) 您好,请问需要我帮您打扫Table1吗? +Holding(Softdrink) 您好,我是一款人工智能助手,无法直接与现实世界进行交互。但我可以为您提供有关如何抓饮料的信息。您可以尝试用手指将Softdrink抓在手中。如果您需要更多帮助,请随时告诉我。 +Holding(Softdrink) 您好,我是您的机器人服务员。我能帮您拿住Softdrink吗? +Holding(BottledDrink) 我能帮我拿起那瓶饮料吗? +Holding(BottledDrink) 您好!请问您需要我帮您一直拿着这瓶饮料吗? +Holding(Yogurt) 请问你能帮我拿一下 yogurt 吗? +Holding(Yogurt) 您好,我可以帮助您更好地理解和使用我们的服务。请问您需要我为您拿取什么商品呢? +Holding(ADMilk) 你能帮我拿一下AD Milk吗? +Holding(ADMilk) 您好,我需要点一杯AD Milk。麻烦您能帮我拿一下吗? +Holding(MilkDrink) 我想要一杯牛奶饮料,能帮我把它端过来吗? +Holding(MilkDrink) 我需要你一直拿着牛奶饮料。 +Holding(Milk) 您好,请问有什么我可以帮助您的? +Holding(Milk) 您好,我是您的机器人服务员。请问有什么我可以帮助您的吗? +Holding(VacuumCup) 您好!请问您需要什么帮助? +Holding(VacuumCup) 您好!请问您需要我帮助您一直拿着VacuumCup吗? +Holding(Nothing) 你能帮我把"Nothing"拿在手里吗? +Holding(Nothing) 您好!作为您的机器人服务员,我会尽力满足您的要求。请问您需要我帮忙做什么呢? +On(Coffee,Bar) 当然可以!请问您想要什么口味的咖啡呢? +On(Coffee,Bar) 请给我一杯咖啡,并将其送到吧台。 +On(Coffee,WaterTable) 当然可以,请告诉我您想喝的咖啡口味,我会为您制作一杯美味的咖啡,然后将其送到WaterTable桌旁。 +On(Coffee,WaterTable) 请给我一杯咖啡,并将其送到 WaterTable 那里。 +On(Coffee,CoffeeTable) 您好,我是一名机器人服务员。我能为您制作一杯咖啡,并将其端到CoffeeTable上吗? +On(Coffee,CoffeeTable) 请给我一杯咖啡,并把它送到Coffee Table那里。 +On(Coffee,Bar2) 当然可以,请告诉我您想要什么口味的咖啡,我会为您制作并在准备好后把咖啡端到Bar 2。 +On(Coffee,Bar2) 请给我一杯咖啡,并将其送到Bar2。 +On(Coffee,Table1) 当然可以!请问您需要什么口味的咖啡呢? +On(Coffee,Table1) 请给我一杯咖啡,并将其送到Table1。 +On(Coffee,Table2) 您好,机器人服务员!我想要一杯咖啡,并希望它能够被送到 Table 2。 +On(Coffee,Table2) 请为我准备一杯咖啡,并将其送到Table 2。 +On(Coffee,Table3) 您好,机器人服务员!请问您能帮我制作一杯咖啡,然后将其端到Table 3吗?谢谢! +On(Coffee,Table3) 请为我准备一杯咖啡,并将其送到Table 3。 +On(Water,Bar) 您好,我需要一杯水,请能帮我制作并送到酒吧处谢谢! +On(Water,Bar) 我需要一杯水,并希望它能够被送到酒吧区域。 +On(Water,WaterTable) 您好,我需要一杯水,并将它送到水桌子上。 +On(Water,WaterTable) 请为我准备一些水,并将其送到水桌 here。 +On(Water,CoffeeTable) 您好,我需要一杯水,并将它送到咖啡桌 here。 +On(Water,CoffeeTable) 请给我倒一杯水,然后将其放在咖啡桌子上。 +On(Water,Bar2) 当然可以!请问您在哪个咖啡厅?我想请您把水送到 Bar 2。 +On(Water,Bar2) 我需要一杯水,并希望它能够被送到Bar2那里。 +On(Water,Table1) 您好,我是一名机器人服务员。请问您需要什么帮助? +On(Water,Table1) 请给我一杯水,并将其送到Table1位置。 +On(Water,Table2) 当然可以!请问您需要什么温度的水呢?并且您想要在哪个桌子上 receiving 水呢? +On(Water,Table2) 请给我倒一杯水,并把水送到Table 2那里。 +On(Water,Table3) 您好,机器人服务员!请问您能给我准备一杯水,然后将其送到 Table 3 位置吗?谢谢! +On(Water,Table3) 请给我倒一杯水,并将其送到 Table 3 桌子上。 +On(Dessert,Bar) 您好,我需要一份甜点并将其送到吧台。 +On(Dessert,Bar) 请送一些甜点来,并将其送到吧台处。 +On(Dessert,WaterTable) 您好,我需要一份甜点,并希望它能够被送到名为"WaterTable"的水 table 那里。 +On(Dessert,WaterTable) 请为我准备一些甜点,并将它送到watertable来。 +On(Dessert,CoffeeTable) 您好,我是一名机器人服务员。我能为您制作甜点,并将其送到咖啡桌旁边。请问您想点什么类型的甜点呢? +On(Dessert,CoffeeTable) 请为我准备一些甜点,并将其送到咖啡桌这里。 +On(Dessert,Bar2) 您好,我需要一份甜点,并希望它能够被送到酒吧2。 +On(Dessert,Bar2) 请为我准备一些甜点,并将其送到Bar2。 +On(Dessert,Table1) 您好,机器人服务员!我想要一份甜点,并希望它能够被送到Table1那里。 +On(Dessert,Table1) 请为我准备一些甜点,并将其送到Table1。 +On(Dessert,Table2) 您好,我是一名机器人服务员。我能为您制作甜点并将它送到Table 2吗? +On(Dessert,Table2) 请给我上甜点,并将它送到Table2那里。 +On(Dessert,Table3) 您好,机器人服务员!请问您能帮我制作一份甜点并将其送到Table 3吗? +On(Dessert,Table3) 请为我准备一些甜点,并将其送到Table3桌子上。 diff --git a/robowaiter/behavior_tree/dataset1224/expansion_out/output1.txt b/robowaiter/behavior_tree/dataset1224/expansion_out/output1.txt new file mode 100644 index 0000000..ddbd385 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/expansion_out/output1.txt @@ -0,0 +1,388 @@ +At(Robot,Bar) 嘿,来酒吧了啊? +At(Robot,Bar) 你可以去前台一下吗? +At(Robot,Bar) 当然可以,我可以过去帮忙吗? +At(Robot,WaterTable) 哎呀,你终于出现了啊!赶紧过来坐一下,我给你倒杯茶水。 +At(Robot,WaterTable) 嘿,你能帮我再去茶水桌那儿拿一下水吗? +At(Robot,WaterTable) 当然可以啊,我马上就去茶水桌那儿。 +At(Robot,CoffeeTable) 哎呀,你终于出现了啊!赶紧过来坐一下,我给你倒杯咖啡。 +At(Robot,CoffeeTable) 你可以去 coffee table 一下哦。 +At(Robot,CoffeeTable) 当然可以呀!你可以去咖啡桌的那边坐下来,我就在这边的桌子旁陪着你。 +At(Robot,Bar2) 好的,我可以到另一个吧台帮忙吗? +At(Robot,Bar2) 你可以去另一个酒吧台坐坐吗? +At(Robot,Bar2) 当然可以,您想让我去哪个吧台呢? +At(Robot,Table1) 好的,我來試著把第一張桌子搬起來。 +At(Robot,Table1) 你可以去第一桌啊,那里的东西比较好吃。 +At(Robot,Table1) 当然可以,你可以帮我稳住身体,然后我就能过去坐在第一张桌子上啦! +At(Robot,Table2) 请把第二桌子的东西拿过来。 +At(Robot,Table2) 你可以去第二桌啊。 +At(Robot,Table2) 当然可以,你想去哪一张桌子呢? +At(Robot,Table3) 好的,我马上去拿第三张桌子。 +At(Robot,Table3) 请你到第三桌子上坐一下。 +At(Robot,Table3) 当然可以,移到第三张桌子那边怎么样? +On(Softdrink,Bar) 请把饮料放到酒吧柜台上。 +On(Softdrink,Bar) 嘿,能帮我拿一下饮料吗?放到酒吧台上谢谢! +On(Softdrink,WaterTable) 你可以把软饮放在茶水桌那个地方哦。 +On(Softdrink,WaterTable) 你可以把饮料放到茶水桌那儿呀。 +On(Softdrink,CoffeeTable) 你可以把饮料放在咖啡桌那个地方呀。 +On(Softdrink,CoffeeTable) 你可以把饮料放到咖啡桌附近呀。 +On(Softdrink,Bar2) 请你把饮料放在另一个酒吧台的位置。 +On(Softdrink,Bar2) 请帮我从一个酒吧台拿杯饮料,放到另一个酒吧台吧。 +On(Softdrink,Table1) 请你把饮料放在第一桌的位子上面。 +On(Softdrink,Table1) 请把饮料放到第一桌的位子上。 +On(Softdrink,Table2) 请你把饮料放到第二桌那个地方。 +On(Softdrink,Table2) 请你把饮料放到第二桌的位置。 +On(Softdrink,Table3) 请你把饮料放到第三桌那个地方。 +On(Softdrink,Table3) 请给我一瓶饮料,放到第三桌子上。 +On(BottledDrink,Bar) 请把瓶装饮料放到酒吧那个地方。 +On(BottledDrink,Bar) 你可以把瓶装饮料放到酒吧台面上。 +On(BottledDrink,WaterTable) 你可以把瓶装饮料放在茶水桌那个地方呀。 +On(BottledDrink,WaterTable) 请把瓶装饮料放到茶水桌那儿吧。 +On(BottledDrink,CoffeeTable) 把瓶装饮料放到咖啡桌那个地方吧。 +On(BottledDrink,CoffeeTable) 请把瓶装饮料放到咖啡桌附近。 +On(BottledDrink,Bar2) 请把瓶装饮料放 到另一个酒吧那个地方。 +On(BottledDrink,Bar2) 你可以把瓶装饮料拿到另一个酒吧台的位置。 +On(BottledDrink,Table1) 请把瓶装饮料放在第一桌的相应位置。 +On(BottledDrink,Table1) 请你把瓶装饮料放到第一桌子的位置。 +On(BottledDrink,Table2) 请你把瓶装饮料放到第二大桌子的那个位置。 +On(BottledDrink,Table2) 请您把瓶装饮料放到第二桌的位置。 +On(BottledDrink,Table3) 请把瓶装饮料放到第三桌的那一边。 +On(BottledDrink,Table3) 请您把瓶装饮料放到第三桌子上。 +On(Yogurt,Bar) 把酸奶放在吧台那个位置。 +On(Yogurt,Bar) 请把酸奶放到吧台哦! +On(Yogurt,WaterTable) 把酸奶放到茶水桌那个地方哦。 +On(Yogurt,WaterTable) 你可以把酸奶放到茶水桌附近呀。 +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌那个地方。 +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌附近。 +On(Yogurt,Bar2) 请你把酸奶放到另一个吧台那个位置。 +On(Yogurt,Bar2) 请把酸奶放到另一个台子的位置吧。 +On(Yogurt,Table1) 请把酸奶放在第一桌的位置哦! +On(Yogurt,Table1) 请把酸奶放到第一桌的位置。 +On(Yogurt,Table2) 请把酸奶放到第二桌那个位置哦! +On(Yogurt,Table2) 你可以把酸奶放到第二桌的位置呀。 +On(Yogurt,Table3) 请把酸奶放到第三桌的那儿吧。 +On(Yogurt,Table3) 请你把酸奶放到第三桌子上。 +On(ADMilk,Bar) 把AD钙奶放到吧台那个地方。 +On(ADMilk,Bar) 请把AD钙奶放到吧台哦! +On(ADMilk,WaterTable) 好的,我帮你把AD钙奶放到茶水桌那个地方。 +On(ADMilk,WaterTable) 你可以把AD钙奶放到茶水桌附近呀。 +On(ADMilk,CoffeeTable) 好的,AD钙奶就放在咖啡桌那个地方吧。 +On(ADMilk,CoffeeTable) 你可以把AD钙奶放到咖啡桌旁边呀。 +On(ADMilk,Bar2) 你能否把AD钙奶放到另一个吧台的位置呢? +On(ADMilk,Bar2) 你可以把AD钙奶放到另一个酒吧台的位置上。 +On(ADMilk,Table1) 请把AD钙奶放到第一桌的位子上面。 +On(ADMilk,Table1) 请把AD钙奶放到第一桌的位置。 +On(ADMilk,Table2) 请把AD钙奶放到第二桌的那儿吧。 +On(ADMilk,Table2) 请把AD钙奶放到第二桌的位置。 +On(ADMilk,Table3) 请把AD钙奶放到第三桌的那儿吧。 +On(ADMilk,Table3) 请把AD钙奶放到第三桌子的位置。 +On(MilkDrink,Bar) 把牛奶饮料放到吧台那个地方。 +On(MilkDrink,Bar) 你可以把牛奶饮料拿到吧台前面。 +On(MilkDrink,WaterTable) 你可以把牛奶饮料放在茶水桌那个地方哦。 +On(MilkDrink,WaterTable) 你可以把牛奶饮料放到茶水桌附近呀。 +On(MilkDrink,CoffeeTable) 你可以把牛奶放到了咖啡桌那个地方哦。 +On(MilkDrink,CoffeeTable) 请你把牛奶饮料放到咖啡桌附近呀。 +On(MilkDrink,Bar2) 请你把牛奶饮料放到另一个吧台那个位置,好吗? +On(MilkDrink,Bar2) 请把牛奶饮料放到另一个酒吧台的位置。 +On(MilkDrink,Table1) 请把牛奶放第一桌的位置哦! +On(MilkDrink,Table1) 请把牛奶饮料放到第一桌的位子上。 +On(MilkDrink,Table2) 你可以把牛奶放 到这张桌子的第二個位置。 +On(MilkDrink,Table2) 请你把牛奶饮料放到第二桌的位置。 +On(MilkDrink,Table3) 请你把牛奶放到第三桌的那儿吧。 +On(MilkDrink,Table3) 请你把牛奶饮料放到第三桌子上。 +On(Milk,Bar) 请把牛奶放到吧台那个地方。 +On(Milk,Bar) 请把牛奶放到吧台的位置哦。 +On(Milk,WaterTable) 你可以把牛奶放到茶水桌那个地方哦。 +On(Milk,WaterTable) 请你把牛奶放到茶水桌那个地方。 +On(Milk,CoffeeTable) 你可以把牛奶放在咖啡桌上的那个地方哦。 +On(Milk,CoffeeTable) 你可以把牛奶放到咖啡桌旁边呀,这样就能方便地喝牛奶了。 +On(Milk,Bar2) 请你把牛奶放到另一个吧台那个位置。 +On(Milk,Bar2) 你可以把牛奶放过去一点。 +On(Milk,Table1) 请把牛奶放到第一桌子的位置。 +On(Milk,Table1) 请你把牛奶放到第一桌的位置。 +On(Milk,Table2) 请把牛奶放到第二桌子的那个位置哦! +On(Milk,Table2) 请你把牛奶放到第二桌的位置。 +On(Milk,Table3) 你可以把牛奶放 third table 的那个位置哦! +On(Milk,Table3) 请把牛奶放到第三桌子上。 +On(VacuumCup,Bar) 请把保温杯放 到吧台那个地方。 +On(VacuumCup,Bar) 你可以把保温杯放到吧台哦。 +On(VacuumCup,WaterTable) 请把保温杯放茶水桌那个地方哦。 +On(VacuumCup,WaterTable) 请你把保温杯放到茶水桌那儿。 +On(VacuumCup,CoffeeTable) 你可以把你的保温杯放到咖啡桌那个地方呀。 +On(VacuumCup,CoffeeTable) 请把保温杯放到咖啡桌那里。 +On(VacuumCup,Bar2) 你可以把保温杯放到另一个吧台那个地方呀。 +On(VacuumCup,Bar2) 你可以把保温杯放到另一个酒吧台的位置呀。 +On(VacuumCup,Table1) 请把保温杯放到第一桌子的那个位置。 +On(VacuumCup,Table1) 请把保温杯放到第一桌子的位置。 +On(VacuumCup,Table2) 请把保温杯放到第二桌子的那个位置。 +On(VacuumCup,Table2) 你可以把保温杯放到第二桌子的地方。 +On(VacuumCup,Table3) 请把保温杯放到了第三张桌子的那个地方。 +On(VacuumCup,Table3) 请把保温杯放到第三桌子的地方。 +Is(AC,0) 当然可以,您想什么时候关呢? +Is(AC,1) 当然可以,我马上为您打开空调。 +Is(ACTemperature,0) 当然可以!你把空调的温度调高一点吗? +Is(ACTemperature,1) 可以啊,您要把空调的温度调低一些吗? +Is(HallLight,0) 当然可以,我马上为您关掉大厅的灯。 +Is(HallLight,1) 当然可以,我马上为你开启大厅的灯光。 +Is(TubeLight,0) 当然可以,你只需按一下筒灯的开关按钮即可。 +Is(TubeLight,1) 当然可以,请告诉我你想要多亮度的筒灯呢? +Is(Curtain,0) 好的,我马上帮您关窗帘。 +Is(Curtain,1) 当然可以,您想让阳光照进房间吗? +Is(Chairs,0) 当然可以,把椅子弄脏一点没问题。不过要注意,我是一个人工智能助手,虽然可以理解您的请求,但实际操作能力有限,可能不能非常完美地完成这个任务。 +Is(Chairs,1) 当然可以,亲爱的。把椅子擦干净需要一些努力和耐心,但我会帮您做得干干净净的。 +Is(Floor,0) 你能把地板弄脏一点吗? +Is(Floor,1) 能帮我打扫下地板吗? +Is(Table1,0) 第一,你可以把桌子弄脏一点。 +Is(Table1,1) 当然可以,你想要我尽快完成这个任务吗? +Holding(Softdrink) 你能抓住软饮吗? +Holding(Softdrink) 你能不能一直拿着软饮呢? +Holding(BottledDrink) 能抓住瓶装饮料吗?当然可以啊! +Holding(BottledDrink) 你能一直拿着瓶装饮料吗?当然可以啊,只要喜欢喝 bottled water 或者饮料,就可以一直拿着瓶装饮料。不过要注意保持卫生,不要让瓶子变得太脏或者有细菌。如果觉得手持瓶装饮料不方便,也可以选择使用杯子或者其他更方便的容器来盛放饮料。 +Holding(Yogurt) 您可以把酸奶捏在手里,就像您捏着冰淇淋一样。 +Holding(Yogurt) 嗯,我可以理解你想要一直吃酸奶的想法,但是要注意不要过量食用。酸奶是非常健康的食品,富含蛋白质和钙质,对身体有很多好处。不过,每个人的身体状况和需求不同,所以要根据自己的实际情况来适量食用。如果你想要更好地享受酸奶的好处,可以尝试搭配一些水果或者坚果,让口感更丰富多彩。 +Holding(ADMilk) 你能捧起一罐AD钙奶吗? +Holding(ADMilk) 你能不能一直拿着AD钙奶呀? +Holding(MilkDrink) 你能把牛奶饮料抓在手里啊? +Holding(MilkDrink) 你能一直拿著牛奶 drink 嗎? +Holding(Milk) 哈哈,当然可以啦!你可以把牛奶抓在手里,就像你抓住一个球一样。不过要小心,不要让牛奶洒出来哦! +Holding(Milk) 嘿,你可以一直拿着牛奶,不过我得提醒你,牛奶保质期短,不要喝坏掉的哦! +Holding(VacuumCup) 你能 hand 住保温杯 吗? +Holding(VacuumCup) 你能不能一直拿著保温杯呢? +Holding(Nothing) 哈哈,把"nothing"抓在手里啊。这个表达好像不太对哦,英文里"nothing"是指没有任何东西的意思,不能被抓住。你是要问如何应对"无所适从"的情况吗?可以理解为"nothing happens"或者"没有什么事情发生"。 +Holding(Nothing) 当然可以!如果你觉得需要一直拿着某个东西,那完全可以。 +On(Coffee,Bar) 当然可以!请问您需要什么口味的咖啡呢?我可以为您制作一杯美味的咖啡,然后端到吧台供您享用。 +On(Coffee,Bar) 嘿,老板,能不能给我弄杯咖啡,然后把咖啡杯拿到吧台上来? +On(Coffee,WaterTable) 当然可以!我马上为您制作一杯香浓的咖啡,然后端到茶水桌上来。 +On(Coffee,WaterTable) 好的,主人。请给我来杯咖啡,然后把咖啡端到茶水桌这里来。谢谢! +On(Coffee,CoffeeTable) 当然可以!我马上为您制作一杯香浓的咖啡,然后端到咖啡桌上来。 +On(Coffee,CoffeeTable) 好的,主人。请给我一杯咖啡,然后把咖啡端到这个咖啡桌上来,谢谢! +On(Coffee,Bar2) 当然可以!我马上为您制作一杯咖啡,然后端到这个吧台这里来。 +On(Coffee,Bar2) 好的,我给你拿杯咖啡,放在另一个吧台给你。 +On(Coffee,Table1) 当然可以!我马上为您制作一杯咖啡,然后端到第一张桌子上来。 +On(Coffee,Table1) 请给我拿杯咖啡,然后把它放到这张桌子的位置上。 +On(Coffee,Table2) 当然可以!你想要什么口味的咖啡呢?然后我就可以把咖啡端到你所在的桌子了。 +On(Coffee,Table2) 嘿,老板,我想喝杯咖啡,然后你能把它端到这里来吗? +On(Coffee,Table3) 当然可以!请问您需要什么口味的咖啡呢?我好准备给您制作。 +On(Coffee,Table3) 嘿,老板,能不能给我来杯咖啡?然后把咖啡端到这张桌子的 third 位置上来,谢谢! +On(Water,Bar) 当然可以!您可以告诉我您需要多少水,然后我会给您端过来。 +On(Water,Bar) 好的,我给您倒杯水,然后就放在吧台这里。 +On(Water,WaterTable) 当然可以!请问您需要我怎么制作水呢? +On(Water,WaterTable) 好的,我给你倒杯水,然后把它放在茶水桌上。 +On(Water,CoffeeTable) 当然可以!我立刻为您制作一杯水,然后把它端到咖啡桌上来。请问您需要加些什么其他的配料呢? +On(Water,CoffeeTable) 好的,主人,请给我倒杯水,然后把水端到咖啡桌上来,谢谢! +On(Water,Bar2) 当然可以!我马上为您制作一杯水,然后端到这里来。 +On(Water,Bar2) 好的,请给我倒一杯水,然后把它端到这个吧台这里来。 +On(Water,Table1) 当然可以!请问你需要多少水呢?我一会儿就去烧开水,然后把它端到第一张桌子上。 +On(Water,Table1) 好的,我给你倒杯水,然后把它放在第一桌子上。 +On(Water,Table2) 当然可以!我马上给您拿来。 +On(Water,Table2) 能不能给我倒杯水啊?然后把水端到这张桌子的另一边去。 +On(Water,Table3) 当然可以!请您把第三张桌子的位置告诉我,我马上为您制作一杯水送到那儿去。 +On(Water,Table3) 好的,请给我一杯水,然后把它放在第三张桌子上。 +On(Dessert,Bar) 当然可以!我特别擅长制作各种美味的点心、甜品和糕点。如果您需要的话,我可以在吧台为您准备一份精致的小点心或甜品品尝。 +On(Dessert,Bar) 行啊,点些小吃或甜品,然后让它们送到酒吧台这附近来。 +On(Dessert,WaterTable) 你能不能帮我做些点心或甜品,然后把它端到茶水桌这儿呀? +On(Dessert,WaterTable) 好的,请给我点些小吃或甜品,然后把它端到茶水桌这里来。 +On(Dessert,CoffeeTable) 当然可以!我是一个人工智能助手,虽然不能亲自制作点心或甜品,但我可以为您提供各种食谱和做法。您可以根据我的建议,尝试在家自己制作美味的点心或甜品,然后带到咖啡桌分享。这样不仅可以享受美食,还可以一起度过美好时光。 +On(Dessert,CoffeeTable) 行啊,您想尝点什么点心或甜品呢?然后我给您端过来,放在这咖啡桌上。 +On(Dessert,Bar2) 当然可以!我擅长制作各种美味的点心与甜品,可以随时为你端来。请问你需要什么口味或样式的点心呢? +On(Dessert,Bar2) 行啊,点些小吃或甜品,然后给您端过去。 +On(Dessert,Table1) 当然可以,我 ability做点心和甜品,把它们放在桌子上给你吃。 +On(Dessert,Table1) 好的,我给你准备了一些小吃和甜品,现在 brings it to your table.(请注意,这里用 "brings" 代替 "portrays" 以符合口语化的风格。) +On(Dessert,Table2) 当然可以!我可以在第一张桌子上制作点心或甜品,然后把它们端到第二张桌子那里。请问你有什么特别喜欢的点心或甜品口味吗? +On(Dessert,Table2) 好的,主人。请给我提供一些点心或甜品,我会把它们放在第二张桌子上。 +On(Dessert,Table3) 当然可以!我马上为您制作一些美味的点心或甜品,然后 brings it to the third table for you to enjoy. +On(Dessert,Table3) 好的,请问您想点什么种类的点心或甜品呢?然后我会把它们端到第三张桌子上。 +At(Robot,Bar) 好的,那我们来聊聊吧。你想聊什么呢? +At(Robot,Bar) 你去一下bar吧。 +At(Robot,Bar) 你能到那个酒吧的哪个位置吗? +At(Robot,WaterTable) 当然可以! WaterTable 是一个很棒的实时水文气象数据平台。你想了解哪个地区的天气情况呢? +At(Robot,WaterTable) 你去一下WaterTable吧! +At(Robot,WaterTable) 当然可以啊!你想要去哪个地方呢? +At(Robot,CoffeeTable) 嘿,我能去拿一下咖啡桌吗? +At(Robot,CoffeeTable) 你去一下CoffeeTable吧。 +At(Robot,CoffeeTable) 当然可以,我马上就到CoffeeTable那儿。 +At(Robot,Bar2) 好的,我来试试看 Bar 2。 +At(Robot,Bar2) 你能去bar2吗? +At(Robot,Bar2) 当然可以啊,我马上就去Bar2那儿! +At(Robot,Table1) 当然可以!请您提供一下 Table1 的内容,我会尽量用更口语化和合理化的方式来表述它。 +At(Robot,Table1) 嘿,你能不能去一下Table1呢? +At(Robot,Table1) 当然可以呀,我马上就过去。 +At(Robot,Table2) 当然可以!请您提供一下Table2的内容和您想要我为您做什么,我会尽量帮您进行合理的调整和优化。 +At(Robot,Table2) 好的,我去一下Table2。 +At(Robot,Table2) 当然可以,我马上就过去。 +At(Robot,Table3) 当然可以!请问您需要我帮忙做什么呢? +At(Robot,Table3) 嘿,去Table3看看怎么样?可能有新东西哦! +At(Robot,Table3) 当然可以,我马上就到Table3那儿。 +On(Softdrink,Bar) 你可以这样跟Bar说:“嘿,Bar,你能帮我把Softdrink放好吗?谢谢!” +On(Softdrink,Bar) 请把Softdrink拿到Bar那儿。 +On(Softdrink,WaterTable) 你可以把软饮放在水桌那个地方哦。 +On(Softdrink,WaterTable) 你可以把Soft drink拿到水桌的位置呀。 +On(Softdrink,CoffeeTable) 您可以尝试这样说:“嘿,能否帮我把软饮料放在咖啡桌那个位置呀?” +On(Softdrink,CoffeeTable) 你可以把Softdrink拿到CoffeeTable前面啊。 +On(Softdrink,Bar2) 你可以把软饮放在酒吧2的位置。 +On(Softdrink,Bar2) 你可以把Softdrink拿到Bar2的位置呀。 +On(Softdrink,Table1) 你可以把这个软饮料放到表格1的第二行。 +On(Softdrink,Table1) 请把Softdrink放到Table1的位置上。 +On(Softdrink,Table2) 你可以把 Softdrink 放到 Table2 的那个位置哦! +On(Softdrink,Table2) 你可以把Softdrink移到Table2的位置呀。 +On(Softdrink,Table3) 你可以把 Softdrink 放到 Table3 的那个位置哦! +On(Softdrink,Table3) 你可以把Softdrink拿到Table3那里。 +On(BottledDrink,Bar) 请你把Bottled Drink放到Bar那个地方。 +On(BottledDrink,Bar) 请把 bottled drink 拿到 Bar 那里。 +On(BottledDrink,WaterTable) 你能把 bottled drink 放到 water table 那个地方吗? +On(BottledDrink,WaterTable) 你可以把瓶装饮料放到水桌上了吗? +On(BottledDrink,CoffeeTable) 将瓶装饮料放在咖啡桌那个地方。 +On(BottledDrink,CoffeeTable) 你可以把 bottled drink 拿到咖啡桌 (CoffeeTable) 上。 +On(BottledDrink,Bar2) 你能把 "BottledDrink" 放到 "Bar2" 的位置上吗? +On(BottledDrink,Bar2) 请把 bottled drink 拿到 Bar2 的位置。 +On(BottledDrink,Table1) 你可以把"Bottled Drink"放到"Table1"的位置。 +On(BottledDrink,Table1) 请你把瓶装饮料拿到Table1那儿。 +On(BottledDrink,Table2) 你把Bottled Drink放到Table2那个地方吧。 +On(BottledDrink,Table2) 你可以把 bottled drink 拿到 Table 2 那里。 +On(BottledDrink,Table3) 你想把瓶装饮料放在Table3那个地方吗? +On(BottledDrink,Table3) 请把瓶装饮料放到桌子的第三位置。 +On(Yogurt,Bar) 你可以把酸奶放在吧台那个位置哦。 +On(Yogurt,Bar) 嘿,能否帮我拿一下酸奶(Yogurt)到酒吧(Bar)的位置呀? +On(Yogurt,WaterTable) 你可以把酸奶放在水 table 的那个地方。 +On(Yogurt,WaterTable) 你可以把酸奶放到水 table 那里一下吗? +On(Yogurt,CoffeeTable) 请把酸奶放到咖啡桌那个地方。 +On(Yogurt,CoffeeTable) 你可以把酸奶放到咖啡桌的位置。 +On(Yogurt,Bar2) 把Yogurt放到Bar2那个地方。 +On(Yogurt,Bar2) 你可以把酸奶放到酒吧的第二的位置。 +On(Yogurt,Table1) 请把酸奶放到表格1那个位置哦! +On(Yogurt,Table1) 请你把Yogurt移到Table1的位置上。 +On(Yogurt,Table2) 你可以把酸奶放到表格2那个位置哦。 +On(Yogurt,Table2) 你可以把酸奶放到桌子第二的位置。 +On(Yogurt,Table3) 您可以把酸奶放到表格三那个位置哦。 +On(Yogurt,Table3) 你可以把酸奶放到桌子第三的位置。 +On(ADMilk,Bar) 你能把ADMilk放到Bar那个地方吗? +On(ADMilk,Bar) 你可以把ADMilk放到Bar那里。 +On(ADMilk,WaterTable) 你可以把ADMilk放到WaterTable那个地方。 +On(ADMilk,WaterTable) 你可以把ADMilk放到WaterTable的位置啊。 +On(ADMilk,CoffeeTable) 你可以把ADMilk放到咖啡桌那个地方。 +On(ADMilk,CoffeeTable) 你可以把AD Milk放到咖啡桌旁边呀。 +On(ADMilk,Bar2) 请把ADMilk放到Bar2那个位置哦! +On(ADMilk,Bar2) 你可以把ADMilk放到Bar2的位置呀。 +On(ADMilk,Table1) 请把ADMilk放到Table1那个位置啦! +On(ADMilk,Table1) 能否帮我将ADMilk放到Table1的位置呢? +On(ADMilk,Table2) 你可以把ADMilk放到Table2那个地方哦。 +On(ADMilk,Table2) 你可以把ADMilk放到Table2的位置呀。 +On(ADMilk,Table3) 你能把ADMilk放到Table3那个地方吗? +On(ADMilk,Table3) 你可以把ADMilk放到Table3的位置呀。 +On(MilkDrink,Bar) 你可以这样说:“把牛奶饮料放到酒吧那个位置。” +On(MilkDrink,Bar) 你可以把牛奶带到酒吧位置吗? +On(MilkDrink,WaterTable) 你能将"MilkDrink"放到"WaterTable"的那个地方吗? +On(MilkDrink,WaterTable) 你可以把牛奶放到水桌的位置。 +On(MilkDrink,CoffeeTable) 你好!你可以把"MilkDrink"放到"CoffeeTable"那个地方。 +On(MilkDrink,CoffeeTable) 你可以把牛奶放到咖啡桌上了吗? +On(MilkDrink,Bar2) 你可以把"MilkDrink"放到"Bar2"那个地方。 +On(MilkDrink,Bar2) 请把牛奶饮料拿到酒吧2号位置。 +On(MilkDrink,Table1) 你可以这样跟朋友说:嘿,你知道吗,把"MilkDrink"放到"Table1"那个位置吧! +On(MilkDrink,Table1) 你可以把牛奶带到Table1那里吗? +On(MilkDrink,Table2) 你能把"MilkDrink"放到Table2那个地方吗? +On(MilkDrink,Table2) 你可以把牛奶饮料端到桌子2的位置吗? +On(MilkDrink,Table3) 你好!我明白你的要求,但是我没有找到与“MilkDrink”相关的内容。如果你能提供更多的信息或者上下文,我会更好地帮助你完成任务。 +On(MilkDrink,Table3) 你可以把牛奶带到桌子3去。 +On(Milk,Bar) 你把牛奶放酒吧的位置吧。 +On(Milk,Bar) 你可以帮我把牛奶放到酒吧的位置吗? +On(Milk,WaterTable) 你能帮我把牛奶放到水 table 那个地方吗? +On(Milk,WaterTable) 你可以把牛奶放到水 table 附近吗? +On(Milk,CoffeeTable) 你可以把牛奶放在咖啡桌那个地方。 +On(Milk,CoffeeTable) 你可以把牛奶放到咖啡桌的位置。 +On(Milk,Bar2) 你可以把牛奶放到酒吧2的位置。 +On(Milk,Bar2) 你可以把牛奶放到酒吧的第二個位置。 +On(Milk,Table1) 你可以这样跟Table1说:“Hey Table1, could you please move the Milk to that spot over there?” +On(Milk,Table1) 你可以把牛奶放到桌子的第一位置呀。 +On(Milk,Table2) 请把牛奶放到表2的那个位置。 +On(Milk,Table2) 请你把牛奶放到Table2的位置上。 +On(Milk,Table3) 你可以把牛奶放到表格三那个位置哦。 +On(Milk,Table3) 你可以把牛奶放到桌子的第三格里呀。 +On(VacuumCup,Bar) 你能把VacuumCup放到Bar的位置吗? +On(VacuumCup,Bar) 你可以把吸管杯放到酒吧位置吗? +On(VacuumCup,WaterTable) 你可以尝试这样说:“嘿,把VacuumCup放到WaterTable的位置吧。”这样更加口语化和亲近。 +On(VacuumCup,WaterTable) 你可以把吸尘器杯放在水 table 位置吗? +On(VacuumCup,CoffeeTable) 你可以把吸尘器杯放在咖啡桌那个地方。 +On(VacuumCup,CoffeeTable) 你可以把吸尘器(VacuumCup)放到咖啡桌(CoffeeTable)的位置。 +On(VacuumCup,Bar2) 你能把VacuumCup放到Bar2那个地方吗? +On(VacuumCup,Bar2) 你可以把VacuumCup放到Bar2的地方哦。 +On(VacuumCup,Table1) 你可以把这些内容换成: "把 VacuumCup 放到 Table1 的那个地方"。 +On(VacuumCup,Table1) 你可以把VacuumCup放到Table1的位置呀。 +On(VacuumCup,Table2) 你可以把VacuumCup放到Table2那个地方哦。 +On(VacuumCup,Table2) 你可以把VacuumCup放到Table2那里呀。 +On(VacuumCup,Table3) 你可以把这个吸管杯放到表格3的位置。 +On(VacuumCup,Table3) 你可以把VacuumCup放到Table3的位置呀。 +Is(AC,0) 当然可以,您需要我帮您关闭AC吗? +Is(AC,1) 你好,我能帮你做什么呢?关于打开AC的问题,我可能不太明白你的具体意思。如果你是想打开空调,请告诉我具体是哪个品牌的空调,这样我才能更好地帮助你。 +Is(ACTemperature,0) 当然可以!请告诉我您想将温度调到多少度呢? +Is(ACTemperature,1) 当然可以,你想要把温度调到多少度呢? +Is(HallLight,0) 当然可以,HallLight怎么样了?需要我帮你做些什么吗? +Is(HallLight,1) 当然可以!请问你需要我怎么操作呢? +Is(TubeLight,0) 当然可以!你想要立即关掉TubeLight吗? +Is(TubeLight,1) 当然可以!你只需按住"开”按钮,或在屏幕上点击一下就可以开启TubeLight了。 +Is(Curtain,0) 当然可以,您想关闭窗帘吗? +Is(Curtain,1) 当然可以,curtain(窗帘)打开了。 +Is(Chairs,0) 当然可以,你能把椅子弄脏一点吗? +Is(Chairs,1) 当然可以,你能帮我打扫一下椅子吗? +Is(Floor,0) 当然可以,不过我需要先声明一下,作为人工智能助手,我没有实体形象,所以不能直接去“操作”或“改变”现实环境。但我可以提供一些建议或者指导来帮助你完成任务。如果你想要打扫房间,可以告诉我具体是哪个部位需要清洁,然后我会给你相应的建议和步骤。 +Is(Floor,1) 当然可以,你让我来吧! +Is(Table1,0) 当然可以!不过我需要先了解一下 Table1 包含哪些内容,以及您想要修改的具体是哪方面。这样我才能更好地帮助您进行操作。 +Is(Table1,1) 当然可以,你有什么特别要求吗?比如需要清理什么物品或者怎么清洁? +Holding(Softdrink) 你能不能把soft drink抓在手里啊? +Holding(Softdrink) 你能一直拿着一罐饮料吗? +Holding(BottledDrink) 你能把瓶装饮料抓在手里吗? +Holding(BottledDrink) 你能一直拿着这瓶饮料吗? +Holding(Yogurt) 你能把酸奶抓在手里吗? +Holding(Yogurt) 你能一直抱着羊酸奶吗? +Holding(ADMilk) 你能捧着 AD Milk 吗? +Holding(ADMilk) 你能一直拿着AD Milk吗? + +如果我能一直拿着AD Milk,那我会很开心,因为我很喜欢喝这个品牌的牛奶。不过,我不确定我能否一直拿着它,因为我需要考虑到我的健康和生活方式。 +Holding(MilkDrink) 哦,你是指那个牛奶饮料品牌“MilkDrink”吗?当然可以啊,你可以像拿任何 other 饮料一样拿起它来。 +Holding(MilkDrink) 你好呀!我能一直拿着这个牛奶饮料吗? +Holding(Milk) 你能把牛奶抓在手里吗?当然可以,只要你抓住瓶子或者盒子,就可以把牛奶抓在手里。不过要注意,不要把牛奶撒出来哦! +Holding(Milk) 你能不能一直拿着牛奶呀? +Holding(VacuumCup) 你能把吸尘器杯收入手中吗? +Holding(VacuumCup) 你能一直拿着吸尘器杯吗? +Holding(Nothing) 你能把“nothing”这个单词抓在手里吗? +Holding(Nothing) 当然可以啊!如果你说的“ Nothing”是指没有任何事物或事情的话,那我可以一直保持这样的状态。不过,如果你指的是某个具体的事物或场景,那可能就需要根据实际情况来分析了。 +On(Coffee,Bar) 当然可以!我马上为你制作一杯咖啡,然后端到吧台给你。 +On(Coffee,Bar) 给我倒杯咖啡,然后把它端到酒吧这里来。 +On(Coffee,WaterTable) 当然可以!我马上为你制作一杯咖啡,然后端到水 table 这里来。 +On(Coffee,WaterTable) 好的,我给你倒杯咖啡,然后端到水 table 这里来。 +On(Coffee,CoffeeTable) 当然可以!我为您制作一杯咖啡,然后把它端到咖啡桌那里吧。 +On(Coffee,CoffeeTable) 行吗?能不能帮我倒杯咖啡,然后把咖啡端到咖啡桌上来呀? +On(Coffee,Bar2) 当然可以!我马上为您制作一杯咖啡,然后送到Bar 2那里。请问您喜欢什么口味的咖啡呢? +On(Coffee,Bar2) 好的,我给您准备了一杯咖啡,现在就端到 Bar 2 这里来。 +On(Coffee,Table1) 当然可以!我马上为您制作一杯咖啡,然后端到Table1这里来。请问您喜欢什么口味的咖啡呢? +On(Coffee,Table1) 好的,请给我一杯咖啡,然后把它送到 Table1 这里来,谢谢! +On(Coffee,Table2) 当然可以!我马上为您制作一杯咖啡,然后端到Table2这里来。 +On(Coffee,Table2) 好的,我给你拿杯咖啡,放Table2那里。 +On(Coffee,Table3) 当然可以!我马上为你制作一杯咖啡,然后端到你面前的桌子上。 +On(Coffee,Table3) 行吗?我可以给你拿杯咖啡,然后放到了Table 3这里。 +On(Water,Bar) 当然可以!去吧,我给你端来水。 +On(Water,Bar) 好的,让我给您倒一杯水,然后把它端到酒吧这里来。 +On(Water,WaterTable) 当然可以!我可以帮你制作水,然后把水送到水 table 这里来。 +On(Water,WaterTable) 好的,我给你倒一杯水,然后把它放在水 table 上。 +On(Water,CoffeeTable) 当然可以!我马上为您制作水,并把水端到咖啡桌这里来。 +On(Water,CoffeeTable) 好的,我马上给您倒杯水,然后把水端到咖啡桌这里来。 +On(Water,Bar2) 当然可以!我可以帮你制作水,然后把水端到酒吧2(Bar 2)那里。你需要我马上去做吗? +On(Water,Bar2) 好的,我来给您倒杯水,送到酒吧2怎么样? +On(Water,Table1) 当然可以!请问你需要多少量的水呢?我会尽快为您准备好的。 +On(Water,Table1) 好的,我给你倒一杯水,你想要端到哪个桌子呢? +On(Water,Table2) 当然可以!我马上帮你制作水,然后把它送到 Table2 这里来。 +On(Water,Table2) 好的,我给你倒一杯水,稍等一下。 +On(Water,Table3) 当然可以!我马上帮您把水送到 Table 3 这里来。 +On(Water,Table3) 好的,我给您倒一杯水,稍等一下,我现在就去拿。请问您要放在哪个桌子上呢?是Table 1还是Table 2?还是您想要自己拿杯子接? +On(Dessert,Bar) 你好!当然可以。Dessert(甜点)是餐后享用的食物,有很多美味的选择,比如蛋糕、饼干、布丁等。请问你想制作哪一种甜点呢?我可以帮你准备材料和制作方法。制作完成后,我们可以一起把甜点带到酒吧享用。 +On(Dessert,Bar) 请给我一点甜点,然后把它送到酒吧这里来。 +On(Dessert,WaterTable) 你能否把甜点做好,然后拿到水 table 那里去呢? +On(Dessert,WaterTable) 好的,我给您准备了一些甜点,现在就端到水 table 这里来。您觉得怎么样? +On(Dessert,CoffeeTable) 当然可以!我给您制作一些甜点,然后拿到咖啡桌上去吧。请问您想尝试哪种甜点呢? +On(Dessert,CoffeeTable) 行啊,那给我来点甜点,然后把它放到咖啡桌子上。 +On(Dessert,Bar2) 当然可以!我会做一些美味的甜点,然后带到酒吧2(Bar 2)来。您想尝尝吗? +On(Dessert,Bar2) 好的,我给你准备了一些甜点,现在就端到你所在的酒吧2。 +On(Dessert,Table1) 当然可以!我马上为您制作甜点,然后把它端到Table1这里来。 +On(Dessert,Table1) 好的,我给您准备了一些美味的甜点,现在 bring it to Table1 这里。 +On(Dessert,Table2) 当然可以!我马上为您制作甜点,然后端到Table2这里来。 +On(Dessert,Table2) 好的,我给你准备了一些甜点,现在端到你面前的桌子上。 +On(Dessert,Table3) 当然可以!我马上为您制作甜点,然后把它送到Table3这里来。 +On(Dessert,Table3) 好的,我给你准备了一些甜点,现在就端到你面前的桌子上。 diff --git a/robowaiter/behavior_tree/dataset1224/expansion_out/output2.txt b/robowaiter/behavior_tree/dataset1224/expansion_out/output2.txt new file mode 100644 index 0000000..9c06989 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/expansion_out/output2.txt @@ -0,0 +1,57 @@ +At(Robot,Bar) 请问您需要什么帮助吗?我就在吧台附近,能否请您自己过来呢? +At(Robot,Bar) 请问你能去一下吧台吗? +At(Robot,Bar) 请问你能帮我到吧台那个位置吗? +At(Robot,WaterTable) 请问你能过来一下吗?我正在茶水桌旁。 +At(Robot,WaterTable) 请问你可以去茶水桌一下吗? +At(Robot,WaterTable) 你能带路去茶水桌吗? +At(Robot,CoffeeTable) 请问你可以过来一下吗?我在这张咖啡桌旁边。 +At(Robot,CoffeeTable) 请问你可以帮我一下,去一下咖啡桌吗? +At(Robot,CoffeeTable) 请问你能帮我前往咖啡桌那个位置吗? +At(Robot,Bar2) 您好,请问您需要什么帮助吗?我正在另一个吧台处理一些事情。 +At(Robot,Bar2) 请问你可以去一下另一个吧台吗? +At(Robot,Bar2) 你能去另一个吧台的位置吗? +At(Robot,Table1) 请问你能过来一下吗?我目前在第一桌,需要你的帮助。 +At(Robot,Table1) 请问你能去一下第一桌吗? +At(Robot,Table1) 请问你能帮我到第一张桌子那个位置吗? +At(Robot,Table2) 请问您能过来一下吗?我正在第二张桌子这里。 +At(Robot,Table2) 请问你可以去第二张桌子一下吗? +At(Robot,Table2) 请问你能帮我前往第二桌吗? +At(Robot,Table3) 请问你能过来一下吗?我正在第三张桌子旁。 +At(Robot,Table3) 请问你能去第三张桌子一下吗? +At(Robot,Table3) 你能告诉我第三张桌子的位置在哪里吗? +On(Softdrink,Bar) 您好,请问您需要我帮您把盒装冰红茶放到哪个位置呢? +On(Softdrink,Bar) 服务员,能否帮我拿来一盒冰红茶放到吧台呢? +On(Softdrink,WaterTable) 您好,请问您需要我帮忙将盒装冰红茶放到哪个位置吗? +On(Softdrink,WaterTable) 服务员,能否帮我把盒装冰红茶拿到茶水桌呢? +On(Softdrink,CoffeeTable) 请问你能把盒装冰红茶放到咖啡桌那个位置吗? +On(Softdrink,CoffeeTable) 服务员,把盒装冰红茶拿到咖啡桌 position 好吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶放到另一个吧台的位置吗? +On(Softdrink,Bar2) 请问你能把盒装冰红茶拿到另一个吧台位置吗? +On(Softdrink,Table1) 请问您能否把盒装冰红茶放在第一桌的指定位置呢? +On(Softdrink,Table1) 请您把盒装冰红茶拿到第一桌的位置。 +On(Softdrink,Table2) 服务员,您好,请问能否帮我將這盒裝冰红茶放 到第二張桌子那個位置呢? +On(Softdrink,Table2) 服务员,请把盒装冰红茶拿到第二张桌子的位置。 +On(Softdrink,Table3) 请问你可以把盒装冰红茶放到第三张桌子的那个位置吗? +On(Softdrink,Table3) 请问你能把盒装冰红茶拿到第三张桌子的位置吗? +On(BottledDrink,Bar) 您好,请问您需要我将瓶装饮料放到哪个位置呢? +On(BottledDrink,Bar) 请把瓶装饮料拿到吧台的位置。 +On(BottledDrink,WaterTable) 请问你可以把瓶装饮料放到茶水桌那个位置吗? +On(BottledDrink,WaterTable) 请问你能把瓶装饮料拿到茶水桌位置吗? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料放在咖啡桌那个位置呢? +On(BottledDrink,CoffeeTable) 服务员,能否把瓶装饮料拿到咖啡桌附近呢? +On(BottledDrink,Bar2) 请问你能把瓶装饮料放到另一个吧台的那个位置吗? +On(BottledDrink,Bar2) 请把瓶装饮料拿到另一个吧台位置。 +On(BottledDrink,Table1) 请问您能否帮我將瓶裝飲料放至第一張桌子的那個位置呢? +On(BottledDrink,Table1) 请问你能把瓶装饮料拿到第一桌的位置吗? +On(BottledDrink,Table2) 请问,你可以把瓶装饮料放到第二张桌子的那个位置吗? +On(BottledDrink,Table2) 请问你能把瓶装饮料拿到第二张桌子的位置吗? +On(BottledDrink,Table3) 请问,你能把瓶装饮料放到第三桌的哪个位置吗? +On(BottledDrink,Table3) 请问你能把瓶装饮料拿到第三张桌子的位置吗? +On(Yogurt,Bar) 请问你能把酸奶放到吧台那个位置吗? +On(Yogurt,Bar) 请问你能把酸奶拿到吧台位置吗? +On(Yogurt,WaterTable) 请问你能把酸奶放到茶水桌那个位置吗? +On(Yogurt,WaterTable) 服务员,请把酸奶拿到茶水桌的位置。 +On(Yogurt,CoffeeTable) 请问,你能把酸奶放在咖啡桌那个位置吗? +On(Yogurt,CoffeeTable) 服务员,能否把酸奶拿到咖啡桌的位置呢? +On(Yogurt,Bar2) 请问你能把酸奶放到另一个吧台的那个位置吗? +On(Yogurt,Bar2) 请问你能把酸奶拿到另一个吧台位置吗? diff --git a/robowaiter/behavior_tree/dataset1224/goal_state_similarity_match.py b/robowaiter/behavior_tree/dataset1224/goal_state_similarity_match.py new file mode 100644 index 0000000..58c6d67 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_state_similarity_match.py @@ -0,0 +1,172 @@ +import copy +import re +import spacy +nlp_en = spacy.load('en_core_web_lg') + +reply = "at(coffee,Table)" +# 正则表达式 +replay_words = re.sub(r'[^A-Za-z0-9]', ' ', reply) +replay_words = replay_words.split() #['at','coffee','Table'] + +noun_words_ls = [['At','On','Is'],[]]# 完整文档n*2(动作,单词) +together_words_ls = [] +# 示例代码:如何使用Python逐行读取txt文件 +# 打开一个示例的txt文件(这里假设文件名为example.txt) +file_path = './goal_states_unique.txt' +try: + with open(file_path, 'r', encoding='utf-8') as file: + # 逐行读取文件 + for line in file: + cleaned_line = re.sub(r'[^A-Za-z0-9]', ' ', line) + words = cleaned_line.split() + # print(words) + noun_words_ls[-1].extend(words) + # print(line.strip()) # 打印每一行内容,去除行尾的换行符 + + cleaned_line = line.replace("{", "").replace("}", "").replace("\n", "") + together_words_ls.append(cleaned_line) + +except FileNotFoundError: + print(f"File not found: {file_path}") +except Exception as e: + print(f"An error occurred: {e}") + + +# 建立语料库 + +file_path = './goal_states_unique.txt' +try: + with open(file_path, 'r', encoding='utf-8') as file: + # 逐行读取文件 + for line in file: + cleaned_line = re.sub(r'[^A-Za-z0-9]', ' ', line) + words = cleaned_line.split() + # print(words) + noun_words_ls[-1].extend(words) + # print(line.strip()) # 打印每一行内容,去除行尾的换行符 + + cleaned_line = line.replace("{", "").replace("}", "").replace("\n", "") + together_words_ls.append(cleaned_line) + +except FileNotFoundError: + print(f"File not found: {file_path}") +except Exception as e: + print(f"An error occurred: {e}") + + + +# import datetime +# from gensim.models import word2vec +# import numpy as np +# from scipy import spatial +# pre_time=datetime.datetime.now() +# model = word2vec.Word2Vec(together_words_ls, +# vector_size=10,#特征向量的维度 +# alpha=0.04,#学习率 +# window=5,#一个句子内,当前词和预测词之间的最大距离 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近 +# min_count=0,#最低词频 没有大的变化 +# max_vocab_size=None, +# sample=0.0001, #随机下采样的阈值 +# seed=1,#随机数种子 +# workers=10,#进程数 +# min_alpha=0.00001,#学习率下降的最小值 +# sg=1, #训练算法的选择,sg=1,采用skip-gram,sg=0,采用CBOW---skip-gram(慢、对罕见字有利)vs CBOW(快) +# hs=1,# hs=1,采用hierarchica·softmax,hs=0,采用negative sampling +# #分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利) +# negative=0,#这个值大于0,使用negative sampling去掉'noise words'的个数(通常设置5-20);为0,不使用negative sampling +# #cbow_mean=1,#为0,使用词向量的和,为1,使用均值;只适用于cbow的情况 +# null_word = 0, +# trim_rule = None, #裁剪词汇规则,使用None(会使用最小min_count) +# sorted_vocab =1,#对词汇降序排序 +# batch_words = 8192,#训练时,每一批次的单词数量 +# compute_loss = False, +# callbacks = ()) +# model.train(together_words_ls, total_examples=len(together_words_ls), epochs=10) +# model.save("./W2V_CI.model") # 保存模型 +# post_time=datetime.datetime.now() +# print("word2vec模型训练保存结束,时间为: ",(post_time-pre_time).seconds*1.0)#1106.0s +# +# w2v_model = word2vec.Word2Vec.load("./W2V_CI.model") +# # w2v_model[word] +# +# def replay_together_w2v(reply): +# return model.wv.most_similar(reply) +# # max_similarity = -1 +# # similar_word = None +# # query_token = w2v_model[reply] +# # for state in together_words_ls: +# # word_token = w2v_model[state] +# # # 计算余弦相似度. spatial.distance.cosine 函数计算的是余弦距离 +# # # 余弦相似度(Cosine similarity),如在 Word2Vec 模型中用来比较两个向量的相似性,其值的范围是 -1 到 1。 +# # similarity = 1 - spatial.distance.cosine(query_token, word_token) +# # # print("similarity:",similarity,real_obj_name) +# # if similarity > max_similarity: +# # max_similarity = similarity +# # similar_word = state +# # if similar_word==None: +# # print("Error: Not Match!") +# # else: +# # return similar_word + + + +def replay_one_by_one(replay_words): + replace_ind = [] + replace_word = [] + for i,word in enumerate(replay_words): + query_token = nlp_en(word) + k=1 + if i==0: k=0 + if not word in noun_words_ls[k]: + max_similarity = 0 + similar_word = None + for act in noun_words_ls[k]: + word_token = nlp_en(act) + # print(act) + # print(word_token) + similarity = query_token.similarity(word_token) + # print("similarity:",similarity,real_obj_name) + if similarity > max_similarity: + max_similarity = similarity + similar_word = act + if similar_word==None: + print("Error: Not Match!") + else: + replay_words[i]=similar_word + # replace_word.append(similar_word) + # replace_ind.append(i) + new_replay = f'{replay_words[0]}({replay_words[1]},{replay_words[2]})' + return new_replay + + # print(replace_word) + # print(replace_ind) + # replace_word = ['on','Table1'] + # replace_ind = [0,2] + # 替换reply中单词 + # for new_word,ind in zip(replace_word,replace_ind): + # 把第 ind 个单词替换成 new_word + +def replay_together(reply): + max_similarity = 0 + similar_word = None + query_token = nlp_en(reply) + for state in together_words_ls: + word_token = nlp_en(state) + similarity = query_token.similarity(word_token) + # print("similarity:",similarity,real_obj_name) + if similarity > max_similarity: + max_similarity = similarity + similar_word = state + if similar_word==None: + print("Error: Not Match!") + else: + return similar_word + +print("原来的:",reply) +new_replay = replay_one_by_one(copy.deepcopy(replay_words)) +print("逐个比较后的现在的:",new_replay) +new_replay2 = replay_together(copy.deepcopy(reply)) +print("集体比较后的现在的:",new_replay2) +# new_replay3 = replay_together_w2v(copy.deepcopy(reply)) +# print("W2V比较后的现在的:",new_replay3) + diff --git a/robowaiter/behavior_tree/dataset1224/goal_states.txt b/robowaiter/behavior_tree/dataset1224/goal_states.txt new file mode 100644 index 0000000..a29c86d --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_states.txt @@ -0,0 +1,3250 @@ +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,Bar)} +{At(Robot,Bar)} +{At(Robot,Table1)} +{At(Robot,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{On(ADMilk,Bar)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Table1)} +{On(MilkDrink,Table1)} +{On(Yogurt,BrightTable6)} +{On(Water,Bar2)} +{On(Dessert,Table1)} +{On(Bernachon,Table2)} +{On(Dessert,Bar2)} +{On(Chips,Table1)} +{On(ADMilk,BrightTable6)} +{On(NFCJuice,Bar)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,CoffeeTable)} +{On(Water,Bar)} +{On(Softdrink,Bar)} +{On(MilkDrink,Table2)} +{On(Dessert,BrightTable6)} +{On(BottledDrink,Bar)} +{On(Bernachon,Bar)} +{On(Chips,WaterTable)} +{On(Bernachon,Table2)} +{On(NFCJuice,WaterTable)} +{On(Chips,Table2)} +{On(Coffee,Table1)} +{On(Water,Table2)} +{On(Yogurt,Bar)} +{On(Dessert,BrightTable6)} +{On(BottledDrink,Bar)} +{On(Coffee,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(Coffee,Bar)} +{On(Yogurt,WaterTable)} +{On(Water,Bar)} +{On(VacuumCup,Table1)} +{On(Softdrink,CoffeeTable)} +{On(SpringWater,Table2)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Table3)} +{On(MilkDrink,Table1)} +{On(MilkDrink,WaterTable)} +{On(Water,CoffeeTable)} +{On(Coffee,CoffeeTable)} +{On(SpringWater,Bar2)} +{On(Coffee,WaterTable)} +{On(MilkDrink,Bar)} +{On(Milk,Bar)} +{On(Water,BrightTable6)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,BrightTable6)} +{On(MilkDrink,Table2)} +{On(NFCJuice,Bar)} +{On(Milk,Table1)} +{On(Chips,WaterTable)} +{On(BottledDrink,Bar2)} +{On(Water,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Milk,Table3)} +{On(Bernachon,Table1)} +{On(MilkDrink,Table3)} +{On(MilkDrink,Bar)} +{On(BottledDrink,Table2)} +{On(Coffee,CoffeeTable)} +{On(Bernachon,BrightTable6)} +{On(MilkDrink,BrightTable6)} +{On(SpringWater,Table3)} +{On(Water,Table3)} +{On(MilkDrink,CoffeeTable)} +{On(SpringWater,BrightTable6)} +{On(BottledDrink,Bar2)} +{On(SpringWater,Table3)} +{On(Dessert,Table2)} +{On(Bernachon,Table1)} +{On(Bernachon,BrightTable6)} +{On(Milk,Table1)} +{On(Water,Table3)} +{On(BottledDrink,Bar)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Is(Floor,Clean)} +{Is(Floor,Clean)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,Off)} +{Is(Curtain,On)} +{Is(ACTemperature,Down)} +{Is(Table1,Dirty)} +{Is(ACTemperature,Down)} +{Is(Chairs,Dirty)} +{Is(Table1,Clean)} +{Is(AC,On)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Holding(Coffee)} +{Holding(BottledDrink)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(MilkDrink)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} +{Exist(Yogurt)} +{Exist(VacuumCup)} +{Exist(SpringWater)} +{Exist(Bernachon)} +{Exist(NFCJuice)} +{Exist(Coffee)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(Water)} +{Exist(Coffee)} diff --git a/robowaiter/behavior_tree/dataset1224/goal_states_generation.py b/robowaiter/behavior_tree/dataset1224/goal_states_generation.py new file mode 100644 index 0000000..35991f9 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_states_generation.py @@ -0,0 +1,322 @@ +# the empty string '' represents robot holds nothing +import os +import re + +Object = ['Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup','Chips', 'NFCJuice', 'Bernachon', 'SpringWater'] +Cookable = ['Coffee', 'Water', 'Dessert'] +Place = ['Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6'] +Entity = ['Robot'] +Operable = ['AC', 'ACTemperature', 'HallLight', 'TubeLight', 'Curtain', 'Chairs', 'Floor', 'Table1'] + +import random + + +def single_predict_generation(oplist_1, oplist_2, predict_pattern) -> str: + index_1 = random.randint(0, len(oplist_1) - 1) + if oplist_2: + index_2 = random.randint(0, len(oplist_2) - 1) + + match predict_pattern: + case 'at': + return f'At({oplist_1[index_1]},{oplist_2[index_2]})' + case 'is': + return f'Is({oplist_1[index_1]},{oplist_2[index_2]})' + case 'hold': + return f'Holding({oplist_1[index_1]})' + case 'on': + return f'On({oplist_1[index_1]},{oplist_2[index_2]})' + case 'exist': + return f'Exist({oplist_1[index_1]})' + case _: + raise RuntimeError('Incorrect predict pattern!') + + +def enumerate_predict(oplist_1, oplist_2, predict_pattern) -> [int, list]: + count = 0 + res = [] + + match predict_pattern: + case 'at': + pattern = f'At(%s,%s)' + case 'is': + pattern = f'Is(%s,%s)' + case 'hold': + pattern = f'Holding(%s)' + case 'on': + pattern = f'On(%s,%s)' + case 'exist': + pattern = f'Exist(%s)' + case _: + raise RuntimeError('Incorrect predict pattern!') + + for str_1 in oplist_1: + if oplist_2: + for str_2 in oplist_2: + count += 1 + res.append(pattern % (str_1, str_2)) + else: + count += 1 + res.append(pattern % str_1) + + return count, res + + +def generate_goal_states(vln_num: int, vlm_num: int, opentask_num: int): + # res stores lists of sets, while each state represent in set. + res = [] + + # goal states for VLN + for i in range(vln_num): + res.append({single_predict_generation(['Robot'], Place, 'at')}) + + # goal states for VLM + for i in range(int(vlm_num)): + for j in range(int(vlm_num)): + res.append( + { + single_predict_generation(['Robot'], Place, 'at'), + single_predict_generation(Operable, ['0', '1'], 'is') + } + ) + + # goal states for Open-task-1 + for i in range(int(opentask_num)): + for j in range(int(opentask_num)): + res.append( + { + single_predict_generation(['Robot'], Place, 'at'), + single_predict_generation(Object, Place, 'on') + } + ) + + print(res) + print(len(res)) + + return res + + +def enumerate_goal_states(total: int): + res = [] + + point_15 = int(total * .15) + point_10 = int(total * .10) + + # goal states for VLN, .15 + count_vln, list_vln = enumerate_predict(['Robot'], Place, 'at') + list_vln = ['{%s}' % i for i in list_vln] + if count_vln < point_15: + list_vln *= point_15 // count_vln + for i in range(0, point_15 - len(list_vln)): + list_vln.append('{%s}' % single_predict_generation(['Robot'], Place, 'at')) + # print(f'VLN 任务的目标状态数:{count_vln}') + res += list_vln + + # goal states for VLM-1, 0.15 + count_vlm_1, list_vlm_1 = enumerate_predict(Object, Place, 'on') + list_vlm_1 = ['{%s}' % i for i in list_vlm_1] + if count_vlm_1 < point_15: + list_vlm_1 *= point_15 // count_vlm_1 + for i in range(0, point_15 - len(list_vlm_1)): + list_vlm_1.append('{%s}' % (single_predict_generation(Object, Place, 'on'))) + res += list_vlm_1 + + # goal states for VLM-2, 0.15 + count_vlm_2, list_vlm_2 = enumerate_predict(Operable, ['0', '1'], 'is') + list_vlm_2 = ['{%s}' % i for i in list_vlm_2] + if count_vlm_2 < point_15: + list_vlm_2 *= point_15 // count_vlm_2 + for i in range(0, point_15 - len(list_vlm_2)): + list_vlm_2.append('{%s}' % single_predict_generation(Operable, ['0', '1'], 'is')) + res += list_vlm_2 + + # goal states for VLM-3, 0.1 + count_vlm_3, list_vlm_3 = enumerate_predict(Object + ['Nothing'], None, 'hold') + list_vlm_3 = ['{%s}' % i for i in list_vlm_3] + if count_vlm_3 < point_10: + list_vlm_3 *= point_10 // count_vlm_3 + for i in range(0, point_10 - len(list_vlm_3)): + list_vlm_3.append('{%s}' % single_predict_generation(Object, None, 'hold')) + res += list_vlm_3 + + count_vlm_4, list_vlm_4 = enumerate_predict(Object, None, 'exist') + list_vlm_4 = ['{%s}' % i for i in list_vlm_4] + if count_vlm_4 < point_10: + list_vlm_4 *= point_10 // count_vlm_4 + for i in range(0, point_10 - len(list_vlm_4)): + list_vlm_4.append('{%s}' % single_predict_generation(Object, None, 'exist')) + res += list_vlm_4 + + # goal states for OT, 0.15 + # count_ot, list_ot = enumerate_predict(Cookable, Place, 'on') + # list_ot = ['{%s}' % i for i in list_ot] + # if count_ot < point_15: + # list_ot *= point_15 // count_ot + # for i in range(0, point_15 - len(list_ot)): + # list_ot.append('{%s}' % single_predict_generation(Cookable, Place, 'on')) + # res += list_ot + + # goal states for compound-1, 0.1 + # count_1, list_1 = enumerate_predict(['Robot'], Place, 'at') + # count_2, list_2 = enumerate_predict(Object, Place, 'on') + # list_tmp = [] + # for i in list_1: + # for j in list_2: + # list_tmp.append('{%s,%s}' % (i, j)) + # if len(list_tmp) < point_10: + # list_tmp *= point_10 // len(list_tmp) + # list_tmp += list_tmp[0:point_10 - len(list_tmp)] + # else: + # list_tmp = list_tmp[:point_10] + # res += list_tmp + + # goal states for compound-2, 0.1 + # count_1, list_1 = enumerate_predict(['Robot'], Place, 'at') + # count_2, list_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # list_tmp = [] + # for i in list_1: + # for j in list_2: + # list_tmp.append('{%s,%s}' % (i, j)) + # if len(list_tmp) < point_10: + # list_tmp *= point_10 // len(list_tmp) + # list_tmp += list_tmp[0:point_10 - len(list_tmp)] + # else: + # list_tmp = list_tmp[:point_10] + # res += list_tmp + + # goal states for compound-3, 0.1 + # count_1, list_1 = enumerate_predict(Cookable, Place, 'on') + # count_2, list_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # list_tmp = [] + # for i in list_1: + # for j in list_2: + # list_tmp.append('{%s,%s}' % (i, j)) + # if len(list_tmp) < point_10: + # list_tmp *= point_10 // len(list_tmp) + # list_tmp += list_tmp[0:point_10 - len(list_tmp)] + # else: + # list_tmp = list_tmp[:point_10] + # res += list_tmp + + # # goal states for VLM-1, 0.15 + # count_vlm_1, list_vlm_1 = enumerate_predict(['Robot'], Place, 'at') + # count_vlm_2, list_vlm_2 = enumerate_predict(Operable, ['0', '1'], 'is') + # print(f'VLM 任务的目标状态数:{count_vlm_1 * count_vlm_2}') + # + # # goal states for open-task + # count_opentask_1, list_opentask_1 = enumerate_predict(['Robot'], Place, 'at') + # count_opentask_2, list_opentask_2 = enumerate_predict(Object, Place, 'on') + # print(f'Open-task-1 任务的目标状态数:{count_opentask_1 * count_opentask_2}') + + with open(os.path.join('./goal_states.txt'), 'w+') as file: + for i in res: + if 'Is' in i and 'ACTemperature' in i: + i = re.sub(',0', ',Up', i) + i = re.sub(',1', ',Down', i) + elif 'Is' in i and ('AC' in i or 'HallLight' in i or 'TubeLight' in i or 'Curtain' in i): + i = re.sub(',0', ',Off', i) + i = re.sub(',1', ',On', i) + elif 'Is' in i and ('Chairs' in i or 'Floor' in i or 'Table' in i): + i = re.sub(',0', ',Dirty', i) + i = re.sub(',1', ',Clean', i) + + file.write(i + '\n') + + +def translate_zero_one(i: str) -> str: + if 'ACTemperature' in i: + i = re.sub('On\)', '调高', i) + i = re.sub('Off\)', '调低', i) + elif 'AC' in i or 'HallLight' in i or 'TubeLight' in i or 'Curtain' in i: + i = re.sub('On\)', '关闭', i) + i = re.sub('Off\)', '打开', i) + elif 'Chairs' in i or 'Floor' in i or 'Table' in i: + i = re.sub('On\)', '脏', i) + i = re.sub('Off\)', '打扫干净', i) + + return i + + +def enumerate_goal_states_with_describe() -> str: + with open(os.path.join('./goal_states_with_description.txt'), 'w', encoding='utf-8') as file: + # vln + count, res = enumerate_predict(['Robot'], Place, 'at') + print(count) + for i in range(count): + tmp = '#' + res[i].split(',')[-1][:-1] + file.write(f'{res[i]}\t你能过来一下吗?我在{tmp}这里。\n') + file.write(f'{res[i]}\t麻烦你去一下{tmp}。\n') + file.write(f'{res[i]}\t你能去{tmp}那个位置吗?\n') + + # vlm, on + count, res = enumerate_predict(Object, Place, 'on') + print(count) + for i in range(count): + tmp = res[i].split(',') + obj = '#' + tmp[0][3:] + pla = '#' + tmp[-1][:-1] + file.write(f'{res[i]}\t麻烦你把{obj}放到{pla}那个位置。\n') + file.write(f'{res[i]}\t请你拿一下{obj}到{pla}位置。\n') + file.write(f'{res[i]}\t你好,我在{pla},请你拿一下{obj}到位置。\n') + + # vlm, is + count, res = enumerate_predict(Operable, ['On', 'Off'], 'is') + print(count) + for i in res: + tmp = i.split(',') + thing, op = '#' + tmp[0][3:], '#' + tmp[-1] + file.write('%s\t%s\n' % (i, translate_zero_one(f'你能把{thing}{op}一下吗?'))) + + + # vlm, holding + count, res = enumerate_predict(Object + ['Nothing'], None, 'hold') + print(count) + for i in res: + tmp = '#' + i.split('(')[-1][:-1] + if tmp == 'Nothing': + file.write(f'{i}\t你手里是没有东西的吗?\n') + continue + file.write(f'{i}\t你能把{tmp}抓在手里吗?\n') + file.write(f'{i}\t你能一直拿着{tmp}吗?\n') + + + count, res = enumerate_predict(Cookable, Place, 'on') + print(count) + for i in res: + tmp = i.split(',') + thing, pla = '#' + tmp[0][3:], '#' + tmp[-1][:-1] + + file.write(f'{i}\t你能制作{thing}并把它端到{pla}这里来吗?\n') + file.write(f'{i}\t给我来点{thing},并把它端到{pla}这里来。\n') + return './goal_states_with_description.txt' + + +from copy import deepcopy + + +def mutex(path: str): + with open(os.path.join(path), 'r', encoding='utf-8') as file: + lines = "".join(file.readlines()) + new_line = deepcopy(lines) + + check = ['#Bar2', '#WaterTable', '#CoffeeTable', '#Bar', '#Table1', '#Table2', '#Table3', '#BrightTable6', + '#Coffee', '#Water','#Dessert', '#Softdrink', '#BottledDrink', '#Yogurt', '#ADMilk', '#MilkDrink', '#Milk', '#VacuumCup', + '#Chips', '#NFCJuice', '#Bernachon', '#SpringWater', + '#AC', + '#ACTemperature', '#HallLight', '#TubeLight', '#Curtain', '#Chairs', '#Floor', '#Table1'] + repla = ['#另一侧的吧台', '#茶水桌', '#咖啡桌', '#吧台', '#前门斜桌子', '#大厅长桌子西侧', '#大厅长桌子东侧', '#后门靠窗边圆桌', '#咖啡', '#水', + '#点心', '#盒装冰红茶', '#瓶装饮料', '#酸奶', '#AD钙奶', '#牛奶味的饮料', '#牛奶', '#保温杯', + '#薯片', '#NFC果汁', '#贝纳颂咖啡', '#矿泉水', + '#空调', + '#空调温度', '#大厅灯', '#筒灯', '#窗帘', '#椅子', '#地板', '#前门斜桌子'] + + for i, j in zip(check, repla): + new_line = re.sub(i, j, new_line) + new_line = re.sub('#', '', new_line) + lines = re.sub('#', '', lines) + + with open(os.path.join(path), 'w', encoding='utf-8') as file: + file.write(new_line) + +# generate_goal_states(30, 6, 6) +enumerate_goal_states(5000) +mutex(enumerate_goal_states_with_describe()) diff --git a/robowaiter/behavior_tree/dataset1224/goal_states_unique.txt b/robowaiter/behavior_tree/dataset1224/goal_states_unique.txt new file mode 100644 index 0000000..bacfa3e --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_states_unique.txt @@ -0,0 +1,165 @@ +{At(Robot,Bar)} +{At(Robot,Bar2)} +{At(Robot,WaterTable)} +{At(Robot,CoffeeTable)} +{At(Robot,Table1)} +{At(Robot,Table2)} +{At(Robot,Table3)} +{At(Robot,BrightTable6)} +{On(Coffee,Bar)} +{On(Coffee,Bar2)} +{On(Coffee,WaterTable)} +{On(Coffee,CoffeeTable)} +{On(Coffee,Table1)} +{On(Coffee,Table2)} +{On(Coffee,Table3)} +{On(Coffee,BrightTable6)} +{On(Water,Bar)} +{On(Water,Bar2)} +{On(Water,WaterTable)} +{On(Water,CoffeeTable)} +{On(Water,Table1)} +{On(Water,Table2)} +{On(Water,Table3)} +{On(Water,BrightTable6)} +{On(Dessert,Bar)} +{On(Dessert,Bar2)} +{On(Dessert,WaterTable)} +{On(Dessert,CoffeeTable)} +{On(Dessert,Table1)} +{On(Dessert,Table2)} +{On(Dessert,Table3)} +{On(Dessert,BrightTable6)} +{On(Softdrink,Bar)} +{On(Softdrink,Bar2)} +{On(Softdrink,WaterTable)} +{On(Softdrink,CoffeeTable)} +{On(Softdrink,Table1)} +{On(Softdrink,Table2)} +{On(Softdrink,Table3)} +{On(Softdrink,BrightTable6)} +{On(BottledDrink,Bar)} +{On(BottledDrink,Bar2)} +{On(BottledDrink,WaterTable)} +{On(BottledDrink,CoffeeTable)} +{On(BottledDrink,Table1)} +{On(BottledDrink,Table2)} +{On(BottledDrink,Table3)} +{On(BottledDrink,BrightTable6)} +{On(Yogurt,Bar)} +{On(Yogurt,Bar2)} +{On(Yogurt,WaterTable)} +{On(Yogurt,CoffeeTable)} +{On(Yogurt,Table1)} +{On(Yogurt,Table2)} +{On(Yogurt,Table3)} +{On(Yogurt,BrightTable6)} +{On(ADMilk,Bar)} +{On(ADMilk,Bar2)} +{On(ADMilk,WaterTable)} +{On(ADMilk,CoffeeTable)} +{On(ADMilk,Table1)} +{On(ADMilk,Table2)} +{On(ADMilk,Table3)} +{On(ADMilk,BrightTable6)} +{On(MilkDrink,Bar)} +{On(MilkDrink,Bar2)} +{On(MilkDrink,WaterTable)} +{On(MilkDrink,CoffeeTable)} +{On(MilkDrink,Table1)} +{On(MilkDrink,Table2)} +{On(MilkDrink,Table3)} +{On(MilkDrink,BrightTable6)} +{On(Milk,Bar)} +{On(Milk,Bar2)} +{On(Milk,WaterTable)} +{On(Milk,CoffeeTable)} +{On(Milk,Table1)} +{On(Milk,Table2)} +{On(Milk,Table3)} +{On(Milk,BrightTable6)} +{On(VacuumCup,Bar)} +{On(VacuumCup,Bar2)} +{On(VacuumCup,WaterTable)} +{On(VacuumCup,CoffeeTable)} +{On(VacuumCup,Table1)} +{On(VacuumCup,Table2)} +{On(VacuumCup,Table3)} +{On(VacuumCup,BrightTable6)} +{On(Chips,Bar)} +{On(Chips,Bar2)} +{On(Chips,WaterTable)} +{On(Chips,CoffeeTable)} +{On(Chips,Table1)} +{On(Chips,Table2)} +{On(Chips,Table3)} +{On(Chips,BrightTable6)} +{On(NFCJuice,Bar)} +{On(NFCJuice,Bar2)} +{On(NFCJuice,WaterTable)} +{On(NFCJuice,CoffeeTable)} +{On(NFCJuice,Table1)} +{On(NFCJuice,Table2)} +{On(NFCJuice,Table3)} +{On(NFCJuice,BrightTable6)} +{On(Bernachon,Bar)} +{On(Bernachon,Bar2)} +{On(Bernachon,WaterTable)} +{On(Bernachon,CoffeeTable)} +{On(Bernachon,Table1)} +{On(Bernachon,Table2)} +{On(Bernachon,Table3)} +{On(Bernachon,BrightTable6)} +{On(SpringWater,Bar)} +{On(SpringWater,Bar2)} +{On(SpringWater,WaterTable)} +{On(SpringWater,CoffeeTable)} +{On(SpringWater,Table1)} +{On(SpringWater,Table2)} +{On(SpringWater,Table3)} +{On(SpringWater,BrightTable6)} +{Is(AC,Off)} +{Is(AC,On)} +{Is(ACTemperature,Up)} +{Is(ACTemperature,Down)} +{Is(HallLight,Off)} +{Is(HallLight,On)} +{Is(TubeLight,Off)} +{Is(TubeLight,On)} +{Is(Curtain,Off)} +{Is(Curtain,On)} +{Is(Chairs,Dirty)} +{Is(Chairs,Clean)} +{Is(Floor,Dirty)} +{Is(Floor,Clean)} +{Is(Table1,Dirty)} +{Is(Table1,Clean)} +{Holding(Coffee)} +{Holding(Water)} +{Holding(Dessert)} +{Holding(Softdrink)} +{Holding(BottledDrink)} +{Holding(Yogurt)} +{Holding(ADMilk)} +{Holding(MilkDrink)} +{Holding(Milk)} +{Holding(VacuumCup)} +{Holding(Chips)} +{Holding(NFCJuice)} +{Holding(Bernachon)} +{Holding(SpringWater)} +{Holding(Nothing)} +{Exist(Coffee)} +{Exist(Water)} +{Exist(Dessert)} +{Exist(Softdrink)} +{Exist(BottledDrink)} +{Exist(Yogurt)} +{Exist(ADMilk)} +{Exist(MilkDrink)} +{Exist(Milk)} +{Exist(VacuumCup)} +{Exist(Chips)} +{Exist(NFCJuice)} +{Exist(Bernachon)} +{Exist(SpringWater)} diff --git a/robowaiter/behavior_tree/dataset1224/goal_states_with_description.jsonl b/robowaiter/behavior_tree/dataset1224/goal_states_with_description.jsonl new file mode 100644 index 0000000..fd2b862 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_states_with_description.jsonl @@ -0,0 +1,193 @@ +{"title":"你能过来一下吗?我在吧台这里。","text":"At(Robot,Bar)"} +{"title":"麻烦你去一下吧台。","text":"At(Robot,Bar)"} +{"title":"你能去吧台那个位置吗?","text":"At(Robot,Bar)"} +{"title":"你能过来一下吗?我在茶水桌这里。","text":"At(Robot,WaterTable)"} +{"title":"麻烦你去一下茶水桌。","text":"At(Robot,WaterTable)"} +{"title":"你能去茶水桌那个位置吗?","text":"At(Robot,WaterTable)"} +{"title":"你能过来一下吗?我在咖啡桌这里。","text":"At(Robot,CoffeeTable)"} +{"title":"麻烦你去一下咖啡桌。","text":"At(Robot,CoffeeTable)"} +{"title":"你能去咖啡桌那个位置吗?","text":"At(Robot,CoffeeTable)"} +{"title":"你能过来一下吗?我在另一个吧台这里。","text":"At(Robot,Bar2)"} +{"title":"麻烦你去一下另一个吧台。","text":"At(Robot,Bar2)"} +{"title":"你能去另一个吧台那个位置吗?","text":"At(Robot,Bar2)"} +{"title":"你能过来一下吗?我在第一张桌子这里。","text":"At(Robot,Table1)"} +{"title":"麻烦你去一下第一张桌子。","text":"At(Robot,Table1)"} +{"title":"你能去第一张桌子那个位置吗?","text":"At(Robot,Table1)"} +{"title":"你能过来一下吗?我在第二张桌子这里。","text":"At(Robot,Table2)"} +{"title":"麻烦你去一下第二张桌子。","text":"At(Robot,Table2)"} +{"title":"你能去第二张桌子那个位置吗?","text":"At(Robot,Table2)"} +{"title":"你能过来一下吗?我在第三张桌子这里。","text":"At(Robot,Table3)"} +{"title":"麻烦你去一下第三张桌子。","text":"At(Robot,Table3)"} +{"title":"你能去第三张桌子那个位置吗?","text":"At(Robot,Table3)"} +{"title":"麻烦你把盒装冰红茶放到吧台那个位置。","text":"On(Softdrink,Bar)"} +{"title":"请你拿一下盒装冰红茶到吧台位置。","text":"On(Softdrink,Bar)"} +{"title":"麻烦你把盒装冰红茶放到茶水桌那个位置。","text":"On(Softdrink,WaterTable)"} +{"title":"请你拿一下盒装冰红茶到茶水桌位置。","text":"On(Softdrink,WaterTable)"} +{"title":"麻烦你把盒装冰红茶放到咖啡桌那个位置。","text":"On(Softdrink,CoffeeTable)"} +{"title":"请你拿一下盒装冰红茶到咖啡桌位置。","text":"On(Softdrink,CoffeeTable)"} +{"title":"麻烦你把盒装冰红茶放到另一个吧台那个位置。","text":"On(Softdrink,Bar2)"} +{"title":"请你拿一下盒装冰红茶到另一个吧台位置。","text":"On(Softdrink,Bar2)"} +{"title":"麻烦你把盒装冰红茶放到第一张桌子那个位置。","text":"On(Softdrink,Table1)"} +{"title":"请你拿一下盒装冰红茶到第一张桌子位置。","text":"On(Softdrink,Table1)"} +{"title":"麻烦你把盒装冰红茶放到第二张桌子那个位置。","text":"On(Softdrink,Table2)"} +{"title":"请你拿一下盒装冰红茶到第二张桌子位置。","text":"On(Softdrink,Table2)"} +{"title":"麻烦你把盒装冰红茶放到第三张桌子那个位置。","text":"On(Softdrink,Table3)"} +{"title":"请你拿一下盒装冰红茶到第三张桌子位置。","text":"On(Softdrink,Table3)"} +{"title":"麻烦你把瓶装饮料放到吧台那个位置。","text":"On(BottledDrink,Bar)"} +{"title":"请你拿一下瓶装饮料到吧台位置。","text":"On(BottledDrink,Bar)"} +{"title":"麻烦你把瓶装饮料放到茶水桌那个位置。","text":"On(BottledDrink,WaterTable)"} +{"title":"请你拿一下瓶装饮料到茶水桌位置。","text":"On(BottledDrink,WaterTable)"} +{"title":"麻烦你把瓶装饮料放到咖啡桌那个位置。","text":"On(BottledDrink,CoffeeTable)"} +{"title":"请你拿一下瓶装饮料到咖啡桌位置。","text":"On(BottledDrink,CoffeeTable)"} +{"title":"麻烦你把瓶装饮料放到另一个吧台那个位置。","text":"On(BottledDrink,Bar2)"} +{"title":"请你拿一下瓶装饮料到另一个吧台位置。","text":"On(BottledDrink,Bar2)"} +{"title":"麻烦你把瓶装饮料放到第一张桌子那个位置。","text":"On(BottledDrink,Table1)"} +{"title":"请你拿一下瓶装饮料到第一张桌子位置。","text":"On(BottledDrink,Table1)"} +{"title":"麻烦你把瓶装饮料放到第二张桌子那个位置。","text":"On(BottledDrink,Table2)"} +{"title":"请你拿一下瓶装饮料到第二张桌子位置。","text":"On(BottledDrink,Table2)"} +{"title":"麻烦你把瓶装饮料放到第三张桌子那个位置。","text":"On(BottledDrink,Table3)"} +{"title":"请你拿一下瓶装饮料到第三张桌子位置。","text":"On(BottledDrink,Table3)"} +{"title":"麻烦你把酸奶放到吧台那个位置。","text":"On(Yogurt,Bar)"} +{"title":"请你拿一下酸奶到吧台位置。","text":"On(Yogurt,Bar)"} +{"title":"麻烦你把酸奶放到茶水桌那个位置。","text":"On(Yogurt,WaterTable)"} +{"title":"请你拿一下酸奶到茶水桌位置。","text":"On(Yogurt,WaterTable)"} +{"title":"麻烦你把酸奶放到咖啡桌那个位置。","text":"On(Yogurt,CoffeeTable)"} +{"title":"请你拿一下酸奶到咖啡桌位置。","text":"On(Yogurt,CoffeeTable)"} +{"title":"麻烦你把酸奶放到另一个吧台那个位置。","text":"On(Yogurt,Bar2)"} +{"title":"请你拿一下酸奶到另一个吧台位置。","text":"On(Yogurt,Bar2)"} +{"title":"麻烦你把酸奶放到第一张桌子那个位置。","text":"On(Yogurt,Table1)"} +{"title":"请你拿一下酸奶到第一张桌子位置。","text":"On(Yogurt,Table1)"} +{"title":"麻烦你把酸奶放到第二张桌子那个位置。","text":"On(Yogurt,Table2)"} +{"title":"请你拿一下酸奶到第二张桌子位置。","text":"On(Yogurt,Table2)"} +{"title":"麻烦你把酸奶放到第三张桌子那个位置。","text":"On(Yogurt,Table3)"} +{"title":"请你拿一下酸奶到第三张桌子位置。","text":"On(Yogurt,Table3)"} +{"title":"麻烦你把AD钙奶放到吧台那个位置。","text":"On(ADMilk,Bar)"} +{"title":"请你拿一下AD钙奶到吧台位置。","text":"On(ADMilk,Bar)"} +{"title":"麻烦你把AD钙奶放到茶水桌那个位置。","text":"On(ADMilk,WaterTable)"} +{"title":"请你拿一下AD钙奶到茶水桌位置。","text":"On(ADMilk,WaterTable)"} +{"title":"麻烦你把AD钙奶放到咖啡桌那个位置。","text":"On(ADMilk,CoffeeTable)"} +{"title":"请你拿一下AD钙奶到咖啡桌位置。","text":"On(ADMilk,CoffeeTable)"} +{"title":"麻烦你把AD钙奶放到另一个吧台那个位置。","text":"On(ADMilk,Bar2)"} +{"title":"请你拿一下AD钙奶到另一个吧台位置。","text":"On(ADMilk,Bar2)"} +{"title":"麻烦你把AD钙奶放到第一张桌子那个位置。","text":"On(ADMilk,Table1)"} +{"title":"请你拿一下AD钙奶到第一张桌子位置。","text":"On(ADMilk,Table1)"} +{"title":"麻烦你把AD钙奶放到第二张桌子那个位置。","text":"On(ADMilk,Table2)"} +{"title":"请你拿一下AD钙奶到第二张桌子位置。","text":"On(ADMilk,Table2)"} +{"title":"麻烦你把AD钙奶放到第三张桌子那个位置。","text":"On(ADMilk,Table3)"} +{"title":"请你拿一下AD钙奶到第三张桌子位置。","text":"On(ADMilk,Table3)"} +{"title":"麻烦你把牛奶味的饮料放到吧台那个位置。","text":"On(MilkDrink,Bar)"} +{"title":"请你拿一下牛奶味的饮料到吧台位置。","text":"On(MilkDrink,Bar)"} +{"title":"麻烦你把牛奶味的饮料放到茶水桌那个位置。","text":"On(MilkDrink,WaterTable)"} +{"title":"请你拿一下牛奶味的饮料到茶水桌位置。","text":"On(MilkDrink,WaterTable)"} +{"title":"麻烦你把牛奶味的饮料放到咖啡桌那个位置。","text":"On(MilkDrink,CoffeeTable)"} +{"title":"请你拿一下牛奶味的饮料到咖啡桌位置。","text":"On(MilkDrink,CoffeeTable)"} +{"title":"麻烦你把牛奶味的饮料放到另一个吧台那个位置。","text":"On(MilkDrink,Bar2)"} +{"title":"请你拿一下牛奶味的饮料到另一个吧台位置。","text":"On(MilkDrink,Bar2)"} +{"title":"麻烦你把牛奶味的饮料放到第一张桌子那个位置。","text":"On(MilkDrink,Table1)"} +{"title":"请你拿一下牛奶味的饮料到第一张桌子位置。","text":"On(MilkDrink,Table1)"} +{"title":"麻烦你把牛奶味的饮料放到第二张桌子那个位置。","text":"On(MilkDrink,Table2)"} +{"title":"请你拿一下牛奶味的饮料到第二张桌子位置。","text":"On(MilkDrink,Table2)"} +{"title":"麻烦你把牛奶味的饮料放到第三张桌子那个位置。","text":"On(MilkDrink,Table3)"} +{"title":"请你拿一下牛奶味的饮料到第三张桌子位置。","text":"On(MilkDrink,Table3)"} +{"title":"麻烦你把牛奶放到吧台那个位置。","text":"On(Milk,Bar)"} +{"title":"请你拿一下牛奶到吧台位置。","text":"On(Milk,Bar)"} +{"title":"麻烦你把牛奶放到茶水桌那个位置。","text":"On(Milk,WaterTable)"} +{"title":"请你拿一下牛奶到茶水桌位置。","text":"On(Milk,WaterTable)"} +{"title":"麻烦你把牛奶放到咖啡桌那个位置。","text":"On(Milk,CoffeeTable)"} +{"title":"请你拿一下牛奶到咖啡桌位置。","text":"On(Milk,CoffeeTable)"} +{"title":"麻烦你把牛奶放到另一个吧台那个位置。","text":"On(Milk,Bar2)"} +{"title":"请你拿一下牛奶到另一个吧台位置。","text":"On(Milk,Bar2)"} +{"title":"麻烦你把牛奶放到第一张桌子那个位置。","text":"On(Milk,Table1)"} +{"title":"请你拿一下牛奶到第一张桌子位置。","text":"On(Milk,Table1)"} +{"title":"麻烦你把牛奶放到第二张桌子那个位置。","text":"On(Milk,Table2)"} +{"title":"请你拿一下牛奶到第二张桌子位置。","text":"On(Milk,Table2)"} +{"title":"麻烦你把牛奶放到第三张桌子那个位置。","text":"On(Milk,Table3)"} +{"title":"请你拿一下牛奶到第三张桌子位置。","text":"On(Milk,Table3)"} +{"title":"麻烦你把保温杯放到吧台那个位置。","text":"On(VacuumCup,Bar)"} +{"title":"请你拿一下保温杯到吧台位置。","text":"On(VacuumCup,Bar)"} +{"title":"麻烦你把保温杯放到茶水桌那个位置。","text":"On(VacuumCup,WaterTable)"} +{"title":"请你拿一下保温杯到茶水桌位置。","text":"On(VacuumCup,WaterTable)"} +{"title":"麻烦你把保温杯放到咖啡桌那个位置。","text":"On(VacuumCup,CoffeeTable)"} +{"title":"请你拿一下保温杯到咖啡桌位置。","text":"On(VacuumCup,CoffeeTable)"} +{"title":"麻烦你把保温杯放到另一个吧台那个位置。","text":"On(VacuumCup,Bar2)"} +{"title":"请你拿一下保温杯到另一个吧台位置。","text":"On(VacuumCup,Bar2)"} +{"title":"麻烦你把保温杯放到第一张桌子那个位置。","text":"On(VacuumCup,Table1)"} +{"title":"请你拿一下保温杯到第一张桌子位置。","text":"On(VacuumCup,Table1)"} +{"title":"麻烦你把保温杯放到第二张桌子那个位置。","text":"On(VacuumCup,Table2)"} +{"title":"请你拿一下保温杯到第二张桌子位置。","text":"On(VacuumCup,Table2)"} +{"title":"麻烦你把保温杯放到第三张桌子那个位置。","text":"On(VacuumCup,Table3)"} +{"title":"请你拿一下保温杯到第三张桌子位置。","text":"On(VacuumCup,Table3)"} +{"title":"你能把空调关闭一下吗?","text":"Is(AC,On)"} +{"title":"你能把空调打开一下吗?","text":"Is(AC,Off)"} +{"title":"你能把空调Temperature调高一下吗?","text":"Is(ACTemperature,On)"} +{"title":"你能把空调Temperature调低一下吗?","text":"Is(ACTemperature,Off)"} +{"title":"你能把大厅灯关闭一下吗?","text":"Is(HallLight,On)"} +{"title":"你能把大厅灯打开一下吗?","text":"Is(HallLight,Off)"} +{"title":"你能把筒灯关闭一下吗?","text":"Is(TubeLight,On)"} +{"title":"你能把筒灯打开一下吗?","text":"Is(TubeLight,Off)"} +{"title":"你能把窗帘关闭一下吗?","text":"Is(Curtain,On)"} +{"title":"你能把窗帘打开一下吗?","text":"Is(Curtain,Off)"} +{"title":"你能把椅子脏一下吗?","text":"Is(Chairs,On)"} +{"title":"你能把椅子打扫干净一下吗?","text":"Is(Chairs,Off)"} +{"title":"你能把地板脏一下吗?","text":"Is(Floor,On)"} +{"title":"你能把地板打扫干净一下吗?","text":"Is(Floor,Off)"} +{"title":"你能把第一张桌子脏一下吗?","text":"Is(Table1,On)"} +{"title":"你能把第一张桌子打扫干净一下吗?","text":"Is(Table1,Off)"} +{"title":"你能把盒装冰红茶抓在手里吗?","text":"Holding(Softdrink)"} +{"title":"你能一直拿着盒装冰红茶吗?","text":"Holding(Softdrink)"} +{"title":"你能把瓶装饮料抓在手里吗?","text":"Holding(BottledDrink)"} +{"title":"你能一直拿着瓶装饮料吗?","text":"Holding(BottledDrink)"} +{"title":"你能把酸奶抓在手里吗?","text":"Holding(Yogurt)"} +{"title":"你能一直拿着酸奶吗?","text":"Holding(Yogurt)"} +{"title":"你能把AD钙奶抓在手里吗?","text":"Holding(ADMilk)"} +{"title":"你能一直拿着AD钙奶吗?","text":"Holding(ADMilk)"} +{"title":"你能把牛奶味的饮料抓在手里吗?","text":"Holding(MilkDrink)"} +{"title":"你能一直拿着牛奶味的饮料吗?","text":"Holding(MilkDrink)"} +{"title":"你能把牛奶抓在手里吗?","text":"Holding(Milk)"} +{"title":"你能一直拿着牛奶吗?","text":"Holding(Milk)"} +{"title":"你能把保温杯抓在手里吗?","text":"Holding(VacuumCup)"} +{"title":"你能一直拿着保温杯吗?","text":"Holding(VacuumCup)"} +{"title":"你能把Nothing抓在手里吗?","text":"Holding(Nothing)"} +{"title":"你能一直拿着Nothing吗?","text":"Holding(Nothing)"} +{"title":"你能制作咖啡并把它端到吧台这里来吗?","text":"On(Coffee,Bar)"} +{"title":"给我来点咖啡,并把它端到吧台这里来。","text":"On(Coffee,Bar)"} +{"title":"你能制作咖啡并把它端到茶水桌这里来吗?","text":"On(Coffee,WaterTable)"} +{"title":"给我来点咖啡,并把它端到茶水桌这里来。","text":"On(Coffee,WaterTable)"} +{"title":"你能制作咖啡并把它端到咖啡桌这里来吗?","text":"On(Coffee,CoffeeTable)"} +{"title":"给我来点咖啡,并把它端到咖啡桌这里来。","text":"On(Coffee,CoffeeTable)"} +{"title":"你能制作咖啡并把它端到另一个吧台这里来吗?","text":"On(Coffee,Bar2)"} +{"title":"给我来点咖啡,并把它端到另一个吧台这里来。","text":"On(Coffee,Bar2)"} +{"title":"你能制作咖啡并把它端到第一张桌子这里来吗?","text":"On(Coffee,Table1)"} +{"title":"给我来点咖啡,并把它端到第一张桌子这里来。","text":"On(Coffee,Table1)"} +{"title":"你能制作咖啡并把它端到第二张桌子这里来吗?","text":"On(Coffee,Table2)"} +{"title":"给我来点咖啡,并把它端到第二张桌子这里来。","text":"On(Coffee,Table2)"} +{"title":"你能制作咖啡并把它端到第三张桌子这里来吗?","text":"On(Coffee,Table3)"} +{"title":"给我来点咖啡,并把它端到第三张桌子这里来。","text":"On(Coffee,Table3)"} +{"title":"你能制作水并把它端到吧台这里来吗?","text":"On(Water,Bar)"} +{"title":"给我来点水,并把它端到吧台这里来。","text":"On(Water,Bar)"} +{"title":"你能制作水并把它端到茶水桌这里来吗?","text":"On(Water,WaterTable)"} +{"title":"给我来点水,并把它端到茶水桌这里来。","text":"On(Water,WaterTable)"} +{"title":"你能制作水并把它端到咖啡桌这里来吗?","text":"On(Water,CoffeeTable)"} +{"title":"给我来点水,并把它端到咖啡桌这里来。","text":"On(Water,CoffeeTable)"} +{"title":"你能制作水并把它端到另一个吧台这里来吗?","text":"On(Water,Bar2)"} +{"title":"给我来点水,并把它端到另一个吧台这里来。","text":"On(Water,Bar2)"} +{"title":"你能制作水并把它端到第一张桌子这里来吗?","text":"On(Water,Table1)"} +{"title":"给我来点水,并把它端到第一张桌子这里来。","text":"On(Water,Table1)"} +{"title":"你能制作水并把它端到第二张桌子这里来吗?","text":"On(Water,Table2)"} +{"title":"给我来点水,并把它端到第二张桌子这里来。","text":"On(Water,Table2)"} +{"title":"你能制作水并把它端到第三张桌子这里来吗?","text":"On(Water,Table3)"} +{"title":"给我来点水,并把它端到第三张桌子这里来。","text":"On(Water,Table3)"} +{"title":"你能制作点心或者甜品并把它端到吧台这里来吗?","text":"On(Dessert,Bar)"} +{"title":"给我来点点心或者甜品,并把它端到吧台这里来。","text":"On(Dessert,Bar)"} +{"title":"你能制作点心或者甜品并把它端到茶水桌这里来吗?","text":"On(Dessert,WaterTable)"} +{"title":"给我来点点心或者甜品,并把它端到茶水桌这里来。","text":"On(Dessert,WaterTable)"} +{"title":"你能制作点心或者甜品并把它端到咖啡桌这里来吗?","text":"On(Dessert,CoffeeTable)"} +{"title":"给我来点点心或者甜品,并把它端到咖啡桌这里来。","text":"On(Dessert,CoffeeTable)"} +{"title":"你能制作点心或者甜品并把它端到另一个吧台这里来吗?","text":"On(Dessert,Bar2)"} +{"title":"给我来点点心或者甜品,并把它端到另一个吧台这里来。","text":"On(Dessert,Bar2)"} +{"title":"你能制作点心或者甜品并把它端到第一张桌子这里来吗?","text":"On(Dessert,Table1)"} +{"title":"给我来点点心或者甜品,并把它端到第一张桌子这里来。","text":"On(Dessert,Table1)"} +{"title":"你能制作点心或者甜品并把它端到第二张桌子这里来吗?","text":"On(Dessert,Table2)"} +{"title":"给我来点点心或者甜品,并把它端到第二张桌子这里来。","text":"On(Dessert,Table2)"} +{"title":"你能制作点心或者甜品并把它端到第三张桌子这里来吗?","text":"On(Dessert,Table3)"} +{"title":"给我来点点心或者甜品,并把它端到第三张桌子这里来。","text":"On(Dessert,Table3)"} diff --git a/robowaiter/behavior_tree/dataset1224/goal_states_with_description.txt b/robowaiter/behavior_tree/dataset1224/goal_states_with_description.txt new file mode 100644 index 0000000..7434478 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_states_with_description.txt @@ -0,0 +1,454 @@ +At(Robot,Bar) 你能过来一下吗?我在吧台这里。 +At(Robot,Bar) 麻烦你去一下吧台。 +At(Robot,Bar) 你能去吧台那个位置吗? +At(Robot,Bar2) 你能过来一下吗?我在另一侧的吧台这里。 +At(Robot,Bar2) 麻烦你去一下另一侧的吧台。 +At(Robot,Bar2) 你能去另一侧的吧台那个位置吗? +At(Robot,WaterTable) 你能过来一下吗?我在茶水桌这里。 +At(Robot,WaterTable) 麻烦你去一下茶水桌。 +At(Robot,WaterTable) 你能去茶水桌那个位置吗? +At(Robot,CoffeeTable) 你能过来一下吗?我在咖啡桌这里。 +At(Robot,CoffeeTable) 麻烦你去一下咖啡桌。 +At(Robot,CoffeeTable) 你能去咖啡桌那个位置吗? +At(Robot,Table1) 你能过来一下吗?我在前门斜桌子这里。 +At(Robot,Table1) 麻烦你去一下前门斜桌子。 +At(Robot,Table1) 你能去前门斜桌子那个位置吗? +At(Robot,Table2) 你能过来一下吗?我在大厅长桌子西侧这里。 +At(Robot,Table2) 麻烦你去一下大厅长桌子西侧。 +At(Robot,Table2) 你能去大厅长桌子西侧那个位置吗? +At(Robot,Table3) 你能过来一下吗?我在大厅长桌子东侧这里。 +At(Robot,Table3) 麻烦你去一下大厅长桌子东侧。 +At(Robot,Table3) 你能去大厅长桌子东侧那个位置吗? +At(Robot,BrightTable6) 你能过来一下吗?我在后门靠窗边圆桌这里。 +At(Robot,BrightTable6) 麻烦你去一下后门靠窗边圆桌。 +At(Robot,BrightTable6) 你能去后门靠窗边圆桌那个位置吗? +On(Coffee,Bar) 麻烦你把咖啡放到吧台那个位置。 +On(Coffee,Bar) 请你拿一下咖啡到吧台位置。 +On(Coffee,Bar) 你好,我在吧台,请你拿一下咖啡到位置。 +On(Coffee,Bar2) 麻烦你把咖啡放到另一侧的吧台那个位置。 +On(Coffee,Bar2) 请你拿一下咖啡到另一侧的吧台位置。 +On(Coffee,Bar2) 你好,我在另一侧的吧台,请你拿一下咖啡到位置。 +On(Coffee,WaterTable) 麻烦你把咖啡放到茶水桌那个位置。 +On(Coffee,WaterTable) 请你拿一下咖啡到茶水桌位置。 +On(Coffee,WaterTable) 你好,我在茶水桌,请你拿一下咖啡到位置。 +On(Coffee,CoffeeTable) 麻烦你把咖啡放到咖啡桌那个位置。 +On(Coffee,CoffeeTable) 请你拿一下咖啡到咖啡桌位置。 +On(Coffee,CoffeeTable) 你好,我在咖啡桌,请你拿一下咖啡到位置。 +On(Coffee,Table1) 麻烦你把咖啡放到前门斜桌子那个位置。 +On(Coffee,Table1) 请你拿一下咖啡到前门斜桌子位置。 +On(Coffee,Table1) 你好,我在前门斜桌子,请你拿一下咖啡到位置。 +On(Coffee,Table2) 麻烦你把咖啡放到大厅长桌子西侧那个位置。 +On(Coffee,Table2) 请你拿一下咖啡到大厅长桌子西侧位置。 +On(Coffee,Table2) 你好,我在大厅长桌子西侧,请你拿一下咖啡到位置。 +On(Coffee,Table3) 麻烦你把咖啡放到大厅长桌子东侧那个位置。 +On(Coffee,Table3) 请你拿一下咖啡到大厅长桌子东侧位置。 +On(Coffee,Table3) 你好,我在大厅长桌子东侧,请你拿一下咖啡到位置。 +On(Coffee,BrightTable6) 麻烦你把咖啡放到后门靠窗边圆桌那个位置。 +On(Coffee,BrightTable6) 请你拿一下咖啡到后门靠窗边圆桌位置。 +On(Coffee,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下咖啡到位置。 +On(Water,Bar) 麻烦你把水放到吧台那个位置。 +On(Water,Bar) 请你拿一下水到吧台位置。 +On(Water,Bar) 你好,我在吧台,请你拿一下水到位置。 +On(Water,Bar2) 麻烦你把水放到另一侧的吧台那个位置。 +On(Water,Bar2) 请你拿一下水到另一侧的吧台位置。 +On(Water,Bar2) 你好,我在另一侧的吧台,请你拿一下水到位置。 +On(Water,WaterTable) 麻烦你把水放到茶水桌那个位置。 +On(Water,WaterTable) 请你拿一下水到茶水桌位置。 +On(Water,WaterTable) 你好,我在茶水桌,请你拿一下水到位置。 +On(Water,CoffeeTable) 麻烦你把水放到咖啡桌那个位置。 +On(Water,CoffeeTable) 请你拿一下水到咖啡桌位置。 +On(Water,CoffeeTable) 你好,我在咖啡桌,请你拿一下水到位置。 +On(Water,Table1) 麻烦你把水放到前门斜桌子那个位置。 +On(Water,Table1) 请你拿一下水到前门斜桌子位置。 +On(Water,Table1) 你好,我在前门斜桌子,请你拿一下水到位置。 +On(Water,Table2) 麻烦你把水放到大厅长桌子西侧那个位置。 +On(Water,Table2) 请你拿一下水到大厅长桌子西侧位置。 +On(Water,Table2) 你好,我在大厅长桌子西侧,请你拿一下水到位置。 +On(Water,Table3) 麻烦你把水放到大厅长桌子东侧那个位置。 +On(Water,Table3) 请你拿一下水到大厅长桌子东侧位置。 +On(Water,Table3) 你好,我在大厅长桌子东侧,请你拿一下水到位置。 +On(Water,BrightTable6) 麻烦你把水放到后门靠窗边圆桌那个位置。 +On(Water,BrightTable6) 请你拿一下水到后门靠窗边圆桌位置。 +On(Water,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下水到位置。 +On(Dessert,Bar) 麻烦你把点心放到吧台那个位置。 +On(Dessert,Bar) 请你拿一下点心到吧台位置。 +On(Dessert,Bar) 你好,我在吧台,请你拿一下点心到位置。 +On(Dessert,Bar2) 麻烦你把点心放到另一侧的吧台那个位置。 +On(Dessert,Bar2) 请你拿一下点心到另一侧的吧台位置。 +On(Dessert,Bar2) 你好,我在另一侧的吧台,请你拿一下点心到位置。 +On(Dessert,WaterTable) 麻烦你把点心放到茶水桌那个位置。 +On(Dessert,WaterTable) 请你拿一下点心到茶水桌位置。 +On(Dessert,WaterTable) 你好,我在茶水桌,请你拿一下点心到位置。 +On(Dessert,CoffeeTable) 麻烦你把点心放到咖啡桌那个位置。 +On(Dessert,CoffeeTable) 请你拿一下点心到咖啡桌位置。 +On(Dessert,CoffeeTable) 你好,我在咖啡桌,请你拿一下点心到位置。 +On(Dessert,Table1) 麻烦你把点心放到前门斜桌子那个位置。 +On(Dessert,Table1) 请你拿一下点心到前门斜桌子位置。 +On(Dessert,Table1) 你好,我在前门斜桌子,请你拿一下点心到位置。 +On(Dessert,Table2) 麻烦你把点心放到大厅长桌子西侧那个位置。 +On(Dessert,Table2) 请你拿一下点心到大厅长桌子西侧位置。 +On(Dessert,Table2) 你好,我在大厅长桌子西侧,请你拿一下点心到位置。 +On(Dessert,Table3) 麻烦你把点心放到大厅长桌子东侧那个位置。 +On(Dessert,Table3) 请你拿一下点心到大厅长桌子东侧位置。 +On(Dessert,Table3) 你好,我在大厅长桌子东侧,请你拿一下点心到位置。 +On(Dessert,BrightTable6) 麻烦你把点心放到后门靠窗边圆桌那个位置。 +On(Dessert,BrightTable6) 请你拿一下点心到后门靠窗边圆桌位置。 +On(Dessert,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下点心到位置。 +On(Softdrink,Bar) 麻烦你把盒装冰红茶放到吧台那个位置。 +On(Softdrink,Bar) 请你拿一下盒装冰红茶到吧台位置。 +On(Softdrink,Bar) 你好,我在吧台,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Bar2) 麻烦你把盒装冰红茶放到另一侧的吧台那个位置。 +On(Softdrink,Bar2) 请你拿一下盒装冰红茶到另一侧的吧台位置。 +On(Softdrink,Bar2) 你好,我在另一侧的吧台,请你拿一下盒装冰红茶到位置。 +On(Softdrink,WaterTable) 麻烦你把盒装冰红茶放到茶水桌那个位置。 +On(Softdrink,WaterTable) 请你拿一下盒装冰红茶到茶水桌位置。 +On(Softdrink,WaterTable) 你好,我在茶水桌,请你拿一下盒装冰红茶到位置。 +On(Softdrink,CoffeeTable) 麻烦你把盒装冰红茶放到咖啡桌那个位置。 +On(Softdrink,CoffeeTable) 请你拿一下盒装冰红茶到咖啡桌位置。 +On(Softdrink,CoffeeTable) 你好,我在咖啡桌,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Table1) 麻烦你把盒装冰红茶放到前门斜桌子那个位置。 +On(Softdrink,Table1) 请你拿一下盒装冰红茶到前门斜桌子位置。 +On(Softdrink,Table1) 你好,我在前门斜桌子,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Table2) 麻烦你把盒装冰红茶放到大厅长桌子西侧那个位置。 +On(Softdrink,Table2) 请你拿一下盒装冰红茶到大厅长桌子西侧位置。 +On(Softdrink,Table2) 你好,我在大厅长桌子西侧,请你拿一下盒装冰红茶到位置。 +On(Softdrink,Table3) 麻烦你把盒装冰红茶放到大厅长桌子东侧那个位置。 +On(Softdrink,Table3) 请你拿一下盒装冰红茶到大厅长桌子东侧位置。 +On(Softdrink,Table3) 你好,我在大厅长桌子东侧,请你拿一下盒装冰红茶到位置。 +On(Softdrink,BrightTable6) 麻烦你把盒装冰红茶放到后门靠窗边圆桌那个位置。 +On(Softdrink,BrightTable6) 请你拿一下盒装冰红茶到后门靠窗边圆桌位置。 +On(Softdrink,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下盒装冰红茶到位置。 +On(BottledDrink,Bar) 麻烦你把瓶装饮料放到吧台那个位置。 +On(BottledDrink,Bar) 请你拿一下瓶装饮料到吧台位置。 +On(BottledDrink,Bar) 你好,我在吧台,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Bar2) 麻烦你把瓶装饮料放到另一侧的吧台那个位置。 +On(BottledDrink,Bar2) 请你拿一下瓶装饮料到另一侧的吧台位置。 +On(BottledDrink,Bar2) 你好,我在另一侧的吧台,请你拿一下瓶装饮料到位置。 +On(BottledDrink,WaterTable) 麻烦你把瓶装饮料放到茶水桌那个位置。 +On(BottledDrink,WaterTable) 请你拿一下瓶装饮料到茶水桌位置。 +On(BottledDrink,WaterTable) 你好,我在茶水桌,请你拿一下瓶装饮料到位置。 +On(BottledDrink,CoffeeTable) 麻烦你把瓶装饮料放到咖啡桌那个位置。 +On(BottledDrink,CoffeeTable) 请你拿一下瓶装饮料到咖啡桌位置。 +On(BottledDrink,CoffeeTable) 你好,我在咖啡桌,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Table1) 麻烦你把瓶装饮料放到前门斜桌子那个位置。 +On(BottledDrink,Table1) 请你拿一下瓶装饮料到前门斜桌子位置。 +On(BottledDrink,Table1) 你好,我在前门斜桌子,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Table2) 麻烦你把瓶装饮料放到大厅长桌子西侧那个位置。 +On(BottledDrink,Table2) 请你拿一下瓶装饮料到大厅长桌子西侧位置。 +On(BottledDrink,Table2) 你好,我在大厅长桌子西侧,请你拿一下瓶装饮料到位置。 +On(BottledDrink,Table3) 麻烦你把瓶装饮料放到大厅长桌子东侧那个位置。 +On(BottledDrink,Table3) 请你拿一下瓶装饮料到大厅长桌子东侧位置。 +On(BottledDrink,Table3) 你好,我在大厅长桌子东侧,请你拿一下瓶装饮料到位置。 +On(BottledDrink,BrightTable6) 麻烦你把瓶装饮料放到后门靠窗边圆桌那个位置。 +On(BottledDrink,BrightTable6) 请你拿一下瓶装饮料到后门靠窗边圆桌位置。 +On(BottledDrink,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下瓶装饮料到位置。 +On(Yogurt,Bar) 麻烦你把酸奶放到吧台那个位置。 +On(Yogurt,Bar) 请你拿一下酸奶到吧台位置。 +On(Yogurt,Bar) 你好,我在吧台,请你拿一下酸奶到位置。 +On(Yogurt,Bar2) 麻烦你把酸奶放到另一侧的吧台那个位置。 +On(Yogurt,Bar2) 请你拿一下酸奶到另一侧的吧台位置。 +On(Yogurt,Bar2) 你好,我在另一侧的吧台,请你拿一下酸奶到位置。 +On(Yogurt,WaterTable) 麻烦你把酸奶放到茶水桌那个位置。 +On(Yogurt,WaterTable) 请你拿一下酸奶到茶水桌位置。 +On(Yogurt,WaterTable) 你好,我在茶水桌,请你拿一下酸奶到位置。 +On(Yogurt,CoffeeTable) 麻烦你把酸奶放到咖啡桌那个位置。 +On(Yogurt,CoffeeTable) 请你拿一下酸奶到咖啡桌位置。 +On(Yogurt,CoffeeTable) 你好,我在咖啡桌,请你拿一下酸奶到位置。 +On(Yogurt,Table1) 麻烦你把酸奶放到前门斜桌子那个位置。 +On(Yogurt,Table1) 请你拿一下酸奶到前门斜桌子位置。 +On(Yogurt,Table1) 你好,我在前门斜桌子,请你拿一下酸奶到位置。 +On(Yogurt,Table2) 麻烦你把酸奶放到大厅长桌子西侧那个位置。 +On(Yogurt,Table2) 请你拿一下酸奶到大厅长桌子西侧位置。 +On(Yogurt,Table2) 你好,我在大厅长桌子西侧,请你拿一下酸奶到位置。 +On(Yogurt,Table3) 麻烦你把酸奶放到大厅长桌子东侧那个位置。 +On(Yogurt,Table3) 请你拿一下酸奶到大厅长桌子东侧位置。 +On(Yogurt,Table3) 你好,我在大厅长桌子东侧,请你拿一下酸奶到位置。 +On(Yogurt,BrightTable6) 麻烦你把酸奶放到后门靠窗边圆桌那个位置。 +On(Yogurt,BrightTable6) 请你拿一下酸奶到后门靠窗边圆桌位置。 +On(Yogurt,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下酸奶到位置。 +On(ADMilk,Bar) 麻烦你把AD钙奶放到吧台那个位置。 +On(ADMilk,Bar) 请你拿一下AD钙奶到吧台位置。 +On(ADMilk,Bar) 你好,我在吧台,请你拿一下AD钙奶到位置。 +On(ADMilk,Bar2) 麻烦你把AD钙奶放到另一侧的吧台那个位置。 +On(ADMilk,Bar2) 请你拿一下AD钙奶到另一侧的吧台位置。 +On(ADMilk,Bar2) 你好,我在另一侧的吧台,请你拿一下AD钙奶到位置。 +On(ADMilk,WaterTable) 麻烦你把AD钙奶放到茶水桌那个位置。 +On(ADMilk,WaterTable) 请你拿一下AD钙奶到茶水桌位置。 +On(ADMilk,WaterTable) 你好,我在茶水桌,请你拿一下AD钙奶到位置。 +On(ADMilk,CoffeeTable) 麻烦你把AD钙奶放到咖啡桌那个位置。 +On(ADMilk,CoffeeTable) 请你拿一下AD钙奶到咖啡桌位置。 +On(ADMilk,CoffeeTable) 你好,我在咖啡桌,请你拿一下AD钙奶到位置。 +On(ADMilk,Table1) 麻烦你把AD钙奶放到前门斜桌子那个位置。 +On(ADMilk,Table1) 请你拿一下AD钙奶到前门斜桌子位置。 +On(ADMilk,Table1) 你好,我在前门斜桌子,请你拿一下AD钙奶到位置。 +On(ADMilk,Table2) 麻烦你把AD钙奶放到大厅长桌子西侧那个位置。 +On(ADMilk,Table2) 请你拿一下AD钙奶到大厅长桌子西侧位置。 +On(ADMilk,Table2) 你好,我在大厅长桌子西侧,请你拿一下AD钙奶到位置。 +On(ADMilk,Table3) 麻烦你把AD钙奶放到大厅长桌子东侧那个位置。 +On(ADMilk,Table3) 请你拿一下AD钙奶到大厅长桌子东侧位置。 +On(ADMilk,Table3) 你好,我在大厅长桌子东侧,请你拿一下AD钙奶到位置。 +On(ADMilk,BrightTable6) 麻烦你把AD钙奶放到后门靠窗边圆桌那个位置。 +On(ADMilk,BrightTable6) 请你拿一下AD钙奶到后门靠窗边圆桌位置。 +On(ADMilk,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下AD钙奶到位置。 +On(MilkDrink,Bar) 麻烦你把牛奶味的饮料放到吧台那个位置。 +On(MilkDrink,Bar) 请你拿一下牛奶味的饮料到吧台位置。 +On(MilkDrink,Bar) 你好,我在吧台,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Bar2) 麻烦你把牛奶味的饮料放到另一侧的吧台那个位置。 +On(MilkDrink,Bar2) 请你拿一下牛奶味的饮料到另一侧的吧台位置。 +On(MilkDrink,Bar2) 你好,我在另一侧的吧台,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,WaterTable) 麻烦你把牛奶味的饮料放到茶水桌那个位置。 +On(MilkDrink,WaterTable) 请你拿一下牛奶味的饮料到茶水桌位置。 +On(MilkDrink,WaterTable) 你好,我在茶水桌,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,CoffeeTable) 麻烦你把牛奶味的饮料放到咖啡桌那个位置。 +On(MilkDrink,CoffeeTable) 请你拿一下牛奶味的饮料到咖啡桌位置。 +On(MilkDrink,CoffeeTable) 你好,我在咖啡桌,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Table1) 麻烦你把牛奶味的饮料放到前门斜桌子那个位置。 +On(MilkDrink,Table1) 请你拿一下牛奶味的饮料到前门斜桌子位置。 +On(MilkDrink,Table1) 你好,我在前门斜桌子,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Table2) 麻烦你把牛奶味的饮料放到大厅长桌子西侧那个位置。 +On(MilkDrink,Table2) 请你拿一下牛奶味的饮料到大厅长桌子西侧位置。 +On(MilkDrink,Table2) 你好,我在大厅长桌子西侧,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,Table3) 麻烦你把牛奶味的饮料放到大厅长桌子东侧那个位置。 +On(MilkDrink,Table3) 请你拿一下牛奶味的饮料到大厅长桌子东侧位置。 +On(MilkDrink,Table3) 你好,我在大厅长桌子东侧,请你拿一下牛奶味的饮料到位置。 +On(MilkDrink,BrightTable6) 麻烦你把牛奶味的饮料放到后门靠窗边圆桌那个位置。 +On(MilkDrink,BrightTable6) 请你拿一下牛奶味的饮料到后门靠窗边圆桌位置。 +On(MilkDrink,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下牛奶味的饮料到位置。 +On(Milk,Bar) 麻烦你把牛奶放到吧台那个位置。 +On(Milk,Bar) 请你拿一下牛奶到吧台位置。 +On(Milk,Bar) 你好,我在吧台,请你拿一下牛奶到位置。 +On(Milk,Bar2) 麻烦你把牛奶放到另一侧的吧台那个位置。 +On(Milk,Bar2) 请你拿一下牛奶到另一侧的吧台位置。 +On(Milk,Bar2) 你好,我在另一侧的吧台,请你拿一下牛奶到位置。 +On(Milk,WaterTable) 麻烦你把牛奶放到茶水桌那个位置。 +On(Milk,WaterTable) 请你拿一下牛奶到茶水桌位置。 +On(Milk,WaterTable) 你好,我在茶水桌,请你拿一下牛奶到位置。 +On(Milk,CoffeeTable) 麻烦你把牛奶放到咖啡桌那个位置。 +On(Milk,CoffeeTable) 请你拿一下牛奶到咖啡桌位置。 +On(Milk,CoffeeTable) 你好,我在咖啡桌,请你拿一下牛奶到位置。 +On(Milk,Table1) 麻烦你把牛奶放到前门斜桌子那个位置。 +On(Milk,Table1) 请你拿一下牛奶到前门斜桌子位置。 +On(Milk,Table1) 你好,我在前门斜桌子,请你拿一下牛奶到位置。 +On(Milk,Table2) 麻烦你把牛奶放到大厅长桌子西侧那个位置。 +On(Milk,Table2) 请你拿一下牛奶到大厅长桌子西侧位置。 +On(Milk,Table2) 你好,我在大厅长桌子西侧,请你拿一下牛奶到位置。 +On(Milk,Table3) 麻烦你把牛奶放到大厅长桌子东侧那个位置。 +On(Milk,Table3) 请你拿一下牛奶到大厅长桌子东侧位置。 +On(Milk,Table3) 你好,我在大厅长桌子东侧,请你拿一下牛奶到位置。 +On(Milk,BrightTable6) 麻烦你把牛奶放到后门靠窗边圆桌那个位置。 +On(Milk,BrightTable6) 请你拿一下牛奶到后门靠窗边圆桌位置。 +On(Milk,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下牛奶到位置。 +On(VacuumCup,Bar) 麻烦你把保温杯放到吧台那个位置。 +On(VacuumCup,Bar) 请你拿一下保温杯到吧台位置。 +On(VacuumCup,Bar) 你好,我在吧台,请你拿一下保温杯到位置。 +On(VacuumCup,Bar2) 麻烦你把保温杯放到另一侧的吧台那个位置。 +On(VacuumCup,Bar2) 请你拿一下保温杯到另一侧的吧台位置。 +On(VacuumCup,Bar2) 你好,我在另一侧的吧台,请你拿一下保温杯到位置。 +On(VacuumCup,WaterTable) 麻烦你把保温杯放到茶水桌那个位置。 +On(VacuumCup,WaterTable) 请你拿一下保温杯到茶水桌位置。 +On(VacuumCup,WaterTable) 你好,我在茶水桌,请你拿一下保温杯到位置。 +On(VacuumCup,CoffeeTable) 麻烦你把保温杯放到咖啡桌那个位置。 +On(VacuumCup,CoffeeTable) 请你拿一下保温杯到咖啡桌位置。 +On(VacuumCup,CoffeeTable) 你好,我在咖啡桌,请你拿一下保温杯到位置。 +On(VacuumCup,Table1) 麻烦你把保温杯放到前门斜桌子那个位置。 +On(VacuumCup,Table1) 请你拿一下保温杯到前门斜桌子位置。 +On(VacuumCup,Table1) 你好,我在前门斜桌子,请你拿一下保温杯到位置。 +On(VacuumCup,Table2) 麻烦你把保温杯放到大厅长桌子西侧那个位置。 +On(VacuumCup,Table2) 请你拿一下保温杯到大厅长桌子西侧位置。 +On(VacuumCup,Table2) 你好,我在大厅长桌子西侧,请你拿一下保温杯到位置。 +On(VacuumCup,Table3) 麻烦你把保温杯放到大厅长桌子东侧那个位置。 +On(VacuumCup,Table3) 请你拿一下保温杯到大厅长桌子东侧位置。 +On(VacuumCup,Table3) 你好,我在大厅长桌子东侧,请你拿一下保温杯到位置。 +On(VacuumCup,BrightTable6) 麻烦你把保温杯放到后门靠窗边圆桌那个位置。 +On(VacuumCup,BrightTable6) 请你拿一下保温杯到后门靠窗边圆桌位置。 +On(VacuumCup,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下保温杯到位置。 +On(Chips,Bar) 麻烦你把薯片放到吧台那个位置。 +On(Chips,Bar) 请你拿一下薯片到吧台位置。 +On(Chips,Bar) 你好,我在吧台,请你拿一下薯片到位置。 +On(Chips,Bar2) 麻烦你把薯片放到另一侧的吧台那个位置。 +On(Chips,Bar2) 请你拿一下薯片到另一侧的吧台位置。 +On(Chips,Bar2) 你好,我在另一侧的吧台,请你拿一下薯片到位置。 +On(Chips,WaterTable) 麻烦你把薯片放到茶水桌那个位置。 +On(Chips,WaterTable) 请你拿一下薯片到茶水桌位置。 +On(Chips,WaterTable) 你好,我在茶水桌,请你拿一下薯片到位置。 +On(Chips,CoffeeTable) 麻烦你把薯片放到咖啡桌那个位置。 +On(Chips,CoffeeTable) 请你拿一下薯片到咖啡桌位置。 +On(Chips,CoffeeTable) 你好,我在咖啡桌,请你拿一下薯片到位置。 +On(Chips,Table1) 麻烦你把薯片放到前门斜桌子那个位置。 +On(Chips,Table1) 请你拿一下薯片到前门斜桌子位置。 +On(Chips,Table1) 你好,我在前门斜桌子,请你拿一下薯片到位置。 +On(Chips,Table2) 麻烦你把薯片放到大厅长桌子西侧那个位置。 +On(Chips,Table2) 请你拿一下薯片到大厅长桌子西侧位置。 +On(Chips,Table2) 你好,我在大厅长桌子西侧,请你拿一下薯片到位置。 +On(Chips,Table3) 麻烦你把薯片放到大厅长桌子东侧那个位置。 +On(Chips,Table3) 请你拿一下薯片到大厅长桌子东侧位置。 +On(Chips,Table3) 你好,我在大厅长桌子东侧,请你拿一下薯片到位置。 +On(Chips,BrightTable6) 麻烦你把薯片放到后门靠窗边圆桌那个位置。 +On(Chips,BrightTable6) 请你拿一下薯片到后门靠窗边圆桌位置。 +On(Chips,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下薯片到位置。 +On(NFCJuice,Bar) 麻烦你把NFC果汁放到吧台那个位置。 +On(NFCJuice,Bar) 请你拿一下NFC果汁到吧台位置。 +On(NFCJuice,Bar) 你好,我在吧台,请你拿一下NFC果汁到位置。 +On(NFCJuice,Bar2) 麻烦你把NFC果汁放到另一侧的吧台那个位置。 +On(NFCJuice,Bar2) 请你拿一下NFC果汁到另一侧的吧台位置。 +On(NFCJuice,Bar2) 你好,我在另一侧的吧台,请你拿一下NFC果汁到位置。 +On(NFCJuice,WaterTable) 麻烦你把NFC果汁放到茶水桌那个位置。 +On(NFCJuice,WaterTable) 请你拿一下NFC果汁到茶水桌位置。 +On(NFCJuice,WaterTable) 你好,我在茶水桌,请你拿一下NFC果汁到位置。 +On(NFCJuice,CoffeeTable) 麻烦你把NFC果汁放到咖啡桌那个位置。 +On(NFCJuice,CoffeeTable) 请你拿一下NFC果汁到咖啡桌位置。 +On(NFCJuice,CoffeeTable) 你好,我在咖啡桌,请你拿一下NFC果汁到位置。 +On(NFCJuice,Table1) 麻烦你把NFC果汁放到前门斜桌子那个位置。 +On(NFCJuice,Table1) 请你拿一下NFC果汁到前门斜桌子位置。 +On(NFCJuice,Table1) 你好,我在前门斜桌子,请你拿一下NFC果汁到位置。 +On(NFCJuice,Table2) 麻烦你把NFC果汁放到大厅长桌子西侧那个位置。 +On(NFCJuice,Table2) 请你拿一下NFC果汁到大厅长桌子西侧位置。 +On(NFCJuice,Table2) 你好,我在大厅长桌子西侧,请你拿一下NFC果汁到位置。 +On(NFCJuice,Table3) 麻烦你把NFC果汁放到大厅长桌子东侧那个位置。 +On(NFCJuice,Table3) 请你拿一下NFC果汁到大厅长桌子东侧位置。 +On(NFCJuice,Table3) 你好,我在大厅长桌子东侧,请你拿一下NFC果汁到位置。 +On(NFCJuice,BrightTable6) 麻烦你把NFC果汁放到后门靠窗边圆桌那个位置。 +On(NFCJuice,BrightTable6) 请你拿一下NFC果汁到后门靠窗边圆桌位置。 +On(NFCJuice,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下NFC果汁到位置。 +On(Bernachon,Bar) 麻烦你把贝纳颂咖啡放到吧台那个位置。 +On(Bernachon,Bar) 请你拿一下贝纳颂咖啡到吧台位置。 +On(Bernachon,Bar) 你好,我在吧台,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Bar2) 麻烦你把贝纳颂咖啡放到另一侧的吧台那个位置。 +On(Bernachon,Bar2) 请你拿一下贝纳颂咖啡到另一侧的吧台位置。 +On(Bernachon,Bar2) 你好,我在另一侧的吧台,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,WaterTable) 麻烦你把贝纳颂咖啡放到茶水桌那个位置。 +On(Bernachon,WaterTable) 请你拿一下贝纳颂咖啡到茶水桌位置。 +On(Bernachon,WaterTable) 你好,我在茶水桌,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,CoffeeTable) 麻烦你把贝纳颂咖啡放到咖啡桌那个位置。 +On(Bernachon,CoffeeTable) 请你拿一下贝纳颂咖啡到咖啡桌位置。 +On(Bernachon,CoffeeTable) 你好,我在咖啡桌,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Table1) 麻烦你把贝纳颂咖啡放到前门斜桌子那个位置。 +On(Bernachon,Table1) 请你拿一下贝纳颂咖啡到前门斜桌子位置。 +On(Bernachon,Table1) 你好,我在前门斜桌子,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Table2) 麻烦你把贝纳颂咖啡放到大厅长桌子西侧那个位置。 +On(Bernachon,Table2) 请你拿一下贝纳颂咖啡到大厅长桌子西侧位置。 +On(Bernachon,Table2) 你好,我在大厅长桌子西侧,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,Table3) 麻烦你把贝纳颂咖啡放到大厅长桌子东侧那个位置。 +On(Bernachon,Table3) 请你拿一下贝纳颂咖啡到大厅长桌子东侧位置。 +On(Bernachon,Table3) 你好,我在大厅长桌子东侧,请你拿一下贝纳颂咖啡到位置。 +On(Bernachon,BrightTable6) 麻烦你把贝纳颂咖啡放到后门靠窗边圆桌那个位置。 +On(Bernachon,BrightTable6) 请你拿一下贝纳颂咖啡到后门靠窗边圆桌位置。 +On(Bernachon,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下贝纳颂咖啡到位置。 +On(SpringWater,Bar) 麻烦你把矿泉水放到吧台那个位置。 +On(SpringWater,Bar) 请你拿一下矿泉水到吧台位置。 +On(SpringWater,Bar) 你好,我在吧台,请你拿一下矿泉水到位置。 +On(SpringWater,Bar2) 麻烦你把矿泉水放到另一侧的吧台那个位置。 +On(SpringWater,Bar2) 请你拿一下矿泉水到另一侧的吧台位置。 +On(SpringWater,Bar2) 你好,我在另一侧的吧台,请你拿一下矿泉水到位置。 +On(SpringWater,WaterTable) 麻烦你把矿泉水放到茶水桌那个位置。 +On(SpringWater,WaterTable) 请你拿一下矿泉水到茶水桌位置。 +On(SpringWater,WaterTable) 你好,我在茶水桌,请你拿一下矿泉水到位置。 +On(SpringWater,CoffeeTable) 麻烦你把矿泉水放到咖啡桌那个位置。 +On(SpringWater,CoffeeTable) 请你拿一下矿泉水到咖啡桌位置。 +On(SpringWater,CoffeeTable) 你好,我在咖啡桌,请你拿一下矿泉水到位置。 +On(SpringWater,Table1) 麻烦你把矿泉水放到前门斜桌子那个位置。 +On(SpringWater,Table1) 请你拿一下矿泉水到前门斜桌子位置。 +On(SpringWater,Table1) 你好,我在前门斜桌子,请你拿一下矿泉水到位置。 +On(SpringWater,Table2) 麻烦你把矿泉水放到大厅长桌子西侧那个位置。 +On(SpringWater,Table2) 请你拿一下矿泉水到大厅长桌子西侧位置。 +On(SpringWater,Table2) 你好,我在大厅长桌子西侧,请你拿一下矿泉水到位置。 +On(SpringWater,Table3) 麻烦你把矿泉水放到大厅长桌子东侧那个位置。 +On(SpringWater,Table3) 请你拿一下矿泉水到大厅长桌子东侧位置。 +On(SpringWater,Table3) 你好,我在大厅长桌子东侧,请你拿一下矿泉水到位置。 +On(SpringWater,BrightTable6) 麻烦你把矿泉水放到后门靠窗边圆桌那个位置。 +On(SpringWater,BrightTable6) 请你拿一下矿泉水到后门靠窗边圆桌位置。 +On(SpringWater,BrightTable6) 你好,我在后门靠窗边圆桌,请你拿一下矿泉水到位置。 +Is(AC,On) 你能把空调关闭一下吗? +Is(AC,Off) 你能把空调打开一下吗? +Is(ACTemperature,On) 你能把空调Temperature调高一下吗? +Is(ACTemperature,Off) 你能把空调Temperature调低一下吗? +Is(HallLight,On) 你能把大厅灯关闭一下吗? +Is(HallLight,Off) 你能把大厅灯打开一下吗? +Is(TubeLight,On) 你能把筒灯关闭一下吗? +Is(TubeLight,Off) 你能把筒灯打开一下吗? +Is(Curtain,On) 你能把窗帘关闭一下吗? +Is(Curtain,Off) 你能把窗帘打开一下吗? +Is(Chairs,On) 你能把椅子脏一下吗? +Is(Chairs,Off) 你能把椅子打扫干净一下吗? +Is(Floor,On) 你能把地板脏一下吗? +Is(Floor,Off) 你能把地板打扫干净一下吗? +Is(Table1,On) 你能把前门斜桌子脏一下吗? +Is(Table1,Off) 你能把前门斜桌子打扫干净一下吗? +Holding(Coffee) 你能把咖啡抓在手里吗? +Holding(Coffee) 你能一直拿着咖啡吗? +Holding(Water) 你能把水抓在手里吗? +Holding(Water) 你能一直拿着水吗? +Holding(Dessert) 你能把点心抓在手里吗? +Holding(Dessert) 你能一直拿着点心吗? +Holding(Softdrink) 你能把盒装冰红茶抓在手里吗? +Holding(Softdrink) 你能一直拿着盒装冰红茶吗? +Holding(BottledDrink) 你能把瓶装饮料抓在手里吗? +Holding(BottledDrink) 你能一直拿着瓶装饮料吗? +Holding(Yogurt) 你能把酸奶抓在手里吗? +Holding(Yogurt) 你能一直拿着酸奶吗? +Holding(ADMilk) 你能把AD钙奶抓在手里吗? +Holding(ADMilk) 你能一直拿着AD钙奶吗? +Holding(MilkDrink) 你能把牛奶味的饮料抓在手里吗? +Holding(MilkDrink) 你能一直拿着牛奶味的饮料吗? +Holding(Milk) 你能把牛奶抓在手里吗? +Holding(Milk) 你能一直拿着牛奶吗? +Holding(VacuumCup) 你能把保温杯抓在手里吗? +Holding(VacuumCup) 你能一直拿着保温杯吗? +Holding(Chips) 你能把薯片抓在手里吗? +Holding(Chips) 你能一直拿着薯片吗? +Holding(NFCJuice) 你能把NFC果汁抓在手里吗? +Holding(NFCJuice) 你能一直拿着NFC果汁吗? +Holding(Bernachon) 你能把贝纳颂咖啡抓在手里吗? +Holding(Bernachon) 你能一直拿着贝纳颂咖啡吗? +Holding(SpringWater) 你能把矿泉水抓在手里吗? +Holding(SpringWater) 你能一直拿着矿泉水吗? +Holding(Nothing) 你能把Nothing抓在手里吗? +Holding(Nothing) 你能一直拿着Nothing吗? +On(Coffee,Bar) 你能制作咖啡并把它端到吧台这里来吗? +On(Coffee,Bar) 给我来点咖啡,并把它端到吧台这里来。 +On(Coffee,Bar2) 你能制作咖啡并把它端到另一侧的吧台这里来吗? +On(Coffee,Bar2) 给我来点咖啡,并把它端到另一侧的吧台这里来。 +On(Coffee,WaterTable) 你能制作咖啡并把它端到茶水桌这里来吗? +On(Coffee,WaterTable) 给我来点咖啡,并把它端到茶水桌这里来。 +On(Coffee,CoffeeTable) 你能制作咖啡并把它端到咖啡桌这里来吗? +On(Coffee,CoffeeTable) 给我来点咖啡,并把它端到咖啡桌这里来。 +On(Coffee,Table1) 你能制作咖啡并把它端到前门斜桌子这里来吗? +On(Coffee,Table1) 给我来点咖啡,并把它端到前门斜桌子这里来。 +On(Coffee,Table2) 你能制作咖啡并把它端到大厅长桌子西侧这里来吗? +On(Coffee,Table2) 给我来点咖啡,并把它端到大厅长桌子西侧这里来。 +On(Coffee,Table3) 你能制作咖啡并把它端到大厅长桌子东侧这里来吗? +On(Coffee,Table3) 给我来点咖啡,并把它端到大厅长桌子东侧这里来。 +On(Coffee,BrightTable6) 你能制作咖啡并把它端到后门靠窗边圆桌这里来吗? +On(Coffee,BrightTable6) 给我来点咖啡,并把它端到后门靠窗边圆桌这里来。 +On(Water,Bar) 你能制作水并把它端到吧台这里来吗? +On(Water,Bar) 给我来点水,并把它端到吧台这里来。 +On(Water,Bar2) 你能制作水并把它端到另一侧的吧台这里来吗? +On(Water,Bar2) 给我来点水,并把它端到另一侧的吧台这里来。 +On(Water,WaterTable) 你能制作水并把它端到茶水桌这里来吗? +On(Water,WaterTable) 给我来点水,并把它端到茶水桌这里来。 +On(Water,CoffeeTable) 你能制作水并把它端到咖啡桌这里来吗? +On(Water,CoffeeTable) 给我来点水,并把它端到咖啡桌这里来。 +On(Water,Table1) 你能制作水并把它端到前门斜桌子这里来吗? +On(Water,Table1) 给我来点水,并把它端到前门斜桌子这里来。 +On(Water,Table2) 你能制作水并把它端到大厅长桌子西侧这里来吗? +On(Water,Table2) 给我来点水,并把它端到大厅长桌子西侧这里来。 +On(Water,Table3) 你能制作水并把它端到大厅长桌子东侧这里来吗? +On(Water,Table3) 给我来点水,并把它端到大厅长桌子东侧这里来。 +On(Water,BrightTable6) 你能制作水并把它端到后门靠窗边圆桌这里来吗? +On(Water,BrightTable6) 给我来点水,并把它端到后门靠窗边圆桌这里来。 +On(Dessert,Bar) 你能制作点心并把它端到吧台这里来吗? +On(Dessert,Bar) 给我来点点心,并把它端到吧台这里来。 +On(Dessert,Bar2) 你能制作点心并把它端到另一侧的吧台这里来吗? +On(Dessert,Bar2) 给我来点点心,并把它端到另一侧的吧台这里来。 +On(Dessert,WaterTable) 你能制作点心并把它端到茶水桌这里来吗? +On(Dessert,WaterTable) 给我来点点心,并把它端到茶水桌这里来。 +On(Dessert,CoffeeTable) 你能制作点心并把它端到咖啡桌这里来吗? +On(Dessert,CoffeeTable) 给我来点点心,并把它端到咖啡桌这里来。 +On(Dessert,Table1) 你能制作点心并把它端到前门斜桌子这里来吗? +On(Dessert,Table1) 给我来点点心,并把它端到前门斜桌子这里来。 +On(Dessert,Table2) 你能制作点心并把它端到大厅长桌子西侧这里来吗? +On(Dessert,Table2) 给我来点点心,并把它端到大厅长桌子西侧这里来。 +On(Dessert,Table3) 你能制作点心并把它端到大厅长桌子东侧这里来吗? +On(Dessert,Table3) 给我来点点心,并把它端到大厅长桌子东侧这里来。 +On(Dessert,BrightTable6) 你能制作点心并把它端到后门靠窗边圆桌这里来吗? +On(Dessert,BrightTable6) 给我来点点心,并把它端到后门靠窗边圆桌这里来。 diff --git a/robowaiter/behavior_tree/dataset1224/goal_states_with_description_to_json.py b/robowaiter/behavior_tree/dataset1224/goal_states_with_description_to_json.py new file mode 100644 index 0000000..9b673be --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/goal_states_with_description_to_json.py @@ -0,0 +1,10 @@ +import os + +with open(os.path.join('./goal_states_with_description.txt'), 'r', encoding='utf-8') as file: + lines = file.readlines() + +with open(os.path.join('./goal_states_with_description.jsonl'), 'w', encoding='utf-8') as file: + + for line in lines: + tmp = line[:-1].split('\t') + file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) diff --git a/robowaiter/behavior_tree/dataset1224/sentence_expansion.py b/robowaiter/behavior_tree/dataset1224/sentence_expansion.py new file mode 100644 index 0000000..5cd2be4 --- /dev/null +++ b/robowaiter/behavior_tree/dataset1224/sentence_expansion.py @@ -0,0 +1,61 @@ +import os +import requests +import urllib3 +from tqdm import tqdm + +######################################## +# 该文件实现了与大模型的简单通信 +######################################## + +# 忽略https的安全性警告 +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + +def single_round(question, prefix=""): + url = "https://45.125.46.134:25344/v1/chat/completions" + headers = {"Content-Type": "application/json"} + data = { + "model": "RoboWaiter", + "messages": [ + { + "role": "system", + # "content": "你是一个机器人服务员:RoboWaiter. 你的职责是为顾客提供对话及具身服务。" + "content": """ + 假设现在你是咖啡厅的一个顾客,请将以下你对咖啡厅服务员说的话改写成更清晰更合理的顾客表述。注意:句中的你指的是咖啡厅服务员,也不要说能帮我。 + 例如:麻烦你去一下吧台。可以转述成:服务员,你能去下吧台吗? + 另一个例子:请你拿一下酸奶到吧台位置。可以转述成:服务员,拿一杯酸奶来吧台。 + + """ + }, + { + "role": "user", + "content": prefix + question + } + ] + } + + response = requests.post(url, headers=headers, json=data, verify=False) + + if response.status_code == 200: + result = response.json() + return result['choices'][0]['message']['content'].strip() + else: + return "大模型请求失败:", response.status_code + + +if __name__ == '__main__': + with open('./goal_states_with_description.txt', 'r', encoding='utf-8') as file: + lines = file.readlines() + + output_file = './expansion_out/output2.txt' + with open(output_file, 'a', encoding='utf-8') as file: + file.truncate(0) + for line in tqdm(lines): + tmp = line[:-1].split('\t') + # file.write("""{"title":"%s","text":"%s"}\n""" % (tmp[1], tmp[0])) + question = tmp[1] + # print(single_round(question)) + # print(tmp[1]) + with open(output_file, 'a', encoding='utf-8') as file: + file.write(tmp[0] + "\t" + single_round(question, prefix="现在改写一下句子:") + '\n') + print("输出完成") diff --git a/robowaiter/behavior_tree/obtea/BTExpansionAlgorithm.py b/robowaiter/behavior_tree/obtea/BTExpansionAlgorithm.py index e340eda..0de8662 100644 --- a/robowaiter/behavior_tree/obtea/BTExpansionAlgorithm.py +++ b/robowaiter/behavior_tree/obtea/BTExpansionAlgorithm.py @@ -26,16 +26,16 @@ class BTalgorithm: self.conditions_index = [] # 运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt - def run_algorithm(self, start, goal, actions): + def run_algorithm_selTree(self, start, goal, actions): # 初始行为树只包含目标条件 - self.bt = ControlBT(type='cond') + bt = ControlBT(type='cond') g_node = Leaf(type='cond', content=goal,mincost=0) - self.bt.add_child([g_node]) + bt.add_child([g_node]) self.conditions.append(goal) self.nodes.append(g_node) # condition node list # 尝试在初始状态执行行为树 - val, obj = self.bt.tick(start) + val, obj = bt.tick(start) canrun = False if val == 'success' or val == 'running': canrun = True @@ -92,10 +92,29 @@ class BTalgorithm: # 记录已扩展条件 self.traversed.append(c) # 尝试在初始状态运行行为树 - val, obj = self.bt.tick(start) + val, obj = bt.tick(start) canrun = False if val == 'success' or val == 'running': canrun = True + return bt + + + + def run_algorithm(self, start, goal, actions): + # goal_ls = goal.replace(" ", "") + # goal_ls = goal_ls.split("|") + self.bt = ControlBT(type='cond') + subtree = ControlBT(type='?') + if len(goal) > 1: + for g in goal: + print("goal",g) + bt_sel_tree = self.run_algorithm_selTree(start, g, actions) + print("bt_sel_tree.children",bt_sel_tree.children) + # print(bt_sel_tree.children[0]) + subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])]) + self.bt.add_child([subtree]) + else: + self.bt = self.run_algorithm_selTree(start, goal[0], actions) return True def print_solution(self): diff --git a/robowaiter/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py b/robowaiter/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py index 1b52fe4..5fc148f 100644 --- a/robowaiter/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py +++ b/robowaiter/behavior_tree/obtea/OptimalBTExpansionAlgorithm.py @@ -97,20 +97,20 @@ class OptBTExpAlgorithm: #运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt # def run_algorithm(self,goal,actions,scene): - def run_algorithm(self, start, goal, actions): + def run_algorithm_selTree(self, start, goal, actions): # self.scene = scene self.goal = goal if self.verbose: print("\n算法开始!") - self.bt = ControlBT(type='cond') + bt = ControlBT(type='cond') # 初始行为树只包含目标条件 gc_node = Leaf(type='cond', content=goal,mincost=0) # 为了统一,都成对出现 ga_node = Leaf(type='act', content=None, mincost=0) subtree = ControlBT(type='?') subtree.add_child([copy.deepcopy(gc_node)]) # 子树首先保留所扩展结 - self.bt.add_child([subtree]) + bt.add_child([subtree]) # self.conditions.append(goal) cond_anc_pair = CondActPair(cond_leaf=gc_node,act_leaf=ga_node) @@ -171,16 +171,17 @@ class OptBTExpAlgorithm: # if c <= self.scene.state["condition_set"]: if c <= start: if self.bt_merge: - self.merge_adjacent_conditions_stack() - return True + bt = copy.deepcopy(self.merge_adjacent_conditions_stack(bt)) + return bt,min_cost + # return True else: subtree.add_child([copy.deepcopy(pair_node.act_leaf)]) if self.verbose: print("完成扩展 a_node= %s,对应的新条件 c_attr= %s,mincost=%d" \ - % (cond_anc_pair.act_leaf.content.name, cond_anc_pair.cond_leaf.content, - cond_anc_pair.cond_leaf.mincost)) + % (pair_node.act_leaf.content.name, pair_node.cond_leaf.content, + pair_node.cond_leaf.mincost)) if self.verbose: print("遍历所有动作, 寻找符合条件的动作") @@ -192,7 +193,7 @@ class OptBTExpAlgorithm: if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set(): if (c - actions[i].del_set) == c: if self.verbose: - print("———— 满足条件可以扩展") + print("———— 满足条件可以扩展:",actions[i].name) c_attr = (actions[i].pre | c) - actions[i].add # 这样剪枝存在错误性 @@ -205,7 +206,7 @@ class OptBTExpAlgorithm: if j <= c_attr: valid = False if self.verbose: - print("———— --被剪枝") + print("———— --被剪枝:",actions[i].name,"c_attr=",c_attr) break if valid: @@ -216,197 +217,132 @@ class OptBTExpAlgorithm: self.traversed.append(c_attr) # 重点 the set of expanded conditions # 把符合条件的动作节点都放到列表里 if self.verbose: - print("———— -- %s 符合条件放入列表,对应的c为 %s" % (actions[i].name,c_attr)) + print("———— -- %s 符合条件放入列表,对应的c为 %s" % (actions[i].name,c_attr),"cost=",current_mincost + actions[i].cost) if self.bt_merge: - self.merge_adjacent_conditions_stack() + bt = copy.deepcopy(self.merge_adjacent_conditions_stack(bt)) if self.verbose: print("算法结束!\n") + return bt,min_cost + # return True + + def run_algorithm(self, start, goal, actions): + self.bt = ControlBT(type='cond') + subtree = ControlBT(type='?') + + subtree_with_costs_ls=[] + + if len(goal) > 1: + for g in goal: + bt_sel_tree,mincost = self.run_algorithm_selTree(start, g, actions) + subtree_with_costs_ls.append((bt_sel_tree,mincost)) + # 要排个序再一次add + # subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])]) + # self.bt.add_child([subtree]) + sorted_trees = sorted(subtree_with_costs_ls, key=lambda x: x[1]) + for tree,cost in sorted_trees: + subtree.add_child([copy.deepcopy(tree.children[0])]) + self.bt.add_child([subtree]) + else: + self.bt,mincost = self.run_algorithm_selTree(start, goal[0], actions) return True - def merge_adjacent_conditions_stack(self): + def merge_adjacent_conditions_stack(self,bt_sel): # 只针对第一层合并,之后要考虑层层递归合并 bt = ControlBT(type='cond') sbtree = ControlBT(type='?') - gc_node = Leaf(type='cond', content=self.goal, mincost=0) # 为了统一,都成对出现 - sbtree.add_child([copy.deepcopy(gc_node)]) # 子树首先保留所扩展结 + # 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]) - + parnode = copy.deepcopy(bt_sel.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 isinstance(last_child, ControlBT) and last_child.type == '>': + set1 = last_child.children[0].content + set2 = child.children[0].content + inter = set1 & set2 + if inter!=set(): + c1 = set1-set2 + c2 = set2-set1 + inter_node = Leaf(type='cond', content=inter) + c1_node = Leaf(type='cond', content=c1) + c2_node = Leaf(type='cond', content=c2) + a1_node = copy.deepcopy(last_child.children[1]) + a2_node = copy.deepcopy(child.children[1]) - # 如果后面的动作和前面的一样,删掉前面的 - # 应该是两棵子树完全相同的情况,先暂时只判断动作 - 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() + + # set1<=set2,此时set2对应的动作永远不会执行 + if (c1==set() and isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action)): + continue + + # 再写一个特殊情况处理,三个结点动作last 遇到 两个结点 且动作相同 + if len(last_child.children)==3 and \ + isinstance(last_child.children[2], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[2].content, Action) and isinstance( child.children[1].content, Action) \ + and last_child.children[2].content.name == child.children[1].content.name \ + and c1==set() and c2!=set(): + last_child.children[1].add_child([copy.deepcopy(c2_node)]) + continue + elif len(last_child.children)==3: stack.append(child) continue - inter = set1 & set2 - if inter!=set(): - c1 = set1-set2 - c2 = set2-set1 + # 判断动作相不相同 + if isinstance(last_child.children[1], Leaf) and isinstance(child.children[1], Leaf) \ + and isinstance(last_child.children[1].content, Action) and isinstance(child.children[1].content, Action) \ + and last_child.children[1].content.name == child.children[1].content.name: + + if c2==set(): + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(a1_node)]) + else: + _sel = ControlBT(type='?') + _sel.add_child([copy.deepcopy(c1_node), copy.deepcopy(c2_node)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(_sel),copy.deepcopy(a1_node)]) + else: + if c1 == set(): + seq1 = copy.deepcopy(last_child.children[1]) + else: + seq1 = ControlBT(type='>') + seq1.add_child([copy.deepcopy(c1_node), copy.deepcopy(a1_node)]) + + if c2 == set(): + seq2 = copy.deepcopy(child.children[1]) + else: + seq2 = ControlBT(type='>') + seq2.add_child([copy.deepcopy(c2_node), copy.deepcopy(a2_node)]) + sel = ControlBT(type='?') + sel.add_child([copy.deepcopy(seq1), copy.deepcopy(seq2)]) + tmp_tree = ControlBT(type='>') + tmp_tree.add_child( + [copy.deepcopy(inter_node), copy.deepcopy(sel)]) + + stack.pop() + stack.append(tmp_tree) - 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) + stack.append(child) else: stack.append(child) + 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='?') - 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: - inter = set1 & set2 - dif = set1 - set2 - - tmp_sub_seq = ControlBT(type='>') - c2 = Leaf(type='cond', content=dif) - a1 = copy.deepcopy(last_child.children[1]) - tmp_sub_seq.add_child( - [copy.deepcopy(c2), copy.deepcopy(a1)]) - - tmp_sub_tree_sel = ControlBT(type='?') - a2 = copy.deepcopy(child.children[1]) - tmp_sub_tree_sel.add_child( - [copy.deepcopy(tmp_sub_seq), copy.deepcopy(a2)]) - - tmp_tree = ControlBT(type='>') - c1 = Leaf(type='cond', content=inter) - tmp_tree.add_child( - [copy.deepcopy(c1), copy.deepcopy(tmp_sub_tree_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_cond_node(self): - # bt合并==================================================== - 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]) - skip_next = False - for i in range(len(parnode.children) - 1): - current_child = parnode.children[i] - next_child = parnode.children[i + 1] - - if isinstance(current_child, ControlBT) and current_child.type == '>': - - if not skip_next: - # 检查合并的条件,前面一个的条件包含了后面的条件,把包含部分提取出来 - set1 = current_child.children[0].content - set2 = next_child.children[0].content - if set1>=set2: - inter = set1 & set2 - dif = set1 - set2 + bt_sel = copy.deepcopy(bt) + return bt_sel - tmp_sub_seq = ControlBT(type='>') - c2 = Leaf(type='cond', content=dif) - a1 = Leaf(type='act', content=current_child.children[1].content) - tmp_sub_seq.add_child( - [copy.deepcopy(c2), copy.deepcopy(a1)]) - - tmp_sub_tree_sel = ControlBT(type='?') - a2 = Leaf(type='act', content=next_child.children[1].content) - tmp_sub_tree_sel.add_child( - [copy.deepcopy(tmp_sub_seq), copy.deepcopy(a2)]) - - tmp_tree = ControlBT(type='>') - c1 = Leaf(type='cond', content=inter) - tmp_tree.add_child( - [copy.deepcopy(c1), copy.deepcopy(tmp_sub_tree_sel)]) - - sbtree.add_child([tmp_tree]) - skip_next = True - elif skip_next: - skip_next = False - self.bt = copy.deepcopy(bt) - # bt合并==================================================== def print_solution(self): print("========= BT ==========") # 树的bfs遍历 diff --git a/robowaiter/llm_client/data/fix_questions.txt b/robowaiter/llm_client/data/fix_questions.txt index e4f02db..ff30bda 100644 --- a/robowaiter/llm_client/data/fix_questions.txt +++ b/robowaiter/llm_client/data/fix_questions.txt @@ -1,281 +1,97 @@ -你好 -您好,我是这家咖啡厅的服务员,请问您要点什么? +Hello! +Hello, I am the waiter of this coffee shop. What would you like to order? +Thanks, that's enough. You can go on with your work. +Ok, if you need anything, just let me know. -感谢,这些够啦,你去忙吧。 -ok, 有需要您再找我。 - - -做一杯咖啡 -好的,我马上做咖啡 +Make a cup of coffee, please. +Sure, I'll make the coffee right away. create_sub_task {"goal":"On(Coffee,CoffeeTable)"} -不用了。 -好的,您有需要再跟我说 +No need anymore. +Alright, if you need anything, just tell me. stop_serve {} -来一号桌 -好的,我马上来一号桌 -create_sub_task -{"goal":"At(Robot,Table1)"} -早上好呀,我想找个能晒太阳的地方。 -您右手边就有能晒太阳的位置呢。 +Good morning! I'm looking for a place where I can enjoy the sunshine. +There's a sunny spot right on your right. get_object_info -{"obj":"晒太阳的地方"} +{"obj":"BrightTable"} -谢谢! -不客气,希望你在阳光下有个愉快的时光。 +Thank you! +You're welcome, I hope you have a pleasant time in the sunshine. - - -可以带我过去嘛? -当然,请跟我来! -create_sub_task -{"goal":"At(Robot,BrightTable1)"} - -你可以带我过去嘛? -当然,请跟我来! +Could you take me there? +Of course, please follow me! create_sub_task {"goal":"At(Robot,BrightTable1)"} -嘿,RoboWaiter,过来一下! -我在来的路上啦,请稍等噢! +Hey, RoboWaiter, come here for a moment! +I'm on my way, please wait a moment! create_sub_task {"goal":"At(Robot,BrightTable6)"} +What drinks do you have here? +Our coffee shop offers a variety of flavored coffees, water, iced black tea, yogurt drinks, and also desserts like pastries and cakes. What would you like to order? -你们这有什么饮料嘛? -我们咖啡厅提供各种口味咖啡,水,冰红茶,酸奶等饮品,还提供点心蛋糕等甜品。您想点什么? - - -来杯卡布奇诺吧。 -ok,请稍等! +I'll have a cappuccino, please. +Ok, please wait a moment! create_sub_task {"goal":"On(Coffee,BrightTable6)"} +I'm with my child, I'd like a spacious and well-lit spot. +Alright, I understand. We recommend the tables in the hall, where the space is more spacious and the environment is brighter, making it suitable for dining with children. - -我昨天保温杯好像落在你们咖啡厅了,你看到了吗? -是的,我有印象,保温杯在大厅的2号桌子上。 -get_object_info -{"obj":"保温杯"} - - -给我来份午餐套餐。 -本店的午餐套餐包括咖啡和点心,请问您是打包还是堂食? - -打包吧,快点! -请稍等,马上就好! -create_sub_task -{"goal":"On(Dessert,Bar),On(Coffee,Bar)"} - - -你可以帮我拿来吗,我在前门的桌子前等你。 -当然,请稍等! -create_sub_task -{"goal":"On(VacuumCup,Table1)"} - -麻烦啦! -没事儿,为您服务是我的荣幸! - -大厅的桌子好啊,快带我去呀! -好的好的,请跟我来。 +The tables in the hall look good, please take me there! +Okay, great, please follow me. create_sub_task {"goal":"At(Robot,WaterTable)"} - -我想来杯水,帮我孩子拿个酸奶吧。 -ok,没问题,请稍等! +I'd like a glass of water, and please get a yogurt for my child. +Ok, no problem, please wait a moment! create_sub_task {"goal":"On(Water,WaterTable),On(Yogurt,WaterTable)"} -来杯酸奶吧。 -好的没问题,请稍等! -create_sub_task -{"goal":"On(Yogurt,WaterTable)"} - -还有酸奶吗 -不好意思,酸奶卖完了呢 -get_number_of_objects -{"obj":"酸奶"} - -那好吧,那就先把窗帘给我关上,再开个空调 -抱歉,我这就去开空调和关窗帘。 -create_sub_task -{"goal":"Is(AC,On),Is(Curtain,Off)"} - - -下班啦!别忘了打扫卫生。 -收到!下班啦! -create_sub_task -{"goal":"Is(Floor,Clean),Is(Table1,Clean),Is(Chairs,Clean),Is(AC,Off),Is(HallLight,Off),Is(TubeLight,Off),Is(Curtain,Off)"} - - -请问洗手间在哪里? -洗手间在这附近 +I think I left my VacuumCup in your café yesterday, have you seen it? +Yes, I remember seeing it. The thermos is on table number 2 in the hall. get_object_info -{"obj":"洗手间"} +{"obj":"VacuumCup"} - - -给我来杯酸奶和冰红茶,我坐在对面的桌子那儿。 -好的,请稍等。 +Can you bring it to me? I'm waiting at the table near the front door. +Of course, please wait a moment! create_sub_task -{"goal":"On(BottledDrink,WaterTable),On(Yogurt,WaterTable)"} - - -给我来份薯片和果汁,我坐在对面的桌子那儿。 -好的,请稍等。 -create_sub_task -{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} - -给我来份薯片和果汁,我坐在对面的水杯桌那儿。 -好的,请稍等。 -create_sub_task -{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} - -好热呀,想开空调,想要温度调低点! -抱歉,我马上去开空调并调低空调温度。 -create_sub_task -{"goal":"Is(ACTemperature,Down)"} - -请问有空位吗? -现在有不少空位呢,请问您有什么要求嘛? - -我想坐高脚凳子。 -没问题,大厅里就有这样的位置呢! -get_object_info -{"obj":"高脚凳子的空位"} - - -你带我去吧。 -OK,请跟我来! -create_sub_task -{"goal":"At(Robot,BrightTable5)"} - - -可以关筒灯和关窗帘吗? -好的,请稍等。 -create_sub_task -{"goal":"Is(TubeLight,Off),Is(Curtain,Off)"} - - -给我来杯咖啡,哦对,再倒一杯水。 -速速就好,请稍等! -create_sub_task -{"goal":"On(Water,WaterTable),On(Coffee,WaterTable)"} - - -我想来份点心和酸奶。 -稍等片刻噢~ -create_sub_task -{"goal":"On(Yogurt,Bar),On(Dessert,Bar)"} - -酸奶。 -稍等片刻噢~ -create_sub_task -{"goal":"On(Yogurt,Bar)"} +{"goal":"On(VacuumCup,Table1)"} -你好呀,你们这有啥好吃的? -我们咖啡厅有咖啡,还有饮料和点心蛋糕呢?您想点什么不? -get_object_info -{"obj":"饮料,水果,点心"} - - -听起来都好甜呀,我女朋友爱吃水果。 -没问题,我们也提供草莓、橘子和苹果等水果呢。 - - -你们这人可真多。 -目前还有空位呢,你们可以坐下来一起品尝水果呢? -get_object_info -{"obj":"空位"} - -我女朋友怕晒,有空余的阴凉位置嘛? -我查询完毕,阴凉位置有两个。在你们右侧往里走,就有适合你们二位的沙发呢。 -get_object_info -{"obj":"阴凉空位"} - -那还不错。 -是的,那边安静,不会晒到太阳呢。 - -我们还想一起下下棋,切磋切磋。 -我们这有两份军棋呢,在大厅的三号桌上。 -get_object_info -{"obj":"棋"} - -请问洗手间在哪呢? -在后门,你们的左侧往里走就是了呢。 -get_object_info -{"obj":"洗手间"} - -我带着孩子呢,想要宽敞亮堂的地方。 -好的,我明白了,那么我们推荐您到大厅的桌子,那里的空间比较宽敞,环境也比较明亮,适合带着孩子一起用餐。 - - -水杯 -好的 -create_sub_task -{"goal":"On(Water,Bar)"} - -点心 -好的 -create_sub_task -{"goal":"On(Dessert,Bar)"} - -酸奶 -好的 -create_sub_task -{"goal":"On(Yogurt,Bar)"} - - -做一杯咖啡 -好的,我马上做咖啡 -create_sub_task -{"goal":"On(Coffee,CoffeeTable)"} - - -把盒装冰红茶放到水桌 -好的 -create_sub_task -{"goal":"On(Softdrink,WaterTable)"} - -点心 -好的 -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 -{"goal":"Is(ACTemperature,Down)"} \ No newline at end of file +{"goal":"Is(ACTemperature,Down)"} + + +把咖啡或者酸奶放到吧台 +好的,没问题 +create_sub_task +{"goal":"On_Coffee_Bar | On_Yogurt_Bar & At_Robot_Bar"} + +Don't stand at table 6. Please wipe down table 1 or mop the floor, and don't set the air conditioning temperature too low. +好的,没问题 +create_sub_task +{"goal":"At_Robot_Bar & (Is_Table1_Clean | Is_Floor_Clean) & Is_ACTemperature_Up"} + +Don't stand at table 6. Please wipe down table 1, and don't set the air conditioning temperature too low. +好的,没问题 +create_sub_task +{"goal":"Is_Table1_Clean & Is_ACTemperature_Up"} + + + diff --git a/robowaiter/llm_client/data/fix_questions_zh.txt b/robowaiter/llm_client/data/fix_questions_zh.txt new file mode 100644 index 0000000..6025e2c --- /dev/null +++ b/robowaiter/llm_client/data/fix_questions_zh.txt @@ -0,0 +1,304 @@ +你好 +您好,我是这家咖啡厅的服务员,请问您要点什么? + + +感谢,这些够啦,你去忙吧。 +ok, 有需要您再找我。 + + +做一杯咖啡 +好的,我马上做咖啡 +create_sub_task +{"goal":"On(Coffee,CoffeeTable)"} + +不用了。 +好的,您有需要再跟我说 +stop_serve +{} + +来一号桌 +好的,我马上来一号桌 +create_sub_task +{"goal":"At(Robot,Table1)"} + + +早上好呀,我想找个能晒太阳的地方。 +您右手边就有能晒太阳的位置呢。 +get_object_info +{"obj":"晒太阳的地方"} + +谢谢! +不客气,希望你在阳光下有个愉快的时光。 + + +可以带我过去嘛? +当然,请跟我来! +create_sub_task +{"goal":"At(Robot,BrightTable1)"} + +你可以带我过去嘛? +当然,请跟我来! +create_sub_task +{"goal":"At(Robot,BrightTable1)"} + + +嘿,RoboWaiter,过来一下! +我在来的路上啦,请稍等噢! +create_sub_task +{"goal":"At(Robot,BrightTable6)"} + + +你们这有什么饮料嘛? +我们咖啡厅提供各种口味咖啡,水,冰红茶,酸奶等饮品,还提供点心蛋糕等甜品。您想点什么? + + +来杯卡布奇诺吧。 +ok,请稍等! +create_sub_task +{"goal":"On(Coffee,BrightTable6)"} + + + + +我昨天保温杯好像落在你们咖啡厅了,你看到了吗? +是的,我有印象,保温杯在大厅的2号桌子上。 +get_object_info +{"obj":"保温杯"} + + +给我来份午餐套餐。 +本店的午餐套餐包括咖啡和点心,请问您是打包还是堂食? + +打包吧,快点! +请稍等,马上就好! +create_sub_task +{"goal":"On(Dessert,Bar),On(Coffee,Bar)"} + + +你可以帮我拿来吗,我在前门的桌子前等你。 +当然,请稍等! +create_sub_task +{"goal":"On(VacuumCup,Table1)"} + +麻烦啦! +没事儿,为您服务是我的荣幸! + +大厅的桌子好啊,快带我去呀! +好的好的,请跟我来。 +create_sub_task +{"goal":"At(Robot,WaterTable)"} + + +我想来杯水,帮我孩子拿个酸奶吧。 +ok,没问题,请稍等! +create_sub_task +{"goal":"On(Water,WaterTable),On(Yogurt,WaterTable)"} + +来杯酸奶吧。 +好的没问题,请稍等! +create_sub_task +{"goal":"On(Yogurt,WaterTable)"} + + +还有酸奶吗 +不好意思,酸奶卖完了呢 +get_number_of_objects +{"obj":"酸奶"} + +那好吧,那就先把窗帘给我关上,再开个空调 +抱歉,我这就去开空调和关窗帘。 +create_sub_task +{"goal":"Is(AC,On),Is(Curtain,Off)"} + + +下班啦!别忘了打扫卫生。 +收到!下班啦! +create_sub_task +{"goal":"Is(Floor,Clean),Is(Table1,Clean),Is(Chairs,Clean),Is(AC,Off),Is(HallLight,Off),Is(TubeLight,Off),Is(Curtain,Off)"} + + +请问洗手间在哪里? +洗手间在这附近 +get_object_info +{"obj":"洗手间"} + + + +给我来杯酸奶和冰红茶,我坐在对面的桌子那儿。 +好的,请稍等。 +create_sub_task +{"goal":"On(BottledDrink,WaterTable),On(Yogurt,WaterTable)"} + + +给我来份薯片和果汁,我坐在对面的桌子那儿。 +好的,请稍等。 +create_sub_task +{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} + +给我来份薯片和果汁,我坐在对面的水杯桌那儿。 +好的,请稍等。 +create_sub_task +{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} + +好热呀,想开空调,想要温度调低点! +抱歉,我马上去开空调并调低空调温度。 +create_sub_task +{"goal":"Is(ACTemperature,Down)"} + +请问有空位吗? +现在有不少空位呢,请问您有什么要求嘛? + +我想坐高脚凳子。 +没问题,大厅里就有这样的位置呢! +get_object_info +{"obj":"高脚凳子的空位"} + + +你带我去吧。 +OK,请跟我来! +create_sub_task +{"goal":"At(Robot,BrightTable5)"} + + +可以关筒灯和关窗帘吗? +好的,请稍等。 +create_sub_task +{"goal":"Is(TubeLight,Off),Is(Curtain,Off)"} + + +给我来杯咖啡,哦对,再倒一杯水。 +速速就好,请稍等! +create_sub_task +{"goal":"On(Water,WaterTable),On(Coffee,WaterTable)"} + + +我想来份点心和酸奶。 +稍等片刻噢~ +create_sub_task +{"goal":"On(Yogurt,Bar),On(Dessert,Bar)"} + +酸奶。 +稍等片刻噢~ +create_sub_task +{"goal":"On(Yogurt,Bar)"} + + + +你好呀,你们这有啥好吃的? +我们咖啡厅有咖啡,还有饮料和点心蛋糕呢?您想点什么不? +get_object_info +{"obj":"饮料,水果,点心"} + + +听起来都好甜呀,我女朋友爱吃水果。 +没问题,我们也提供草莓、橘子和苹果等水果呢。 + + +你们这人可真多。 +目前还有空位呢,你们可以坐下来一起品尝水果呢? +get_object_info +{"obj":"空位"} + +我女朋友怕晒,有空余的阴凉位置嘛? +我查询完毕,阴凉位置有两个。在你们右侧往里走,就有适合你们二位的沙发呢。 +get_object_info +{"obj":"阴凉空位"} + +那还不错。 +是的,那边安静,不会晒到太阳呢。 + +我们还想一起下下棋,切磋切磋。 +我们这有两份军棋呢,在大厅的三号桌上。 +get_object_info +{"obj":"棋"} + +请问洗手间在哪呢? +在后门,你们的左侧往里走就是了呢。 +get_object_info +{"obj":"洗手间"} + +我带着孩子呢,想要宽敞亮堂的地方。 +好的,我明白了,那么我们推荐您到大厅的桌子,那里的空间比较宽敞,环境也比较明亮,适合带着孩子一起用餐。 + + +水杯 +好的 +create_sub_task +{"goal":"On(Water,Bar)"} + +点心 +好的 +create_sub_task +{"goal":"On(Dessert,Bar)"} + +酸奶 +好的 +create_sub_task +{"goal":"On(Yogurt,Bar)"} + + +做一杯咖啡 +好的,我马上做咖啡 +create_sub_task +{"goal":"On(Coffee,CoffeeTable)"} + + +把盒装冰红茶放到水桌 +好的 +create_sub_task +{"goal":"On(Softdrink,WaterTable)"} + +点心 +好的 +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)"} + +把咖啡放到3号桌 +好的 +create_sub_task +{"goal":"On(Coffee,Table3)"} + +把咖啡放到吧台上,再拿一杯咖啡放到6号桌 +好的 +create_sub_task +{"goal":"On(Coffee,WaterTable),On(Coffee,BrightTable6)"} + + +打开空调并降低空调温度 +好的,没问题 +create_sub_task +{"goal":"Is(ACTemperature,Down)"} + + +把咖啡或者酸奶放到吧台 +好的,没问题 +create_sub_task +{"goal":"On_Coffee_Bar | On_Yogurt_Bar & At_Robot_Bar"} + +Don't stand at table 6. Please wipe down table 1 or mop the floor, and don't set the air conditioning temperature too low. +好的,没问题 +create_sub_task +{"goal":"At_Robot_Bar & (Is_Table1_Clean | Is_Floor_Clean) & Is_ACTemperature_Up"} + +Don't stand at table 6. Please wipe down table 1, and don't set the air conditioning temperature too low. +好的,没问题 +create_sub_task +{"goal":"Is_Table1_Clean & Is_ACTemperature_Up"} + + + diff --git a/robowaiter/llm_client/multi_rounds.py b/robowaiter/llm_client/multi_rounds.py index 8b30290..1c23f87 100644 --- a/robowaiter/llm_client/multi_rounds.py +++ b/robowaiter/llm_client/multi_rounds.py @@ -150,12 +150,15 @@ def ask_llm(question,history, func_map=None, retry=3): if question in fix_questions_dict: if fix_questions_dict[question]['function'] in no_reply_functions: reply = fix_questions_dict[question]["answer"] + # result = single_round(reply, + # "你是机器人服务员,请把以下句子换一种表述方式对顾客说,但是意思不变,尽量简短:\n") result = single_round(reply, - "你是机器人服务员,请把以下句子换一种表述方式对顾客说,但是意思不变,尽量简短:\n") + "You are a robot waiter. Please change the following sentence to the customer in a different way, but the meaning remains the same and be as brief as possible:\n") else: reply = fix_questions_dict[question]["answer"] - result = single_round(f"你是机器人服务员,顾客想知道{question}, 你的具身场景查询返回的是{result},把返回的英文名词翻译成中文,请把按照以下句子对顾客说,{reply}, 尽量简短。\n") - + # result = single_round(f"你是机器人服务员,顾客想知道{question}, 你的具身场景查询返回的是{result},把返回的英文名词翻译成中文,请把按照以下句子对顾客说,{reply}, 尽量简短。\n") + result = single_round( + f"You are a robot waiter. The customer wants to know {question}. Your embodied scene query returns {result}. Translate the returned Chinese nouns into English. Please tell the customer according to the following sentence, {reply}, keep it as short as possible.\n") message = {'role': 'assistant', 'content': result, 'name': None, 'function_call': None} history.append(message) @@ -165,13 +168,14 @@ def ask_llm(question,history, func_map=None, retry=3): _,result = deal_response(response, history, func_map) - print(f'{len(history)}条历史记录:') + # print(f'{len(history)}条历史记录:') + print(f'{len(history)} history records:') for x in history: print(x) return function_call, result if __name__ == "__main__": - question = input("\n顾客:") + question = input("\nCustomer:") history = new_history() n = 1 max_retry = 2 @@ -180,4 +184,5 @@ if __name__ == "__main__": function_call, return_message = ask_llm(question,history) - question = input("\n顾客:") + # question = input("\n顾客:") + question = input("\nCustomer:") diff --git a/robowaiter/llm_client/single_round.py b/robowaiter/llm_client/single_round.py index 21e9694..35b04e5 100644 --- a/robowaiter/llm_client/single_round.py +++ b/robowaiter/llm_client/single_round.py @@ -47,11 +47,116 @@ def single_round(question, prefix=""): if __name__ == '__main__': question = ''' - 给我来杯咖啡 +from actions import MoveTo (/), PickUp (), PutDown (,), PutDown(Anything,Anywhere), Make (), Clean (), Turn (,) +from states import At (Robor,/), On (,), Holding (), Is (,), Exist () + +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 + sequence + cond At(Robot, Table1) + cond Holding(Nothing) + cond On(Softdrink, Table1) + act PickUp(Softdrink) + sequence + cond At(Robot, Table1) + act MoveTo(WaterTable) + sequence + cond Holding(Softdrink) + cond At(Robot, WaterTable) + act PutDown(Softdrink, WaterTable) + sequence + act MoveTo(Table1) + + +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 + sequence + cond At(Robot, Bar) + cond Exist(Coffee) + cond Holding(Nothing) + act PickUp(Coffee) + sequence + cond Holding(Coffee) + act PutDown(Coffee, Bar) + sequence + cond At(Robot, Bar) + act MoveTo(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)', + '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)'} +def Put_Coffee_on_Table3(currents_state): + + +Please complete the function Put_Coffee_on_Table3(currents_state) by constructing a behavior tree. In this tree, only use 'selectors' and 'sequences' as control nodes. For the leaf nodes, exclusively utilize the actions and states that are defined in the previously imported 'actions' and 'states' modules. ''' import timeit cur_time = time.time() - # print(single_round(question)) - print(single_round(question, prefix='现在给出符合这句话要求的目标状态: ')) + print(single_round(question)) + # print(single_round(question, prefix='现在给出符合这句话要求的目标状态: ')) print(f"单次生成耗时:{time.time() - cur_time} s \n") diff --git a/robowaiter/robot/robot.py b/robowaiter/robot/robot.py index 7d85300..1d0f09a 100644 --- a/robowaiter/robot/robot.py +++ b/robowaiter/robot/robot.py @@ -13,6 +13,7 @@ from robowaiter.behavior_tree.obtea.opt_bt_exp_main import BTOptExpInterface from robowaiter.behavior_lib.act.DelSubTree import DelSubTree from robowaiter.behavior_lib._base.Sequence import Sequence from robowaiter.utils.bt.load import load_behavior_tree_lib +from robowaiter.behavior_lib._base.Behavior import Bahavior from robowaiter.utils import get_root_path root_path = get_root_path() @@ -63,13 +64,47 @@ class Robot(object): print("--------------------\n") # 如果目标是下班,规划的时候就直接快捷导入? - end_goal = {"Is(Floor,Clean)","Is(Table1,Clean)","Is(Chairs,Clean)","Is(AC,Off)","Is(HallLight,Off)","Is(TubeLight,Off)","Is(Curtain,Off)"} - if goal & end_goal == goal: - tmp_list = copy.deepcopy(self.action_list) - self.action_list=[] - self.action_list = [action for action in tmp_list if "Turn" in action.name or "Clean" in action.name] + # end_goal = {"Is(Floor,Clean)","Is(Table1,Clean)","Is(Chairs,Clean)","Is(AC,Off)","Is(HallLight,Off)","Is(TubeLight,Off)","Is(Curtain,Off)"} + # if goal & end_goal == goal: + # tmp_list = copy.deepcopy(self.action_list) + # self.action_list=[] + # self.action_list = [action for action in tmp_list if "Turn" in action.name or "Clean" in action.name] - algo = BTOptExpInterface(self.action_list,self.scene) + # 这里对action做一个挑选,就是物品的挑选,只对环境有的物品+目标的物品进行挑选 + ############################## + # all_obj_ls = {'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup', + # 'Chips', 'NFCJuice', 'Bernachon', 'SpringWater'} + # all_place_ls = {'Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6'} + all_obj_ls = Bahavior.all_object + all_place_ls = Bahavior.tables_for_placement + obj_need = set() + place_need=set() + for state_curr in self.scene.state["condition_set"]: + if 'Holding' in state_curr: + if 'Holding(Nothing)' in state_curr: + break + else: + for obj in all_obj_ls: + if obj in state_curr: + obj_need.add(obj) + for g in goal: + obj_need_ls = [s1 for s1 in all_obj_ls if any(s1 in s2 for s2 in g)] + obj_need.update(obj_need_ls) + place_need_ls = [s1 for s1 in all_place_ls if any("On" in s2 and s1 in s2 for s2 in g)] + place_need.update(place_need_ls) + # for state in g: + # for obj in all_obj_ls: + # if obj in state: + # obj_need.add(obj) + obj_not_need = all_obj_ls-obj_need + place_not_need = all_place_ls-place_need + action_need_ls_tmp = [action for action in self.action_list if not any(('PutDown' in action.name and s in action.name ) for s in obj_not_need)] + action_need_ls = [action for action in action_need_ls_tmp if not any(('PutDown' in action.name and s in action.name) for s in place_not_need)] + ############################## + + + algo = BTOptExpInterface(action_need_ls, self.scene) + # algo = BTOptExpInterface(self.action_list,self.scene) ptml_string = algo.process(goal) diff --git a/robowaiter/scene/outputs/expanded_bt.dot b/robowaiter/scene/outputs/expanded_bt.dot index f6d8ea2..9efebe8 100644 --- a/robowaiter/scene/outputs/expanded_bt.dot +++ b/robowaiter/scene/outputs/expanded_bt.dot @@ -3,47 +3,29 @@ ordering=out; graph [fontname="times-roman"]; node [fontname="times-roman"]; edge [fontname="times-roman"]; -"49894dc9-ad34-40a6-be03-63748a930786" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01]; -"a1647f60-7fea-4a25-8625-6a4d947202ef" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Coffee,BrightTable6)", shape=ellipse, style=filled]; -"49894dc9-ad34-40a6-be03-63748a930786" -> "a1647f60-7fea-4a25-8625-6a4d947202ef"; -"9ee57ce2-80bd-4973-b7f2-acab2ca70a15" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; -"49894dc9-ad34-40a6-be03-63748a930786" -> "9ee57ce2-80bd-4973-b7f2-acab2ca70a15"; -"e9c3167f-1bf2-4a5e-a3a7-7be2d0c699a5" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; -"9ee57ce2-80bd-4973-b7f2-acab2ca70a15" -> "e9c3167f-1bf2-4a5e-a3a7-7be2d0c699a5"; -"0c4aa5b5-d36f-4470-a445-672510246a8a" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01]; -"9ee57ce2-80bd-4973-b7f2-acab2ca70a15" -> "0c4aa5b5-d36f-4470-a445-672510246a8a"; -"03c503da-ed48-4522-bf76-bf79d5d40363" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; -"0c4aa5b5-d36f-4470-a445-672510246a8a" -> "03c503da-ed48-4522-bf76-bf79d5d40363"; -"2de3d502-6231-49a0-8f44-8d90ec686417" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,BrightTable6)", shape=ellipse, style=filled]; -"03c503da-ed48-4522-bf76-bf79d5d40363" -> "2de3d502-6231-49a0-8f44-8d90ec686417"; -"5a068be8-bc71-4b01-80b0-609772d01bad" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,BrightTable6)", shape=box, style=filled]; -"03c503da-ed48-4522-bf76-bf79d5d40363" -> "5a068be8-bc71-4b01-80b0-609772d01bad"; -"fbcd983e-39da-4406-8d3d-d20a10f41c2c" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(BrightTable6)", shape=box, style=filled]; -"0c4aa5b5-d36f-4470-a445-672510246a8a" -> "fbcd983e-39da-4406-8d3d-d20a10f41c2c"; -"8ae6498a-bfe4-4fac-89c4-84b9ee882900" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; -"49894dc9-ad34-40a6-be03-63748a930786" -> "8ae6498a-bfe4-4fac-89c4-84b9ee882900"; -"77122133-d3c3-42e6-abf2-75eebbd4117c" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; -"8ae6498a-bfe4-4fac-89c4-84b9ee882900" -> "77122133-d3c3-42e6-abf2-75eebbd4117c"; -"8892efc8-2c86-4e73-80ae-4835b3bd15c4" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01]; -"8ae6498a-bfe4-4fac-89c4-84b9ee882900" -> "8892efc8-2c86-4e73-80ae-4835b3bd15c4"; -"3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; -"8892efc8-2c86-4e73-80ae-4835b3bd15c4" -> "3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb"; -"ab70101f-b447-4508-9cbc-6d08dff1b865" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; -"3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb" -> "ab70101f-b447-4508-9cbc-6d08dff1b865"; -"35fd1c53-807e-442b-9167-f75ab12215e8" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled]; -"3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb" -> "35fd1c53-807e-442b-9167-f75ab12215e8"; -"359bf54c-5bca-4286-affe-29fdaf2d5d02" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; -"8892efc8-2c86-4e73-80ae-4835b3bd15c4" -> "359bf54c-5bca-4286-affe-29fdaf2d5d02"; -"7aeae3e6-ba38-4e43-866f-da481d666d68" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; -"49894dc9-ad34-40a6-be03-63748a930786" -> "7aeae3e6-ba38-4e43-866f-da481d666d68"; -"36b3fb04-d2cc-4ad7-ac4f-e07c99dda7ac" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; -"7aeae3e6-ba38-4e43-866f-da481d666d68" -> "36b3fb04-d2cc-4ad7-ac4f-e07c99dda7ac"; -"6bfbfd2b-8adb-4739-860e-ad6484b97541" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; -"7aeae3e6-ba38-4e43-866f-da481d666d68" -> "6bfbfd2b-8adb-4739-860e-ad6484b97541"; -"1e806781-835a-44fb-9e4f-033193ecded4" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; -"49894dc9-ad34-40a6-be03-63748a930786" -> "1e806781-835a-44fb-9e4f-033193ecded4"; -"1cbe0216-4e8d-451f-82f8-491693fae7a1" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; -"1e806781-835a-44fb-9e4f-033193ecded4" -> "1cbe0216-4e8d-451f-82f8-491693fae7a1"; -"9821637d-d072-4fcc-aefb-b5e7fa887755" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; -"1e806781-835a-44fb-9e4f-033193ecded4" -> "9821637d-d072-4fcc-aefb-b5e7fa887755"; +"3cc93283-6f35-4a5b-a823-667fda9e7abd" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"9e4a23ae-384d-4ae1-b0bb-d6c7d42f4747" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(ACTemperature,Down)", shape=ellipse, style=filled]; +"3cc93283-6f35-4a5b-a823-667fda9e7abd" -> "9e4a23ae-384d-4ae1-b0bb-d6c7d42f4747"; +"1f15add2-2ef8-4384-9ca4-f930e1ecacef" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"3cc93283-6f35-4a5b-a823-667fda9e7abd" -> "1f15add2-2ef8-4384-9ca4-f930e1ecacef"; +"b573a9e1-d411-42b1-b04a-7a11b3460803" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,On)", shape=ellipse, style=filled]; +"1f15add2-2ef8-4384-9ca4-f930e1ecacef" -> "b573a9e1-d411-42b1-b04a-7a11b3460803"; +"d8d0e155-d190-4237-9ba3-7ef76d845ea4" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"1f15add2-2ef8-4384-9ca4-f930e1ecacef" -> "d8d0e155-d190-4237-9ba3-7ef76d845ea4"; +"5ced2d60-8b01-4312-97c4-19e366000072" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"d8d0e155-d190-4237-9ba3-7ef76d845ea4" -> "5ced2d60-8b01-4312-97c4-19e366000072"; +"a2b8d4bf-010a-4096-b4f1-06f0b2dcd95e" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"5ced2d60-8b01-4312-97c4-19e366000072" -> "a2b8d4bf-010a-4096-b4f1-06f0b2dcd95e"; +"0c6604f3-36df-499b-8a56-84289c53f910" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(ACTemperature,Down)", shape=box, style=filled]; +"5ced2d60-8b01-4312-97c4-19e366000072" -> "0c6604f3-36df-499b-8a56-84289c53f910"; +"149b7ca4-471f-494a-b9eb-f7ddc4f2ecf3" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"d8d0e155-d190-4237-9ba3-7ef76d845ea4" -> "149b7ca4-471f-494a-b9eb-f7ddc4f2ecf3"; +"1d74f511-6321-416b-a7f9-a2c051c6f981" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"3cc93283-6f35-4a5b-a823-667fda9e7abd" -> "1d74f511-6321-416b-a7f9-a2c051c6f981"; +"79c6fc3e-b3fb-4bab-a5ab-39ea75ebbd1c" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Is(AC,Off)", shape=ellipse, style=filled]; +"1d74f511-6321-416b-a7f9-a2c051c6f981" -> "79c6fc3e-b3fb-4bab-a5ab-39ea75ebbd1c"; +"b215b2df-15a0-44cc-bdff-5a15a91a36ae" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"1d74f511-6321-416b-a7f9-a2c051c6f981" -> "b215b2df-15a0-44cc-bdff-5a15a91a36ae"; +"4587a9ec-fab2-4b65-8b9d-2836668409a9" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Turn(AC,On)", shape=box, style=filled]; +"1d74f511-6321-416b-a7f9-a2c051c6f981" -> "4587a9ec-fab2-4b65-8b9d-2836668409a9"; } diff --git a/robowaiter/scene/outputs/expanded_bt.png b/robowaiter/scene/outputs/expanded_bt.png index 9998d07..11a8a7e 100644 Binary files a/robowaiter/scene/outputs/expanded_bt.png and b/robowaiter/scene/outputs/expanded_bt.png differ diff --git a/robowaiter/scene/outputs/expanded_bt.svg b/robowaiter/scene/outputs/expanded_bt.svg index d961c8c..f28d23b 100644 --- a/robowaiter/scene/outputs/expanded_bt.svg +++ b/robowaiter/scene/outputs/expanded_bt.svg @@ -4,268 +4,160 @@ - - + + pastafarianism - - + + -49894dc9-ad34-40a6-be03-63748a930786 - -Selector +3cc93283-6f35-4a5b-a823-667fda9e7abd + +? - + -a1647f60-7fea-4a25-8625-6a4d947202ef - -On(Coffee,BrightTable6) +9e4a23ae-384d-4ae1-b0bb-d6c7d42f4747 + +Is(ACTemperature,Down) - + -49894dc9-ad34-40a6-be03-63748a930786->a1647f60-7fea-4a25-8625-6a4d947202ef - - +3cc93283-6f35-4a5b-a823-667fda9e7abd->9e4a23ae-384d-4ae1-b0bb-d6c7d42f4747 + + - + -9ee57ce2-80bd-4973-b7f2-acab2ca70a15 - -Sequence +1f15add2-2ef8-4384-9ca4-f930e1ecacef + + - + -49894dc9-ad34-40a6-be03-63748a930786->9ee57ce2-80bd-4973-b7f2-acab2ca70a15 - - +3cc93283-6f35-4a5b-a823-667fda9e7abd->1f15add2-2ef8-4384-9ca4-f930e1ecacef + + - + -8ae6498a-bfe4-4fac-89c4-84b9ee882900 - -Sequence +1d74f511-6321-416b-a7f9-a2c051c6f981 + + - + -49894dc9-ad34-40a6-be03-63748a930786->8ae6498a-bfe4-4fac-89c4-84b9ee882900 - - +3cc93283-6f35-4a5b-a823-667fda9e7abd->1d74f511-6321-416b-a7f9-a2c051c6f981 + + - - -7aeae3e6-ba38-4e43-866f-da481d666d68 - -Sequence - - - -49894dc9-ad34-40a6-be03-63748a930786->7aeae3e6-ba38-4e43-866f-da481d666d68 - - - - - -1e806781-835a-44fb-9e4f-033193ecded4 - -Sequence - - - -49894dc9-ad34-40a6-be03-63748a930786->1e806781-835a-44fb-9e4f-033193ecded4 - - - - + -e9c3167f-1bf2-4a5e-a3a7-7be2d0c699a5 - -Holding(Coffee) +b573a9e1-d411-42b1-b04a-7a11b3460803 + +Is(AC,On) - + -9ee57ce2-80bd-4973-b7f2-acab2ca70a15->e9c3167f-1bf2-4a5e-a3a7-7be2d0c699a5 - - +1f15add2-2ef8-4384-9ca4-f930e1ecacef->b573a9e1-d411-42b1-b04a-7a11b3460803 + + - + -0c4aa5b5-d36f-4470-a445-672510246a8a - -Selector +d8d0e155-d190-4237-9ba3-7ef76d845ea4 + +? - + -9ee57ce2-80bd-4973-b7f2-acab2ca70a15->0c4aa5b5-d36f-4470-a445-672510246a8a - - +1f15add2-2ef8-4384-9ca4-f930e1ecacef->d8d0e155-d190-4237-9ba3-7ef76d845ea4 + + - + -03c503da-ed48-4522-bf76-bf79d5d40363 - -Sequence +5ced2d60-8b01-4312-97c4-19e366000072 + + - + -0c4aa5b5-d36f-4470-a445-672510246a8a->03c503da-ed48-4522-bf76-bf79d5d40363 - - +d8d0e155-d190-4237-9ba3-7ef76d845ea4->5ced2d60-8b01-4312-97c4-19e366000072 + + - + -fbcd983e-39da-4406-8d3d-d20a10f41c2c - -MoveTo(BrightTable6) +149b7ca4-471f-494a-b9eb-f7ddc4f2ecf3 + +PutDown(Anything,Anywhere) - + -0c4aa5b5-d36f-4470-a445-672510246a8a->fbcd983e-39da-4406-8d3d-d20a10f41c2c - - +d8d0e155-d190-4237-9ba3-7ef76d845ea4->149b7ca4-471f-494a-b9eb-f7ddc4f2ecf3 + + - + -2de3d502-6231-49a0-8f44-8d90ec686417 - -At(Robot,BrightTable6) +a2b8d4bf-010a-4096-b4f1-06f0b2dcd95e + +Holding(Nothing) - + -03c503da-ed48-4522-bf76-bf79d5d40363->2de3d502-6231-49a0-8f44-8d90ec686417 - - +5ced2d60-8b01-4312-97c4-19e366000072->a2b8d4bf-010a-4096-b4f1-06f0b2dcd95e + + - + -5a068be8-bc71-4b01-80b0-609772d01bad - -PutDown(Coffee,BrightTable6) +0c6604f3-36df-499b-8a56-84289c53f910 + +Turn(ACTemperature,Down) - + -03c503da-ed48-4522-bf76-bf79d5d40363->5a068be8-bc71-4b01-80b0-609772d01bad - - +5ced2d60-8b01-4312-97c4-19e366000072->0c6604f3-36df-499b-8a56-84289c53f910 + + - + -77122133-d3c3-42e6-abf2-75eebbd4117c - -At(Robot,Coffee) +79c6fc3e-b3fb-4bab-a5ab-39ea75ebbd1c + +Is(AC,Off) - + -8ae6498a-bfe4-4fac-89c4-84b9ee882900->77122133-d3c3-42e6-abf2-75eebbd4117c - - +1d74f511-6321-416b-a7f9-a2c051c6f981->79c6fc3e-b3fb-4bab-a5ab-39ea75ebbd1c + + - + -8892efc8-2c86-4e73-80ae-4835b3bd15c4 - -Selector +b215b2df-15a0-44cc-bdff-5a15a91a36ae + +Holding(Nothing) - + -8ae6498a-bfe4-4fac-89c4-84b9ee882900->8892efc8-2c86-4e73-80ae-4835b3bd15c4 - - +1d74f511-6321-416b-a7f9-a2c051c6f981->b215b2df-15a0-44cc-bdff-5a15a91a36ae + + - + -3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb - -Sequence +4587a9ec-fab2-4b65-8b9d-2836668409a9 + +Turn(AC,On) - + -8892efc8-2c86-4e73-80ae-4835b3bd15c4->3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb - - - - - -359bf54c-5bca-4286-affe-29fdaf2d5d02 - -PutDown(Anything,Anywhere) - - - -8892efc8-2c86-4e73-80ae-4835b3bd15c4->359bf54c-5bca-4286-affe-29fdaf2d5d02 - - - - - -ab70101f-b447-4508-9cbc-6d08dff1b865 - -Holding(Nothing) - - - -3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb->ab70101f-b447-4508-9cbc-6d08dff1b865 - - - - - -35fd1c53-807e-442b-9167-f75ab12215e8 - -PickUp(Coffee) - - - -3d40ab19-2ae1-40f7-99d3-3b4635f4d3bb->35fd1c53-807e-442b-9167-f75ab12215e8 - - - - - -36b3fb04-d2cc-4ad7-ac4f-e07c99dda7ac - -Exist(Coffee) - - - -7aeae3e6-ba38-4e43-866f-da481d666d68->36b3fb04-d2cc-4ad7-ac4f-e07c99dda7ac - - - - - -6bfbfd2b-8adb-4739-860e-ad6484b97541 - -MoveTo(Coffee) - - - -7aeae3e6-ba38-4e43-866f-da481d666d68->6bfbfd2b-8adb-4739-860e-ad6484b97541 - - - - - -1cbe0216-4e8d-451f-82f8-491693fae7a1 - -Holding(Nothing) - - - -1e806781-835a-44fb-9e4f-033193ecded4->1cbe0216-4e8d-451f-82f8-491693fae7a1 - - - - - -9821637d-d072-4fcc-aefb-b5e7fa887755 - -Make(Coffee) - - - -1e806781-835a-44fb-9e4f-033193ecded4->9821637d-d072-4fcc-aefb-b5e7fa887755 - - +1d74f511-6321-416b-a7f9-a2c051c6f981->4587a9ec-fab2-4b65-8b9d-2836668409a9 + + diff --git a/robowaiter/scene/scene.py b/robowaiter/scene/scene.py index 4c7359f..156d28d 100644 --- a/robowaiter/scene/scene.py +++ b/robowaiter/scene/scene.py @@ -214,23 +214,23 @@ 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(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)'}, + '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(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)'}, # "condition_set": {'At(Robot,Bar)', 'Is(AC,Off)', # 'Exist(VacuumCup)','Exist(Coffee)', diff --git a/robowaiter/utils/draw_bt/Default.ptml b/robowaiter/utils/draw_bt/Default.ptml index 9521eb4..faa7387 100644 --- a/robowaiter/utils/draw_bt/Default.ptml +++ b/robowaiter/utils/draw_bt/Default.ptml @@ -1,30 +1,23 @@ - selector - - 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, 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) +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) + act PutDown(Anything,Anywhere) \ No newline at end of file diff --git a/robowaiter/utils/draw_bt/Default_bracket.ptml b/robowaiter/utils/draw_bt/Default_bracket.ptml index 69bec14..ced19d5 100644 --- a/robowaiter/utils/draw_bt/Default_bracket.ptml +++ b/robowaiter/utils/draw_bt/Default_bracket.ptml @@ -1,39 +1,33 @@ selector { + cond On(Coffee,Bar) sequence { - cond At(Robot, Coffee) + cond Holding(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) + cond At(Robot,Bar) + act PutDown(Coffee,Bar) + } act MoveTo(Bar) } } sequence { - cond At(Robot, Coffee) + cond At(Robot,Coffee) selector { sequence { cond Holding(Nothing) act PickUp(Coffee) - } act PutDown(Anything, Anywhere) - } selector + } act PutDown(Anything,Anywhere) + } } sequence { - sequence + cond Exist(Coffee) + act MoveTo(Coffee) + } sequence { - cond Holding(Coffee) - cond At(Robot, BrightTable6) - act PutDown(Coffee, BrightTable6) - } act MoveTo(BrightTable6) - } }} \ No newline at end of file + cond Holding(Nothing) + act Make(Coffee) + } act PutDown(Anything,Anywhere) +} \ No newline at end of file diff --git a/robowaiter/utils/draw_bt/test.dot b/robowaiter/utils/draw_bt/test.dot index cb6404f..be7a354 100644 --- a/robowaiter/utils/draw_bt/test.dot +++ b/robowaiter/utils/draw_bt/test.dot @@ -3,57 +3,49 @@ ordering=out; graph [fontname="times-roman"]; node [fontname="times-roman"]; edge [fontname="times-roman"]; -"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"; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"beefe100-69d4-42c8-943e-7e6a44cf6dba" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="On(Coffee,Bar)", shape=ellipse, style=filled]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "beefe100-69d4-42c8-943e-7e6a44cf6dba"; +"46e28392-6794-4550-b6e2-0e73ec120193" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "46e28392-6794-4550-b6e2-0e73ec120193"; +"0d7304bc-7515-400b-80e2-c01196ec55a2" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"46e28392-6794-4550-b6e2-0e73ec120193" -> "0d7304bc-7515-400b-80e2-c01196ec55a2"; +"4829a7d0-0f74-4826-9d82-94e0503d0e38" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"46e28392-6794-4550-b6e2-0e73ec120193" -> "4829a7d0-0f74-4826-9d82-94e0503d0e38"; +"93fb3deb-6e14-4cb7-b90b-d885e6be0af7" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"4829a7d0-0f74-4826-9d82-94e0503d0e38" -> "93fb3deb-6e14-4cb7-b90b-d885e6be0af7"; +"9765c81a-a42e-469c-9617-28c7a2314e0f" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Bar)", shape=ellipse, style=filled]; +"93fb3deb-6e14-4cb7-b90b-d885e6be0af7" -> "9765c81a-a42e-469c-9617-28c7a2314e0f"; +"2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,Bar)", shape=box, style=filled]; +"93fb3deb-6e14-4cb7-b90b-d885e6be0af7" -> "2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d"; +"38414809-7783-46fc-9b2b-4191032e7936" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(Bar)", shape=box, style=filled]; +"4829a7d0-0f74-4826-9d82-94e0503d0e38" -> "38414809-7783-46fc-9b2b-4191032e7936"; +"e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d"; +"7e87efb6-6091-413d-8b22-dd66ebe60767" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; +"e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d" -> "7e87efb6-6091-413d-8b22-dd66ebe60767"; +"afa21845-cfa3-447a-ac96-a83cf1951a6b" [fillcolor="#B0FFFF", fontcolor=black, fontsize=20, height=0.01, label="?", shape=box, style=filled, width=0.01]; +"e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d" -> "afa21845-cfa3-447a-ac96-a83cf1951a6b"; +"9567c5fd-7666-4887-b871-5aa129200fbb" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"afa21845-cfa3-447a-ac96-a83cf1951a6b" -> "9567c5fd-7666-4887-b871-5aa129200fbb"; +"31863371-28b9-441b-a0c0-80b0175ebc9d" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"9567c5fd-7666-4887-b871-5aa129200fbb" -> "31863371-28b9-441b-a0c0-80b0175ebc9d"; +"c0da3640-d486-436b-836f-684d165e1870" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled]; +"9567c5fd-7666-4887-b871-5aa129200fbb" -> "c0da3640-d486-436b-836f-684d165e1870"; +"6781847e-5cc9-43aa-864a-15d6b1ea991e" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"afa21845-cfa3-447a-ac96-a83cf1951a6b" -> "6781847e-5cc9-43aa-864a-15d6b1ea991e"; +"18fffbc9-1a98-40f8-a8ef-3a8f6564e041" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "18fffbc9-1a98-40f8-a8ef-3a8f6564e041"; +"17aa2547-5d2a-4100-b1cc-9e6795a0bed1" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"18fffbc9-1a98-40f8-a8ef-3a8f6564e041" -> "17aa2547-5d2a-4100-b1cc-9e6795a0bed1"; +"7540b9ff-e074-459b-a197-a13019794d30" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; +"18fffbc9-1a98-40f8-a8ef-3a8f6564e041" -> "7540b9ff-e074-459b-a197-a13019794d30"; +"16721d61-c6ad-455f-8c14-c628d04337fb" [fillcolor="#FF8080", fontcolor=black, fontsize=20, height=0.01, label="→", shape=box, style=filled, width=0.01]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "16721d61-c6ad-455f-8c14-c628d04337fb"; +"67a45deb-eea1-405c-b956-f27b4aba93a0" [fillcolor="#FFFF80", fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"16721d61-c6ad-455f-8c14-c628d04337fb" -> "67a45deb-eea1-405c-b956-f27b4aba93a0"; +"54a17c08-13b6-420a-bccb-ef411c9a6924" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; +"16721d61-c6ad-455f-8c14-c628d04337fb" -> "54a17c08-13b6-420a-bccb-ef411c9a6924"; +"13731b58-283a-4ec4-9f51-12f86a9f29ea" [fillcolor=lightgreen, fontcolor=black, fontsize=20, label="PutDown(Anything,Anywhere)", shape=box, style=filled]; +"22d96bbc-8512-4f16-aaa3-2e6004c5bd9c" -> "13731b58-283a-4ec4-9f51-12f86a9f29ea"; } diff --git a/robowaiter/utils/draw_bt/test.png b/robowaiter/utils/draw_bt/test.png index 21942b3..5186de1 100644 Binary files a/robowaiter/utils/draw_bt/test.png and b/robowaiter/utils/draw_bt/test.png differ diff --git a/robowaiter/utils/draw_bt/test.svg b/robowaiter/utils/draw_bt/test.svg index 5d9f517..d158e4f 100644 --- a/robowaiter/utils/draw_bt/test.svg +++ b/robowaiter/utils/draw_bt/test.svg @@ -4,328 +4,280 @@ - - + + pastafarianism - - + + -c681805a-96e1-4a3d-a38d-0bfca162692b - -Selector +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c + +? - + -e878636e-ab91-45b3-8d25-1712a9b919ab - -Sequence +beefe100-69d4-42c8-943e-7e6a44cf6dba + +On(Coffee,Bar) - + -c681805a-96e1-4a3d-a38d-0bfca162692b->e878636e-ab91-45b3-8d25-1712a9b919ab - - +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->beefe100-69d4-42c8-943e-7e6a44cf6dba + + - - -5461e129-ef05-4848-9107-2617c82b3566 - -Sequence - - - -c681805a-96e1-4a3d-a38d-0bfca162692b->5461e129-ef05-4848-9107-2617c82b3566 - - - - + -e88e510b-5495-4aa1-95cd-f95b3b4e50dc - -At(Robot,Coffee) +46e28392-6794-4550-b6e2-0e73ec120193 + + - + -e878636e-ab91-45b3-8d25-1712a9b919ab->e88e510b-5495-4aa1-95cd-f95b3b4e50dc - - +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->46e28392-6794-4550-b6e2-0e73ec120193 + + - - -292edbec-e8dc-44df-a80c-7dd5b6dd6692 - -Selector - - - -e878636e-ab91-45b3-8d25-1712a9b919ab->292edbec-e8dc-44df-a80c-7dd5b6dd6692 - - - - - -94f578bf-0c4b-4614-aacc-d73ca0996d2c - -Selector - - - -e878636e-ab91-45b3-8d25-1712a9b919ab->94f578bf-0c4b-4614-aacc-d73ca0996d2c - - - - - -8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b - -Sequence - - - -292edbec-e8dc-44df-a80c-7dd5b6dd6692->8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b - - - - - -27760c0d-aa85-437c-ac87-564d573f6d3d - -PutDown(Anything,Anywhere) - - - -292edbec-e8dc-44df-a80c-7dd5b6dd6692->27760c0d-aa85-437c-ac87-564d573f6d3d - - - - - -65f29fbc-02c3-4015-98bf-e71d16a78cbb - -Holding(Nothing) - - - -8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b->65f29fbc-02c3-4015-98bf-e71d16a78cbb - - - - - -c503211c-ab75-4671-a6ca-2f66518be485 - -PickUp(Coffee) - - - -8d44bfa1-3a4e-4ae7-94bb-25d70caf0b4b->c503211c-ab75-4671-a6ca-2f66518be485 - - - - + -5a162890-11de-41d8-9954-ba17ccf166c4 - -Sequence +e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d + + - + -94f578bf-0c4b-4614-aacc-d73ca0996d2c->5a162890-11de-41d8-9954-ba17ccf166c4 - - +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d + + - - -191ca7d5-a98c-429f-b040-66d210c30bdd - -MoveTo(WaterTable) - - - -94f578bf-0c4b-4614-aacc-d73ca0996d2c->191ca7d5-a98c-429f-b040-66d210c30bdd - - - - - -296bae80-a542-4fde-87b9-b030340caa1d - -Holding(Coffee) - - - -5a162890-11de-41d8-9954-ba17ccf166c4->296bae80-a542-4fde-87b9-b030340caa1d - - - - - -cba60b1e-308f-4f5a-939c-28bba802bca5 - -At(Robot,WaterTable) - - - -5a162890-11de-41d8-9954-ba17ccf166c4->cba60b1e-308f-4f5a-939c-28bba802bca5 - - - - - -93924025-e88f-47ec-90e4-c53bbc3df60e - -PutDown(Coffee,WaterTable) - - - -5a162890-11de-41d8-9954-ba17ccf166c4->93924025-e88f-47ec-90e4-c53bbc3df60e - - - - - -fd31940a-4e40-433d-8165-c9dd302fae62 - -At(Robot,Coffee) - - - -5461e129-ef05-4848-9107-2617c82b3566->fd31940a-4e40-433d-8165-c9dd302fae62 - - - - + -0a9876b0-1ff9-4f96-b7a8-8257a3928f62 - -Selector +18fffbc9-1a98-40f8-a8ef-3a8f6564e041 + + - + -5461e129-ef05-4848-9107-2617c82b3566->0a9876b0-1ff9-4f96-b7a8-8257a3928f62 - - +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->18fffbc9-1a98-40f8-a8ef-3a8f6564e041 + + - - -c719600f-4033-418f-8608-5c808481d1aa - -Selector - - - -5461e129-ef05-4848-9107-2617c82b3566->c719600f-4033-418f-8608-5c808481d1aa - - - - - -052d5a92-c6b4-483d-9cef-41745df61ff9 - -Sequence - - - -0a9876b0-1ff9-4f96-b7a8-8257a3928f62->052d5a92-c6b4-483d-9cef-41745df61ff9 - - - - - -bfea3ed6-08c4-4fd3-9aa7-994f4be28953 - -PutDown(Anything,Anywhere) - - - -0a9876b0-1ff9-4f96-b7a8-8257a3928f62->bfea3ed6-08c4-4fd3-9aa7-994f4be28953 - - - - - -c8462c00-d129-4eba-a0b4-ad6a819e34e8 - -Holding(Nothing) - - - -052d5a92-c6b4-483d-9cef-41745df61ff9->c8462c00-d129-4eba-a0b4-ad6a819e34e8 - - - - + -5a944a18-ea71-4cbe-a04e-675d955b1b1f - -PickUp(Coffee) +16721d61-c6ad-455f-8c14-c628d04337fb + + - + -052d5a92-c6b4-483d-9cef-41745df61ff9->5a944a18-ea71-4cbe-a04e-675d955b1b1f - - +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->16721d61-c6ad-455f-8c14-c628d04337fb + + - + -c9d1af42-f394-4c52-9e7b-32d46487c708 - -Sequence +13731b58-283a-4ec4-9f51-12f86a9f29ea + +PutDown(Anything,Anywhere) - + -c719600f-4033-418f-8608-5c808481d1aa->c9d1af42-f394-4c52-9e7b-32d46487c708 - - +22d96bbc-8512-4f16-aaa3-2e6004c5bd9c->13731b58-283a-4ec4-9f51-12f86a9f29ea + + - - -5685125a-34f9-40cd-be0c-b7674970c01b - -MoveTo(BrightTable6) + + +0d7304bc-7515-400b-80e2-c01196ec55a2 + +Holding(Coffee) - - -c719600f-4033-418f-8608-5c808481d1aa->5685125a-34f9-40cd-be0c-b7674970c01b - - + + +46e28392-6794-4550-b6e2-0e73ec120193->0d7304bc-7515-400b-80e2-c01196ec55a2 + + - - -84ecc165-efa0-4747-8ce9-64bf6ac557a2 - -Holding(Coffee) + + +4829a7d0-0f74-4826-9d82-94e0503d0e38 + +? - - -c9d1af42-f394-4c52-9e7b-32d46487c708->84ecc165-efa0-4747-8ce9-64bf6ac557a2 - - + + +46e28392-6794-4550-b6e2-0e73ec120193->4829a7d0-0f74-4826-9d82-94e0503d0e38 + + - - -8d3d2c3f-1f52-4742-bb03-a02d578134de - -At(Robot,BrightTable6) + + +93fb3deb-6e14-4cb7-b90b-d885e6be0af7 + + - - -c9d1af42-f394-4c52-9e7b-32d46487c708->8d3d2c3f-1f52-4742-bb03-a02d578134de - - + + +4829a7d0-0f74-4826-9d82-94e0503d0e38->93fb3deb-6e14-4cb7-b90b-d885e6be0af7 + + - - -b5bcfc9e-f0ad-458b-ba99-19bae2fc6b12 - -PutDown(Coffee,BrightTable6) + + +38414809-7783-46fc-9b2b-4191032e7936 + +MoveTo(Bar) - - -c9d1af42-f394-4c52-9e7b-32d46487c708->b5bcfc9e-f0ad-458b-ba99-19bae2fc6b12 - - + + +4829a7d0-0f74-4826-9d82-94e0503d0e38->38414809-7783-46fc-9b2b-4191032e7936 + + + + + +9765c81a-a42e-469c-9617-28c7a2314e0f + +At(Robot,Bar) + + + +93fb3deb-6e14-4cb7-b90b-d885e6be0af7->9765c81a-a42e-469c-9617-28c7a2314e0f + + + + + +2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d + +PutDown(Coffee,Bar) + + + +93fb3deb-6e14-4cb7-b90b-d885e6be0af7->2aed0c9b-0584-4ecf-bddd-8a863f4c1b9d + + + + + +7e87efb6-6091-413d-8b22-dd66ebe60767 + +At(Robot,Coffee) + + + +e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d->7e87efb6-6091-413d-8b22-dd66ebe60767 + + + + + +afa21845-cfa3-447a-ac96-a83cf1951a6b + +? + + + +e2a0f9ad-dbfd-41dd-aaf3-f9ed9329116d->afa21845-cfa3-447a-ac96-a83cf1951a6b + + + + + +9567c5fd-7666-4887-b871-5aa129200fbb + + + + + +afa21845-cfa3-447a-ac96-a83cf1951a6b->9567c5fd-7666-4887-b871-5aa129200fbb + + + + + +6781847e-5cc9-43aa-864a-15d6b1ea991e + +PutDown(Anything,Anywhere) + + + +afa21845-cfa3-447a-ac96-a83cf1951a6b->6781847e-5cc9-43aa-864a-15d6b1ea991e + + + + + +31863371-28b9-441b-a0c0-80b0175ebc9d + +Holding(Nothing) + + + +9567c5fd-7666-4887-b871-5aa129200fbb->31863371-28b9-441b-a0c0-80b0175ebc9d + + + + + +c0da3640-d486-436b-836f-684d165e1870 + +PickUp(Coffee) + + + +9567c5fd-7666-4887-b871-5aa129200fbb->c0da3640-d486-436b-836f-684d165e1870 + + + + + +17aa2547-5d2a-4100-b1cc-9e6795a0bed1 + +Exist(Coffee) + + + +18fffbc9-1a98-40f8-a8ef-3a8f6564e041->17aa2547-5d2a-4100-b1cc-9e6795a0bed1 + + + + + +7540b9ff-e074-459b-a197-a13019794d30 + +MoveTo(Coffee) + + + +18fffbc9-1a98-40f8-a8ef-3a8f6564e041->7540b9ff-e074-459b-a197-a13019794d30 + + + + + +67a45deb-eea1-405c-b956-f27b4aba93a0 + +Holding(Nothing) + + + +16721d61-c6ad-455f-8c14-c628d04337fb->67a45deb-eea1-405c-b956-f27b4aba93a0 + + + + + +54a17c08-13b6-420a-bccb-ef411c9a6924 + +Make(Coffee) + + + +16721d61-c6ad-455f-8c14-c628d04337fb->54a17c08-13b6-420a-bccb-ef411c9a6924 + + diff --git a/tasks_no_ui/BtTest/Open_tasks.py b/tasks_no_ui/BtTest/Open_tasks.py index 56e9d02..eabc8d4 100644 --- a/tasks_no_ui/BtTest/Open_tasks.py +++ b/tasks_no_ui/BtTest/Open_tasks.py @@ -25,12 +25,21 @@ 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号桌")), + # (3, self.customer_say, ("System", "把咖啡放到3号桌")), + # (3, self.customer_say, ("System", "我想来份点心和酸奶。")), + + # (3, self.customer_say, ("System", "把咖啡或者酸奶放到吧台")), + # (3, self.customer_say, ("System", "给我来杯咖啡,哦对,再倒一杯水。")), + + # (3, self.customer_say, ("System", "Don't stand at table 6. Please wipe down table 1 or mop the floor, and don't set the air conditioning temperature too low.")), + # (3, self.customer_say, (" System", + # "Don't stand at table 6. Please wipe down table 1, and don't set the air conditioning temperature too low.")), + ] def _reset(self): diff --git a/tasks_no_ui/CafeDailyOperations/CafeOneDay_en.py b/tasks_no_ui/CafeDailyOperations/CafeOneDay_en.py new file mode 100644 index 0000000..8e88d79 --- /dev/null +++ b/tasks_no_ui/CafeDailyOperations/CafeOneDay_en.py @@ -0,0 +1,129 @@ +""" +视觉语言操作 +机器人根据指令人的指令调节空调,自主探索环境导航到目标点,通过手臂的运动规划能力操作空调,比如开关按钮、调温按钮、显示面板 +""" + +import time +from robowaiter.scene.scene import Scene + + +class SceneVLM(Scene): + + def __init__(self, robot): + super().__init__(robot) + # 在这里加入场景中发生的事件, (事件发生的时间,事件函数) + + self.scene_flag = 1 + self.st1 = 3 + # self.st2 = self.st1 + 30 + # self.st3 = self.st2 + 65 + self.st2 = 3 + self.st3 = 3 + self.st4 = 3 + + self.signal_event_list = [ + + # 场景1:带小女孩找阳光下的空位 + (3, self.add_walker, (5, 230, 1200)), # 0号"Girl02_C_3" + (1, self.control_walker, (0, False, 200, 60, 520, 0)), + (9, self.customer_say, (0, "Good morning! I'm looking for a place where I can enjoy the sunshine.")), + (1, self.customer_say, (0, "Could you take me there?")),#可以带我过去嘛? + (13, self.control_walker, (0, False, 50, 140, 1200, 180)), # 小女孩站在了 BrightTable1 旁边就餐啦 + + # # 场景2:有个胖胖男人点单交流并要咖啡,帮他送去角落的桌子 + # (3, self.add_walker, (5, 230, 1200)), # 小女孩 + # # # 上述准备 + (10, self.add_walker, (26, -28, -150, 90)), + (0, self.add_walker, (10, -70, -200, -45)), + (5, self.customer_say, (1, "Hey, RoboWaiter, come here for a moment!")), + (10, self.control_walkers_and_say, ([[[1, False, 100, -18, -200, -90, "What drinks do you have here?"]]])), #6 + # 20 胖胖男到了 BrightTable6 + (2, self.customer_say, (1, "What kinds of coffee do you have?")), # 10 + (2, self.customer_say, (1, "I'll have a cappuccino, please.")), # 15 + + # # 场景3:有位女士要杯水和冰红茶 + (3, self.add_walkers, + ([[[21, 65, 1000, -90], [32, -80, 850, 135], [1, 60, 420, 135], [29, -290, 400, 180]]])), + (0, self.control_walker, (5, True, 50, 250, 1200, 180)), # 设置id=4 的2小男孩随机游走红随机游走 + (0, self.add_walker, (48, 60, 520, 0)), # 生成他妈妈 + (0, self.add_walkers, ([[[48, 60, 520, 0], [31, 60, 600, -90], [20, 60, 680, -90], [9, 60, 760, -90]]])), + (55, self.customer_say, (7, "Wow, it's so crowded today, are there any seats available?")), # 女士问 38 + (10, self.customer_say, (7, "I'm with my child, I'd like a spacious and well-lit spot.")), # 女士问 + (8, self.customer_say, (7, "The tables in the hall look good, please take me there!")), + (15, self.control_walker, (7, False, 50, -250, 480, 0)), # #290, 400 + (3, self.customer_say, (7, "I'd like a glass of water, and please get a yogurt for my child.")), + # # ### 9号灰色男 排队排着排着,不排了 + (0, self.control_walker, (10, False, 100, 100, 760, 180)), + (0, self.control_walker, (10, True, 100, 0, 0, 180)), + (90, self.customer_say, (7, "Thank you for the water and yogurt!")), # 倒水+取放酸奶 90s + + + (10, self.control_walkers_and_say, ([[[8, False, 100, 60, 520, 180, "I think I left my VacuumCup in your café yesterday, have you seen it?"]]])), + (5, self.customer_say, (8,"Can you bring it to me? I'm waiting at the table near the front door.")), + (1, self.control_walker,(8, False, 80, -10, 520, 90)),# 红女士在吧台前后退一步 + (1, self.control_walker, (8, False, 80, 240, 1000, -45)), # 红女士走到Table1前 + (1, self.control_walker, (9, False, 100, 60, 600, -90)), # 大胖男排队往前走一步 + (2, self.control_walker, (10, False, 100, 60, 680, -90)), # 男灰黑色排队往前走一步 + (6, self.customer_say, (8,"That's the one! Found it, I'm so happy!")), # 红女士在Table1前 + (5, self.customer_say, (8, "No need anymore.")), # 红女士在Table1前 + + + (8, self.remove_walkers, ([[0, 7, 8]])), + (3, self.control_walker, (6, False, 100, 60, 520, 0)), # 10号变7号 男灰黑色排队往前,轮到他 + (2, self.customer_say, (6, "好热呀!太阳也好大!可以")), + (20, self.control_walkers_and_say, ([[[6, True, 100, 60, 520, 0, "谢谢,这下凉快了"]]])), + + + # # 场景8 结束了,删除所有顾客。此处增加自主探索发现空间比较暗,打开大厅灯 + (24, self.clean_walkers, ()), + (1, self.add_walker, (17, 60, 1000)),# 增加警察,提醒下班啦 + (3, self.control_walkers_and_say, ([[[0, False, 150, 60, 520, 0, "下班啦!别忘了打扫卫生。"]]])), + + ] + + def _reset(self): + self.gen_obj() + # self.add_walkers([[47, 920]]) + pass + + def _run(self, op_type=10): + # 一个行人从门口走到 吧台 + # 打招呼需要什么 + # 行人说 哪里有位置,想晒个太阳 + # 带领行人去有太阳的地方 + # 行人说 有点热 + # 好的,这就去开空调 + self.walker_followed = False + pass + + def _step(self): + + if self.scene_flag == 1: + # 如果机器人不在 吧台 + if self.walker_followed: + return + end = [self.status.location.X, self.status.location.Y] + if end[1] >= 600 or end[1] <= 450 or end[0] >= 250: + # if int(self.status.location.X)!=247 or int(self.status.location.X)!=520: + self.walker_followed = True + self.control_walkers_and_say([[0, False, 150, end[0], end[1], 90, "谢谢!"]]) + self.scene_flag += 1 + + # 获得所有顾客的名字 + # print("=================") + # for cus in self.status.walkers: + # print(cus) + # print("=================") + pass + + +if __name__ == '__main__': + import os + from robowaiter.robot.robot import Robot + + robot = Robot() + + # create task + task = SceneVLM(robot) + task.reset() + task.run()