update BTExpansionCode
|
@ -3,7 +3,7 @@ import numpy as np
|
|||
import copy
|
||||
import time
|
||||
|
||||
from OptimalBTExpansionAlgorithm_single_goal import ControlBT,Leaf,generate_random_state,Action,state_transition,conflict
|
||||
from OptimalBTExpansionAlgorithm import ControlBT,Leaf,generate_random_state,Action,state_transition,conflict
|
||||
import re
|
||||
|
||||
|
||||
|
@ -24,15 +24,21 @@ class BTExpAlgorithm:
|
|||
self.traversed = []
|
||||
self.conditions = []
|
||||
self.conditions_index = []
|
||||
self.traversed_state_num=0
|
||||
self.fot_times =0
|
||||
self.expand_conds = 0
|
||||
self.tree_size = 0
|
||||
|
||||
def run_algorithm_selTree(self, start, goal, actions):
|
||||
self.traversed_state_num=0
|
||||
# 初始行为树只包含目标条件
|
||||
bt = ControlBT(type='cond')
|
||||
g_node = Leaf(type='cond', content=goal,mincost=0)
|
||||
bt.add_child([g_node])
|
||||
|
||||
self.expand_conds +=1
|
||||
self.conditions.append(goal)
|
||||
self.nodes.append(g_node) # condition node list
|
||||
self.traversed_state_num+=1
|
||||
# 尝试在初始状态执行行为树
|
||||
val, obj = bt.tick(start)
|
||||
canrun = False
|
||||
|
@ -40,6 +46,10 @@ class BTExpAlgorithm:
|
|||
canrun = True
|
||||
# 循环扩展,直到行为树能够在初始状态运行
|
||||
while not canrun:
|
||||
|
||||
self.fot_times += 1
|
||||
|
||||
# print("canrun:",canrun)
|
||||
index = -1
|
||||
for i in range(0, len(self.nodes)):
|
||||
if self.nodes[i].content in self.traversed:
|
||||
|
@ -53,11 +63,25 @@ class BTExpAlgorithm:
|
|||
return False
|
||||
# 根据所选择条件结点扩展子树
|
||||
subtree = ControlBT(type='?')
|
||||
subtree.add_child([copy.deepcopy(c_node)]) # 子树首先保留所扩展结点
|
||||
subtree.add_child([copy.deepcopy(c_node)]) # 子树首先保留所扩展结点 # copy
|
||||
c = c_node.content # 子树所扩展结点对应的条件(一个文字的set)
|
||||
|
||||
if self.verbose:
|
||||
print("选择扩展条件结点:",c)
|
||||
|
||||
if c != goal:
|
||||
if c <= start:
|
||||
return bt
|
||||
|
||||
act_num = 0
|
||||
|
||||
for i in range(0, len(actions)): # 选择符合条件的行动,
|
||||
# print("have action")
|
||||
|
||||
if c=={'RobotNear(Chips)', 'Holding(Nothing)'} and actions[i].name=='Clean(Chairs)0':
|
||||
xx=1
|
||||
|
||||
|
||||
if not c & ((actions[i].pre | actions[i].add) - actions[i].del_set) <= set():
|
||||
# print ("pass add")
|
||||
if (c - actions[i].del_set) == c:
|
||||
|
@ -65,9 +89,11 @@ class BTExpAlgorithm:
|
|||
c_attr = (actions[i].pre | c) - actions[i].add
|
||||
valid = True
|
||||
|
||||
# 这样剪枝存在错误性
|
||||
# if conflict(c_attr):
|
||||
# continue
|
||||
# if "PickUp(ADMilk)0" in actions[i].name:
|
||||
# xx = 1
|
||||
|
||||
if conflict(c_attr):
|
||||
continue
|
||||
|
||||
for j in self.traversed: # 剪枝操作
|
||||
if j <= c_attr:
|
||||
|
@ -83,8 +109,16 @@ class BTExpAlgorithm:
|
|||
sequence_structure.add_child([c_attr_node, a_node])
|
||||
# 将顺序结构添加到子树
|
||||
subtree.add_child([sequence_structure])
|
||||
|
||||
self.nodes.append(c_attr_node)
|
||||
self.expand_conds += 1
|
||||
act_num+=1
|
||||
# self.traversed_state_num+=1
|
||||
if self.verbose:
|
||||
print("完成扩展 a_node= %s,对应的新条件 c_attr= %s" \
|
||||
% (actions[i].name, c_attr))
|
||||
|
||||
# print(act_num)
|
||||
self.traversed_state_num += act_num
|
||||
# 将原条件结点c_node替换为扩展后子树subtree
|
||||
parent_of_c = c_node.parent
|
||||
parent_of_c.children[0] = subtree
|
||||
|
@ -95,6 +129,7 @@ class BTExpAlgorithm:
|
|||
canrun = False
|
||||
if val == 'success' or val == 'running':
|
||||
canrun = True
|
||||
self.tree_size = self.bfs_cal_tree_size_subtree(bt)
|
||||
return bt
|
||||
|
||||
|
||||
|
@ -111,11 +146,12 @@ class BTExpAlgorithm:
|
|||
subtree = ControlBT(type='?')
|
||||
if len(goal) > 1:
|
||||
for g in goal:
|
||||
print("goal",g)
|
||||
# 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",bt_sel_tree.children)
|
||||
# print(bt_sel_tree.children[0])
|
||||
subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])])
|
||||
# subtree.add_child([copy.deepcopy(bt_sel_tree.children[0])])
|
||||
subtree.add_child([bt_sel_tree.children[0]])
|
||||
self.bt.add_child([subtree])
|
||||
else:
|
||||
self.bt = self.run_algorithm_selTree(start, goal[0], actions)
|
||||
|
@ -180,6 +216,46 @@ class BTExpAlgorithm:
|
|||
self.ptml_string += '}\n'
|
||||
return self.ptml_string
|
||||
|
||||
|
||||
def bfs_cal_tree_size(self):
|
||||
from collections import deque
|
||||
queue = deque([self.bt.children[0]])
|
||||
|
||||
if isinstance(self.bt.children[0], Leaf):
|
||||
# print("扩展后的结点数=0")
|
||||
return 0
|
||||
|
||||
count = 0
|
||||
while queue:
|
||||
current_node = queue.popleft()
|
||||
count += 1
|
||||
for child in current_node.children:
|
||||
if isinstance(child, Leaf):
|
||||
count += 1
|
||||
else:
|
||||
queue.append(child)
|
||||
return count
|
||||
|
||||
def bfs_cal_tree_size_subtree(self,bt):
|
||||
from collections import deque
|
||||
queue = deque([bt.children[0]])
|
||||
|
||||
if isinstance(bt.children[0], Leaf):
|
||||
# print("扩展后的结点数=0")
|
||||
return 0
|
||||
|
||||
count = 0
|
||||
while queue:
|
||||
current_node = queue.popleft()
|
||||
count += 1
|
||||
for child in current_node.children:
|
||||
if isinstance(child, Leaf):
|
||||
count += 1
|
||||
else:
|
||||
queue.append(child)
|
||||
return count
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
bt_algo_opt = False
|
||||
|
|
|
@ -2,13 +2,13 @@ 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
|
||||
|
||||
from OptimalBTExpansionAlgorithm import ControlBT,Leaf,generate_random_state,Action,state_transition,conflict
|
||||
import re
|
||||
|
||||
|
||||
# 本文所提出的完备规划算法
|
||||
class BTalgorithm:
|
||||
class BTExpAlgorithm:
|
||||
def __init__(self,verbose=False):
|
||||
self.bt = None
|
||||
self.nodes = []
|
||||
|
@ -25,8 +25,12 @@ class BTalgorithm:
|
|||
self.conditions = []
|
||||
self.conditions_index = []
|
||||
|
||||
# 运行规划算法,从初始状态、目标状态和可用行动,计算行为树self.bt
|
||||
def run_algorithm_selTree(self, start, goal, actions):
|
||||
|
||||
time_dic={"act_traverse_time":0,
|
||||
"choose_min_c":0,
|
||||
"While_Count":0}
|
||||
|
||||
# 初始行为树只包含目标条件
|
||||
bt = ControlBT(type='cond')
|
||||
g_node = Leaf(type='cond', content=goal,mincost=0)
|
||||
|
@ -41,6 +45,9 @@ class BTalgorithm:
|
|||
canrun = True
|
||||
# 循环扩展,直到行为树能够在初始状态运行
|
||||
while not canrun:
|
||||
|
||||
time_dic["While_Count"] += 1
|
||||
|
||||
index = -1
|
||||
for i in range(0, len(self.nodes)):
|
||||
if self.nodes[i].content in self.traversed:
|
||||
|
@ -67,8 +74,8 @@ class BTalgorithm:
|
|||
valid = True
|
||||
|
||||
# 这样剪枝存在错误性
|
||||
if conflict(c_attr):
|
||||
continue
|
||||
# if conflict(c_attr):
|
||||
# continue
|
||||
|
||||
for j in self.traversed: # 剪枝操作
|
||||
if j <= c_attr:
|
||||
|
@ -96,7 +103,12 @@ class BTalgorithm:
|
|||
canrun = False
|
||||
if val == 'success' or val == 'running':
|
||||
canrun = True
|
||||
return bt
|
||||
return bt,time_dic
|
||||
|
||||
|
||||
def run_algorithm_test(self, start, goal, actions):
|
||||
self.bt,time_dic = self.run_algorithm_selTree(start, goal, actions)
|
||||
return True,time_dic
|
||||
|
||||
|
||||
|
||||
|
@ -117,16 +129,26 @@ class BTalgorithm:
|
|||
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):
|
||||
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':
|
||||
|
@ -144,6 +166,9 @@ class BTalgorithm:
|
|||
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:
|
||||
|
@ -151,125 +176,44 @@ class BTalgorithm:
|
|||
elif isinstance(child, ControlBT):
|
||||
if child.type == '?':
|
||||
self.ptml_string += "selector{\n"
|
||||
self.dfs_ptml(parnode=child)
|
||||
self.dfs_ptml_many_act(parnode=child)
|
||||
elif child.type == '>':
|
||||
self.ptml_string += "sequence{\n"
|
||||
self.dfs_ptml( parnode=child)
|
||||
self.dfs_ptml_many_act(parnode=child)
|
||||
self.ptml_string += '}\n'
|
||||
|
||||
|
||||
def get_ptml(self):
|
||||
def get_ptml_many_act(self):
|
||||
self.ptml_string = "selector{\n"
|
||||
self.dfs_ptml(self.bt.children[0],is_root=True)
|
||||
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
|
||||
def bfs_cal_tree_size(self):
|
||||
from collections import deque
|
||||
queue = deque([self.bt.children[0]])
|
||||
|
||||
if isinstance(self.bt.children[0], Leaf):
|
||||
# print("扩展后的结点数=0")
|
||||
return 0
|
||||
|
||||
# 所对比的基准算法,具体扩展细节有差异
|
||||
count = 0
|
||||
while queue:
|
||||
current_node = queue.popleft()
|
||||
count += 1
|
||||
for child in current_node.children:
|
||||
if isinstance(child, Leaf):
|
||||
count += 1
|
||||
else:
|
||||
queue.append(child)
|
||||
return count
|
||||
|
||||
|
||||
|
||||
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)
|
||||
bt_algo_opt = False
|
||||
|
||||
# 开始从初始状态运行行为树,测试
|
||||
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,包含三个行动的移动机械臂场景
|
||||
|
||||
|
@ -292,7 +236,7 @@ if __name__ == '__main__':
|
|||
|
||||
start = {1, 7, 4, 6}
|
||||
goal = {3}
|
||||
algo = BTalgorithm()
|
||||
algo = BTExpAlgorithm()
|
||||
algo.clear()
|
||||
algo.run_algorithm(start, goal, list(actions))
|
||||
state = start
|
|
@ -24,19 +24,37 @@ class Leaf:
|
|||
else:
|
||||
return 'failure',self.content
|
||||
|
||||
def cost_tick(self,state,cost,ticks):
|
||||
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 cost_tick_cond(self,state,cost,ticks,cond):
|
||||
if self.type=='cond':
|
||||
ticks+=1
|
||||
cond+=len(self.content)
|
||||
if self.content <= state:
|
||||
return 'success',self.content,cost,ticks
|
||||
return 'success',self.content,cost,ticks,cond
|
||||
else:
|
||||
return 'failure',self.content,cost,ticks
|
||||
return 'failure',self.content,cost,ticks,cond
|
||||
if self.type=='act':
|
||||
ticks += 1
|
||||
if self.content.pre<=state:
|
||||
return 'running',self.content,cost+self.content.cost,ticks #action
|
||||
return 'running',self.content,cost+self.content.cost,ticks,cond #action
|
||||
else:
|
||||
return 'failure',self.content,cost,ticks
|
||||
return 'failure',self.content,cost,ticks,cond
|
||||
|
||||
|
||||
|
||||
|
||||
def __str__(self):
|
||||
print( self.content)
|
||||
|
@ -117,6 +135,36 @@ class ControlBT:
|
|||
if self.type =='cond':#条件结点
|
||||
return self.children[0].cost_tick(state,cost,ticks)
|
||||
|
||||
def cost_tick_cond(self, state, cost, ticks,cond):
|
||||
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,cond=child.cost_tick_cond(state,cost,ticks,cond)
|
||||
if val=='success':
|
||||
return val,obj,cost,ticks,cond
|
||||
if val=='running':
|
||||
return val,obj,cost,ticks,cond
|
||||
return 'failure','?fails',cost,ticks,cond
|
||||
if self.type =='>':#顺序结点,即与结点
|
||||
for child in self.children:
|
||||
# print("state:",state,"cost",cost)
|
||||
ticks+=1
|
||||
val,obj,cost,ticks,cond=child.cost_tick_cond(state,cost,ticks,cond)
|
||||
if val=='failure':
|
||||
return val,obj,cost,ticks,cond
|
||||
if val=='running':
|
||||
return val,obj,cost,ticks,cond
|
||||
return 'success', '>success',cost,ticks,cond
|
||||
if self.type =='act':#行动结点
|
||||
return self.children[0].cost_tick_cond(state,cost,ticks,cond)
|
||||
if self.type =='cond':#条件结点
|
||||
return self.children[0].cost_tick_cond(state,cost,ticks,cond)
|
||||
|
||||
|
||||
|
||||
def getFirstChild(self):
|
||||
return self.children[0]
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
,copy_act,depth,obj_num,iters,act_pred_num,literals_num,act_avg,btalgorithm,tree_size_avg,tree_size_std,ticks_avg,ticks_std,cost_avg,cost_std,step_avg,step_std,state_num_avg,state_num_std,expand_num_avg,expand_num_std,plan_time_avg,plan_time_std,plan_time_total
|
||||
0,0,30,10,100,130.0,100,160.0,OBTEA,210.0,,477.0,,235.0,,8.0,,69.0,0.0,48.0,0.0,0.03701,0.0,0.07402
|
||||
1,0,30,10,100,130.0,100,160.0,Baseline,432.0,,764.0,,426.0,,7.0,,129.0,0.0,47.0,0.0,0.05201,0.0,0.10402
|
||||
2,0,30,100,100,130.0,100,1338.0,OBTEA,28.0,,11.0,,70.0,,1.0,,7.0,0.0,7.0,0.0,0.03201,0.0,0.06402
|
||||
3,0,30,100,100,130.0,100,1338.0,Baseline,23.0,,11.0,,70.0,,1.0,,8.0,0.0,1.0,0.0,0.005,0.0,0.01
|
||||
4,5,10,50,100,110.0,100,349.0,OBTEA,236.0,,892.0,,182.0,,10.0,,62.0,0.0,51.0,0.0,0.08002,0.0,0.16004
|
||||
5,5,10,50,100,110.0,100,349.0,Baseline,201.0,,650.0,,470.0,,10.0,,62.0,0.0,17.0,0.0,0.03501,0.0,0.07002
|
||||
6,5,30,50,100,130.0,100,836.0,OBTEA,214.0,,372.0,,54.0,,4.0,,114.0,0.0,49.0,0.0,0.20305,0.0,0.40609
|
||||
7,5,30,50,100,130.0,100,836.0,Baseline,632.0,,362.0,,225.0,,4.0,,205.0,0.0,19.0,0.0,0.19405,0.0,0.38809
|
||||
8,5,30,100,100,130.0,100,1719.0,OBTEA,79.0,,82.0,,49.0,,2.0,,122.0,0.0,19.0,0.0,0.17104,0.0,0.34208
|
||||
9,5,30,100,100,130.0,100,1719.0,Baseline,204.0,,26.0,,142.0,,2.0,,68.0,0.0,2.0,0.0,0.02201,0.0,0.04401
|
||||
10,5,30,100,500,530.0,100,1663.0,OBTEA,44.0,,29.0,,31.0,,2.0,,17.0,0.0,17.0,0.0,0.17104,0.0,0.34208
|
||||
11,5,30,100,500,530.0,100,1663.0,Baseline,96.0,,29.0,,67.0,,2.0,,32.0,0.0,2.0,0.0,0.02101,0.0,0.04201
|
||||
12,5,50,100,500,550.0,100,2739.0,OBTEA,26.0,,33.0,,5.0,,2.0,,103.0,0.0,7.0,0.0,0.08602,0.0,0.17204
|
||||
13,5,50,100,500,550.0,100,2739.0,Baseline,92.0,,11.0,,96.0,,1.0,,31.0,0.0,1.0,0.0,0.015,0.0,0.03001
|
|
|
@ -0,0 +1,7 @@
|
|||
,difficult,btalgorithm,tree_size_avg,tree_size_std,ticks_avg,ticks_std,cost_avg,cost_std,plan_time_avg,plan_time_std,plan_time_total
|
||||
0,Easy,OBTEA,14.133,10.673,37.167,30.758,87.733,79.047,0.00177,0.00173,0.05301
|
||||
1,Easy,Baseline,79.867,88.803,69.7,75.896,123.4,105.933,0.00243,0.0047,0.07302
|
||||
2,Medium,OBTEA,46.667,55.579,99.267,163.376,109.433,99.613,0.00515,0.00613,0.15458
|
||||
3,Medium,Baseline,311.267,502.951,207.0,302.415,184.7,154.386,0.03318,0.0769,0.99533
|
||||
4,Hard,OBTEA,203.95,227.232,315.1,566.12,164.2,131.577,0.02373,0.02579,0.94931
|
||||
5,Hard,Baseline,1053.025,1799.519,447.9,893.542,249.7,209.654,0.282,0.8118,11.27991
|
|
|
@ -0,0 +1,3 @@
|
|||
,depth,obj_num,cond_pred,act_pred,max_copy_times,literals_obj_count,state_avg,act_avg,btalgorithm,tree_size_avg,ticks_avg,wm_cond_ticks,cond_tick_avg,cost_avg,step_avg,expand_num_avg,plan_time_avg,plan_time_total
|
||||
0,10,500,50,50.0,5,25000.0,22427.877,12514.209,OBTEA,0.0,393.348,2581.188,909.768,82.705,3.527,75.822,2.60924,5218.47301
|
||||
1,10,500,50,50.0,5,25000.0,22427.877,12514.209,Baseline,250.694,306.653,0.0,1436.642,165.935,3.321,79.464,0.55127,1102.54956
|
|
|
@ -0,0 +1,2 @@
|
|||
,obj_num,cond_pred,act_pred,max_copy_times,literals_obj_count,state_avg,act_avg,Cond_B,Cond_WM,Cond_OUR,Cost_B,Cost_OUR
|
||||
0,500,50,50.0,5,25000.0,22427.877,12514.209,1436.642,2581.188,909.768,165.935,82.705
|
|
|
@ -0,0 +1,104 @@
|
|||
|
||||
from EXP.exp_tools import collect_action_nodes,get_start,BTTest,goal_transfer_str,collect_cond_nodes,BTTest_easy_medium_hard
|
||||
import copy
|
||||
import random
|
||||
import re
|
||||
from dataset.data_process_check import format_check,word_correct,goal_transfer_ls_set
|
||||
import time
|
||||
|
||||
seed = 1
|
||||
random.seed(seed)
|
||||
|
||||
multiple_num= 2
|
||||
action_list = collect_action_nodes(random,multiple_num)
|
||||
# for act in action_list:
|
||||
# print(act.name,act.cost)
|
||||
|
||||
start_robowaiter = get_start()
|
||||
|
||||
# 计算state总数
|
||||
state_num, vaild_state_num= collect_cond_nodes()
|
||||
print("meta states num: ",state_num)
|
||||
print("states num: ",vaild_state_num)
|
||||
print("act num: ",len(action_list))
|
||||
|
||||
goal_states = []
|
||||
|
||||
easy_data_set_file = "../dataset/easy_instr_goal.txt"
|
||||
medium_data_set_file = "../dataset/medium_instr_goal.txt"
|
||||
hard_data_set_file = "../dataset/hard_instr_goal.txt"
|
||||
with open(easy_data_set_file, 'r', encoding="utf-8") as f:
|
||||
easy_data_set = f.read().strip()
|
||||
with open(medium_data_set_file, 'r', encoding="utf-8") as f:
|
||||
medium_data_set = f.read().strip()
|
||||
with open(hard_data_set_file, 'r', encoding="utf-8") as f:
|
||||
hard_data_set = f.read().strip()
|
||||
|
||||
|
||||
all_result=[]
|
||||
|
||||
# dataset_ls = [easy_data_set,medium_data_set,hard_data_set]
|
||||
# parm_difficule_ls = ['Easy','Medium','Hard']
|
||||
|
||||
dataset_ls = [hard_data_set]
|
||||
parm_difficule_ls = ['Hard']
|
||||
|
||||
|
||||
# sections = re.split(r'\n\s*\n', dataset)
|
||||
# outputs_list = [[] for _ in range(len(sections))]
|
||||
#
|
||||
# goal_set_ls=[]
|
||||
# for i,s in enumerate(sections):
|
||||
# x,y = s.strip().splitlines()
|
||||
# x = x.strip()
|
||||
# y = y.strip().replace("Goal: ","")
|
||||
# # goal_set_ls.append(goal_transfer_ls_set(y))
|
||||
# goal_set_ls.append(y)
|
||||
|
||||
|
||||
# goal_states = goal_set_ls
|
||||
# goal_states={"On_Milk_WindowTable6"}
|
||||
# goal_states={"On_Chips_WindowTable6 & (On_Milk_WindowTable6 | On_Yogurt_WindowTable6 )"}
|
||||
# goal_states={"(~On_Coffee_Table1 | ~On_Dessert_Table2) & ~RobotNear_Bar2"}
|
||||
# goal_states={"(~On_Milk_Bar | ~On_Yogurt_Bar) & ~RobotNear_Bar"}
|
||||
|
||||
# goal_states={"IsClean_Table1 & (On_Coffee_Table1 | On_Yogurt_Table1)" }
|
||||
# goal_states={"IsClean_Table1 & (IsClean_Floor | IsClean_Chairs)" }
|
||||
# goal_states={"~(On_VacuumCup_Bar | On_VacuumCup_Bar2) & ~Low_ACTemperature"}
|
||||
# goal_states={"IsClean_Table1 & On_Coffee_Table1"}
|
||||
|
||||
# goal_states={"(On_Coffee_Table | On_Tea_Table) & ~Active_AC"}
|
||||
goal_states={"(On_Coffee_Table | On_Tea_Table) & ~Active_AC"}
|
||||
|
||||
obt_result = BTTest_easy_medium_hard(bt_algo_opt=True, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter)
|
||||
# print("\n")
|
||||
# 对比
|
||||
# baseline_result = BTTest_easy_medium_hard(bt_algo_opt=False, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter)
|
||||
|
||||
# param_ls=[parm_difficule_ls[index]]
|
||||
#
|
||||
# a_result=[]
|
||||
# a_result.extend(param_ls)
|
||||
# a_result.append("OBTEA")
|
||||
# a_result.extend(obt_result)
|
||||
# all_result.append(a_result)
|
||||
#
|
||||
# a_result=[]
|
||||
# a_result.extend(param_ls)
|
||||
# a_result.append("Baseline")
|
||||
# a_result.extend(baseline_result)
|
||||
# all_result.append(a_result)
|
||||
#
|
||||
# import pandas as pd
|
||||
# df = pd.DataFrame(all_result, columns=[
|
||||
# 'difficult',
|
||||
# 'btalgorithm',
|
||||
# 'tree_size_avg', 'tree_size_std',
|
||||
# 'ticks_avg', 'ticks_std',
|
||||
# 'cost_avg', 'cost_std',
|
||||
# 'plan_time_avg', 'plan_time_std', 'plan_time_total'])
|
||||
#
|
||||
# time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()).replace("-","").replace(":","")
|
||||
# csv_file_path = 'cage_bt_result_='+time_str+'.csv'
|
||||
# df.to_csv(csv_file_path, index=True)
|
||||
# print("CSV文件已生成:", csv_file_path)
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
# from robowaiter.behavior_tree.behavior_tree import BehaviorTree
|
|
@ -1,386 +0,0 @@
|
|||
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桌子上。
|
|
@ -1,388 +0,0 @@
|
|||
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) 好的,我给你准备了一些甜点,现在就端到你面前的桌子上。
|
|
@ -1,57 +0,0 @@
|
|||
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) 请问你能把酸奶拿到另一个吧台位置吗?
|
|
@ -1,310 +0,0 @@
|
|||
# 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())
|
|
@ -1,193 +0,0 @@
|
|||
{"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)"}
|
|
@ -1,193 +0,0 @@
|
|||
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) 给我来点点心或者甜品,并把它端到第三张桌子这里来。
|
|
@ -1,10 +0,0 @@
|
|||
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]))
|
|
@ -1,61 +0,0 @@
|
|||
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("输出完成")
|
|
@ -1,386 +0,0 @@
|
|||
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桌子上。
|
|
@ -1,388 +0,0 @@
|
|||
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) 好的,我给你准备了一些甜点,现在就端到你面前的桌子上。
|
|
@ -1,57 +0,0 @@
|
|||
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) 请问你能把酸奶拿到另一个吧台位置吗?
|
|
@ -1,172 +0,0 @@
|
|||
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)
|
||||
|
|
@ -1,322 +0,0 @@
|
|||
# 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())
|
|
@ -1,165 +0,0 @@
|
|||
{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)}
|
|
@ -1,193 +0,0 @@
|
|||
{"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)"}
|
|
@ -1,454 +0,0 @@
|
|||
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) 给我来点点心,并把它端到后门靠窗边圆桌这里来。
|
|
@ -1,10 +0,0 @@
|
|||
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]))
|
|
@ -1,61 +0,0 @@
|
|||
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("输出完成")
|
|
@ -1,95 +0,0 @@
|
|||
|
||||
#叶结点
|
||||
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
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
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)
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 54 KiB |
|
@ -1,125 +0,0 @@
|
|||
|
||||
|
||||
## 代码说明
|
||||
|
||||
### 1. `BehaviorTree.py` 实现行为树叶子结点和非叶子结点的定义
|
||||
|
||||
- **Leaf**:表示叶节点,可以是动作(`act`)或条件(`cond`)。
|
||||
- **ControlBT**:代表可能包含控制节点的行为树。它们可以是选择器(`?`)、序列(`>`)、动作节点(`act`)或条件节点(`cond`)。
|
||||
- 上述两个类都包含 `tick` 方法。
|
||||
|
||||
### 2. `OptimalBTExpansionAlgorithm.py` 实现最优行为树扩展算法
|
||||
|
||||

