//Description: 记录和规划有关的算法。后续逐步补充完整。如现有的路径规划算法,一般分为两大类:基于搜索的和基于采样的。基于搜索的比较入门的有DFS/BFS/Dijkstra/A*等,基于采样的比较入门的有RTT等。其它的规划算法有多智能体强化算法如Q-Learning、DQN、DPG、Actor-Critic、DDPG、PPO等。
//Create Date: 2023-02-28 20:40:39
//Author: channy
[toc]
路径规划算法,一般分为两大类:基于搜索的和基于采样的。
// 以二维地图为例,设起点st,终点end,障碍物函数block()。
struct Point {
int x, y;
};
DFS/BFS是OJ中常用的搜索算法。DFS可以看成是从可能的第1_1步走到可能的第n_1步,当第n+1_1步没有选择时,退回到第n步的另一种可能n_2,继续往前走直到达到目的。而BFS则是利用队列,把所有可能的第1步放入队列,再对队列里的每一个第1步(1_1, 1_2, …) 把所有可能的第2步放入队列,以此类推,直到达到目的。
bool DFS(Point &st) {
if (st == end) return true;
vector<Point> dir = {Point(-1, 0), Point(1, 0), Point(0, -1), Point(0, 1)};
for (int i = 0; i < 4; ++i) {
Point next = st + dir[i];
if (block(next)) continue;
bool res = DFS(next);
if (res) return true;
}
return false;
}
bool BFS(Point &st) {
if (st == end) return true;
queue<Point> qu;
qu.push(st);
while (!qu.empty()) {
Point cur = qu.front();
qu.pop();
if (cur == end) return true;
for (int i = 0; i < 4; ++i) {
Point next = cur + dir[i];
if (block(next)) continue;
qu.push(next);
}
}
return false;
}
在BFS的基础上,在下一步的选择时优先选择当前走过的路径中代价最短的。当每一步的代价都相同时,退化成BFS。
// Cost(st, end)从st到end的代价函数
struct Point {
int x, y;
int cost;
}
bool Dijkstra(Point &st) {
priority_queue<Point> qu;
while (!qu.empty()) {
Point cur = qu.front();
qu.pop();
if (cur == end) return true;
for (int i = 0; i < 4; ++i) {
Point next = cur + dir[i];
if (block(next)) continue;
next.cost = cur.cost + Cost(cur, cur + dir[i]);
qu.push(next);
}
}
return false;
}
在BFS的基础上,在下一步的选择时优先选择当前位置到目的位置最近的路径。
结合了Dijstra和最佳优先算法。f = g + h。其中g(st, cur)为起始位置到当前位置的代价,h(cur, end)为当前位置到目的位置的代价。
强化学习算法,即在某一状态下,依据某一策略选择动作和环境交互,得到下一步状态,再根据新状态计算收益,优化策略。
| 符号 | 含义 | 说明 | | :—: | :— | :— | | s | 状态 | state | | a | 动作 | action | | $\pi: s \rightarrow a$ | 策略函数 | $\pi(\theta)$, 在状态s下对动作a进行决策。 | | $Q(s,a)$ | 动作效用函数 | | | $R(s,a)$ | 回报函数 | reward | | $V(s)$ | 状态效用函数 | | | $\gamma$ | 折旧因子 | | | $\alpha$ | 学习率 | |
off-policy: 是指行为策略和目标策略不是同一个策略,即智能体可以通过离线学习自己或别人的策略,来指导自己的行为;
on-policy: 行为策略和目标策略是同一个策略。
目标策略(target policy):智能体要学习的策略
行为策略(behavior policy):智能体与环境交互的策略,即用于生成行为的策略
state-action模型。
总回报函数\(G(\tau) = \sum_{t=0}^{T} r(s_t, a_t, s_{t+1})\)
折扣回报函数\(G(\tau) = \sum_{t=0}^{T} \gamma_t r_{t+1}\)
在Q-Learning的基础上,使用神经网络预测逼近值函数$Q(s,a) = f(s,a,\theta)$。深度神经网络是监督学习,需要标签,标签Q值$R_{t+1} + \gamma max Q(S_{t+1}, a, \theta)$。采用经验回放D,提高数据利用率。
在Q-Learning的基础上,假设策略服从特殊分布如正态分布,使用神经网络预测策略函数$\pi: s \rightarrow a$,估计Q值,直接对价值函数求导。 \(\nabla_{\theta} J(\theta) = E_{\tau ~ \pi_{\theta}}[(\sum \nabla_{\theta} log {\pi_{\theta} (a|s)}) (\sum r(s,a))]\) on-policy。
使用actor和critic两个神经网络,其中actor输入状态,输出策略,用于选择动作;critic输入状态,计算每个动作的reward。 适用于连续状态,连续动作。
使用Important-sampling重要性采样技术,输出策略,即概率分布密度函数。
on-policy。
使用4个神经网络:actor、critic、targetActor、targetCritic。Actor直接输出动作。Critic估计Q函数。
每个智能体有自己的神经网络。
Transform-LSTM
输入层的维度由输入数据X决定,输出层的维度由输出数据Y决定。
隐藏层的层数、宽度都是NN中可设参数。
第一层的数据$l_{1j} = \sum_i w_{1ij} * x_i + b_1$为输入数据的线性组合。其中权重$w_{ijk}$和偏置bias用于拟合。
激活函数有:阶跃函数sgn(x) (<0 -> 0; >0 -> 1)、sigmoid函数($1/(1+e^{-x})$)、ReLU函数(<0 -> 0; >0 -> x)。非线性函数,线性组合+激活函数可以表示几乎所有的函数。
输出正规化$p_i = e^i/( \sum_j e^j)$,即softmax。 交叉商损失(Cross Entropy Error) loss函数$loss = \sum_i (y_i - y)^2$。 $\Delta \omega_i = \eta (y - y^{‘}) x_i$, 更新$\omega_i = \omega_i + \Delta \omega_i$其中$\eta$为学习速率。
BP神经网络是多层NN,激活函数为sigmoid函数。全局逼近。 RBF神经网络的作用函数是高斯基函数$h_j = exp(-{||x - c_j||}^2/(2b_j^2))$.局部逼近。