gpt4 book ai didi

python - 我如何构造这个 while 循环,以便它检查两个条件并在必要时终止它

转载 作者:行者123 更新时间:2023-12-01 00:20:43 24 4
gpt4 key购买 nike

我这里有这段代码

def step(self, joint_values):
"""
Step function which publishes actions and evaluates state/reward.

Args:
action: takes an action (Int) as input. Value from 0-6

Returns:
State after executed action, reward after executed action and done,
which is a bool, True or False depending on if episode is done.
"""
self.iterator += 1

self._coll = self.observation_callback_collision()
coll_force = self._coll.wrench.force.x

if coll_force >= 150 or coll_force <= -150:
self.reset_robot2.call()
self.reward_coll = -0.5
self.collided += 1
print("#############Collision##############")
rospy.sleep(1)

#print("ACTION", joint_values)
else:
i = 0
while i<=1000:
self.traj.header.stamp = rospy.Time.now()
action = JointTrajectoryPoint()
action.positions = joint_values
#print("W", action.positions)
action.time_from_start = rospy.Duration(0.7)
self.traj.points = []
self.traj.points.append(action)
#rospy.sleep(4.5)
self.action_pub.publish(self.traj)

i +=0.1

如果你在这里看到我想要实现的目标是,每当调用步骤函数时,它都会检查 if 条件(如果为真,则重置机器人,否则激活 while 循环)。问题是,当 RL 代理选择一个 Action “joint_values”时,当调用步骤函数时,if con仅检查一次,如果代理选择的 Action 不好,机器人就会发生碰撞。

我想要的是,当调用step函数时,while循环while i<= 1000终止于i += 1,每次也会检查碰撞,即coll_force> = 150 或 coll_force <= -150: 如果碰撞超出限制,它将停止发布操作 (self.action_pub.publish(self.traj)) 并重置机器人 (self.reset_robot2.call()) 。

我知道这有点令人困惑,但我想做的是这样的,

def step(self, joint_values):

self.iterator += 1

self._coll = self.observation_callback_collision()
coll_force = self._coll.wrench.force.x


while i<=1000:
if coll_force >= 150 or coll_force <= -150:
self.reset_robot2.call()
self.reward_coll = -0.5
self.collided += 1
print("#############Collision##############")
rospy.sleep(1)

else:
self.traj.header.stamp = rospy.Time.now()
action = JointTrajectoryPoint()
action.positions = joint_values
#print("W", action.positions)
action.time_from_start = rospy.Duration(0.7)
self.traj.points = []
self.traj.points.append(action)
self.action_pub.publish(self.traj)

i +=0.1

但是这里似乎不能正常工作

最佳答案

通常,当您想要检查循环中的多个条件时,可以使用累积标志来指示循环是否应终止。还有其他选项,例如 break 或将 i 设置为范围之外的值,但为了可读性,最好使用该标志:

is_running = True
while is_running:
# do stuff here, calculate coll_force
i += 0.1
is_running = is_running and (coll_force > -150 and coll_force < 150)
is_running = is_running and i <= 1000

通过这种方式,您可以使用任意多个条件,每个条件都可以与其他条件分开处理,并且您可以在一个明显的位置读取检查条件的代码,即在循环 block 的末尾。

关于python - 我如何构造这个 while 循环,以便它检查两个条件并在必要时终止它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com