|
||||
|
||||
定义行动类
|
||||
```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!")
|
||||
|
||||
```
|
||||
|
|
@ -1,174 +0,0 @@
|
|||
|
||||
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
|
||||
|
|
@ -1,131 +0,0 @@
|
|||
|
||||
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!")
|
|
@ -1,167 +0,0 @@
|
|||
|
||||
|
||||
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
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
cd ./robowaiter/behavior_tree/ptml
|
||||
antlr4 -Dlanguage=Python3 ptml.g4
|
|
@ -1,20 +0,0 @@
|
|||
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 ;
|
|
@ -1,51 +0,0 @@
|
|||
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]
|
|
@ -1,29 +0,0 @@
|
|||
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
|
|
@ -1,208 +0,0 @@
|
|||
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)
|
|
@ -1,68 +0,0 @@
|
|||
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]
|
|
@ -1,118 +0,0 @@
|
|||
# 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 = [ "<INVALID>",
|
||||
"'{'", "'}'", "'sequence'", "'selector'", "'parallel'", "'act'",
|
||||
"'cond'", "'('", "')'", "','", "'True'", "'False'" ]
|
||||
|
||||
symbolicNames = [ "<INVALID>",
|
||||
"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
|
||||
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
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
|
|
@ -1,66 +0,0 @@
|
|||
# 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
|
|
@ -1,528 +0,0 @@
|
|||
# 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 = [ "<INVALID>", "'{'", "'}'", "'sequence'", "'selector'",
|
||||
"'parallel'", "'act'", "'cond'", "'('", "')'", "','",
|
||||
"'True'", "'False'" ]
|
||||
|
||||
symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
||||
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
||||
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
||||
"<INVALID>", "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
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
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
|
|
@ -1,35 +0,0 @@
|
|||
//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()
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
selector
|
||||
selector
|
||||
cond HasMap()
|
||||
act ExploreEnv()
|
||||
sequence
|
||||
cond Chatting()
|
||||
act DealChat()
|
||||
sequence
|
||||
cond HasSubTask()
|
||||
sequence
|
||||
cond At(Robot,Table)
|
||||
// cond At(Robot,Table)
|
|
@ -1,7 +0,0 @@
|
|||
selector{
|
||||
sequence{
|
||||
cond Chatting()
|
||||
act DealChat()
|
||||
}
|
||||
act At(Coffee,Table)
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
selector
|
||||
{
|
||||
selector
|
||||
{
|
||||
cond HasMap()
|
||||
act ExploreEnv()
|
||||
|
||||
} sequence
|
||||
{
|
||||
cond Chatting()
|
||||
act DealChat()
|
||||
|
||||
} sequence
|
||||
{
|
||||
cond HasSubTask()
|
||||
sequence
|
||||
{
|
||||
cond At(Robot,Table)
|
||||
|
||||
} // cond At(Robot,Table)}}
|
|
@ -1,25 +0,0 @@
|
|||
# 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)
|
|
@ -1,29 +0,0 @@
|
|||
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";
|
||||
}
|
Before Width: | Height: | Size: 52 KiB |
|
@ -1,151 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 9.0.0 (20230911.1827)
|
||||
-->
|
||||
<!-- Title: pastafarianism Pages: 1 -->
|
||||
<svg width="986pt" height="333pt"
|
||||
viewBox="0.00 0.00 986.41 333.03" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 329.03)">
|
||||
<title>pastafarianism</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-329.03 982.41,-329.03 982.41,4 -4,4"/>
|
||||
<!-- 34d1cf8a-42d6-49de-a458-0c7d3bffc436 -->
|
||||
<g id="node1" class="node">
|
||||
<title>34d1cf8a-42d6-49de-a458-0c7d3bffc436</title>
|
||||
<polygon fill="cyan" stroke="black" points="390.57,-325.03 365.57,-293.78 390.57,-262.53 415.57,-293.78 390.57,-325.03"/>
|
||||
<text text-anchor="middle" x="390.57" y="-286.4" font-family="Times New Roman,serif" font-size="20.00">?</text>
|
||||
</g>
|
||||
<!-- 33446211-2d5c-4e1d-bdb5-5ded443a713c -->
|
||||
<g id="node2" class="node">
|
||||
<title>33446211-2d5c-4e1d-bdb5-5ded443a713c</title>
|
||||
<polygon fill="cyan" stroke="black" points="193.57,-226.53 168.57,-195.28 193.57,-164.03 218.57,-195.28 193.57,-226.53"/>
|
||||
<text text-anchor="middle" x="193.57" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">?</text>
|
||||
</g>
|
||||
<!-- 34d1cf8a-42d6-49de-a458-0c7d3bffc436->33446211-2d5c-4e1d-bdb5-5ded443a713c -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>34d1cf8a-42d6-49de-a458-0c7d3bffc436->33446211-2d5c-4e1d-bdb5-5ded443a713c</title>
|
||||
<path fill="none" stroke="black" d="M372.74,-284.05C338.31,-267.18 262.46,-230.02 221.35,-209.89"/>
|
||||
<polygon fill="black" stroke="black" points="223.1,-206.85 212.58,-205.59 220.02,-213.13 223.1,-206.85"/>
|
||||
</g>
|
||||
<!-- 6fe9e522-557f-473a-a582-2f0d17d1a4f1 -->
|
||||
<g id="node5" class="node">
|
||||
<title>6fe9e522-557f-473a-a582-2f0d17d1a4f1</title>
|
||||
<polygon fill="orange" stroke="black" points="411.43,-185.37 411.43,-205.19 399.21,-219.2 381.93,-219.2 369.72,-205.19 369.72,-185.37 381.93,-171.36 399.21,-171.36 411.43,-185.37"/>
|
||||
<text text-anchor="middle" x="390.57" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">></text>
|
||||
</g>
|
||||
<!-- 34d1cf8a-42d6-49de-a458-0c7d3bffc436->6fe9e522-557f-473a-a582-2f0d17d1a4f1 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>34d1cf8a-42d6-49de-a458-0c7d3bffc436->6fe9e522-557f-473a-a582-2f0d17d1a4f1</title>
|
||||
<path fill="none" stroke="black" d="M390.57,-261.98C390.57,-252.07 390.57,-241.02 390.57,-230.86"/>
|
||||
<polygon fill="black" stroke="black" points="394.07,-230.97 390.57,-220.97 387.07,-230.97 394.07,-230.97"/>
|
||||
</g>
|
||||
<!-- d78eaf31-cc9d-484d-b564-dbd5912378fa -->
|
||||
<g id="node8" class="node">
|
||||
<title>d78eaf31-cc9d-484d-b564-dbd5912378fa</title>
|
||||
<polygon fill="orange" stroke="black" points="683.43,-185.37 683.43,-205.19 671.21,-219.2 653.93,-219.2 641.72,-205.19 641.72,-185.37 653.93,-171.36 671.21,-171.36 683.43,-185.37"/>
|
||||
<text text-anchor="middle" x="662.57" y="-187.9" font-family="Times New Roman,serif" font-size="20.00">></text>
|
||||
</g>
|
||||
<!-- 34d1cf8a-42d6-49de-a458-0c7d3bffc436->d78eaf31-cc9d-484d-b564-dbd5912378fa -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>34d1cf8a-42d6-49de-a458-0c7d3bffc436->d78eaf31-cc9d-484d-b564-dbd5912378fa</title>
|
||||
<path fill="none" stroke="black" d="M409.7,-285.99C455.84,-269.62 573.65,-227.83 630.68,-207.59"/>
|
||||
<polygon fill="black" stroke="black" points="631.56,-211 639.81,-204.35 629.22,-204.4 631.56,-211"/>
|
||||
</g>
|
||||
<!-- 96622c49-e2f6-4de9-9284-0c5eabbdd741 -->
|
||||
<g id="node3" class="node">
|
||||
<title>96622c49-e2f6-4de9-9284-0c5eabbdd741</title>
|
||||
<ellipse fill="yellow" stroke="black" cx="59.57" cy="-104.11" rx="59.57" ry="22.1"/>
|
||||
<text text-anchor="middle" x="59.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">HasMap</text>
|
||||
</g>
|
||||
<!-- 33446211-2d5c-4e1d-bdb5-5ded443a713c->96622c49-e2f6-4de9-9284-0c5eabbdd741 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>33446211-2d5c-4e1d-bdb5-5ded443a713c->96622c49-e2f6-4de9-9284-0c5eabbdd741</title>
|
||||
<path fill="none" stroke="black" d="M177.41,-183.52C157.7,-170.41 123.74,-147.81 97.32,-130.23"/>
|
||||
<polygon fill="black" stroke="black" points="99.5,-127.47 89.23,-124.85 95.62,-133.3 99.5,-127.47"/>
|
||||
</g>
|
||||
<!-- dc007c72-0338-4616-bac2-bc39c81d2b77 -->
|
||||
<g id="node4" class="node">
|
||||
<title>dc007c72-0338-4616-bac2-bc39c81d2b77</title>
|
||||
<polygon fill="lawngreen" stroke="black" points="250.32,-122.11 136.82,-122.11 136.82,-86.11 250.32,-86.11 250.32,-122.11"/>
|
||||
<text text-anchor="middle" x="193.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">ExploreEnv</text>
|
||||
</g>
|
||||
<!-- 33446211-2d5c-4e1d-bdb5-5ded443a713c->dc007c72-0338-4616-bac2-bc39c81d2b77 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>33446211-2d5c-4e1d-bdb5-5ded443a713c->dc007c72-0338-4616-bac2-bc39c81d2b77</title>
|
||||
<path fill="none" stroke="black" d="M193.57,-163.34C193.57,-153.72 193.57,-143.17 193.57,-133.71"/>
|
||||
<polygon fill="black" stroke="black" points="197.07,-134 193.57,-124 190.07,-134 197.07,-134"/>
|
||||
</g>
|
||||
<!-- cf3e4033-88b1-41bb-a638-26cc06e7a3dd -->
|
||||
<g id="node6" class="node">
|
||||
<title>cf3e4033-88b1-41bb-a638-26cc06e7a3dd</title>
|
||||
<ellipse fill="yellow" stroke="black" cx="328.57" cy="-104.11" rx="60.63" ry="22.1"/>
|
||||
<text text-anchor="middle" x="328.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">Chatting</text>
|
||||
</g>
|
||||
<!-- 6fe9e522-557f-473a-a582-2f0d17d1a4f1->cf3e4033-88b1-41bb-a638-26cc06e7a3dd -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>6fe9e522-557f-473a-a582-2f0d17d1a4f1->cf3e4033-88b1-41bb-a638-26cc06e7a3dd</title>
|
||||
<path fill="none" stroke="black" d="M377.73,-175.8C369.56,-164.06 358.81,-148.6 349.44,-135.12"/>
|
||||
<polygon fill="black" stroke="black" points="352.37,-133.2 343.78,-126.99 346.62,-137.2 352.37,-133.2"/>
|
||||
</g>
|
||||
<!-- d2e8364e-dd83-4abb-8234-8466ff0c0483 -->
|
||||
<g id="node7" class="node">
|
||||
<title>d2e8364e-dd83-4abb-8234-8466ff0c0483</title>
|
||||
<polygon fill="lawngreen" stroke="black" points="500.2,-122.11 406.95,-122.11 406.95,-86.11 500.2,-86.11 500.2,-122.11"/>
|
||||
<text text-anchor="middle" x="453.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">DealChat</text>
|
||||
</g>
|
||||
<!-- 6fe9e522-557f-473a-a582-2f0d17d1a4f1->d2e8364e-dd83-4abb-8234-8466ff0c0483 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>6fe9e522-557f-473a-a582-2f0d17d1a4f1->d2e8364e-dd83-4abb-8234-8466ff0c0483</title>
|
||||
<path fill="none" stroke="black" d="M403.63,-175.8C412.65,-163.04 424.78,-145.86 434.83,-131.64"/>
|
||||
<polygon fill="black" stroke="black" points="437.61,-133.78 440.52,-123.59 431.89,-129.74 437.61,-133.78"/>
|
||||
</g>
|
||||
<!-- 85284b02-fc8e-4418-8d6b-7a154d2004f6 -->
|
||||
<g id="node9" class="node">
|
||||
<title>85284b02-fc8e-4418-8d6b-7a154d2004f6</title>
|
||||
<ellipse fill="yellow" stroke="black" cx="601.57" cy="-104.11" rx="82.91" ry="22.1"/>
|
||||
<text text-anchor="middle" x="601.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">HasSubTask</text>
|
||||
</g>
|
||||
<!-- d78eaf31-cc9d-484d-b564-dbd5912378fa->85284b02-fc8e-4418-8d6b-7a154d2004f6 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>d78eaf31-cc9d-484d-b564-dbd5912378fa->85284b02-fc8e-4418-8d6b-7a154d2004f6</title>
|
||||
<path fill="none" stroke="black" d="M649.93,-175.8C641.96,-164.15 631.47,-148.81 622.3,-135.4"/>
|
||||
<polygon fill="black" stroke="black" points="625.3,-133.59 616.76,-127.31 619.52,-137.54 625.3,-133.59"/>
|
||||
</g>
|
||||
<!-- eb1bba56-55b1-4a71-8b31-0381812f588a -->
|
||||
<g id="node10" class="node">
|
||||
<title>eb1bba56-55b1-4a71-8b31-0381812f588a</title>
|
||||
<polygon fill="orange" stroke="black" points="744.43,-94.2 744.43,-114.02 732.21,-128.03 714.93,-128.03 702.72,-114.02 702.72,-94.2 714.93,-80.19 732.21,-80.19 744.43,-94.2"/>
|
||||
<text text-anchor="middle" x="723.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">></text>
|
||||
</g>
|
||||
<!-- d78eaf31-cc9d-484d-b564-dbd5912378fa->eb1bba56-55b1-4a71-8b31-0381812f588a -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>d78eaf31-cc9d-484d-b564-dbd5912378fa->eb1bba56-55b1-4a71-8b31-0381812f588a</title>
|
||||
<path fill="none" stroke="black" d="M675.21,-175.8C683.66,-163.45 694.94,-146.97 704.47,-133.03"/>
|
||||
<polygon fill="black" stroke="black" points="707.13,-135.35 709.89,-125.12 701.35,-131.4 707.13,-135.35"/>
|
||||
</g>
|
||||
<!-- 3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8 -->
|
||||
<g id="node12" class="node">
|
||||
<title>3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8</title>
|
||||
<ellipse fill="yellow" stroke="black" cx="870.57" cy="-104.11" rx="107.83" ry="22.1"/>
|
||||
<text text-anchor="middle" x="870.57" y="-96.74" font-family="Times New Roman,serif" font-size="20.00">At(Robot,Table)</text>
|
||||
</g>
|
||||
<!-- d78eaf31-cc9d-484d-b564-dbd5912378fa->3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>d78eaf31-cc9d-484d-b564-dbd5912378fa->3d7f6aa9-62b5-4852-ab3e-ac0199cc46a8</title>
|
||||
<path fill="none" stroke="black" d="M683.66,-185.24C714.19,-172.15 771.78,-147.46 815,-128.93"/>
|
||||
<polygon fill="black" stroke="black" points="816.17,-132.24 823.99,-125.08 813.42,-125.81 816.17,-132.24"/>
|
||||
</g>
|
||||
<!-- 20b57b46-d59d-4b04-a4ed-eff12e6adc91 -->
|
||||
<g id="node11" class="node">
|
||||
<title>20b57b46-d59d-4b04-a4ed-eff12e6adc91</title>
|
||||
<ellipse fill="yellow" stroke="black" cx="723.57" cy="-22.1" rx="107.83" ry="22.1"/>
|
||||
<text text-anchor="middle" x="723.57" y="-14.72" font-family="Times New Roman,serif" font-size="20.00">At(Robot,Table)</text>
|
||||
</g>
|
||||
<!-- eb1bba56-55b1-4a71-8b31-0381812f588a->20b57b46-d59d-4b04-a4ed-eff12e6adc91 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>eb1bba56-55b1-4a71-8b31-0381812f588a->20b57b46-d59d-4b04-a4ed-eff12e6adc91</title>
|
||||
<path fill="none" stroke="black" d="M723.57,-79.97C723.57,-72.46 723.57,-63.99 723.57,-55.92"/>
|
||||
<polygon fill="black" stroke="black" points="727.07,-56.06 723.57,-46.06 720.07,-56.06 727.07,-56.06"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 11 KiB |
|
@ -1,220 +0,0 @@
|
|||
|
||||
|
||||
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))
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
|
||||
from EXP.exp_tools import collect_action_nodes,get_start,BTTest,goal_transfer_str,collect_cond_nodes
|
||||
import copy
|
||||
import random
|
||||
seed = 1
|
||||
random.seed(seed)
|
||||
|
||||
action_list = collect_action_nodes(random)
|
||||
# for act in action_list:
|
||||
# print(act.name,act.cost)
|
||||
|
||||
start_robowaiter = get_start()
|
||||
|
||||
# 计算state总数
|
||||
num = collect_cond_nodes()
|
||||
print("states num: ",num)
|
||||
|
||||
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)'}
|
||||
# goal_states = {'At(Robot,WaterTable)'}
|
||||
# goal_states = {'Is(Table1,Clean)'}
|
||||
|
||||
# todo: 行为树鲁棒性测试,随机生成规划问题
|
||||
# # 设置生成规划问题集的超参数:文字数、解深度、迭代次数
|
||||
|
||||
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)
|
|
@ -1,276 +0,0 @@
|
|||
|
||||
|
||||
|
||||
from utils.bt.load import load_behavior_tree_lib
|
||||
from OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm
|
||||
|
||||
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(random):
|
||||
multiple_num=2
|
||||
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(multiple_num):
|
||||
info = cls.get_info()
|
||||
action_list.append(Action(name=cls.get_ins_name() + str(num), **info))
|
||||
if cls.num_args == 1:
|
||||
for num in range(multiple_num):
|
||||
for arg in cls.valid_args:
|
||||
info = cls.get_info(arg)
|
||||
action_list.append(Action(name=cls.get_ins_name(arg) + str(num), **info))
|
||||
if cls.num_args > 1:
|
||||
for num in range(multiple_num):
|
||||
for args in cls.valid_args:
|
||||
info = cls.get_info(*args)
|
||||
action_list.append(Action(name=cls.get_ins_name(*args) + str(num),**info))
|
||||
|
||||
action_list = sorted(action_list, key=lambda x: x.name)
|
||||
for i in range(len(action_list)):
|
||||
cost = random.randint(1, 100)
|
||||
action_list[i].cost=cost
|
||||
return action_list
|
||||
|
||||
def collect_action_nodes_old(random):
|
||||
action_list = []
|
||||
behavior_dict = load_behavior_tree_lib()
|
||||
behavior_ls = list()
|
||||
# behavior_ls.sort()
|
||||
|
||||
behavior_ls = [cls for cls in behavior_ls]
|
||||
behavior_ls = sorted(behavior_ls, key=lambda x: x.__class__.__name__)
|
||||
|
||||
for cls in behavior_ls:
|
||||
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 collect_cond_nodes():
|
||||
action_list = []
|
||||
behavior_dict = load_behavior_tree_lib()
|
||||
num=0
|
||||
for cls in behavior_dict["cond"].values():
|
||||
if cls.can_be_expanded:
|
||||
print(f"可扩展条件:{cls.__name__}, 存在{len(cls.valid_args)}个有效论域组合")
|
||||
num+=len(cls.valid_args)
|
||||
return num
|
||||
|
||||
|
||||
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)
|
||||
|
||||
error=False
|
||||
|
||||
for count, goal_str in enumerate(goal_states):
|
||||
|
||||
goal = copy.deepcopy(goal_transfer_str(goal_str))
|
||||
print("count:", count, "goal:", goal)
|
||||
|
||||
|
||||
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==10:
|
||||
# algo.print_solution()
|
||||
# algo.print_solution() # 打印行为树
|
||||
|
||||
# 画出行为树
|
||||
# if count == 11:
|
||||
# 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)
|
||||
# if bt_algo_opt:
|
||||
# render_dot_tree(bt.root, target_directory="", name="expanded_bt_obt", png_only=False)
|
||||
# else:
|
||||
# render_dot_tree(bt.root, target_directory="", name="expanded_bt_xiaocai", 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))
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 343 KiB |
Before Width: | Height: | Size: 2.5 MiB |
|
@ -14,13 +14,113 @@ class Bahavior(ptree.behaviour.Behaviour):
|
|||
'''
|
||||
scene = None
|
||||
print_name_prefix = ""
|
||||
tables_for_placement = {'Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3','BrightTable6'}
|
||||
|
||||
# tables_for_guiding = {"QuietTable1","QuietTable2",
|
||||
# "BrightTable1","BrightTable2","BrightTable3","BrightTable4","BrightTable5","BrightTable6",
|
||||
# 'CoffeeTable','WaterTable','Table1', 'Table2', 'Table3'}
|
||||
tables_for_guiding = set()
|
||||
|
||||
tables_for_placement = {
|
||||
# 'Bar', 'Bar2', 'Table',
|
||||
# 'WaterStation', 'CoffeeStation', 'Table1', 'Table2', 'Table3','WindowTable6',
|
||||
# "QuietTable1", "QuietTable2",
|
||||
# "BrightTable1", "BrightTable2", "BrightTable3", "BrightTable4", "BrightTable5",
|
||||
'Bar', 'Bar2', 'WaterStation', 'CoffeeStation', 'Table1', 'Table2', 'Table3', 'WindowTable6', #'Table',
|
||||
'WindowTable4', 'WindowTable5',
|
||||
'QuietTable1', 'QuietTable2', 'QuietTable3', 'ReadingNook', 'Entrance', 'Exit', 'LoungeArea', 'HighSeats',
|
||||
'VIPLounge', 'MerchZone' #20
|
||||
|
||||
}
|
||||
|
||||
all_place = tables_for_guiding | tables_for_placement
|
||||
|
||||
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'}
|
||||
'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk', 'VacuumCup',
|
||||
'Chips', 'NFCJuice', 'Bernachon', 'ADMilk', 'SpringWater', #'Tea' #15
|
||||
|
||||
'Apple', 'Banana', 'Mangosteen', 'Orange',
|
||||
'Kettle', 'PaperCup', 'Bread', 'LunchBox',
|
||||
'Teacup', 'Chocolate', 'Sandwiches', 'Mugs',
|
||||
'Watermelon', 'Tomato', 'CleansingFoam','CocountMilk',
|
||||
'SugarlessGum', 'MedicalAdhensiveTape', 'SourMilkDrink', 'PaperCup',
|
||||
'Tissue', 'YogurtDrink', 'Newspaper', 'Box',
|
||||
'PaperCupStarbucks', 'CoffeeMachine', 'Straw', 'Cake',
|
||||
'Tray', 'Bread','Glass', 'Door',
|
||||
'Mug', 'Machine','PackagedCoffee', 'CubeSugar',
|
||||
'Apple', 'Spoon','Drinks', 'Drink',
|
||||
'Ice', 'Saucer','TrashBin', 'Knife','Cube'
|
||||
#45
|
||||
|
||||
|
||||
|
||||
# 'Coffee', 'Water', 'Dessert', 'Softdrink','Tea',
|
||||
# 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup',
|
||||
# 'Chips', 'NFCJuice', 'Bernachon', 'SpringWater',
|
||||
# 'Watermelon', 'Tomato', 'CleansingFoam', 'CocountMilk',
|
||||
# 'SugarlessGum', 'MedicalAdhensiveTape', 'SourMilkDrink', 'PaperCup',
|
||||
# 'Tissue', 'YogurtDrink', 'Newspaper', 'Box',
|
||||
# 'PaperCupStarbucks', 'CoffeeMachine', 'GingerLHand', 'GingerRHand',
|
||||
# 'Straw', 'Cake', 'Tray', 'Bread',
|
||||
# 'Glass', 'Door', 'Mug', 'Machine',
|
||||
# 'PackagedCoffee', 'CubeSugar', 'Apple', 'Spoon',
|
||||
# 'Drinks', 'Drink', 'Take-AwayCup', 'Saucer',
|
||||
# 'TrashBin', 'Knife', 'Ginger', 'Floor',
|
||||
# 'Roof', 'Wall'
|
||||
}
|
||||
|
||||
# tables_for_placement = {'Bar', 'WaterTable', 'CoffeeTable', 'Table1'}
|
||||
|
||||
# easy——easy
|
||||
# all_object = {
|
||||
# 'Coffee', 'Water', 'Dessert', 'Yogurt'}
|
||||
|
||||
|
||||
|
||||
# all_object = {
|
||||
# 'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup',
|
||||
# 'Chips', 'NFCJuice', 'Bernachon', 'SpringWater',
|
||||
#
|
||||
#
|
||||
# 'Watermelon', 'Tomato', 'CleansingFoam', 'CocountMilk',
|
||||
# 'SugarlessGum', 'MedicalAdhensiveTape', 'SourMilkDrink', 'PaperCup',
|
||||
# 'Tissue', 'YogurtDrink', 'Newspaper', 'Box',
|
||||
# 'PaperCupStarbucks', 'CoffeeMachine', 'GingerLHand', 'GingerRHand',
|
||||
# 'Straw', 'Cake', 'Tray', 'Bread',
|
||||
# 'Glass', 'Door', 'Mug', 'Machine',
|
||||
# 'PackagedCoffee', 'CubeSugar', 'Apple', 'Spoon',
|
||||
# 'Drinks', 'Drink', 'Take-AwayCup', 'Saucer',
|
||||
# 'TrashBin', 'Knife', 'Ginger', 'Floor',
|
||||
# 'Roof', 'Wall'
|
||||
# }
|
||||
|
||||
# all_object = {
|
||||
# 'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk','VacuumCup',
|
||||
# 'Chips', 'NFCJuice', 'Bernachon', 'SpringWater'}
|
||||
|
||||
# all_object.update({'CleansingFoam', 'CocountMilk', 'Tomato'})
|
||||
|
||||
# all_object.update({'Watermelon', 'Tomato', 'CleansingFoam', 'CocountMilk',
|
||||
# 'SugarlessGum', 'MedicalAdhensiveTape', 'SourMilkDrink', 'PaperCup',
|
||||
# 'TrashBin', 'Knife', 'Ginger', 'Floor',
|
||||
# 'Straw', 'Cake', 'Tray', 'Bread',
|
||||
# 'Roof', 'Wall'})
|
||||
|
||||
|
||||
|
||||
|
||||
# all_object.update({'Watermelon', 'Tomato', 'CleansingFoam', 'CocountMilk',
|
||||
# 'SugarlessGum', 'MedicalAdhensiveTape', 'SourMilkDrink', 'PaperCup',
|
||||
# 'Tissue', 'YogurtDrink', 'Newspaper', 'Box',
|
||||
# 'PaperCupStarbucks', 'CoffeeMachine', 'GingerLHand', 'GingerRHand',
|
||||
# 'Straw', 'Cake', 'Tray', 'Bread',
|
||||
# 'Glass', 'Door', 'Mug', 'Machine',
|
||||
# 'PackagedCoffee', 'CubeSugar', 'Apple', 'Spoon',
|
||||
# 'Drinks', 'Drink', 'Take-AwayCup', 'Saucer',
|
||||
# 'TrashBin', 'Knife', 'Ginger', 'Floor',
|
||||
# 'Roof', 'Wall'})
|
||||
|
||||
|
||||
# tables_for_guiding = set()
|
||||
|
||||
|
||||
# tables_for_placement = {'Bar', 'CoffeeTable', 'Table2',"BrightTable6", 'WaterTable'}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
import py_trees as ptree
|
||||
from typing import Any
|
||||
|
||||
|
||||
class Inverter(ptree.decorators.Inverter):
|
||||
print_name = "Inverter"
|
||||
ins_name = "Inverter"
|
||||
type = "Inverter"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
|
@ -25,16 +25,9 @@ class Clean(Act):
|
|||
@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)'}
|
||||
info["pre"]= {f'Holding(Nothing)',f'Not IsClean({arg})'}
|
||||
info["add"] = {f'IsClean({arg})'}
|
||||
info["del_set"] = {f'Not IsClean({arg})'}
|
||||
return info
|
||||
|
||||
def _update(self) -> ptree.common.Status:
|
||||
|
|
|
@ -25,9 +25,9 @@ class Make(Act):
|
|||
@classmethod
|
||||
def get_info(cls,arg):
|
||||
info = {}
|
||||
info["pre"]= {f'Holding(Nothing)'}
|
||||
info['del_set'] = set()
|
||||
info['add'] = {f'Exist({arg})'}
|
||||
info["pre"]= {f'Holding(Nothing)',f'Not Exists({arg})'}
|
||||
info['del_set'] = {f'Not Exists({arg})'}
|
||||
info['add'] = {f'Exists({arg})'}
|
||||
if arg == cls.valid_args[0]:
|
||||
info["add"] |= {f'On({arg},CoffeeTable)'}
|
||||
elif arg == cls.valid_args[1]:
|
||||
|
|
|
@ -5,7 +5,7 @@ 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')
|
||||
# valid_args.add('Customer')
|
||||
|
||||
def __init__(self, target_place):
|
||||
super().__init__(target_place)
|
||||
|
@ -17,12 +17,14 @@ class MoveTo(Act):
|
|||
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
|
||||
info['pre'] |= {f'Exists({arg})'}
|
||||
# info['pre'] |= {f'Not RobotNear({arg})'}
|
||||
|
||||
info["add"] = {f'RobotNear({arg})'}
|
||||
info["add"] |= {f'Not RobotNear({place})' for place in cls.valid_args if place != arg}
|
||||
|
||||
info["del_set"] = {f'RobotNear({place})' for place in cls.valid_args if place != arg}
|
||||
info["del_set"] |= {f'Not RobotNear({arg})'}
|
||||
|
||||
info['cost'] = 10
|
||||
return info
|
||||
|
|
|
@ -16,19 +16,18 @@ class PickUp(Act):
|
|||
@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["pre"] = {f'RobotNear({arg})','Holding(Nothing)'}
|
||||
|
||||
# info["pre"] = {f'RobotNear({arg})', 'Holding(Nothing)',f'Not Holding({arg})'}
|
||||
# info["pre"] |= {f'Not Holding({obj})' for obj in cls.all_object}
|
||||
|
||||
info["add"] = {f'Holding({arg})','Not Holding(Nothing)',f'Not Exists({arg})'}
|
||||
info["del_set"] = {f'Not Holding({arg})',f'Holding(Nothing)',f'Exists({arg})'}
|
||||
for place in cls.all_place:
|
||||
info["del_set"] |= {f'On({arg},{place})'}
|
||||
info["add"] |= {f'Not On({arg},{place})'}
|
||||
info['cost'] = 2
|
||||
|
||||
# if arg != 'Anything':
|
||||
# info['cost'] = 1
|
||||
# else:
|
||||
# info['cost'] = 0
|
||||
#
|
||||
# info["pre"] = {}
|
||||
|
||||
return info
|
||||
|
||||
|
|
|
@ -22,15 +22,18 @@ class PutDown(Act):
|
|||
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["pre"] = {f'Holding({arg[0]})',f'RobotNear({arg[1]})',f'Not Holding(Nothing)'}
|
||||
info["add"] = {f'Not Holding({arg[0]})',f'On({arg[0]},{arg[1]})'}
|
||||
info["add"] |= {f'Not On({arg[0]},{place})' for place in cls.tables_for_placement if place != arg[1]}
|
||||
|
||||
info["del_set"] = {f'Holding({arg[0]})',f'Not Holding(Nothing)'}
|
||||
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['del_set'] |= {f'Not Holding(Nothing)'}
|
||||
info['cost'] = 0
|
||||
|
||||
return info
|
||||
|
|
|
@ -49,27 +49,47 @@ class Turn(Act):
|
|||
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)'}
|
||||
if arg[0] == "TubeLight" or arg[0] == "HallLight" or arg[0] == 'AC':
|
||||
info["pre"] |= {f'Holding(Nothing)'}
|
||||
if arg[1] == "On":
|
||||
info["pre"] |= {f'Not Active({arg[0]})'}
|
||||
info["add"] = {f'Active({arg[0]})'}
|
||||
info["del_set"] = {f'Off({arg[0]})'}
|
||||
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)'}
|
||||
info["pre"] |= {f'Active({arg[0]})'}
|
||||
info["add"] = {f'Not Active({arg[0]})'}
|
||||
info["del_set"] = {f'Active({arg[0]})'}
|
||||
|
||||
# elif arg[0] == 'AC':
|
||||
# if arg[1] == "On":
|
||||
# info["pre"] |= {f'Not Active({arg[0]})'}
|
||||
# info["add"] = {f'Active({arg[0]})',f'Not Low({arg[0]})'}
|
||||
# info["del_set"] = {f'Off({arg[0]})',f'Low({arg[0]})'}
|
||||
# elif arg[1]=="Off":
|
||||
# info["pre"] |= {f'Active({arg[0]})'}
|
||||
# info["add"] = {f'Not Active({arg[0]})'}
|
||||
# info["del_set"] = {f'Active({arg[0]})',f'Not Low({arg[0]})',f'Low({arg[0]})'}
|
||||
|
||||
elif arg[0]=='ACTemperature':
|
||||
info["pre"] = {f'Holding(Nothing)',f'Is(AC,On)'}
|
||||
info["pre"] = {f'Holding(Nothing)',f'Active(AC)'}
|
||||
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)'}
|
||||
# info["pre"] |= {f'Low({arg[0]})'}
|
||||
info["add"] = {f'Not Low({arg[0]})'}
|
||||
info["del_set"] = {f'Low({arg[0]})'}
|
||||
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)'}
|
||||
# info["pre"] |= {f'Not Low({arg[0]})'}
|
||||
info["add"] = {f'Low({arg[0]})'}
|
||||
info["del_set"] = {f'Not Low({arg[0]})'}
|
||||
|
||||
elif arg[0]=='Curtain':
|
||||
if arg[1]=="On":
|
||||
info["pre"] |= {f'Closed({arg[0]})'}
|
||||
info["add"] = {f'Not Closed({arg[0]})'}
|
||||
info["del_set"] = {f'Closed({arg[0]})'}
|
||||
elif arg[1]=="Off":
|
||||
info["pre"] |= {f'Not Closed({arg[0]})'}
|
||||
info["add"] = {f'Closed({arg[0]})'}
|
||||
info["del_set"] = {f'Not Closed({arg[0]})'}
|
||||
return info
|
||||
|
||||
def _update(self) -> ptree.common.Status:
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
import py_trees as ptree
|
||||
from typing import Any
|
||||
from EXP.behavior_lib._base.Cond import Cond
|
||||
import itertools
|
||||
|
||||
class Active(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 1
|
||||
valid_args = {'AC','TubeLight','HallLight'}
|
||||
|
||||
|
||||
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
|
|
@ -0,0 +1,27 @@
|
|||
import py_trees as ptree
|
||||
from typing import Any
|
||||
from EXP.behavior_lib._base.Cond import Cond
|
||||
import itertools
|
||||
|
||||
class Closed(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 1
|
||||
valid_args = {'Curtain'}
|
||||
|
||||
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
|
|
@ -3,9 +3,9 @@ from typing import Any
|
|||
from EXP.behavior_lib._base.Cond import Cond
|
||||
import itertools
|
||||
|
||||
class Exist(Cond):
|
||||
class Exists(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 2
|
||||
num_params = 1
|
||||
valid_args = tuple(Cond.all_object)
|
||||
|
||||
def __init__(self,*args):
|
|
@ -4,8 +4,8 @@ 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'})]
|
||||
num_params = 1
|
||||
valid_args = tuple(Cond.all_object|{'Nothing'})
|
||||
|
||||
def __init__(self,*args):
|
||||
super().__init__(*args)
|
||||
|
|
|
@ -4,10 +4,16 @@ from EXP.behavior_lib._base.Cond import Cond
|
|||
import itertools
|
||||
|
||||
class Is(Cond):
|
||||
can_be_expanded = True
|
||||
can_be_expanded = False
|
||||
num_params = 2
|
||||
valid_params1 = [('AC','TubeLight','HallLight','Curtain'),
|
||||
('On','Off')]
|
||||
|
||||
# Closed(Curtain)
|
||||
# Off(TubeLight,HallLight,AC)
|
||||
# Dirty(Table1,Floor,Chairs)
|
||||
# Down(ACTemperature)
|
||||
|
||||
valid_params2 = [('Table1','Floor','Chairs'),
|
||||
('Clean','Dirty')]
|
||||
valid_params3 = [('ACTemperature'),
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
import py_trees as ptree
|
||||
from typing import Any
|
||||
from EXP.behavior_lib._base.Cond import Cond
|
||||
import itertools
|
||||
|
||||
class IsClean(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 1
|
||||
valid_args = {'Table1','Floor','Chairs'}
|
||||
|
||||
|
||||
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
|
|
@ -3,13 +3,12 @@ from typing import Any
|
|||
from EXP.behavior_lib._base.Cond import Cond
|
||||
import itertools
|
||||
|
||||
class At(Cond):
|
||||
class Low(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 2
|
||||
num_params = 1
|
||||
valid_args = {'ACTemperature'}
|
||||
|
||||
|
||||
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)
|
||||
|
@ -17,7 +16,6 @@ class At(Cond):
|
|||
|
||||
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"]:
|
|
@ -5,7 +5,7 @@ from EXP.behavior_lib._base.Cond import Cond
|
|||
class On(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 2
|
||||
valid_params = [tuple(Cond.all_object),
|
||||
valid_args = [tuple(Cond.all_object),
|
||||
tuple(Cond.tables_for_placement)]
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
import py_trees as ptree
|
||||
from typing import Any
|
||||
from EXP.behavior_lib._base.Cond import Cond
|
||||
import itertools
|
||||
|
||||
class RobotNear(Cond):
|
||||
can_be_expanded = True
|
||||
num_params = 1
|
||||
|
||||
# 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)
|
||||
|
||||
valid_args = Cond.all_object | Cond.tables_for_placement | Cond.tables_for_guiding | {'Customer'}
|
||||
|
||||
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
|
|
@ -42,7 +42,7 @@ def MakeCoffeeCost():
|
|||
return goal,start,actions
|
||||
|
||||
|
||||
# llm_test
|
||||
# test
|
||||
def Test():
|
||||
actions=[
|
||||
Action(name='a1', pre={6}, add={0,2,4}, del_set={1,5}, cost=1),
|
||||
|
|
|
@ -4,7 +4,7 @@ root : tree+ EOF;
|
|||
|
||||
tree : internal_node '{' (action_sign|tree)* '}' ;
|
||||
internal_node : 'sequence' | 'selector' | 'parallel' Integer ;
|
||||
action_sign : ('act'|'cond') String '(' action_parm? ')';
|
||||
action_sign : ('act'|'cond') 'Not'? String '(' action_parm? ')';
|
||||
action_parm : (Integer|Float|boolean|String) (',' (Integer|Float|boolean|String))* ;
|
||||
// var_decls : var_type Names ;
|
||||
// var_type : 'int' | 'float' | 'bool' | 'string' ;
|
||||
|
|
|
@ -7,6 +7,7 @@ null
|
|||
'parallel'
|
||||
'act'
|
||||
'cond'
|
||||
'Not'
|
||||
'('
|
||||
')'
|
||||
','
|
||||
|
@ -32,6 +33,7 @@ null
|
|||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
String
|
||||
Integer
|
||||
Float
|
||||
|
@ -48,4 +50,4 @@ 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]
|
||||
[4, 1, 18, 68, 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, 3, 3, 39, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 44, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 52, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 59, 8, 4, 5, 4, 61, 8, 4, 10, 4, 12, 4, 64, 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, 12, 13, 75, 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, 51, 1, 0, 0, 0, 10, 65, 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, 15, 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, 38, 7, 0, 0, 0, 37, 39, 5, 8, 0, 0, 38, 37, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 40, 1, 0, 0, 0, 40, 41, 5, 14, 0, 0, 41, 43, 5, 9, 0, 0, 42, 44, 3, 8, 4, 0, 43, 42, 1, 0, 0, 0, 43, 44, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 46, 5, 10, 0, 0, 46, 7, 1, 0, 0, 0, 47, 52, 5, 15, 0, 0, 48, 52, 5, 16, 0, 0, 49, 52, 3, 10, 5, 0, 50, 52, 5, 14, 0, 0, 51, 47, 1, 0, 0, 0, 51, 48, 1, 0, 0, 0, 51, 49, 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 62, 1, 0, 0, 0, 53, 58, 5, 11, 0, 0, 54, 59, 5, 15, 0, 0, 55, 59, 5, 16, 0, 0, 56, 59, 3, 10, 5, 0, 57, 59, 5, 14, 0, 0, 58, 54, 1, 0, 0, 0, 58, 55, 1, 0, 0, 0, 58, 56, 1, 0, 0, 0, 58, 57, 1, 0, 0, 0, 59, 61, 1, 0, 0, 0, 60, 53, 1, 0, 0, 0, 61, 64, 1, 0, 0, 0, 62, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 9, 1, 0, 0, 0, 64, 62, 1, 0, 0, 0, 65, 66, 7, 1, 0, 0, 66, 11, 1, 0, 0, 0, 9, 15, 23, 25, 34, 38, 43, 51, 58, 62]
|
|
@ -10,11 +10,12 @@ T__8=9
|
|||
T__9=10
|
||||
T__10=11
|
||||
T__11=12
|
||||
String=13
|
||||
Integer=14
|
||||
Float=15
|
||||
LINE_COMMENT=16
|
||||
WS=17
|
||||
T__12=13
|
||||
String=14
|
||||
Integer=15
|
||||
Float=16
|
||||
LINE_COMMENT=17
|
||||
WS=18
|
||||
'{'=1
|
||||
'}'=2
|
||||
'sequence'=3
|
||||
|
@ -22,8 +23,9 @@ WS=17
|
|||
'parallel'=5
|
||||
'act'=6
|
||||
'cond'=7
|
||||
'('=8
|
||||
')'=9
|
||||
','=10
|
||||
'True'=11
|
||||
'False'=12
|
||||
'Not'=8
|
||||
'('=9
|
||||
')'=10
|
||||
','=11
|
||||
'True'=12
|
||||
'False'=13
|
||||
|
|
|
@ -174,7 +174,7 @@ def format_trans_to_bracket(file_path: str) -> str:
|
|||
file.write(formatted_output)
|
||||
return new_path
|
||||
|
||||
# format_trans_to_bracket('C:\\Users\\Estrella\\Desktop\\RoboWaiter\\robowaiter\\behavior_tree\\ptml\\llm_test\\Default.ptml')
|
||||
# format_trans_to_bracket('C:\\Users\\Estrella\\Desktop\\RoboWaiter\\robowaiter\\behavior_tree\\ptml\\test\\Default.ptml')
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 示例文本
|
||||
|
|
|
@ -10,61 +10,64 @@ else:
|
|||
|
||||
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,
|
||||
4,0,18,161,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
|
||||
13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,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,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,
|
||||
11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,5,13,101,
|
||||
8,13,10,13,12,13,104,9,13,1,14,3,14,107,8,14,1,14,1,14,5,14,111,
|
||||
8,14,10,14,12,14,114,9,14,1,14,3,14,117,8,14,1,15,4,15,120,8,15,
|
||||
11,15,12,15,121,1,15,1,15,5,15,126,8,15,10,15,12,15,129,9,15,1,15,
|
||||
1,15,4,15,133,8,15,11,15,12,15,134,3,15,137,8,15,1,16,1,16,1,16,
|
||||
1,16,5,16,143,8,16,10,16,12,16,146,9,16,1,16,3,16,149,8,16,1,16,
|
||||
1,16,1,16,1,16,1,17,4,17,156,8,17,11,17,12,17,157,1,17,1,17,1,144,
|
||||
0,18,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,35,18,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,171,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,0,35,1,0,0,0,1,37,1,0,0,0,3,39,1,0,0,
|
||||
0,5,41,1,0,0,0,7,50,1,0,0,0,9,59,1,0,0,0,11,68,1,0,0,0,13,72,1,0,
|
||||
0,0,15,77,1,0,0,0,17,81,1,0,0,0,19,83,1,0,0,0,21,85,1,0,0,0,23,87,
|
||||
1,0,0,0,25,92,1,0,0,0,27,98,1,0,0,0,29,116,1,0,0,0,31,136,1,0,0,
|
||||
0,33,138,1,0,0,0,35,155,1,0,0,0,37,38,5,123,0,0,38,2,1,0,0,0,39,
|
||||
40,5,125,0,0,40,4,1,0,0,0,41,42,5,115,0,0,42,43,5,101,0,0,43,44,
|
||||
5,113,0,0,44,45,5,117,0,0,45,46,5,101,0,0,46,47,5,110,0,0,47,48,
|
||||
5,99,0,0,48,49,5,101,0,0,49,6,1,0,0,0,50,51,5,115,0,0,51,52,5,101,
|
||||
0,0,52,53,5,108,0,0,53,54,5,101,0,0,54,55,5,99,0,0,55,56,5,116,0,
|
||||
0,56,57,5,111,0,0,57,58,5,114,0,0,58,8,1,0,0,0,59,60,5,112,0,0,60,
|
||||
61,5,97,0,0,61,62,5,114,0,0,62,63,5,97,0,0,63,64,5,108,0,0,64,65,
|
||||
5,108,0,0,65,66,5,101,0,0,66,67,5,108,0,0,67,10,1,0,0,0,68,69,5,
|
||||
97,0,0,69,70,5,99,0,0,70,71,5,116,0,0,71,12,1,0,0,0,72,73,5,99,0,
|
||||
0,73,74,5,111,0,0,74,75,5,110,0,0,75,76,5,100,0,0,76,14,1,0,0,0,
|
||||
77,78,5,78,0,0,78,79,5,111,0,0,79,80,5,116,0,0,80,16,1,0,0,0,81,
|
||||
82,5,40,0,0,82,18,1,0,0,0,83,84,5,41,0,0,84,20,1,0,0,0,85,86,5,44,
|
||||
0,0,86,22,1,0,0,0,87,88,5,84,0,0,88,89,5,114,0,0,89,90,5,117,0,0,
|
||||
90,91,5,101,0,0,91,24,1,0,0,0,92,93,5,70,0,0,93,94,5,97,0,0,94,95,
|
||||
5,108,0,0,95,96,5,115,0,0,96,97,5,101,0,0,97,26,1,0,0,0,98,102,7,
|
||||
0,0,0,99,101,7,1,0,0,100,99,1,0,0,0,101,104,1,0,0,0,102,100,1,0,
|
||||
0,0,102,103,1,0,0,0,103,28,1,0,0,0,104,102,1,0,0,0,105,107,5,45,
|
||||
0,0,106,105,1,0,0,0,106,107,1,0,0,0,107,108,1,0,0,0,108,112,7,2,
|
||||
0,0,109,111,7,3,0,0,110,109,1,0,0,0,111,114,1,0,0,0,112,110,1,0,
|
||||
0,0,112,113,1,0,0,0,113,117,1,0,0,0,114,112,1,0,0,0,115,117,5,48,
|
||||
0,0,116,106,1,0,0,0,116,115,1,0,0,0,117,30,1,0,0,0,118,120,7,3,0,
|
||||
0,119,118,1,0,0,0,120,121,1,0,0,0,121,119,1,0,0,0,121,122,1,0,0,
|
||||
0,122,123,1,0,0,0,123,127,5,46,0,0,124,126,7,3,0,0,125,124,1,0,0,
|
||||
0,126,129,1,0,0,0,127,125,1,0,0,0,127,128,1,0,0,0,128,137,1,0,0,
|
||||
0,129,127,1,0,0,0,130,132,5,46,0,0,131,133,7,3,0,0,132,131,1,0,0,
|
||||
0,133,134,1,0,0,0,134,132,1,0,0,0,134,135,1,0,0,0,135,137,1,0,0,
|
||||
0,136,119,1,0,0,0,136,130,1,0,0,0,137,32,1,0,0,0,138,139,5,47,0,
|
||||
0,139,140,5,47,0,0,140,144,1,0,0,0,141,143,9,0,0,0,142,141,1,0,0,
|
||||
0,143,146,1,0,0,0,144,145,1,0,0,0,144,142,1,0,0,0,145,148,1,0,0,
|
||||
0,146,144,1,0,0,0,147,149,5,13,0,0,148,147,1,0,0,0,148,149,1,0,0,
|
||||
0,149,150,1,0,0,0,150,151,5,10,0,0,151,152,1,0,0,0,152,153,6,16,
|
||||
0,0,153,34,1,0,0,0,154,156,7,4,0,0,155,154,1,0,0,0,156,157,1,0,0,
|
||||
0,157,155,1,0,0,0,157,158,1,0,0,0,158,159,1,0,0,0,159,160,6,17,0,
|
||||
0,160,36,1,0,0,0,12,0,102,106,112,116,121,127,134,136,144,148,157,
|
||||
1,6,0,0
|
||||
]
|
||||
|
||||
class ptmlLexer(Lexer):
|
||||
|
@ -85,11 +88,12 @@ class ptmlLexer(Lexer):
|
|||
T__9 = 10
|
||||
T__10 = 11
|
||||
T__11 = 12
|
||||
String = 13
|
||||
Integer = 14
|
||||
Float = 15
|
||||
LINE_COMMENT = 16
|
||||
WS = 17
|
||||
T__12 = 13
|
||||
String = 14
|
||||
Integer = 15
|
||||
Float = 16
|
||||
LINE_COMMENT = 17
|
||||
WS = 18
|
||||
|
||||
channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]
|
||||
|
||||
|
@ -97,14 +101,14 @@ class ptmlLexer(Lexer):
|
|||
|
||||
literalNames = [ "<INVALID>",
|
||||
"'{'", "'}'", "'sequence'", "'selector'", "'parallel'", "'act'",
|
||||
"'cond'", "'('", "')'", "','", "'True'", "'False'" ]
|
||||
"'cond'", "'Not'", "'('", "')'", "','", "'True'", "'False'" ]
|
||||
|
||||
symbolicNames = [ "<INVALID>",
|
||||
"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" ]
|
||||
"T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "String",
|
||||
"Integer", "Float", "LINE_COMMENT", "WS" ]
|
||||
|
||||
grammarFileName = "ptml.g4"
|
||||
|
||||
|
|
|
@ -10,11 +10,12 @@ T__8=9
|
|||
T__9=10
|
||||
T__10=11
|
||||
T__11=12
|
||||
String=13
|
||||
Integer=14
|
||||
Float=15
|
||||
LINE_COMMENT=16
|
||||
WS=17
|
||||
T__12=13
|
||||
String=14
|
||||
Integer=15
|
||||
Float=16
|
||||
LINE_COMMENT=17
|
||||
WS=18
|
||||
'{'=1
|
||||
'}'=2
|
||||
'sequence'=3
|
||||
|
@ -22,8 +23,9 @@ WS=17
|
|||
'parallel'=5
|
||||
'act'=6
|
||||
'cond'=7
|
||||
'('=8
|
||||
')'=9
|
||||
','=10
|
||||
'True'=11
|
||||
'False'=12
|
||||
'Not'=8
|
||||
'('=9
|
||||
')'=10
|
||||
','=11
|
||||
'True'=12
|
||||
'False'=13
|
||||
|
|
|
@ -10,28 +10,29 @@ else:
|
|||
|
||||
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,
|
||||
4,1,18,68,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
|
||||
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,3,3,39,8,3,1,
|
||||
3,1,3,1,3,3,3,44,8,3,1,3,1,3,1,4,1,4,1,4,1,4,3,4,52,8,4,1,4,1,4,
|
||||
1,4,1,4,1,4,3,4,59,8,4,5,4,61,8,4,10,4,12,4,64,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,12,13,75,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,51,1,0,0,0,10,65,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,15,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,38,7,0,0,0,37,39,5,8,0,0,38,37,1,0,0,0,38,39,1,0,0,
|
||||
0,39,40,1,0,0,0,40,41,5,14,0,0,41,43,5,9,0,0,42,44,3,8,4,0,43,42,
|
||||
1,0,0,0,43,44,1,0,0,0,44,45,1,0,0,0,45,46,5,10,0,0,46,7,1,0,0,0,
|
||||
47,52,5,15,0,0,48,52,5,16,0,0,49,52,3,10,5,0,50,52,5,14,0,0,51,47,
|
||||
1,0,0,0,51,48,1,0,0,0,51,49,1,0,0,0,51,50,1,0,0,0,52,62,1,0,0,0,
|
||||
53,58,5,11,0,0,54,59,5,15,0,0,55,59,5,16,0,0,56,59,3,10,5,0,57,59,
|
||||
5,14,0,0,58,54,1,0,0,0,58,55,1,0,0,0,58,56,1,0,0,0,58,57,1,0,0,0,
|
||||
59,61,1,0,0,0,60,53,1,0,0,0,61,64,1,0,0,0,62,60,1,0,0,0,62,63,1,
|
||||
0,0,0,63,9,1,0,0,0,64,62,1,0,0,0,65,66,7,1,0,0,66,11,1,0,0,0,9,15,
|
||||
23,25,34,38,43,51,58,62
|
||||
]
|
||||
|
||||
class ptmlParser ( Parser ):
|
||||
|
@ -45,14 +46,14 @@ class ptmlParser ( Parser ):
|
|||
sharedContextCache = PredictionContextCache()
|
||||
|
||||
literalNames = [ "<INVALID>", "'{'", "'}'", "'sequence'", "'selector'",
|
||||
"'parallel'", "'act'", "'cond'", "'('", "')'", "','",
|
||||
"'True'", "'False'" ]
|
||||
"'parallel'", "'act'", "'cond'", "'Not'", "'('", "')'",
|
||||
"','", "'True'", "'False'" ]
|
||||
|
||||
symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
||||
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
||||
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
||||
"<INVALID>", "String", "Integer", "Float", "LINE_COMMENT",
|
||||
"WS" ]
|
||||
"<INVALID>", "<INVALID>", "String", "Integer", "Float",
|
||||
"LINE_COMMENT", "WS" ]
|
||||
|
||||
RULE_root = 0
|
||||
RULE_tree = 1
|
||||
|
@ -77,11 +78,12 @@ class ptmlParser ( Parser ):
|
|||
T__9=10
|
||||
T__10=11
|
||||
T__11=12
|
||||
String=13
|
||||
Integer=14
|
||||
Float=15
|
||||
LINE_COMMENT=16
|
||||
WS=17
|
||||
T__12=13
|
||||
String=14
|
||||
Integer=15
|
||||
Float=16
|
||||
LINE_COMMENT=17
|
||||
WS=18
|
||||
|
||||
def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
|
||||
super().__init__(input, output)
|
||||
|
@ -339,20 +341,28 @@ class ptmlParser ( Parser ):
|
|||
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
|
||||
if _la==8:
|
||||
self.state = 37
|
||||
self.match(ptmlParser.T__7)
|
||||
|
||||
|
||||
self.state = 40
|
||||
self.match(ptmlParser.String)
|
||||
self.state = 41
|
||||
self.match(ptmlParser.T__8)
|
||||
self.state = 43
|
||||
self._errHandler.sync(self)
|
||||
_la = self._input.LA(1)
|
||||
if (((_la) & ~0x3f) == 0 and ((1 << _la) & 126976) != 0):
|
||||
self.state = 42
|
||||
self.action_parm()
|
||||
|
||||
|
||||
self.state = 42
|
||||
self.match(ptmlParser.T__8)
|
||||
self.state = 45
|
||||
self.match(ptmlParser.T__9)
|
||||
except RecognitionException as re:
|
||||
localctx.exception = re
|
||||
self._errHandler.reportError(self, re)
|
||||
|
@ -415,57 +425,57 @@ class ptmlParser ( Parser ):
|
|||
self._la = 0 # Token type
|
||||
try:
|
||||
self.enterOuterAlt(localctx, 1)
|
||||
self.state = 48
|
||||
self.state = 51
|
||||
self._errHandler.sync(self)
|
||||
token = self._input.LA(1)
|
||||
if token in [14]:
|
||||
self.state = 44
|
||||
if token in [15]:
|
||||
self.state = 47
|
||||
self.match(ptmlParser.Integer)
|
||||
pass
|
||||
elif token in [15]:
|
||||
self.state = 45
|
||||
elif token in [16]:
|
||||
self.state = 48
|
||||
self.match(ptmlParser.Float)
|
||||
pass
|
||||
elif token in [11, 12]:
|
||||
self.state = 46
|
||||
elif token in [12, 13]:
|
||||
self.state = 49
|
||||
self.boolean()
|
||||
pass
|
||||
elif token in [13]:
|
||||
self.state = 47
|
||||
elif token in [14]:
|
||||
self.state = 50
|
||||
self.match(ptmlParser.String)
|
||||
pass
|
||||
else:
|
||||
raise NoViableAltException(self)
|
||||
|
||||
self.state = 59
|
||||
self.state = 62
|
||||
self._errHandler.sync(self)
|
||||
_la = self._input.LA(1)
|
||||
while _la==10:
|
||||
self.state = 50
|
||||
self.match(ptmlParser.T__9)
|
||||
self.state = 55
|
||||
while _la==11:
|
||||
self.state = 53
|
||||
self.match(ptmlParser.T__10)
|
||||
self.state = 58
|
||||
self._errHandler.sync(self)
|
||||
token = self._input.LA(1)
|
||||
if token in [14]:
|
||||
self.state = 51
|
||||
if token in [15]:
|
||||
self.state = 54
|
||||
self.match(ptmlParser.Integer)
|
||||
pass
|
||||
elif token in [15]:
|
||||
self.state = 52
|
||||
elif token in [16]:
|
||||
self.state = 55
|
||||
self.match(ptmlParser.Float)
|
||||
pass
|
||||
elif token in [11, 12]:
|
||||
self.state = 53
|
||||
elif token in [12, 13]:
|
||||
self.state = 56
|
||||
self.boolean()
|
||||
pass
|
||||
elif token in [13]:
|
||||
self.state = 54
|
||||
elif token in [14]:
|
||||
self.state = 57
|
||||
self.match(ptmlParser.String)
|
||||
pass
|
||||
else:
|
||||
raise NoViableAltException(self)
|
||||
|
||||
self.state = 61
|
||||
self.state = 64
|
||||
self._errHandler.sync(self)
|
||||
_la = self._input.LA(1)
|
||||
|
||||
|
@ -507,9 +517,9 @@ class ptmlParser ( Parser ):
|
|||
self._la = 0 # Token type
|
||||
try:
|
||||
self.enterOuterAlt(localctx, 1)
|
||||
self.state = 62
|
||||
self.state = 65
|
||||
_la = self._input.LA(1)
|
||||
if not(_la==11 or _la==12):
|
||||
if not(_la==12 or _la==13):
|
||||
self._errHandler.recoverInline(self)
|
||||
else:
|
||||
self._errHandler.reportMatch(self)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import shortuuid
|
||||
import py_trees as ptree
|
||||
from EXP.behavior_lib._base import Selector, Sequence
|
||||
from EXP.behavior_lib._base import Selector, Sequence, Inverter
|
||||
from antlr4 import *
|
||||
|
||||
if "." in __name__:
|
||||
|
@ -39,19 +39,19 @@ class ptmlTranslator(ptmlListener):
|
|||
def enterTree(self, ctx: ptmlParser.TreeContext):
|
||||
type = str(ctx.internal_node().children[0])
|
||||
|
||||
if type== "sequence":
|
||||
node = Sequence(name="Sequence", memory=False)
|
||||
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
|
||||
)
|
||||
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))
|
||||
raise TypeError("Unknown Composite Type: {}".format(type))
|
||||
|
||||
self.stack.append(node)
|
||||
|
||||
|
@ -79,7 +79,8 @@ class ptmlTranslator(ptmlListener):
|
|||
|
||||
# if have params
|
||||
args = []
|
||||
if len(ctx.children) > 4:
|
||||
# if str(ctx.children[0]) != 'not' and len(ctx.children) > 4:
|
||||
if ctx.action_parm():
|
||||
params = ctx.action_parm()
|
||||
for i in params.children:
|
||||
if isinstance(i, ptmlParser.BooleanContext):
|
||||
|
@ -95,8 +96,15 @@ class ptmlTranslator(ptmlListener):
|
|||
|
||||
node = eval(f"{name}({args})")
|
||||
node.set_scene(self.scene)
|
||||
# connect
|
||||
self.stack[-1].add_child(node)
|
||||
|
||||
# if have 'not' decorator
|
||||
if str(ctx.children[1]) == 'Not':
|
||||
upper_node = Inverter.Inverter(name="Inverter", child=node)
|
||||
# connect
|
||||
self.stack[-1].add_child(upper_node)
|
||||
else:
|
||||
# connect
|
||||
self.stack[-1].add_child(node)
|
||||
|
||||
# Exit a parse tree produced by ptmlParser#action_sign.
|
||||
def exitAction_sign(self, ctx: ptmlParser.Action_signContext):
|
||||
|
|
|
@ -10,7 +10,7 @@ if __name__ == '__main__':
|
|||
|
||||
# create robot
|
||||
project_path = "../../../"
|
||||
ptml_path = os.path.join(project_path, 'behavior_tree/ptml/llm_test/Default.ptml')
|
||||
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)
|
||||
|
@ -18,7 +18,7 @@ if __name__ == '__main__':
|
|||
# create task
|
||||
task = task_map[TASK_NAME](robot)
|
||||
|
||||
render_dot_tree(robot.bt.root,name="llm_test")
|
||||
render_dot_tree(robot.bt.root,name="test")
|
||||
# build and tick
|
||||
# scene.BT = ptree.trees.BehaviourTree(scene.BT)
|
||||
# todo: tick this bt
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
,depth,obj_num,cond_pred,act_pred,max_copy_times,literals_obj_count,state_avg,act_avg,btalgorithm,tree_size_avg,tree_size_std,ticks_avg,ticks_std,wm_cond_tick_avg,wm_cond_tick_std,cond_tick_avg,cond_tick_std,cost_avg,cost_std,step_avg,step_std,expand_num_avg,expand_num_std,for_num_avg,for_num_std,plan_time_avg,plan_time_std,plan_time_total
|
||||
0,10,10,10,20.0,0,99.994,145.714,105.285,OBTEA,17.778,32.407,27.203,37.734,45.373,98.589,23.846,25.936,44.649,40.882,1.404,0.898,6.576,10.753,6.48,10.8,0.00086,0.00168,1.72863
|
||||
1,10,10,10,20.0,0,99.994,145.714,105.285,Baseline,24.314,22.282,24.649,35.641,0.0,0.0,29.134,42.27,62.529,52.772,1.248,0.799,8.27,6.796,1.6,2.05,0.00047,0.00109,0.93536
|
|
|
@ -0,0 +1,3 @@
|
|||
,depth,obj_num,cond_pred,act_pred,max_copy_times,literals_obj_count,state_avg,act_avg,btalgorithm,tree_size_avg,tree_size_std,ticks_avg,ticks_std,wm_cond_tick_avg,wm_cond_tick_std,cond_tick_avg,cond_tick_std,cost_avg,cost_std,step_avg,step_std,expand_num_avg,expand_num_std,for_num_avg,for_num_std,plan_time_avg,plan_time_std,plan_time_total
|
||||
0,10,10,10,20.0,0,99.994,145.714,105.285,OBTEA,12.704,15.715,23.99,27.15,31.871,39.974,21.873,18.842,44.649,40.882,1.402,0.895,4.884,5.181,4.79,5.26,0.00059,0.00083,1.1785
|
||||
1,10,10,10,20.0,0,99.994,145.714,105.285,Baseline,24.314,22.282,24.649,35.641,0.0,0.0,29.134,42.27,62.529,52.772,1.248,0.799,8.27,6.796,1.6,2.05,0.00044,0.00105,0.88932
|
|
|
@ -0,0 +1,3 @@
|
|||
,depth,obj_num,cond_pred,act_pred,max_copy_times,literals_obj_count,state_avg,act_avg,btalgorithm,tree_size_avg,tree_size_std,ticks_avg,ticks_std,cond_tick_avg,cond_tick_std,wm_cond_tick_avg,wm_cond_tick_std,cost_avg,cost_std,step_avg,step_std,expand_num_avg,expand_num_std,for_num_avg,for_num_std,plan_time_avg,plan_time_std,plan_time_total
|
||||
0,10,100,50,10.0,0,4974.161,501.518,503.23,OBTEA,35.309,30.324,141.517,132.87,724.998,744.593,372.257,318.866,222.804,152.711,4.578,2.751,12.201,10.053,12.19,10.06,0.01364,0.01191,27.28502
|
||||
1,10,100,50,10.0,0,4974.161,501.518,503.23,Baseline,50.29,44.47,177.046,218.784,0.0,0.0,738.367,977.664,229.896,152.552,4.563,2.772,14.698,12.532,8.2,7.34,0.01169,0.01084,23.38555
|
|
|
@ -1,50 +0,0 @@
|
|||
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
|
|
@ -1,14 +1,14 @@
|
|||
|
||||
|
||||
from utils.bt.load import load_behavior_tree_lib
|
||||
from OptimalBTExpansionAlgorithm import Action,OptBTExpAlgorithm
|
||||
from OptimalBTExpansionAlgorithm_cond2act 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 OptimalBTExpansionAlgorithm_cond2act import Action,OptBTExpAlgorithm
|
||||
from BTExpansionAlgorithm import BTExpAlgorithm # 调用最优行为树扩展算法
|
||||
import time
|
||||
|
||||
|
|
|
@ -1,23 +1,29 @@
|
|||
|
||||
from EXP.exp_tools import collect_action_nodes,get_start,BTTest,goal_transfer_str
|
||||
from EXP.exp_tools import collect_action_nodes,get_start,BTTest,goal_transfer_str,collect_cond_nodes
|
||||
import copy
|
||||
import random
|
||||
seed = 1
|
||||
random.seed(seed)
|
||||
|
||||
action_list = collect_action_nodes(random)
|
||||
for act in action_list:
|
||||
print(act.name,act.cost)
|
||||
multiple_num=1
|
||||
action_list = collect_action_nodes(random,multiple_num)
|
||||
# for act in action_list:
|
||||
# print(act.name,act.cost)
|
||||
|
||||
start_robowaiter = get_start()
|
||||
|
||||
# 计算state总数
|
||||
state_num = collect_cond_nodes()
|
||||
print("states num: ",state_num)
|
||||
print("act num: ",len(action_list))
|
||||
|
||||
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_states = []
|
||||
# with open('easy.txt', 'r') as file:
|
||||
# # with open('easy_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):
|
||||
|
@ -25,18 +31,19 @@ print(goal_states)
|
|||
# goal_set_ls.append(goal)
|
||||
# print(goal_set_ls)
|
||||
|
||||
goal_states={"On_Dessert_Bar"}
|
||||
# goal_states={"On_MilkDrink_Bar2"}
|
||||
# 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)'}
|
||||
# goal_states = {'At(Robot,WaterTable)'}
|
||||
# goal_states = {'At(Robot,Bar)'}
|
||||
# goal_states = {'Is(Table1,Clean)'}
|
||||
# goal_states = {'On(Coffee,Bar)'}
|
||||
|
||||
# todo: 行为树鲁棒性测试,随机生成规划问题
|
||||
# # 设置生成规划问题集的超参数:文字数、解深度、迭代次数
|
||||
|
||||
BTTest(bt_algo_opt=True, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter)
|
||||
print("\n")
|
||||
# print("\n")
|
||||
# 对比
|
||||
BTTest(bt_algo_opt=False, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter)
|
|
@ -0,0 +1,97 @@
|
|||
|
||||
from EXP.exp_tools import collect_action_nodes,get_start,BTTest,goal_transfer_str,collect_cond_nodes,BTTest_easy_medium_hard
|
||||
import copy
|
||||
import random
|
||||
import re
|
||||
from dataset.data_process_check import format_check,word_correct,goal_transfer_ls_set
|
||||
import time
|
||||
|
||||
seed = 1
|
||||
random.seed(seed)
|
||||
|
||||
multiple_num= 0
|
||||
action_list = collect_action_nodes(random,multiple_num)
|
||||
# for act in action_list:
|
||||
# print(act.name,act.cost)
|
||||
|
||||
start_robowaiter = get_start()
|
||||
|
||||
# 计算state总数
|
||||
state_num, vaild_state_num= collect_cond_nodes()
|
||||
print("meta states num: ",state_num)
|
||||
print("states num: ",vaild_state_num)
|
||||
print("act num: ",len(action_list))
|
||||
|
||||
goal_states = []
|
||||
|
||||
easy_data_set_file = "../dataset/easy_instr_goal.txt"
|
||||
medium_data_set_file = "../dataset/medium_instr_goal.txt"
|
||||
hard_data_set_file = "../dataset/hard_instr_goal.txt"
|
||||
with open(easy_data_set_file, 'r', encoding="utf-8") as f:
|
||||
easy_data_set = f.read().strip()
|
||||
with open(medium_data_set_file, 'r', encoding="utf-8") as f:
|
||||
medium_data_set = f.read().strip()
|
||||
with open(hard_data_set_file, 'r', encoding="utf-8") as f:
|
||||
hard_data_set = f.read().strip()
|
||||
|
||||
|
||||
all_result=[]
|
||||
|
||||
dataset_ls = [easy_data_set,medium_data_set,hard_data_set]
|
||||
parm_difficule_ls = ['Easy','Medium','Hard']
|
||||
|
||||
# dataset_ls = [easy_data_set]
|
||||
# parm_difficule_ls = ['Easy']
|
||||
|
||||
for index,dataset in enumerate(dataset_ls):
|
||||
|
||||
sections = re.split(r'\n\s*\n', dataset)
|
||||
outputs_list = [[] for _ in range(len(sections))]
|
||||
|
||||
goal_set_ls=[]
|
||||
for i,s in enumerate(sections):
|
||||
x,y = s.strip().splitlines()
|
||||
x = x.strip()
|
||||
y = y.strip().replace("Goal: ","")
|
||||
# goal_set_ls.append(goal_transfer_ls_set(y))
|
||||
goal_set_ls.append(y)
|
||||
|
||||
|
||||
goal_states = goal_set_ls
|
||||
# goal_states={"On_Milk_WindowTable6"}
|
||||
# goal_states={"On_Chips_WindowTable6 & (On_Milk_WindowTable6 | On_Yogurt_WindowTable6 )"}
|
||||
# goal_states={"(~On_Coffee_Table1 | ~On_Dessert_Table2) & ~RobotNear_Bar2"}
|
||||
# goal_states={"(~On_Milk_Bar | ~On_Yogurt_Bar) & ~RobotNear_Bar"}
|
||||
|
||||
obt_result = BTTest_easy_medium_hard(bt_algo_opt=True, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter)
|
||||
# print("\n")
|
||||
# 对比
|
||||
baseline_result = BTTest_easy_medium_hard(bt_algo_opt=False, goal_states=goal_states,action_list=action_list,start_robowaiter=start_robowaiter)
|
||||
|
||||
param_ls=[parm_difficule_ls[index]]
|
||||
|
||||
a_result=[]
|
||||
a_result.extend(param_ls)
|
||||
a_result.append("OBTEA")
|
||||
a_result.extend(obt_result)
|
||||
all_result.append(a_result)
|
||||
|
||||
a_result=[]
|
||||
a_result.extend(param_ls)
|
||||
a_result.append("Baseline")
|
||||
a_result.extend(baseline_result)
|
||||
all_result.append(a_result)
|
||||
|
||||
import pandas as pd
|
||||
df = pd.DataFrame(all_result, columns=[
|
||||
'difficult',
|
||||
'btalgorithm',
|
||||
'tree_size_avg', 'tree_size_std',
|
||||
'ticks_avg', 'ticks_std',
|
||||
'cost_avg', 'cost_std',
|
||||
'plan_time_avg', 'plan_time_std', 'plan_time_total'])
|
||||
|
||||
time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()).replace("-","").replace(":","")
|
||||
csv_file_path = 'cage_bt_result_='+time_str+'.csv'
|
||||
df.to_csv(csv_file_path, index=True)
|
||||
print("CSV文件已生成:", csv_file_path)
|