坐标轴下降 vs 梯度下降

梯度下降与坐标下降优化方法

梯度下降法

在每次迭代更新时选择负梯度方向(最速下降的方向)进行一次更新.不断迭代直至到达我们的目标或者满意为止.

坐标下降法

当损失函数不可导,梯度下降不再有效,可以使用坐标轴下降法,坐标下降法属于一种非梯度优化的方法,它在每步迭代中沿一个坐标的方向进行搜索,通过循环使用不同的坐标方法来达到目标函数的局部极小值。求导时只对一个维度(坐标轴方向)进行求导,而固定其它维度,这样每次只优化一个分量.假设有m个特征个数,坐标轴下降法进参数更新的时候,先固定m-1个值,然后再求另外一个的局部最优解,从而避免损失函数不可导问题
左梯度下降,右坐标轴下降
在这里插入图片描述
相比梯度下降法而言,坐标下降法不需要计算目标函数的梯度,标在每步迭代中仅需求解一维搜索问题,所以对于某些复杂的问题计算较为简便标。但如果目标函数不平滑的话,坐标下降法可能会陷入非驻点。为了加速收敛,可以采用一个适当的坐标系,例如通过主成分分析获得一个坐标间尽可能不相互关联的新坐标系
平滑与非平滑的函数示例如下图:
在这里插入图片描述
图中红色十字标示的是起始点(-0.5, -1.0),此时f =3.25。现在我们固定x,将f
看成关于y的一元二次方程并求当f最小时y的值:
在这里插入图片描述
即,现在自变量的取值就更新成了(-0.5, -0.3), f = 0.8。
在这里插入图片描述
下一步,将新得到的y值固定,将f看成关于x的一元二次方程。

注意事项

关于坐标下降法,有几点需要注意的:
1.坐标下降的顺序是任意的。
2.坐标下降的关键在于一次一个地更新,所有的一起更新有可能会导致不收敛。
3.坐标上升法和坐标下降法的本质一样,只不过目标函数成为求极大值了。

原文链接:
坐标下降 vs 梯度下降

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、引言 局部路径规划是机器人航中最基本的问题之一。在实际机器人航中,由于存在环境的复杂性和不确定性,需实时应对环境变化产生的影响,因此需要一种高效、可靠的局部路径规划算法。本文将介绍一种基于梯度下降的DWA(Dynamic Window Approach)局部路径规划算法,并分析其计算过程。 二、DWA算法原理 DWA算法是一种基于速度采样的局部路径规划算法,其主要思想是通过对机器人可行速度范围内的速度进行采样,计算每种速度下机器人在未来某一时间段内的轨迹,并从中选择一个最优的轨迹作为机器人的下一步移动方向。 DWA算法中,机器人可行速度范围被称为动态窗口,其大小取决于机器人的运动能力和周围环境的不确定性。动态窗口的大小可以通过以下公式计算: $V_{max} = min\{V_{max}, V_{obs}, V_{goal}\}$ 其中,$V_{max}$为机器人可行速度范围的上限,$V_{obs}$为机器人在当前环境下可行的最大速度,$V_{goal}$为机器人到达目标点时的速度。 在DWA算法中,机器人的运动轨迹可以通过以下公式计算: $x(t+1) = x(t) + v(t)\cos(\theta(t))\Delta t$ $y(t+1) = y(t) + v(t)\sin(\theta(t))\Delta t$ $\theta(t+1) = \theta(t) + \omega(t)\Delta t$ 其中,$x(t)$和$y(t)$分别为机器人在$t$时刻的横、纵坐标,$\theta(t)$为机器人在$t$时刻的朝向角,$v(t)$为机器人在$t$时刻的速度,$\omega(t)$为机器人在$t$时刻的角速度,$\Delta t$为时间步长。 在DWA算法中,首先需要对机器人可行速度范围进行采样,得到一组速度值$v$和角速度值$\omega$,计算每种速度下机器人在未来某一时间段内的轨迹。具体而言,对于每种速度$v$和角速度$\omega$,可以通过上述公式计算机器人在未来一段时间内的轨迹,并计算机器人与障碍物之间的最短距离$d$。根据$d$和机器人期望到达的目标点之间的距离$d_{goal}$,可以计算出机器人在当前速度下的评价函数$cost(v, \omega)$: $cost(v, \omega) = \alpha d + \beta(d - d_{goal})^2 + \gamma\omega$ 其中,$\alpha$、$\beta$、$\gamma$为参数,用于调整不同因素对评价函数的影响程度。 最后,从所有采样得到的速度中选择一个评价函数最小的速度作为机器人的下一步移动方向。 三、DWA算法实现 DWA算法的实现主要包括以下步骤: 1.获取机器人的状态信息,包括位置、朝向角和速度等。 2.根据机器人当前状态和周围环境的信息,计算机器人可行速度范围$V_{max}$。 3.对机器人可行速度范围内的速度进行采样,得到一组速度值$v$和角速度值$\omega$。 4.对于每种速度$v$和角速度$\omega$,计算机器人在未来一段时间内的轨迹,并计算机器人与障碍物之间的最短距离$d$。 5.根据$d$和机器人期望到达的目标点之间的距离$d_{goal}$,计算出机器人在当前速度下的评价函数$cost(v, \omega)$。 6.从所有采样得到的速度中选择一个评价函数最小的速度作为机器人的下一步移动方向。 下面给出DWA算法的具体实现代码。 ```python import numpy as np class DWAPlanner: def __init__(self, robot_radius, max_speed, max_accel, max_ang_speed, max_ang_accel, dt, goal_tol): self.robot_radius = robot_radius self.max_speed = max_speed self.max_accel = max_accel self.max_ang_speed = max_ang_speed self.max_ang_accel = max_ang_accel self.dt = dt self.goal_tol = goal_tol def plan(self, state, goal, obstacles): x, y, theta, v, omega = state goal_x, goal_y = goal # Calculate dynamic window v_max = min(self.max_speed, self._obs_speed(obstacles), self._goal_speed((x, y), (goal_x, goal_y))) omega_max = self.max_ang_speed v_min = 0 omega_min = -self.max_ang_speed v_samples = np.arange(v_min, v_max+0.001, 0.1) omega_samples = np.arange(omega_min, omega_max+0.001, 0.1) best_v, best_omega = None, None min_cost = float('inf') for v in v_samples: for omega in omega_samples: traj = self._simulate(x, y, theta, v, omega) d, _ = self._min_dist(traj[:, :2], obstacles) cost = self._evaluate(v, omega, d, self._euclidean((x, y), (goal_x, goal_y))) if cost < min_cost: min_cost = cost best_v = v best_omega = omega return best_v, best_omega def _obs_speed(self, obstacles): if not obstacles: return self.max_speed else: obs_speeds = [] for obs in obstacles: obs_speeds.append(self._euclidean((0, 0), obs) - self.robot_radius) return min(min(obs_speeds), self.max_speed) def _goal_speed(self, current_pos, goal_pos): if self._euclidean(current_pos, goal_pos) < self.goal_tol: return 0 else: return self.max_speed def _simulate(self, x, y, theta, v, omega): traj = [] for i in range(10): x = x + v * np.cos(theta) * self.dt y = y + v * np.sin(theta) * self.dt theta = theta + omega * self.dt traj.append([x, y, theta, v, omega]) v = np.clip(v + self.max_accel * self.dt, 0, self.max_speed) omega = np.clip(omega + self.max_ang_accel * self.dt, -self.max_ang_speed, self.max_ang_speed) return np.array(traj) def _min_dist(self, traj, obstacles): min_d = float('inf') min_obstacle = None for obs in obstacles: d = self._euclidean(traj[-1], obs) - self.robot_radius if d < min_d: min_d = d min_obstacle = obs return min_d, min_obstacle def _evaluate(self, v, omega, d, d_goal): alpha = 0.5 beta = 0.3 gamma = 0.2 return alpha * d + beta * (d - d_goal)**2 + gamma * omega def _euclidean(self, p1, p2): return np.sqrt((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2) ``` 四、DWA算法分析 DWA算法具有以下优点: 1.采样速度快:DWA算法只需对机器人可行速度范围内的速度进行采样,可以在较短的时间内得到机器人的下一步移动方向。 2.适应性强:DWA算法通过动态窗口的方式考虑了机器人的运动能力和周围环境的不确定性,能够适应不同的环境和机器人。 3.易于实现:DWA算法的实现相对简单,只需实现速度采样、轨迹模拟和评价函数等基本模块即可。 但DWA算法也存在以下缺点: 1.局限性:DWA算法只考虑了机器人的运动能力和周围环境的不确定性,没有考虑机器人的动态特性和环境的动态变化,因此在某些复杂环境下可能表现不佳。 2.局部最优解:DWA算法只考虑了当前速度范围内的速度,因此可能陷入局部最优解,无得到全局最优解。 3.评价函数设计:DWA算法中的评价函数需要根据具体应用场景进行设计,因此需要进行一定的经验调整。 五、结论 本文介绍了一种基于梯度下降的DWA局部路径规划算法,并分析了其计算过程。DWA算法具有采样速度快、适应性强、易于实现等优点,但也存在局限性、局部最优解和评价函数设计等缺点。在实际机器人航中,需要根据具体应用场景选择合适的路径规划算法,并进行经验调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值