-

【后端开发】golang基础

+

【后端开发】Golang基础

@@ -336,7 +336,7 @@

如何编译并运行一个Go文件
-
【后端开发】golang基础
+
【后端开发】Golang基础
https://lihaibineric.github.io/2023/11/27/go-基础/
diff --git a/archives/2023/11/index.html b/archives/2023/11/index.html index af01b04..f9265b4 100644 --- a/archives/2023/11/index.html +++ b/archives/2023/11/index.html @@ -214,7 +214,7 @@ -
【后端开发】golang基础
+
【后端开发】Golang基础
diff --git a/archives/2023/index.html b/archives/2023/index.html index 8d281ce..6e3c95e 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -214,7 +214,7 @@ -
【后端开发】golang基础
+
【后端开发】Golang基础
diff --git a/archives/index.html b/archives/index.html index 0597905..0a25d98 100644 --- a/archives/index.html +++ b/archives/index.html @@ -214,7 +214,7 @@ -
【后端开发】golang基础
+
【后端开发】Golang基础
diff --git a/categories/index.html b/categories/index.html index 6756d56..f0c9908 100644 --- a/categories/index.html +++ b/categories/index.html @@ -275,22 +275,22 @@
- + 2 -
+
@@ -299,19 +299,19 @@ - - 【深度学习】PyTorch使用手册 + 【多智能体强化学习】基于自动分组的价值函数分解 - - 【自动驾驶】RSS Model for Autonomous Driving + 【多智能体强化学习】Pymarl环境配置 @@ -326,22 +326,22 @@
- + 2 -
+
@@ -350,19 +350,19 @@ - - 【多智能体强化学习】基于自动分组的价值函数分解 + 【深度学习】PyTorch使用手册 - - 【多智能体强化学习】Pymarl环境配置 + 【自动驾驶】RSS Model for Autonomous Driving @@ -401,10 +401,10 @@ - - 【后端开发】golang基础 + 【后端开发】Golang基础 diff --git "a/categories/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" "b/categories/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" index 4a391f6..118634e 100644 --- "a/categories/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" +++ "b/categories/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" @@ -214,7 +214,7 @@ -
【后端开发】golang基础
+
【后端开发】Golang基础
diff --git a/index.html b/index.html index 72044bd..b03068c 100644 --- a/index.html +++ b/index.html @@ -211,7 +211,7 @@

- 【后端开发】golang基础 + 【后端开发】Golang基础

@@ -318,10 +318,10 @@

diff --git a/local-search.xml b/local-search.xml index feb2ac9..cb67cf4 100644 --- a/local-search.xml +++ b/local-search.xml @@ -4,7 +4,7 @@ - 【后端开发】golang基础 + 【后端开发】Golang基础 /2023/11/27/go-%E5%9F%BA%E7%A1%80/ @@ -45,10 +45,10 @@ - 基础工具 - 后端开发 + 基础工具 + diff --git a/search.xml b/search.xml index eec7e8d..3a412d4 100644 --- a/search.xml +++ b/search.xml @@ -1,1069 +1,1069 @@ - 【自动驾驶】RSS Model for Autonomous Driving - /2023/10/21/RSS-Model/ + 【多智能体强化学习】基于自动分组的价值函数分解 + /2023/11/22/MARL_%E8%87%AA%E5%8A%A8%E5%88%86%E7%BB%84/ -

RSS Model for -Autonomous Driving

-

论文:《On -a Formal Model of Safe and Scalable Self-driving Cars》

-

Contribution:

+

Automatic Grouping for MARL

+

论文标题:

+

《Vast: Value function factorization with variable agent +sub-teams》

+

《Automatic Grouping for Efficient Cooperative Multi-Agent +Reinforcement Learning》

+

论文代码:https://github.com/zyfsjycc/GoMARL

+

价值函数分解

+

价值函数的提出是为了缓解在传统的中心化训练和去中心化执行中的Critic网络出现的难以训练的问题,同时传统的合作型多智能体强化学习的方法难以解决信用分配的问题,即如何确定某个智能体对于全局任务而言的贡献程度

+

主体研究框架:

+

\[ +Q_{tot} (τ,a)≈Ψ([Q_i (τ_i,a_i)]_{i=1}^N) +\]

+

目的就是学习到这样一个分解算子 \(Ψ\),能够将局部的价值函数 \(Q_i\) 拟合成全局的价值函数 \(Q_{tot}\),而这样的拟合过程学习到的分解算子\(Ψ\)应当满足以下的约束条件: \[ +\underset{\boldsymbol{a}}{\arg \max } Q_{\text {tot +}}(\boldsymbol{\tau}, \boldsymbol{a})=\left(\begin{array}{c} +\operatorname{argmax}_{a_1} Q_1\left(\tau_1, a_1\right) \\ +\vdots \\ +\operatorname{argmax}_{a_N} Q_N\left(\tau_N, a_N\right) +\end{array}\right) +\] +这个公式的本质是希望分解之后的局部和全局的最优动作能够最优一致,才能保证这样的算子分解方法是有效果的。

+
+ + +
+

可变子团队的价值函数分解

+

研究动机:

+
    +
  1. 大部分价值函数方法对少量智能体的任务效果好
  2. +
  3. VFF方法过于扁平,存在性能瓶颈,没有考虑群组之间的一个关系,比较朴素且直接
  4. +
  5. 忽略智能体之间关系导致智能体训练信息不足
  6. +
+

朴素的价值函数分解方法自动分组之后的价值函数分解方法

+

因此,为了能够缓解朴素的价值函数分解方法中的缺乏群组信息的缺陷,文中提出能够分组处理多智能体系统的工作VAST,能够动态处理群组划分的算子来给出基于分组的智能体价值函数方法。

+

主要贡献:

+
    +
  1. 基于 \(K ≤ N = |D|\) +的分解子团队值\(Q_{t,k}^G\),线性分解每个子团队成员$jG_{t,k}⊆D +$ 局部值\(Q_j\)
  2. +
  3. 提出了一种分解方式动态并随时间变化,同时保持VFF方法的去中心性执行的特点
  4. +
  5. 提供了元梯度方法来优化子团队分组策略
  6. +
+

实现方法:

+
子团队分组策略:
+

分组策略的本质是学习一个概率分布\(\mathcal{X}(k∣i,τ_(t,i),s_t +)\),概率分布的本质思想是能够通过每个智能体的状态以及历史数据信息给出智能体 +\(i\) 所在的组别 \(k\)

+
元梯度的更新方式:
+

\[ +𝑔=𝐴 ̂(𝑘,𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 ) ∇_𝜃 log⁡𝒳_{MetaGrad} (𝑘∣𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 ) +\]

    -
  • Safety (RSS model) Reasonable care, Responsibility, agile driving -policy
  • -
  • Semantic (Semantic language) :Defined Q function over the Semantic -space
  • -
  • PAC sensing model:Safety and Comfort of driving ;tied to the Q -function;
  • +
  • 参考借鉴了强化学习的策略梯度更新的方式
  • +
  • 在多智能体强化学习中利用强化学习的方法学习一个组别的分组器
-

1. Safety Concept

-

Functional versus nominal safety 功能安全与名义安全

-

Functional Safety,FuSa 是指电子电路中操作的完整性

-

名义安全是在假设HW和SW系统运行无差错(即在功能上是安全的)的情况下,AV是否正在做出安全的逻辑决策。

-

Sense,Plan,Act 感知 计划 行动

-

2. -现有的自动驾驶汽车的决策方案

+

\[ +𝐴 ̂(𝑘,𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 )=𝑄 ̂(𝑘,𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 )−𝑉 ̂(𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 ) +\]

+

\[ +𝑉 ̂(𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 )=∑_(𝑎_{𝑡,𝑖}∈𝒜_𝑖) 𝜋_𝑖 (𝑎_{𝑡,𝑖}∣𝜏_{𝑡,𝑖} ) 𝑄_𝑖 +(𝜏_{𝑡,𝑖},𝑎_{𝑡,𝑖} ) +\]

    -
  • Miles driven :基于统计的论点,同时需要较大的统计量数据
  • -
  • disengagements(脱离):被定义为人类安全驾驶人因为做出不安全的决定而不得不干预AV的运行,从而导致事故的情况。
  • -
  • simulation:建立虚拟世界模拟器,模拟器和显示世界的差距,无法建模全部的策略
  • -
  • scenario based testing -:枚举现实世界的驾驶场景,过度拟合和泛化的问题
  • -
  • proprietary approaches
  • +
  • 策略梯度更新的方式是基于优势函数的方法进行更新分组器
-

3. -RSS(Responsibility-Sensitive-Safety) Model for Multi-agent -Safety

-
    -
  • 目标:

    +
    + + +
    +

    这里还采用了不同的分组器方法加入实验的对比

    +
    算法思路
      -
    • 做不到绝对安全,需要有Reasonable的响应
    • -
    • 遵循RSS能做到乌托邦Utopia
    • -
    • 敏捷而非防御,不应当过于谨慎而影响其他驾驶
    • -
    • 法律解释的意义
    • -
  • -
  • 形式化的规则:

    -
      -
    1. Do not hit someone from behind.
    2. -
    3. Do not cut-in recklessly.
    4. -
    5. Right-of-way is given, not taken. -道路通行权是给予的而不是占用的
    6. -
    7. Be careful of areas with limited visibility -小心有限可视化的范围
    8. -
    9. If you can avoid an accident without causing another one, you must -do it.
    10. -
  • +
  • 将D 分成\(K= ⌈ηN⌉≤ N = +|D|\)个子团队\(G_{t,k}\) +其中比例\(η ∈ [ +1⁄N,1]\),所有的团队集合 \(G_t=⟨G_{t,1},…,G_{t,K} ⟩\)

  • +
  • 分组:\(G_{t,k}⊆D,G_{t,k}∩G_{t,k′}=∅ +;D=U_{k=1}^K  G_{t,k}\)

  • +
  • 组内联合动作:\(a_{t,k}^G=a{t,j} +_j∈G_{t,k}\)

  • +
  • 选择\(Ψ_{VDN}\)算子分解(满足IGM):

    +

    \[ +Q_{t,k}^G (τ_{t,k}^G,a_{t,k}^G )=Ψ_{VDN} (⋅)=∑_{j∈G_{t,k}} Q_j +(τ_{t,j},a_{t,j}) +\]

  • +
  • 最终的全局联合价值函数近似:

-
3.1 Single Land Road -单向道路的情况
+

\[ +Q_{tot} (τ_t,a_t )=Ψ(Q_{t,1}^G (τ_{t,1}^G,a_{t,1}^G ),…,Q_{t,K}^G +(τ_{t,K}^G,a_{t,K}^G )) +\] +可变子团队的伪代码

+
IGM条件保持
+

如果以群组为单位的价值函数分解的方式能够保证IGM条件: \[ +argmax_(𝑎_{𝑡,𝑘}^𝐺∈𝒜)⁡〖𝑄_{tot}(𝜏_𝑡,𝑎_𝑡)〗= +⟨argmax_(⟨𝐚_{𝐭,𝐤}^𝐆 ⟩_(𝐺_{𝑡,𝑘}∈𝒢_𝑡 ))⁡𝑄_{𝑡,𝑘}^𝐺 (𝜏_{𝑡,𝑘}^𝐺,𝑎_{𝑡,𝑘}^𝐺 +)⟩_(𝐺_{𝑡,𝑘}∈𝒢_𝑡) +\] 希望能够满足对于局部智能体到全局价值函数的IGM条件的保持 \[ +argmax_(𝑎_𝑡∈𝒜)⁡𝑄_{tot}(𝜏_𝑡,𝑎_𝑡 )= +⟨argmax_(𝑎_{𝑡,𝑖}∈𝒜_𝑖 )⁡𝑄_𝑖 (𝜏_{𝑡,𝑖},𝑎_{𝑡,𝑖})⟩_(𝑖∈𝒟) +\] 推导过程如下: \[ +\begin{aligned} +& Q_{t, k}^G\left(\tau_{t, k}^G, a_{t, k}^G\right)=\sum_{j \in G_{t, +k}} Q_j\left(\tau_{t, j}, a_{t, j}\right) ; \operatorname{argmax}_{a_t +\in G_{t, k}} Q_{t, k}^G\left(\tau_{t, k}^G, a_{t, +k}^G\right)=\left\langle\operatorname{argmax}_{a_{t, i} \in +\mathcal{A}_i} Q_i\left(\tau_{t, i}, a_{t, i}\right)\right\rangle_{i \in +G_{t, k}} \\ +& a_t \stackrel{\Psi}{=}\left\langle a_{t, k}^G\right\rangle_{G_{t, +k} \in \mathcal{G}_t} \stackrel{\Psi_{V D +N}}{=}\left\langle\left\langle\bar{a}_{t, i}\right\rangle_{i \in G_{t, +k}}\right\rangle_{G_{t, k} \in \mathcal{G}_t} +\stackrel{\mathcal{D}=G_{t, 1} \cup \cdots \cup G_{t, +K}}{=}\left\langle\bar{a}_{t, i}\right\rangle_{i \in \mathcal{D}} +\end{aligned} +\]

+

自适应分组的MARL

+

研究动机

    -
  • 不考虑前车倒退的情况,后车撞上前车那么后车负责,后车有责任和前车保持距离

  • -
  • \(c_r\)表示前车,\(c_f\)表示后车,\(\rho\)表示的是前车的反应时间,\(a_{max,break}\)表示的是前车的最大加速度,\(a_{max,accel}\)表示的是最多的加速制动,\(a_{min,break}\)表示的是后车的最小制动加速度来保证不会撞到前车

  • -
  • 同方向行驶的安全距离

    -

    给出最小的安全纵向距离: \[ -d_{min}=max\{v_r\rho+1/2a_{max,accel}\rho^2+((v_r+\rho -a_{max,accel})^2)/2a_{min,break}-v_f^2/2a_{max,break},0\} -\]

  • -
  • - - -
  • -
  • \(t_b\) dangerous time;\([t_b,t_b+\rho]\) 表示一定的反应时间 -在这个范围之内在给定的加速度范围之内 执行proper response

  • -
  • Proper Response -:表示我们允许执行的最大加速度的限制,并取最小值约束保证满足所有的约束

  • -
  • 安全纵向距离和Proper Response取决于参数:\(\rho,a_{max,sccel},a_{min,brake},a_{max,brake}\) -参数保证了对智能体行为的假设,选择适当的参数

  • -
  • Utopia is possible -如果所有智能体车辆都能够遵循合理的响应,那么能归纳证明可以规避事故的发生

  • +
  • 通过任务分配实现隐式分组的方法仅解决结构清晰的任务,并且需要领域知识或先验设置
  • +
  • VAST 研究子团队对价值分解的影响,但需要先验的组数,ROMA +的学习依赖于智能体观察的动态角色
-
3.2 A -Lane-Based Coordinate System 基于车道的坐标系
+

GoMARL算法的优势

    -
  • 车道中心是平面上一条平滑有向的曲线 \(r\) ,其中所有部分可以表示为 \(r^{(1)},...,r^{(k)}\) -即可以是线性的,也可以是弧形的

  • -
  • 构造 \(R->R^2\)的变换为 \(\phi\) -就是横纵坐标,从而来保证在逻辑上的前后车辆的关系

  • -
  • 具体的映射的方式可以表示为如下:

    -
    - - -
  • -
  • 横纵速度/加速度 -的计算就可以通过这样的坐标系定义之下得到的一阶/二阶的导数计算得到

  • +
  • 算法不依赖先验领域知识
  • +
  • 动态调整:在分组学习过程中根据智能体的表现逐步调整分组划分。利用群体信息来促进策略专业化和高效的团队合作
-
3.3 -Longitudinal Safe Distance and Proper Response 纵向约束
+

引入群组划分板块的分解方法

+

个体与群组关系假设

    -
  • 给出安全距离的定义:

    -
    - - -
    -

    安全距离定义的想法是,如果两辆车都能对违反安全距离的行为做出“适当”反应,那么就不会发生碰撞。如果其中一个没有“正确”反应,那么它就应对事故负责。

  • -
  • 那么我们需要知道危险发生的时间,定义这样一个时刻Dangerous -Longitudinal Situation and Danger Threshold

    -
    - - -
    -

    给定一个纵向的危险发生的时间段

  • -
  • longitudinal proper response 纵向的适当响应

    -

    blame time -责任时间表示的是这个时间能够将驾驶的责任从自动驾驶汽车转移到驾驶员身上,如果接管了那么后续的责任将由驾驶员负责,否则由汽车负责

    -
    - - -
    -

    给出了对于纵向单向行驶而言的速度和加速的要求,需要在危险到来之前做出合理的响应

  • +
  • 所有智能体集合:\(A={a_1,…,a_n }\)
  • +
  • 分组集合: \(G={g_1,…,g_m +},1≤m≤n\)
  • +
  • 每个\(g_i\)包含\(n_j +(1≤n_j≤n)\)个不同的智能体,有\(g_i={a_(j_1 ),…,a_(j_(n_j ) +)}\)且有\(g_j∩g_k=∅\)且有\(⋃_jg_j =A,j,k∈{1,2,…,m}\)
-
3.4 -Lateral Safe Distance and Proper Response 横向的约束
-
    -
  • 稳健侧向速度 \(\mu\):汽车总是存在横向的一个微小摆动: +

    自动分组实现方法

    +

    自动分组的基本逻辑是学习\(f_g:A↦G\),这样的算子的目标是能够学习到系数权重 \[ -\mu-lateral-v=(l_{out}-l)/(t_{out}-t) -\]

  • -
  • 横向安全距离:

    -
    - - -
    -

    对于双方而言都有一个加速度,同时有一个最小的制动加速度

    -
    - - -
  • -
  • 同样定义横向的危险时间和危险区间时间:

    -
    - - -
  • -
  • Lateral Proper response 给出横向的适当反应

    +Q_G^{tot} (s_t,u_t )=E_(s_{t+1:∞},u_{t+1:∞} ) [∑_(k=0)^∞ γ^k +r_{t+k}∣s_t,u_t;G] +\] 让总体的联合动作价值函数的值最大,分组的价值函数为: \[ +𝑄^{𝑔_𝑗}=𝑓(𝑄^{𝑗_1} (𝜏^{𝑗_1},𝑢^{𝑗_1}),⋯,𝑄^{𝑗_{𝑛_𝑗}} (𝜏^{𝑗_(𝑛_𝑗 +)},𝑢^{𝑗_{𝑛_𝑗}};𝑤_1^{𝑔_𝑗}) +\] 学习到的贡献程度为:\(𝑤_1^{𝑔_𝑗}\),训练的目标函数为: \[ +ℒ_𝑔 (𝜃_{w_1})=𝔼_((𝐳,𝐮,𝑟,𝐳′)∼ℬ∑_𝑖(∥𝑓_(w_1)^𝑖 (𝜏^𝑖 (𝑧^𝑖,𝑢^𝑖 );𝜃_(w_1)^𝑖 +)∥_{𝑙_1}) +\] +根据每次在分组中的贡献权重来依次调整智能体的分组,当贡献的权重过小的话,就认为智能体不属于分组中,进入下一轮的分组调整中。

    - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20231122223325635.png" +alt="自动分组的逻辑图" /> +
    -

    首先如果在适当的响应时间范围之内,那么只需要限制两车的加速度在一定的范围之内

    -

    如果超出了适当响应时间,那么对于两车的加速度限制需要更改

  • -
-
3.5 -Combining Longitudinal and Lateral Proper Responses -横向和纵向相结合
+

+

Agent Network的优化

    -
  • 对于横向和纵向结合的车道,定义危险时间和危险情况

    -
    - - -
  • -
  • 危险阈值时间定义为横向和纵向的危险阈值时间的最大值,同样定义了危险时间t

  • -
  • Basic Proper response to dangerous situations -对于危险情况的正确反应处理

    -
    - - -
    -

    对于危险的阈值速度进行分析,如果分别为纵向的阈值速度和横向的阈值速度,那么分别根据前面所述的Definition -4和Definition 8 进行速度的限制

    -

    横向纵向情况

    -

    上面的这张图可以说明问题,当横纵的任意一个方向到达危险的阈值情况,分别作出Proper -Response,那么就可以按照合理的方式来规避风险

  • -
  • Lemma5 Utopia is possible

    -

    Consider a multi-lane road where all lanes share the same geometry. -Suppose that at all times, all cars on the road comply with the basic -proper response as given in Definition 10. Then, there will be -no collisions

    -

    归纳证明说明如果在合适的范围之内作出合理的响应,那么能规避碰撞

  • -
-
3.6 -Compensating for improper behavior of others -他人的不正当行为
+
  • 智能体内嵌信息网络获取的群组相关信息\(e_i\)

  • +
  • Similarity-Diversity +objective:来自同一组的智能体的信息是相似的,来自不同群体的智能体信息之间保持多样性: +\[ +\begin{gathered} +\mathcal{L}_{S +D}\left(\theta_e\right)=\mathbb{E}_{\mathcal{B}}\left(\sum_{i \neq j} +I(i, j) \cdot \operatorname{cosine}\left(f_e\left(h^i ; \theta_e\right), +f_e\left(h^j ; \theta_e\right)\right)\right) \\ +\text { where } I(i, j)=\left\{\begin{array}{cc} +-1, & a^i, a^j \in g^k \\ +1, & a^i \in g^k, a^j \in g^l, k \neq l +\end{array}\right. +\end{gathered} +\] +很直观的理解,对于合作型的强化学习任务而言,我们希望能够在同一个任务域内强化策略的合作,而不同的任务域内的策略应当保持多样性,能够让多智能体系统探索更多的可能性,防止陷入局部最优的情况。

  • +
  • Agent Network特点

      -
    • 如果对方没做出合理反应,那么自己应当作出合适反应避免发生事故,同时不引起下一个事故

    • -
    • Naive Prediction:根据速度和加速度线性外推

    • -
    • Evasive -Manoeuvre:给出两个函数来尽量规避出现车祸,就是根据时间来给速度和加速度的变化规划

      -
      - - -
      -

      相当于给出两个函数来知道汽车应当在某个时间范围内到达什么样的位置是安全的,那么要达到这样的位置汽车要采取什么样的速度和加速度来实现

      -

      if you can avoid an accident without causing another -accident, you must do it

    • +
    • 多样化的策略,部分共享参数的策略去中心化
    • +
    • 超网络\(f_d\)将提取的智能体信息e集成到策略梯度中
    • +
  • +
  • 合理性表示: \[ +𝜕𝑄^{𝑡𝑜𝑡}/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 ) (𝜕𝑄^𝑎)/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 +) (𝜕𝑄^𝑎)/(𝜕𝑣_ℎ^𝑎 ) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ )=𝑓_𝑑 (𝑒^𝑎 )⋅(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 +) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ ) +\]

  • -
    Proper -Response with Extra Evasive Effort 制动规避的适当反应
    -
    - - -
    -
    3.7 -Multiple Geometry and Right-of-Way -Rules处理几何图形区域的车辆优先权问题
    +

    Agent Network优化方式

    +

    整体的训练框架

    +
    双层混合网络
      -
    • 如果有存在不同的几何形状的情形会导致响应的冲突

    • -
    • 定义横向的安全距离对于不同的几何路径对于相同的几何路径仍然成立

      +
    • 群体状态下的群体行动价值信息,将全局的状态分解成局部的状态信息用于训练,这部分的局部状态信息是基于群组划分之后的状态信息

    • +
    • \(s^{g_j}\) 是分组后\(e_t^i (a_i∈g_j +)\)按组别融合,建立分组器映射

      +

      \[ +f_{w_2}(s^g ):s^g→w_2^g +\]

    • +
    • 集中到策略梯度中,内嵌群组状态信息潜在促进组内合作: \[ +𝜕𝑄^{𝑡𝑜𝑡}/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 ) (𝜕𝑄^𝑎)/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 +) (𝜕𝑄^𝑎)/(𝜕𝑣_ℎ^𝑎 ) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ )=𝑓_𝑑 (𝑒^𝑎 )⋅(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 +) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ ) +\]

    • +
    • 按照全文的总共方法的总述可以得到全局分解目标: \[ +ℒ(𝜃)=ℒ_𝑇𝐷 (𝜃)+𝜆_𝑔 ℒ_𝑔 (𝜃_(w_1 ) )+𝜆_𝑆𝐷 ℒ_𝑆𝐷 (𝜃_𝑒 ) +\]

    • +
    - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20231122225354328.png" +alt="总体训练框架" /> +
    -

    向位置范围为[x_i,min, -x_i,max],按照不同的加速度行驶,且不能超过指定的加速度制动那么,则c_1和c_2之间的横向安全距离需要满足:两车之间横向距离的最小值应大于Definition7中定义的横向安全距离

    -
  • 那么如何作出适当的反应 Proper response,给出合适的速度约束

    +

    实验结果

    +

    在星际争霸的环境中的训练结果

    - -
    -

    在反应时间之内可以按照加速度范围内进行移动,但是当超过反应时间之后就要对侧向的速度进行制动

  • -
  • 定义不同几何路况的纵向的顺序

    -
      -
    • - - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20231122225759954.png" +alt="SMAC训练结果" /> +
      -

      如果在同一条路上那么直接有先后顺序

      -

      如果不在同一条路上,那么根据车辆距离两条道路的相交的位置来定

      -

      当存在纵向的安全距离才会用到这个定义,同时应当是明显的前后顺序

    • -
  • -
  • 纵向的安全距离(不同的几何路径)

    +

    消融实验

    - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20231122225941711.png" +alt="消融实验对比" /> +
    -
      -
    1. 如果c_i没有路径的优先级,那么将在路口汇入的位置执行加速到减速的过程停在路口
    2. -
    3. 如果c_1在c_2前面,c_1执行任意动作(最大刹车加速度的意思是保证这个动作的距离下限),c_2执行最大加速-最小减速过程。当两车速度都为0时,c_1仍然在c_2前面(即后车要刹得住,当前车停下时,纵向顺序关系依然能保持)
    4. -
    5. 如果没有优先级和前后关系,则考虑两车到达路口的时间范围,如果两者时间范围相交,则有碰撞风险,都需要刹车,反之就正常走。
    6. -
    -
    - - -
  • -
  • 纵向的安全响应(Proper response)

    +

    谷歌足球的训练结果

    - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20231122225826734.png" +alt="GRF的训练结果与可视化" /> +
    -
      -
    1. longitudinal proper response取决于Danger Threshold -Time前的situation:
    2. -
    3. 如果17.1满足,则优先车辆正常开,另外一个则需要在反应时间后刹车。
    4. -
    5. 如果17.2满足,则前面车辆正常开,候车需要在反应时间后刹车。
    6. -
    7. 如果17.3满足,两车都需要在横向和纵向上刹车(这里又提到了横向,是纵向已经不能完全规避碰撞风险,所以需要引入横向动作)。
    8. -
  • -
  • Traffic Lights

    -
      -
    1. 不能简单通过红绿灯的情况来将责任分配给不同的车辆,对于例外的路口的车辆
    2. -
    3. 绿灯的有优先权 但不是有优先权的就对于规则而言没有责任
    4. -
    5. The above discussion is a formalism of the common sense rule of -right of way is given, not taken.
    6. -
  • +]]>
    + + 强化学习 + + + 人工智能 + 深度学习 + 强化学习 + +
    + + 【基础工具】Git命令集 + /2023/10/23/git/ + +

    Git +是一个版本控制系统,是任何软件开发项目中的主要内容。通常有两个主要用途:代码备份和代码版本控制。使用Git可以逐步处理代码,在需要回滚到备份副本的过程中保存每一步的进度。

    +

    Git的安装与配置

    +

    Git的基本控制

    +

    初始化Git仓库

    +

    当完成上述的配置之后,就能开始初始化Git仓库,进入需要创建工作区的文件夹

    +
    cd workspace
    git init
    +

    创建一个名为 .git +的新子目录(该目录为隐藏的),其中包含所有必需的存储库文件(Git +存储库框架);注意区分工作区暂存区,在没有add之前我们都是在工作区

    +

    【Vscode】考虑Git graph插件来可视化git分支目录的全貌

    +

    添加文件和备注

    +
    git add . 
    git add <file>
    +

    执行上述命令之后将会将当前的file或者是工作区中的所有文件都上传到暂存区

    +
    git commit -m"【test】XXX更改信息提示"
    #如果多次提交想覆盖到同一个提交的备注上执行下面
    git commit --amend
    +

    上述的命令是将本次的提交添加描述,分布式协作的时候能看清

    +

    状态与日志

    +

    查看默认配置

    +
    git config --list
    +

    查看当前所在的分支位置信息

    +
    git status
    +

    查看当前分支下的更改日志

    +
    git log
    +

    推送与拉取

    +

    将本地暂存区中的更改内容推送到远端

    +
    git push
    git push -f #强行推出
    +

    将远端所在的分支内容拉到本地

    +
    git pull
    +

    更新所在分支的最新内容

    +
    git fetch --all 
    +

    复制分支

    +

    获取git连接git@ XXX.git之后执行:

    +
    git clone git@ XXX.git
    +

    如果觉得git的内容太大,可以选择内部的分支进行下载

    +
    git clone -b feature/xxx git@ XXX.git
    +

    feature/xxx为具体的分支内容

    +

    分支操作

    +

    查看分支

    +
    git branch -a #查看所有的分支
    git branch -r #查看远端的分支
    +

    切换不同的分支

    +
    git checkout [branch] #切换到分支
    +

    创建新的分支

    +
    git branch [branch] #创建新的分支
    +

    创建新的分支并切换到上面

    +
    git checkout -b [branch] #创建并切换新的分支
    +

    分支冲突

    +

    问题描述:如果当前修改的版本基于旧版,但是远端已经是新版origin/master,此时修改基于的内容和远端不同不能强行推

    +

    解决方法1:通过换基的方法解决,通过将当前的修改的旧版换到最新的基上

    +
    #先将文件提交到暂存区
    git add . #保存在暂存区
    git commit -m "XXX"
    #进行换基操作
    git rebase -i origin/master
    #再次提交
    git add .
    #继续换基
    git rebase --continue
    #换基成功后,只需要一次备注(覆盖)
    git commit --amend
    #最后退出
    git push
    git push -f #或者强行推出
    +

    解决方法2: 暴力覆盖

    +
    git fetch --all #获取远端的全部内容
    git reset --hard origin/master #强行将远端的内容覆盖到本地的文件中
    git commit --amend
    git push -f #强行推出

    +]]>
    + + 基础工具 + + + 后端开发 + +
    + + 【自动驾驶】RSS Model for Autonomous Driving + /2023/10/21/RSS-Model/ + +

    RSS Model for +Autonomous Driving

    +

    论文:《On +a Formal Model of Safe and Scalable Self-driving Cars》

    +

    Contribution:

    +
      +
    • Safety (RSS model) Reasonable care, Responsibility, agile driving +policy
    • +
    • Semantic (Semantic language) :Defined Q function over the Semantic +space
    • +
    • PAC sensing model:Safety and Comfort of driving ;tied to the Q +function;
    -
    3.8 Unstructured Road -非结构化的道路
    -
      -
    1. - - -
      -

      轨迹这个表示了根据时间而改变的位置状态,ts的定义就表示车辆第一次完全停止的时间

      -

      未来某部分时刻汽车的位置、某个时间车辆的角度

    2. -
    3. - - -
      -

      当两车的轨迹不满足以下条件时,则称会发生碰撞:

      -

      (1)对于两车均停止之前的任意时刻,两车之间距离均大于epsilon。

      -

      (2)在某车停车之前,两车之前距离均大于epsilon,且此时第二辆车的速度矢量指向第一辆车。即当前车停车,后车依然往前车方向开,后车需要与前车保持距离。

    4. -
    5. - - -
      -

      定义Constrains(C)下的轨迹T(C, -c),刹车/正常向前行驶的轨迹分别表示为T(Cb, c)和T(Cf,c).

    6. -
    7. - - -
      -
        -
      1. 其中一辆车的刹车轨迹和另一辆车的前进轨迹不相交,那么安全(注意保持先后关系对两辆车都适用)
      2. -
      3. 两辆车都刹车,轨迹没有相交
      4. -
    8. -
    9. 如果不满足安全的要求,那么应当选择Proper Response:

      +

      1. Safety Concept

      +

      Functional versus nominal safety 功能安全与名义安全

      +

      Functional Safety,FuSa 是指电子电路中操作的完整性

      +

      名义安全是在假设HW和SW系统运行无差错(即在功能上是安全的)的情况下,AV是否正在做出安全的逻辑决策。

      +

      Sense,Plan,Act 感知 计划 行动

      +

      2. +现有的自动驾驶汽车的决策方案

      +
        +
      • Miles driven :基于统计的论点,同时需要较大的统计量数据
      • +
      • disengagements(脱离):被定义为人类安全驾驶人因为做出不安全的决定而不得不干预AV的运行,从而导致事故的情况。
      • +
      • simulation:建立虚拟世界模拟器,模拟器和显示世界的差距,无法建模全部的策略
      • +
      • scenario based testing +:枚举现实世界的驾驶场景,过度拟合和泛化的问题
      • +
      • proprietary approaches
      • +
      +

      3. +RSS(Responsibility-Sensitive-Safety) Model for Multi-agent +Safety

      +
        +
      • 目标:

        +
          +
        • 做不到绝对安全,需要有Reasonable的响应
        • +
        • 遵循RSS能做到乌托邦Utopia
        • +
        • 敏捷而非防御,不应当过于谨慎而影响其他驾驶
        • +
        • 法律解释的意义
        • +
      • +
      • 形式化的规则:

          -
        1. 如果两辆车都停着,那么其中一辆车应当远离另一辆车选择用Definition -20的方法远离
        2. -
        3. 否则,如果根据safe -distance(1)的定义是安全的,一辆车执行刹车,另一辆车在停下来之前就要按照Cf的轨迹正常开,都停下来之后就回到了(1)
        4. -
        5. 同时选择刹车
        6. +
        7. Do not hit someone from behind.
        8. +
        9. Do not cut-in recklessly.
        10. +
        11. Right-of-way is given, not taken. +道路通行权是给予的而不是占用的
        12. +
        13. Be careful of areas with limited visibility +小心有限可视化的范围
        14. +
        15. If you can avoid an accident without causing another one, you must +do it.
      • -
    -
    3.9 Pedestrians 行人
    -
      -
    • 安全距离和合理反应;和汽车相比调整参数且增加非结构化的假设

    • -
    • 在斑马线或者是人行道上规定行人的行为,行人的合理活动范围是一个以他为圆心的圆

    • -
    • 遵循互不干扰否则有责任的准则,当汽车进入行人的可能出事的范围那么 -汽车有责,否则行人有责任

    -
    3.10 -Cautiousness with respect to Occlusion 遮挡问题
    +
    3.1 Single Land Road +单向道路的情况
      -
    • Exposure Time 曝光时间:第一次看到这个物体的时间

      -
      +
    • 不考虑前车倒退的情况,后车撞上前车那么后车负责,后车有责任和前车保持距离

    • +
    • \(c_r\)表示前车,\(c_f\)表示后车,\(\rho\)表示的是前车的反应时间,\(a_{max,break}\)表示的是前车的最大加速度,\(a_{max,accel}\)表示的是最多的加速制动,\(a_{min,break}\)表示的是后车的最小制动加速度来保证不会撞到前车

    • +
    • 同方向行驶的安全距离

      +

      给出最小的安全纵向距离: \[ +d_{min}=max\{v_r\rho+1/2a_{max,accel}\rho^2+((v_r+\rho +a_{max,accel})^2)/2a_{min,break}-v_f^2/2a_{max,break},0\} +\]

    • +
    • - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915172320331.png" +alt="Definition 1" /> +
    • -
    • 速度不合理导致的不合理情况

      -

      相当于速度的范围不在给定的合理的区间。 -上述提到的参数和地图上的每个汽车的位置、优先级规则和其他的场景结构等条件相关联

      -
        -
      1. 具有道路优先级的汽车的最大速度优先级较高

      2. -
      3. 速度的阈值范围根据具体的道路结构

      4. -
      +
    • \(t_b\) dangerous time;\([t_b,t_b+\rho]\) 表示一定的反应时间 +在这个范围之内在给定的加速度范围之内 执行proper response

    • +
    • Proper Response +:表示我们允许执行的最大加速度的限制,并取最小值约束保证满足所有的约束

    • +
    • 安全纵向距离和Proper Response取决于参数:\(\rho,a_{max,sccel},a_{min,brake},a_{max,brake}\) +参数保证了对智能体行为的假设,选择适当的参数

    • +
    • Utopia is possible +如果所有智能体车辆都能够遵循合理的响应,那么能归纳证明可以规避事故的发生

    • +
    +
    3.2 A +Lane-Based Coordinate System 基于车道的坐标系
    +
      +
    • 车道中心是平面上一条平滑有向的曲线 \(r\) ,其中所有部分可以表示为 \(r^{(1)},...,r^{(k)}\) +即可以是线性的,也可以是弧形的

    • +
    • 构造 \(R->R^2\)的变换为 \(\phi\) +就是横纵坐标,从而来保证在逻辑上的前后车辆的关系

    • +
    • 具体的映射的方式可以表示为如下:

      - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915172406204.png" +alt="道路映射的方式" /> +
    • +
    • 横纵速度/加速度 +的计算就可以通过这样的坐标系定义之下得到的一阶/二阶的导数计算得到

    -

    相当于对于遮挡问题需要对双方的车辆有速度限制才能保证危险的发生

    -
    3.11 -不当行为造成的不合理的情况
    +
    3.3 +Longitudinal Safe Distance and Proper Response 纵向约束
    +
      +
    • 给出安全距离的定义:

      - -
      -

      对于出现遮挡的参与者都要保持合理的行为才能规避事故

      -

      对于有遮挡的正确响应方法:规避不合理的情况,包括但不限于24-25的

      -
      3.12 Responsibility
      -
        -
      • 明确智能体责任
      • -
      • 发生碰撞那么有可能是其中一个智能体没有遵守适当的响应约束,那么需要对事故负责
      • -
      -
      3.13 Utopia
      -
        -
      • Lemma 5证明如果所有汽车都遵循基本的响应规则,那么不会发生碰撞
      • -
      • Lemma -6证明如果对于遮挡的问题都能做出合理的响应规则,那么就不会发生事故(反证法)
      • -
      -

      4. Driving Policy -(RL)

      -
        -
      • 驾驶策略的定义:驾驶策略是从感知状态到驾驶命令的映射

      • -
      • 构建高效的驾驶策略,拓展到百万级别的策略

      • -
      • 描述驾驶策略的语言:(利用强化学习的描述方法)

        -
          -
        1. \(s_t\)表示某一时刻的状态,\(\pi\)表示的是策略函数,\(a_t\)表示的是汽车能够选择的动作,根据策略函数来确定,得到一块序列 -\(<s_t,a_t>\)

        2. -
        3. \(P_{\pi}\)表示的是根据 \(\pi\) 选择产生的后面不同序列\(<s_t,a_t>\)的概率

        4. -
        5. \(E_{s~P_\pi}[\rho(s)]\) -用于衡量当前策略的好坏程度,相当于对当下这个策略可能产生的不同奖励值选择期望,同时 -\(\rho(s)\)表示的是当前状态下的奖励

        6. -
        7. 在实际的实现过程中,\(a_t\)表示的是本车与其他道路使用者的位置、速度和加速度等问题,\(s_{t+1}\)表示的是下一时刻的状态,同时取决于当前时刻的动作以及其他智能体的行为,奖励函数\(\rho(s)\) -取决于当前环境中的其他智能体的相对位置速度等信息。

        8. -
        9. 价值函数 \(Q\)表示的是当前智能体执行某一个动作所能造成的长期回报 -,由此来选择最好的策略函数来保证\(\pi(s)=argmax -Q(s,a)\)

        10. -
        11. \[ -Q(s, a)=\max _{(a_t, \ldots, a_{t+T})} \sum_{\tau=t}^T \rho(s_\tau, -a_\tau ) \quad { s.t. } \quad s_t=s, a_t=a, \forall \tau, -s_{\tau+1}=f(s_\tau, a_\tau) -\]

          -

          定义价值函数的计算方式,根据每个时刻汇总得到的奖励值进行求和得到的总的价值

        12. -
        13. 参数 \(T\) -表示的是“规划时间范围” 控制计算时间和评估质量之间的自然权衡,如果 \(T\)越大那么说明当前的动作评估效果越好

        14. -
      • -
      • 计算价值函数挑战:

        -
          -
        1. 如果将动作空间进行离散,那么需要较大的计算空间,依赖于巨大的计算能力
        2. -
        3. 采用离线计算,离散化动作域和状态域,然后采用离线的计算方式评估每个 -\((s,a)\) 的价值
        4. -
        5. 采用动态规划,计算每个 \((s,a)\)的价值函数值 \(Q(s,a)\) 仍然面临计算空间较大的问题
        6. -
        7. 利用有限类函数来近似价值函数,但是无法做出良好的近似,同时对于这样的神经网络比较难以学习
        8. -
        9. 当更新时间较小存在一定的信噪比,导致学习速度及其缓慢,逼近类方法固有的问题
        10. -
        11. 总结:资源计算量巨大的方法和 -粗糙近似逼近会带来不同程度的问题
        12. -
      • -
      • Semantics to the rescue重新定义自动驾驶语义

        -
          -
        • 在语义动作空间上定义价值函数Q:语义空间较小无语大量计算资源,能够对价值函数Q进行准确的估计

        • -
        • 语义动作空间:

          -
            -
          1. 主要思想:纵向目标;横向目标;实现目标的积极性程度

            -

            横向:Lateral goals are desired positions in lane coordinate system -(e.g., “my goal is to be in the center of lane number 2”).

            -

            纵向: Longitudinal goals are of three types. The first is relative -position and speed w.r.t. other vehicles (e.g., “my goal is to be behind -car number 3, at its same speed, and at a distance of 2 seconds from -it”).

            -

            速度目标:speed target (e.g., “drive at the allowed speed for this -road times 110%”).

            -

            速度限制:speed constraint at a certain position (e.g., when -approaching a junction, “speed of 0 at the stop line”, or when passing a -sharp curve, “speed of at most 60kmh at a certain position on the -curve”).速度曲线

          2. -
          3. 确定横向目标和纵向目标之间的组合,利用运动学公式来实现目标

          4. -
          5. 语义动作空间产生了所有可能的几何曲线的子集,除了特殊的情况

          6. -
        • -
      • -
      • Constructing an evaluation function for semantic -actions 构建语义动作的评估函数

        -
          -
        • 定义语义动作 \(A^s\)空间,通过当前的状态 \(s\),选择最好的动作 \(a^s\in A^s\), 根据一些列的几何轨迹 \((s_1,a_1),...,(s_T,a_T)\),同时认为新的下一时刻的状态有一个新的函数给出 -\(s_{t+1}=f(s_t,a_t)\) -同时继续根据奖励函数的值来评估执行的语义动作的好坏程度 \(\frac{1}{T} -\sum_{t=1}^T\rho(s_t,a_t)\)
        • -
        • 利用语义动作来评估能规避信噪比低等问题
        • -
        • 利用机器学习来泛化,在不同类型的道路上进行训练,推广到不同的道路
        • -
        • 语义动作空间:资源高效利用同时很准确地进行评估
        • -
      • -
      • The dynamics of the other agents -其他智能体的动态

        -
          -
        • \(s_{t+1}=f(s_t,a_t)\) -这样的确定性函数与现实不符合,多个智能体之间会相互影响
        • -
        • 通过高频次地重新应用决策,不断调整策略来适应新的环境
        • -
      • -
      -

      Sensing 传感

      -
      传感研究的内容:
      -

      静态对象:(a fence that occludes relevant part of a merging -road).;

      -

      动态对象:车辆(边界框、速度、加速度)、行人(边界框、速度、加速度)、交通灯、动态道路分隔线(例如建筑区域的锥体)、临时交通标志和警察活动以及道路上的其他障碍物。

      -
      Sensing system
      -
        -
      1. Let \(S\) denote the domain of -sensing state and let X be the domain of raw sensor and mapping data. A -传感系统表示的是一个函数 \(\hat{s}\) : -\(X → S.\)
      2. -
      3. 什么时候传感器的值 \(\hat{s}\) -能够和状态 \(s\) -近似?通过近似之后对驾驶策略的总体表现:安全性和舒适性
      4. -
      5. 传感器系统可能会犯的错误类型: -
          -
        • False negative: the sensing system misses an object -误报:传感器错过了一个物体
        • -
        • False positive: the sensing system indicates a “ghost” object -错误:传感器系统提示存在幽灵物体
        • -
        • Inaccurate measurements: the sensing system correctly detects an -object but incorrectly estimates its position or speed -测量不准确:传感系统正确检测到物体但是错误估计位置和速度
        • -
        • Inaccurate semantic: the sensing system correctly detects an object -but misinterpret its semantic meaning, for example, the color of a -traffic light -语义信息不准确:传感系统正确检测物体,但误解了语义信息,比如交通灯的颜色
        • -
      6. -
      -
      Comfort
      -
        -
      • 相当于利用传感器函数来近似估计 \(s\) ,如果 \(\pi(\hat{s}(x))=\pi(s)\) 也就是说\(\pi(\hat{s}(x))=argmaxQ(\hat{s}(x),a)\),那么就说明当前这个传感器是可以的,同时允许有一定的误差范围: -\(Q(\hat{s}(x),a)\ge -Q(s,\pi(s))-\epsilon\),这个时候可以说是 \(\epsilon --\)准确的,同时也允许传感器有小概率发生故障 \(\delta\)
      • -
      • For example, we can choose three thresholds, $$1 < $\(2 <\)$3 to represent mild, medium, and -gross mistakes,表示传感器的错误程度,轻中重
      • -
      -
      PAC sensing system
      -
        -
      1. - - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915172437378.png" +alt="Definition 2" /> +
        -

        Probably-Approximately-Correct (PAC) -X表示的是原始的数据与映射的数据域,从期望的角度给出误差率的平均值: -\[ -\mathbb{P}_{(x, s) \sim D}\left[Q(s, \pi(\hat{s}(x))) \geq Q(s, -\pi(s))-\epsilon_i\right] \geq 1-\delta_i -\]

      2. -
      3. 通过记录许多人类驾驶员的数据来构建此分布,而不是遵循自动驾驶车辆的特定策略(不切实际),由于任何合理策略对 -D -的影响都很小,通过应用简单的数据增强技术,我们可以构建适当的分布,然后在传感系统的每次重大更新后执行离线验证。

      4. -
      5. 重点关注经常发生的“测量不准确”类型的错误

      6. -
      7. let \(p(o)\)\(\hat{p}(o)\) be the positions of o in the -coordinate system of the host vehicle according to \(s(x)\), \(\hat{s}(x)\) -respectively.分别表示某个对象的真实的位置信息传感器的位置信息

        -

        目标到主车辆的距离为:\(\|p\|\) -,加性误差:\(\|p(o)-\hat{p}(o)\|\),相对误差为 \(\frac{\|p(o)-\hat{p}(o)\|}{\|p(o)\|}\)

      8. -
      9. 对于positions a set of objects \(O\)表示的是一堆对象,要求 \(p(o)\)\(\hat{p}(o)\)之间的相对误差小于一个精确度不妨计作 -$$ ,但是\(\epsilon-ego-accurate\) -的传感状态不能保证PAC传感系统能够满足每个合理的价值函数:当相对误差很小的时候,尽管认为合理了,但是对于实际的情况而言会出现不同的价值函数结果。选择制动or继续前进,横向不能用相对距离

      10. -
      11. 表明\(\epsilon-ego-accurate\) -并不能保证我们的传感系统是PAC。是否还有其他属性足以满足 PAC -传感系统的要求

        +

        安全距离定义的想法是,如果两辆车都能对违反安全距离的行为做出“适当”反应,那么就不会发生碰撞。如果其中一个没有“正确”反应,那么它就应对事故负责。

      12. +
      13. 那么我们需要知道危险发生的时间,定义这样一个时刻Dangerous +Longitudinal Situation and Danger Threshold

        - -
      14. -
      15. - - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20230915172501683-20231022115917321.png" +alt="真正的危险时间" /> +
        -

        给出价值函数合理的L-语义-\(Lipschitz\)条件

      16. -
      17. +

        给定一个纵向的危险发生的时间段

      18. +
      19. longitudinal proper response 纵向的适当响应

        +

        blame time +责任时间表示的是这个时间能够将驾驶的责任从自动驾驶汽车转移到驾驶员身上,如果接管了那么后续的责任将由驾驶员负责,否则由汽车负责

        +
        - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20230915172514045-20231022115917843.png" +alt="Definition 4" /> +
        -

        判定为PAC传感系统的终极判定

      20. -
      -
      Safety
      +

      给出了对于纵向单向行驶而言的速度和加速的要求,需要在危险到来之前做出合理的响应

    • +
    +
    3.4 +Lateral Safe Distance and Proper Response 横向的约束
      -
    • 目标是减少事故发生的概率,存在两类安全情况:

      -
        -
      1. 传感系统认为危险情况是不危险的;
      2. -
      3. 传感器系统认为不危险情况是危险的:当安全的时候突然出现紧急刹车会导致危险
      4. -
    • -
    • 解决的是如何确保和验证safety-critic sensing -mistake足够小,采用的方法是融合多个工程和技术都独立的子系统。多数子系统认为安全才算安全:

    • -
    • 单侧c-近似独立的多个子系统

      +
    • 稳健侧向速度 \(\mu\):汽车总是存在横向的一个微小摆动: +\[ +\mu-lateral-v=(l_{out}-l)/(t_{out}-t) +\]

    • +
    • 横向安全距离:

      - -
    • -
    • 对于服从单侧-c近似独立的子系统,能够推出:

      +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915172633796.png" +alt="Definition 6" /> + + +

      对于双方而言都有一个加速度,同时有一个最小的制动加速度

      - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915172648760.png" +alt="Lemma 4" /> + +
    • +
    • 同样定义横向的危险时间和危险区间时间:

      +
      + + +
    • +
    • Lateral Proper response 给出横向的适当反应

      +
      + +
      -

      基于多子系统方案和Corollary 3,为了达到10^-9 -失效率,对sensing系统的验证不再需要10^9 -小时的数据,而是分别对每个子系统验证10^5小时就可以了

    • -
    • 独立假设背后的合理性留给我们去推理。有些传感器对会产生完全不相关的误差;单侧-c近似独立是否成立

    • -
    • 对于安全幽灵而言,当出现至少有两个传感器认为的情况是危险的,才能认为是危险的

    • -
    • Building a scalable sensing -system可扩展的传感器系统

      -
        -
      1. Cameras
      2. -
      3. Road Experience Management (REM),不使用点云,而是一种基于语义的方法 -approach,利用大量的车端detects semantically meaningful objects in the -scene (lane marks, curbs, poles, traffic lights, -etc.),并可以对云端进行更新。以可扩展的方式非常频繁地更新地图。此外,自动驾驶车辆可以通过现有的通信平台(蜂窝网络)接收小型地图数据
      4. -
      5. A complementary radar and lidar -system,能够产生极高的精度;直接测量速度和距离,这进一步提高了乘坐的舒适度
      6. -
    • +

      首先如果在适当的响应时间范围之内,那么只需要限制两车的加速度在一定的范围之内

      +

      如果超出了适当响应时间,那么对于两车的加速度限制需要更改

    -]]>
    - - 深度学习 - - - 人工智能 - 智能安全 - -
    - - 【基础工具】Anaconda命令集 - /2023/10/22/conda_list/ - -

    Conda 常用命令

    -

    查看conda版本

    -
    conda --version/ conda -V
    -

    查看已有环境

    -
    conda info --envs
    conda env list
    conda info -e
    -

    进退环境

    -
    conda activate  [name]# 重新进入虚拟环境
    conda deactivate # 退出虚拟环境
    -

    创建新的环境

    -
    conda create -n *** python=0
    -

    删除环境

    -
    conda remove -n old_name --all # 删除环境old_name
    -

    激活环境

    -
    conda activate xxxx # 激活xxxx环境
    -

    关闭环境

    -
    conda deactivate # 关闭环境
    -

    克隆环境

    -
    conda create -n [new_name] --clone [old_name]
    -

    升级版本

    -
    conda update -n base conda #update最新版本的conda;
    conda update --all #更新所有包
    -

    Pip管理的常用包

    -
    pip search package_name 
    pip show package_name
    pip uninstall||package_name
    pip list
    -

    删除环境中的包

    -
    conda remove package #删除当前环境中的包
    conda remove -- name env_name package #删除指定环境中的包
    -

    指定环境中安装包

    -
    conda install --name env_name package_name 
    -

    Conda环境的python版本非指定

    -

    指定虚拟环境x的python版本是3.8,base环境是3.11;conda -activate激活x之后python版本仍为3.11。

    -

    原因:在base环境中修改了.zshrc文件中的python只定路径,让每次虚拟环境中的python找到的python都只能按照指定的python路径进行寻找,从而导致conda环境中的python版本不能制定。

    -

    修改方式:

    -
    vim .zshrc
    -

    进入 -.zshrc环境中进行修改,如果发现一类诸如其他python版本指定的路径的话,需要进行删除,只需要保留最原始的关于anaconda的命令初始化,完成之后输入

    -
    source ~/.zshrc
    -

    解决问题

    -

    镜像源安装

    -

    下载使用清华源加上: -i -https://pypi.tuna.tsinghua.edu.cn/simple

    -
    -

    清华:https://pypi.tuna.tsinghua.edu.cn/simple/

    -

    阿里云:http://mirrors.aliyun.com/pypi/simple/

    -

    中国科技大学 -:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

    -

    豆瓣:http://pypi.doubanio.com/simple/

    -
    -]]>
    - - 基础工具 - - - 基础工具 - -
    - - 【多智能体强化学习】基于自动分组的价值函数分解 - /2023/11/22/MARL_%E8%87%AA%E5%8A%A8%E5%88%86%E7%BB%84/ - -

    Automatic Grouping for MARL

    -

    论文标题:

    -

    《Vast: Value function factorization with variable agent -sub-teams》

    -

    《Automatic Grouping for Efficient Cooperative Multi-Agent -Reinforcement Learning》

    -

    论文代码:https://github.com/zyfsjycc/GoMARL

    -

    价值函数分解

    -

    价值函数的提出是为了缓解在传统的中心化训练和去中心化执行中的Critic网络出现的难以训练的问题,同时传统的合作型多智能体强化学习的方法难以解决信用分配的问题,即如何确定某个智能体对于全局任务而言的贡献程度

    -

    主体研究框架:

    -

    \[ -Q_{tot} (τ,a)≈Ψ([Q_i (τ_i,a_i)]_{i=1}^N) -\]

    -

    目的就是学习到这样一个分解算子 \(Ψ\),能够将局部的价值函数 \(Q_i\) 拟合成全局的价值函数 \(Q_{tot}\),而这样的拟合过程学习到的分解算子\(Ψ\)应当满足以下的约束条件: \[ -\underset{\boldsymbol{a}}{\arg \max } Q_{\text {tot -}}(\boldsymbol{\tau}, \boldsymbol{a})=\left(\begin{array}{c} -\operatorname{argmax}_{a_1} Q_1\left(\tau_1, a_1\right) \\ -\vdots \\ -\operatorname{argmax}_{a_N} Q_N\left(\tau_N, a_N\right) -\end{array}\right) -\] -这个公式的本质是希望分解之后的局部和全局的最优动作能够最优一致,才能保证这样的算子分解方法是有效果的。

    +
    3.5 +Combining Longitudinal and Lateral Proper Responses +横向和纵向相结合
    +
      +
    • 对于横向和纵向结合的车道,定义危险时间和危险情况

      - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915173150615.png" +alt="Defintion 9" /> + +
    • +
    • 危险阈值时间定义为横向和纵向的危险阈值时间的最大值,同样定义了危险时间t

    • +
    • Basic Proper response to dangerous situations +对于危险情况的正确反应处理

      +
      + +
      -

      可变子团队的价值函数分解

      -

      研究动机:

      -
        -
      1. 大部分价值函数方法对少量智能体的任务效果好
      2. -
      3. VFF方法过于扁平,存在性能瓶颈,没有考虑群组之间的一个关系,比较朴素且直接
      4. -
      5. 忽略智能体之间关系导致智能体训练信息不足
      6. -
      -

      朴素的价值函数分解方法自动分组之后的价值函数分解方法

      -

      因此,为了能够缓解朴素的价值函数分解方法中的缺乏群组信息的缺陷,文中提出能够分组处理多智能体系统的工作VAST,能够动态处理群组划分的算子来给出基于分组的智能体价值函数方法。

      -

      主要贡献:

      -
        -
      1. 基于 \(K ≤ N = |D|\) -的分解子团队值\(Q_{t,k}^G\),线性分解每个子团队成员$jG_{t,k}⊆D -$ 局部值\(Q_j\)
      2. -
      3. 提出了一种分解方式动态并随时间变化,同时保持VFF方法的去中心性执行的特点
      4. -
      5. 提供了元梯度方法来优化子团队分组策略
      6. -
      -

      实现方法:

      -
      子团队分组策略:
      -

      分组策略的本质是学习一个概率分布\(\mathcal{X}(k∣i,τ_(t,i),s_t -)\),概率分布的本质思想是能够通过每个智能体的状态以及历史数据信息给出智能体 -\(i\) 所在的组别 \(k\)

      -
      元梯度的更新方式:
      -

      \[ -𝑔=𝐴 ̂(𝑘,𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 ) ∇_𝜃 log⁡𝒳_{MetaGrad} (𝑘∣𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 ) -\]

      -
        -
      • 参考借鉴了强化学习的策略梯度更新的方式
      • -
      • 在多智能体强化学习中利用强化学习的方法学习一个组别的分组器
      • +

        对于危险的阈值速度进行分析,如果分别为纵向的阈值速度和横向的阈值速度,那么分别根据前面所述的Definition +4和Definition 8 进行速度的限制

        +

        横向纵向情况

        +

        上面的这张图可以说明问题,当横纵的任意一个方向到达危险的阈值情况,分别作出Proper +Response,那么就可以按照合理的方式来规避风险

        +
      • Lemma5 Utopia is possible

        +

        Consider a multi-lane road where all lanes share the same geometry. +Suppose that at all times, all cars on the road comply with the basic +proper response as given in Definition 10. Then, there will be +no collisions

        +

        归纳证明说明如果在合适的范围之内作出合理的响应,那么能规避碰撞

      -

      \[ -𝐴 ̂(𝑘,𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 )=𝑄 ̂(𝑘,𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 )−𝑉 ̂(𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 ) -\]

      -

      \[ -𝑉 ̂(𝑖,𝜏_{𝑡,𝑖},𝑠_𝑡 )=∑_(𝑎_{𝑡,𝑖}∈𝒜_𝑖) 𝜋_𝑖 (𝑎_{𝑡,𝑖}∣𝜏_{𝑡,𝑖} ) 𝑄_𝑖 -(𝜏_{𝑡,𝑖},𝑎_{𝑡,𝑖} ) -\]

      +
      3.6 +Compensating for improper behavior of others +他人的不正当行为
        -
      • 策略梯度更新的方式是基于优势函数的方法进行更新分组器
      • +
      • 如果对方没做出合理反应,那么自己应当作出合适反应避免发生事故,同时不引起下一个事故

      • +
      • Naive Prediction:根据速度和加速度线性外推

      • +
      • Evasive +Manoeuvre:给出两个函数来尽量规避出现车祸,就是根据时间来给速度和加速度的变化规划

        +
        + + +
        +

        相当于给出两个函数来知道汽车应当在某个时间范围内到达什么样的位置是安全的,那么要达到这样的位置汽车要采取什么样的速度和加速度来实现

        +

        if you can avoid an accident without causing another +accident, you must do it

      +
      Proper +Response with Extra Evasive Effort 制动规避的适当反应
      - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20230915173422047-20231022115920481.png" +alt="Definition 13" /> +
      -

      这里还采用了不同的分组器方法加入实验的对比

      -
      算法思路
      +
      3.7 +Multiple Geometry and Right-of-Way +Rules处理几何图形区域的车辆优先权问题
        -
      • 将D 分成\(K= ⌈ηN⌉≤ N = -|D|\)个子团队\(G_{t,k}\) -其中比例\(η ∈ [ -1⁄N,1]\),所有的团队集合 \(G_t=⟨G_{t,1},…,G_{t,K} ⟩\)

      • -
      • 分组:\(G_{t,k}⊆D,G_{t,k}∩G_{t,k′}=∅ -;D=U_{k=1}^K  G_{t,k}\)

      • -
      • 组内联合动作:\(a_{t,k}^G=a{t,j} -_j∈G_{t,k}\)

      • -
      • 选择\(Ψ_{VDN}\)算子分解(满足IGM):

        -

        \[ -Q_{t,k}^G (τ_{t,k}^G,a_{t,k}^G )=Ψ_{VDN} (⋅)=∑_{j∈G_{t,k}} Q_j -(τ_{t,j},a_{t,j}) -\]

      • -
      • 最终的全局联合价值函数近似:

      • -
      -

      \[ -Q_{tot} (τ_t,a_t )=Ψ(Q_{t,1}^G (τ_{t,1}^G,a_{t,1}^G ),…,Q_{t,K}^G -(τ_{t,K}^G,a_{t,K}^G )) -\] -可变子团队的伪代码

      -
      IGM条件保持
      -

      如果以群组为单位的价值函数分解的方式能够保证IGM条件: \[ -argmax_(𝑎_{𝑡,𝑘}^𝐺∈𝒜)⁡〖𝑄_{tot}(𝜏_𝑡,𝑎_𝑡)〗= -⟨argmax_(⟨𝐚_{𝐭,𝐤}^𝐆 ⟩_(𝐺_{𝑡,𝑘}∈𝒢_𝑡 ))⁡𝑄_{𝑡,𝑘}^𝐺 (𝜏_{𝑡,𝑘}^𝐺,𝑎_{𝑡,𝑘}^𝐺 -)⟩_(𝐺_{𝑡,𝑘}∈𝒢_𝑡) -\] 希望能够满足对于局部智能体到全局价值函数的IGM条件的保持 \[ -argmax_(𝑎_𝑡∈𝒜)⁡𝑄_{tot}(𝜏_𝑡,𝑎_𝑡 )= -⟨argmax_(𝑎_{𝑡,𝑖}∈𝒜_𝑖 )⁡𝑄_𝑖 (𝜏_{𝑡,𝑖},𝑎_{𝑡,𝑖})⟩_(𝑖∈𝒟) -\] 推导过程如下: \[ -\begin{aligned} -& Q_{t, k}^G\left(\tau_{t, k}^G, a_{t, k}^G\right)=\sum_{j \in G_{t, -k}} Q_j\left(\tau_{t, j}, a_{t, j}\right) ; \operatorname{argmax}_{a_t -\in G_{t, k}} Q_{t, k}^G\left(\tau_{t, k}^G, a_{t, -k}^G\right)=\left\langle\operatorname{argmax}_{a_{t, i} \in -\mathcal{A}_i} Q_i\left(\tau_{t, i}, a_{t, i}\right)\right\rangle_{i \in -G_{t, k}} \\ -& a_t \stackrel{\Psi}{=}\left\langle a_{t, k}^G\right\rangle_{G_{t, -k} \in \mathcal{G}_t} \stackrel{\Psi_{V D -N}}{=}\left\langle\left\langle\bar{a}_{t, i}\right\rangle_{i \in G_{t, -k}}\right\rangle_{G_{t, k} \in \mathcal{G}_t} -\stackrel{\mathcal{D}=G_{t, 1} \cup \cdots \cup G_{t, -K}}{=}\left\langle\bar{a}_{t, i}\right\rangle_{i \in \mathcal{D}} -\end{aligned} -\]

      -

      自适应分组的MARL

      -

      研究动机

      +
    • 如果有存在不同的几何形状的情形会导致响应的冲突

    • +
    • 定义横向的安全距离对于不同的几何路径对于相同的几何路径仍然成立

      +
      + + +
      +

      向位置范围为[x_i,min, +x_i,max],按照不同的加速度行驶,且不能超过指定的加速度制动那么,则c_1和c_2之间的横向安全距离需要满足:两车之间横向距离的最小值应大于Definition7中定义的横向安全距离

    • +
    • 那么如何作出适当的反应 Proper response,给出合适的速度约束

      +
      + + +
      +

      在反应时间之内可以按照加速度范围内进行移动,但是当超过反应时间之后就要对侧向的速度进行制动

    • +
    • 定义不同几何路况的纵向的顺序

        -
      • 通过任务分配实现隐式分组的方法仅解决结构清晰的任务,并且需要领域知识或先验设置
      • -
      • VAST 研究子团队对价值分解的影响,但需要先验的组数,ROMA -的学习依赖于智能体观察的动态角色
      • +
      • + + +
        +

        如果在同一条路上那么直接有先后顺序

        +

        如果不在同一条路上,那么根据车辆距离两条道路的相交的位置来定

        +

        当存在纵向的安全距离才会用到这个定义,同时应当是明显的前后顺序

      • +
    • +
    • 纵向的安全距离(不同的几何路径)

      +
      + + +
      +
        +
      1. 如果c_i没有路径的优先级,那么将在路口汇入的位置执行加速到减速的过程停在路口
      2. +
      3. 如果c_1在c_2前面,c_1执行任意动作(最大刹车加速度的意思是保证这个动作的距离下限),c_2执行最大加速-最小减速过程。当两车速度都为0时,c_1仍然在c_2前面(即后车要刹得住,当前车停下时,纵向顺序关系依然能保持)
      4. +
      5. 如果没有优先级和前后关系,则考虑两车到达路口的时间范围,如果两者时间范围相交,则有碰撞风险,都需要刹车,反之就正常走。
      6. +
      +
      + + +
    • +
    • 纵向的安全响应(Proper response)

      +
      + + +
      +
        +
      1. longitudinal proper response取决于Danger Threshold +Time前的situation:
      2. +
      3. 如果17.1满足,则优先车辆正常开,另外一个则需要在反应时间后刹车。
      4. +
      5. 如果17.2满足,则前面车辆正常开,候车需要在反应时间后刹车。
      6. +
      7. 如果17.3满足,两车都需要在横向和纵向上刹车(这里又提到了横向,是纵向已经不能完全规避碰撞风险,所以需要引入横向动作)。
      8. +
    • +
    • Traffic Lights

      +
        +
      1. 不能简单通过红绿灯的情况来将责任分配给不同的车辆,对于例外的路口的车辆
      2. +
      3. 绿灯的有优先权 但不是有优先权的就对于规则而言没有责任
      4. +
      5. The above discussion is a formalism of the common sense rule of +right of way is given, not taken.
      6. +
    -

    GoMARL算法的优势

    +
    3.8 Unstructured Road +非结构化的道路
    +
      +
    1. + + +
      +

      轨迹这个表示了根据时间而改变的位置状态,ts的定义就表示车辆第一次完全停止的时间

      +

      未来某部分时刻汽车的位置、某个时间车辆的角度

    2. +
    3. + + +
      +

      当两车的轨迹不满足以下条件时,则称会发生碰撞:

      +

      (1)对于两车均停止之前的任意时刻,两车之间距离均大于epsilon。

      +

      (2)在某车停车之前,两车之前距离均大于epsilon,且此时第二辆车的速度矢量指向第一辆车。即当前车停车,后车依然往前车方向开,后车需要与前车保持距离。

    4. +
    5. + + +
      +

      定义Constrains(C)下的轨迹T(C, +c),刹车/正常向前行驶的轨迹分别表示为T(Cb, c)和T(Cf,c).

    6. +
    7. + + +
      +
        +
      1. 其中一辆车的刹车轨迹和另一辆车的前进轨迹不相交,那么安全(注意保持先后关系对两辆车都适用)
      2. +
      3. 两辆车都刹车,轨迹没有相交
      4. +
    8. +
    9. 如果不满足安全的要求,那么应当选择Proper Response:

      +
        +
      1. 如果两辆车都停着,那么其中一辆车应当远离另一辆车选择用Definition +20的方法远离
      2. +
      3. 否则,如果根据safe +distance(1)的定义是安全的,一辆车执行刹车,另一辆车在停下来之前就要按照Cf的轨迹正常开,都停下来之后就回到了(1)
      4. +
      5. 同时选择刹车
      6. +
    10. +
    +
    3.9 Pedestrians 行人
      -
    • 算法不依赖先验领域知识
    • -
    • 动态调整:在分组学习过程中根据智能体的表现逐步调整分组划分。利用群体信息来促进策略专业化和高效的团队合作
    • +
    • 安全距离和合理反应;和汽车相比调整参数且增加非结构化的假设

    • +
    • 在斑马线或者是人行道上规定行人的行为,行人的合理活动范围是一个以他为圆心的圆

    • +
    • 遵循互不干扰否则有责任的准则,当汽车进入行人的可能出事的范围那么 +汽车有责,否则行人有责任

    -

    引入群组划分板块的分解方法

    -

    个体与群组关系假设

    +
    3.10 +Cautiousness with respect to Occlusion 遮挡问题
      -
    • 所有智能体集合:\(A={a_1,…,a_n }\)
    • -
    • 分组集合: \(G={g_1,…,g_m -},1≤m≤n\)
    • -
    • 每个\(g_i\)包含\(n_j -(1≤n_j≤n)\)个不同的智能体,有\(g_i={a_(j_1 ),…,a_(j_(n_j ) -)}\)且有\(g_j∩g_k=∅\)且有\(⋃_jg_j =A,j,k∈{1,2,…,m}\)
    • +
    • Exposure Time 曝光时间:第一次看到这个物体的时间

      +
      + + +
    • +
    • 速度不合理导致的不合理情况

      +

      相当于速度的范围不在给定的合理的区间。 +上述提到的参数和地图上的每个汽车的位置、优先级规则和其他的场景结构等条件相关联

      +
        +
      1. 具有道路优先级的汽车的最大速度优先级较高

      2. +
      3. 速度的阈值范围根据具体的道路结构

      4. +
      +
      + + +
    -

    自动分组实现方法

    -

    自动分组的基本逻辑是学习\(f_g:A↦G\),这样的算子的目标是能够学习到系数权重 -\[ -Q_G^{tot} (s_t,u_t )=E_(s_{t+1:∞},u_{t+1:∞} ) [∑_(k=0)^∞ γ^k -r_{t+k}∣s_t,u_t;G] -\] 让总体的联合动作价值函数的值最大,分组的价值函数为: \[ -𝑄^{𝑔_𝑗}=𝑓(𝑄^{𝑗_1} (𝜏^{𝑗_1},𝑢^{𝑗_1}),⋯,𝑄^{𝑗_{𝑛_𝑗}} (𝜏^{𝑗_(𝑛_𝑗 -)},𝑢^{𝑗_{𝑛_𝑗}};𝑤_1^{𝑔_𝑗}) -\] 学习到的贡献程度为:\(𝑤_1^{𝑔_𝑗}\),训练的目标函数为: \[ -ℒ_𝑔 (𝜃_{w_1})=𝔼_((𝐳,𝐮,𝑟,𝐳′)∼ℬ∑_𝑖(∥𝑓_(w_1)^𝑖 (𝜏^𝑖 (𝑧^𝑖,𝑢^𝑖 );𝜃_(w_1)^𝑖 -)∥_{𝑙_1}) -\] -根据每次在分组中的贡献权重来依次调整智能体的分组,当贡献的权重过小的话,就认为智能体不属于分组中,进入下一轮的分组调整中。

    +

    相当于对于遮挡问题需要对双方的车辆有速度限制才能保证危险的发生

    +
    3.11 +不当行为造成的不合理的情况
    - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915174242726.png" +alt="Definition 25" /> +
    -

    -

    Agent Network的优化

    +

    对于出现遮挡的参与者都要保持合理的行为才能规避事故

    +

    对于有遮挡的正确响应方法:规避不合理的情况,包括但不限于24-25的

    +
    3.12 Responsibility
      -
    • 智能体内嵌信息网络获取的群组相关信息\(e_i\)

    • -
    • Similarity-Diversity -objective:来自同一组的智能体的信息是相似的,来自不同群体的智能体信息之间保持多样性: -\[ -\begin{gathered} -\mathcal{L}_{S -D}\left(\theta_e\right)=\mathbb{E}_{\mathcal{B}}\left(\sum_{i \neq j} -I(i, j) \cdot \operatorname{cosine}\left(f_e\left(h^i ; \theta_e\right), -f_e\left(h^j ; \theta_e\right)\right)\right) \\ -\text { where } I(i, j)=\left\{\begin{array}{cc} --1, & a^i, a^j \in g^k \\ -1, & a^i \in g^k, a^j \in g^l, k \neq l -\end{array}\right. -\end{gathered} -\] -很直观的理解,对于合作型的强化学习任务而言,我们希望能够在同一个任务域内强化策略的合作,而不同的任务域内的策略应当保持多样性,能够让多智能体系统探索更多的可能性,防止陷入局部最优的情况。

    • -
    • Agent Network特点

      +
    • 明确智能体责任
    • +
    • 发生碰撞那么有可能是其中一个智能体没有遵守适当的响应约束,那么需要对事故负责
    • +
    +
    3.13 Utopia
      -
    • 多样化的策略,部分共享参数的策略去中心化
    • -
    • 超网络\(f_d\)将提取的智能体信息e集成到策略梯度中
    • +
    • Lemma 5证明如果所有汽车都遵循基本的响应规则,那么不会发生碰撞
    • +
    • Lemma +6证明如果对于遮挡的问题都能做出合理的响应规则,那么就不会发生事故(反证法)
    • +
    +

    4. Driving Policy +(RL)

    +
      +
    • 驾驶策略的定义:驾驶策略是从感知状态到驾驶命令的映射

    • +
    • 构建高效的驾驶策略,拓展到百万级别的策略

    • +
    • 描述驾驶策略的语言:(利用强化学习的描述方法)

      +
        +
      1. \(s_t\)表示某一时刻的状态,\(\pi\)表示的是策略函数,\(a_t\)表示的是汽车能够选择的动作,根据策略函数来确定,得到一块序列 +\(<s_t,a_t>\)

      2. +
      3. \(P_{\pi}\)表示的是根据 \(\pi\) 选择产生的后面不同序列\(<s_t,a_t>\)的概率

      4. +
      5. \(E_{s~P_\pi}[\rho(s)]\) +用于衡量当前策略的好坏程度,相当于对当下这个策略可能产生的不同奖励值选择期望,同时 +\(\rho(s)\)表示的是当前状态下的奖励

      6. +
      7. 在实际的实现过程中,\(a_t\)表示的是本车与其他道路使用者的位置、速度和加速度等问题,\(s_{t+1}\)表示的是下一时刻的状态,同时取决于当前时刻的动作以及其他智能体的行为,奖励函数\(\rho(s)\) +取决于当前环境中的其他智能体的相对位置速度等信息。

      8. +
      9. 价值函数 \(Q\)表示的是当前智能体执行某一个动作所能造成的长期回报 +,由此来选择最好的策略函数来保证\(\pi(s)=argmax +Q(s,a)\)

      10. +
      11. \[ +Q(s, a)=\max _{(a_t, \ldots, a_{t+T})} \sum_{\tau=t}^T \rho(s_\tau, +a_\tau ) \quad { s.t. } \quad s_t=s, a_t=a, \forall \tau, +s_{\tau+1}=f(s_\tau, a_\tau) +\]

        +

        定义价值函数的计算方式,根据每个时刻汇总得到的奖励值进行求和得到的总的价值

      12. +
      13. 参数 \(T\) +表示的是“规划时间范围” 控制计算时间和评估质量之间的自然权衡,如果 \(T\)越大那么说明当前的动作评估效果越好

      14. +
    • +
    • 计算价值函数挑战:

      +
        +
      1. 如果将动作空间进行离散,那么需要较大的计算空间,依赖于巨大的计算能力
      2. +
      3. 采用离线计算,离散化动作域和状态域,然后采用离线的计算方式评估每个 +\((s,a)\) 的价值
      4. +
      5. 采用动态规划,计算每个 \((s,a)\)的价值函数值 \(Q(s,a)\) 仍然面临计算空间较大的问题
      6. +
      7. 利用有限类函数来近似价值函数,但是无法做出良好的近似,同时对于这样的神经网络比较难以学习
      8. +
      9. 当更新时间较小存在一定的信噪比,导致学习速度及其缓慢,逼近类方法固有的问题
      10. +
      11. 总结:资源计算量巨大的方法和 +粗糙近似逼近会带来不同程度的问题
      12. +
    • +
    • Semantics to the rescue重新定义自动驾驶语义

      +
        +
      • 在语义动作空间上定义价值函数Q:语义空间较小无语大量计算资源,能够对价值函数Q进行准确的估计

      • +
      • 语义动作空间:

        +
          +
        1. 主要思想:纵向目标;横向目标;实现目标的积极性程度

          +

          横向:Lateral goals are desired positions in lane coordinate system +(e.g., “my goal is to be in the center of lane number 2”).

          +

          纵向: Longitudinal goals are of three types. The first is relative +position and speed w.r.t. other vehicles (e.g., “my goal is to be behind +car number 3, at its same speed, and at a distance of 2 seconds from +it”).

          +

          速度目标:speed target (e.g., “drive at the allowed speed for this +road times 110%”).

          +

          速度限制:speed constraint at a certain position (e.g., when +approaching a junction, “speed of 0 at the stop line”, or when passing a +sharp curve, “speed of at most 60kmh at a certain position on the +curve”).速度曲线

        2. +
        3. 确定横向目标和纵向目标之间的组合,利用运动学公式来实现目标

        4. +
        5. 语义动作空间产生了所有可能的几何曲线的子集,除了特殊的情况

        6. +
      • +
    • +
    • Constructing an evaluation function for semantic +actions 构建语义动作的评估函数

      +
        +
      • 定义语义动作 \(A^s\)空间,通过当前的状态 \(s\),选择最好的动作 \(a^s\in A^s\), 根据一些列的几何轨迹 \((s_1,a_1),...,(s_T,a_T)\),同时认为新的下一时刻的状态有一个新的函数给出 +\(s_{t+1}=f(s_t,a_t)\) +同时继续根据奖励函数的值来评估执行的语义动作的好坏程度 \(\frac{1}{T} +\sum_{t=1}^T\rho(s_t,a_t)\)
      • +
      • 利用语义动作来评估能规避信噪比低等问题
      • +
      • 利用机器学习来泛化,在不同类型的道路上进行训练,推广到不同的道路
      • +
      • 语义动作空间:资源高效利用同时很准确地进行评估
      • +
    • +
    • The dynamics of the other agents +其他智能体的动态

      +
        +
      • \(s_{t+1}=f(s_t,a_t)\) +这样的确定性函数与现实不符合,多个智能体之间会相互影响
      • +
      • 通过高频次地重新应用决策,不断调整策略来适应新的环境
    • -
    • 合理性表示: \[ -𝜕𝑄^{𝑡𝑜𝑡}/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 ) (𝜕𝑄^𝑎)/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 -) (𝜕𝑄^𝑎)/(𝜕𝑣_ℎ^𝑎 ) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ )=𝑓_𝑑 (𝑒^𝑎 )⋅(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 -) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ ) -\]

    -

    Agent Network优化方式

    -

    整体的训练框架

    -
    双层混合网络
    +

    Sensing 传感

    +
    传感研究的内容:
    +

    静态对象:(a fence that occludes relevant part of a merging +road).;

    +

    动态对象:车辆(边界框、速度、加速度)、行人(边界框、速度、加速度)、交通灯、动态道路分隔线(例如建筑区域的锥体)、临时交通标志和警察活动以及道路上的其他障碍物。

    +
    Sensing system
    +
      +
    1. Let \(S\) denote the domain of +sensing state and let X be the domain of raw sensor and mapping data. A +传感系统表示的是一个函数 \(\hat{s}\) : +\(X → S.\)
    2. +
    3. 什么时候传感器的值 \(\hat{s}\) +能够和状态 \(s\) +近似?通过近似之后对驾驶策略的总体表现:安全性和舒适性
    4. +
    5. 传感器系统可能会犯的错误类型
        -
      • 群体状态下的群体行动价值信息,将全局的状态分解成局部的状态信息用于训练,这部分的局部状态信息是基于群组划分之后的状态信息

      • -
      • \(s^{g_j}\) 是分组后\(e_t^i (a_i∈g_j -)\)按组别融合,建立分组器映射

        -

        \[ -f_{w_2}(s^g ):s^g→w_2^g -\]

      • -
      • 集中到策略梯度中,内嵌群组状态信息潜在促进组内合作: \[ -𝜕𝑄^{𝑡𝑜𝑡}/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 ) (𝜕𝑄^𝑎)/(𝜕𝜃_ℎ )=(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 -) (𝜕𝑄^𝑎)/(𝜕𝑣_ℎ^𝑎 ) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ )=𝑓_𝑑 (𝑒^𝑎 )⋅(𝜕𝑄^{𝑡𝑜𝑡})/(𝜕𝑄^𝑎 -) (𝜕𝑣_ℎ^𝑎)/(𝜕𝜃_ℎ ) -\]

      • -
      • 按照全文的总共方法的总述可以得到全局分解目标: \[ -ℒ(𝜃)=ℒ_𝑇𝐷 (𝜃)+𝜆_𝑔 ℒ_𝑔 (𝜃_(w_1 ) )+𝜆_𝑆𝐷 ℒ_𝑆𝐷 (𝜃_𝑒 ) -\]

      • +
      • False negative: the sensing system misses an object +误报:传感器错过了一个物体
      • +
      • False positive: the sensing system indicates a “ghost” object +错误:传感器系统提示存在幽灵物体
      • +
      • Inaccurate measurements: the sensing system correctly detects an +object but incorrectly estimates its position or speed +测量不准确:传感系统正确检测到物体但是错误估计位置和速度
      • +
      • Inaccurate semantic: the sensing system correctly detects an object +but misinterpret its semantic meaning, for example, the color of a +traffic light +语义信息不准确:传感系统正确检测物体,但误解了语义信息,比如交通灯的颜色
      • +
    6. +
    +
    Comfort
    +
      +
    • 相当于利用传感器函数来近似估计 \(s\) ,如果 \(\pi(\hat{s}(x))=\pi(s)\) 也就是说\(\pi(\hat{s}(x))=argmaxQ(\hat{s}(x),a)\),那么就说明当前这个传感器是可以的,同时允许有一定的误差范围: +\(Q(\hat{s}(x),a)\ge +Q(s,\pi(s))-\epsilon\),这个时候可以说是 \(\epsilon +-\)准确的,同时也允许传感器有小概率发生故障 \(\delta\)
    • +
    • For example, we can choose three thresholds, $$1 < $\(2 <\)$3 to represent mild, medium, and +gross mistakes,表示传感器的错误程度,轻中重
    +
    PAC sensing system
    +
      +
    1. + + +
      +

      Probably-Approximately-Correct (PAC) +X表示的是原始的数据与映射的数据域,从期望的角度给出误差率的平均值: +\[ +\mathbb{P}_{(x, s) \sim D}\left[Q(s, \pi(\hat{s}(x))) \geq Q(s, +\pi(s))-\epsilon_i\right] \geq 1-\delta_i +\]

    2. +
    3. 通过记录许多人类驾驶员的数据来构建此分布,而不是遵循自动驾驶车辆的特定策略(不切实际),由于任何合理策略对 +D +的影响都很小,通过应用简单的数据增强技术,我们可以构建适当的分布,然后在传感系统的每次重大更新后执行离线验证。

    4. +
    5. 重点关注经常发生的“测量不准确”类型的错误

    6. +
    7. let \(p(o)\)\(\hat{p}(o)\) be the positions of o in the +coordinate system of the host vehicle according to \(s(x)\), \(\hat{s}(x)\) +respectively.分别表示某个对象的真实的位置信息传感器的位置信息

      +

      目标到主车辆的距离为:\(\|p\|\) +,加性误差:\(\|p(o)-\hat{p}(o)\|\),相对误差为 \(\frac{\|p(o)-\hat{p}(o)\|}{\|p(o)\|}\)

    8. +
    9. 对于positions a set of objects \(O\)表示的是一堆对象,要求 \(p(o)\)\(\hat{p}(o)\)之间的相对误差小于一个精确度不妨计作 +$$ ,但是\(\epsilon-ego-accurate\) +的传感状态不能保证PAC传感系统能够满足每个合理的价值函数:当相对误差很小的时候,尽管认为合理了,但是对于实际的情况而言会出现不同的价值函数结果。选择制动or继续前进,横向不能用相对距离

    10. +
    11. 表明\(\epsilon-ego-accurate\) +并不能保证我们的传感系统是PAC。是否还有其他属性足以满足 PAC +传感系统的要求

      - +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20230915174411587-20231022115924657.png" +alt="Definition 29" /> + +
    12. +
    13. + +
      -

      实验结果

      -

      在星际争霸的环境中的训练结果

      -
      +

      给出价值函数合理的L-语义-\(Lipschitz\)条件

    14. +
    15. - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915174520766.png" +alt="Lemma 7" /> +
      -

      消融实验

      +

      判定为PAC传感系统的终极判定

    16. +
    +
    Safety
    +
      +
    • 目标是减少事故发生的概率,存在两类安全情况:

      +
        +
      1. 传感系统认为危险情况是不危险的;
      2. +
      3. 传感器系统认为不危险情况是危险的:当安全的时候突然出现紧急刹车会导致危险
      4. +
    • +
    • 解决的是如何确保和验证safety-critic sensing +mistake足够小,采用的方法是融合多个工程和技术都独立的子系统。多数子系统认为安全才算安全:

    • +
    • 单侧c-近似独立的多个子系统

      - -
      -

      谷歌足球的训练结果

      +src="https://gitee.com/lihaibineric/picgo/raw/master/pic/image-20230915174623604-20231022115925281.png" +alt="Definition 32" /> + +
    • +
    • 对于服从单侧-c近似独立的子系统,能够推出:

      - +src="https://gitee.com/lihaibineric/picgo/raw/master/img/image-20230915174653068.png" +alt="Corollary 3" /> +
      +

      基于多子系统方案和Corollary 3,为了达到10^-9 +失效率,对sensing系统的验证不再需要10^9 +小时的数据,而是分别对每个子系统验证10^5小时就可以了

    • +
    • 独立假设背后的合理性留给我们去推理。有些传感器对会产生完全不相关的误差;单侧-c近似独立是否成立

    • +
    • 对于安全幽灵而言,当出现至少有两个传感器认为的情况是危险的,才能认为是危险的

    • +
    • Building a scalable sensing +system可扩展的传感器系统

      +
        +
      1. Cameras
      2. +
      3. Road Experience Management (REM),不使用点云,而是一种基于语义的方法 +approach,利用大量的车端detects semantically meaningful objects in the +scene (lane marks, curbs, poles, traffic lights, +etc.),并可以对云端进行更新。以可扩展的方式非常频繁地更新地图。此外,自动驾驶车辆可以通过现有的通信平台(蜂窝网络)接收小型地图数据
      4. +
      5. A complementary radar and lidar +system,能够产生极高的精度;直接测量速度和距离,这进一步提高了乘坐的舒适度
      6. +
    • +
    ]]>
    - 强化学习 + 深度学习 人工智能 - 深度学习 - 强化学习 + 智能安全
    - 【基础工具】Git命令集 - /2023/10/23/git/ + 【基础工具】Anaconda命令集 + /2023/10/22/conda_list/ -

    Git -是一个版本控制系统,是任何软件开发项目中的主要内容。通常有两个主要用途:代码备份和代码版本控制。使用Git可以逐步处理代码,在需要回滚到备份副本的过程中保存每一步的进度。

    -

    Git的安装与配置

    -

    Git的基本控制

    -

    初始化Git仓库

    -

    当完成上述的配置之后,就能开始初始化Git仓库,进入需要创建工作区的文件夹

    -
    cd workspace
    git init
    -

    创建一个名为 .git -的新子目录(该目录为隐藏的),其中包含所有必需的存储库文件(Git -存储库框架);注意区分工作区暂存区,在没有add之前我们都是在工作区

    -

    【Vscode】考虑Git graph插件来可视化git分支目录的全貌

    -

    添加文件和备注

    -
    git add . 
    git add <file>
    -

    执行上述命令之后将会将当前的file或者是工作区中的所有文件都上传到暂存区

    -
    git commit -m"【test】XXX更改信息提示"
    #如果多次提交想覆盖到同一个提交的备注上执行下面
    git commit --amend
    -

    上述的命令是将本次的提交添加描述,分布式协作的时候能看清

    -

    状态与日志

    -

    查看默认配置

    -
    git config --list
    -

    查看当前所在的分支位置信息

    -
    git status
    -

    查看当前分支下的更改日志

    -
    git log
    -

    推送与拉取

    -

    将本地暂存区中的更改内容推送到远端

    -
    git push
    git push -f #强行推出
    -

    将远端所在的分支内容拉到本地

    -
    git pull
    -

    更新所在分支的最新内容

    -
    git fetch --all 
    -

    复制分支

    -

    获取git连接git@ XXX.git之后执行:

    -
    git clone git@ XXX.git
    -

    如果觉得git的内容太大,可以选择内部的分支进行下载

    -
    git clone -b feature/xxx git@ XXX.git
    -

    feature/xxx为具体的分支内容

    -

    分支操作

    -

    查看分支

    -
    git branch -a #查看所有的分支
    git branch -r #查看远端的分支
    -

    切换不同的分支

    -
    git checkout [branch] #切换到分支
    -

    创建新的分支

    -
    git branch [branch] #创建新的分支
    -

    创建新的分支并切换到上面

    -
    git checkout -b [branch] #创建并切换新的分支
    -

    分支冲突

    -

    问题描述:如果当前修改的版本基于旧版,但是远端已经是新版origin/master,此时修改基于的内容和远端不同不能强行推

    -

    解决方法1:通过换基的方法解决,通过将当前的修改的旧版换到最新的基上

    -
    #先将文件提交到暂存区
    git add . #保存在暂存区
    git commit -m "XXX"
    #进行换基操作
    git rebase -i origin/master
    #再次提交
    git add .
    #继续换基
    git rebase --continue
    #换基成功后,只需要一次备注(覆盖)
    git commit --amend
    #最后退出
    git push
    git push -f #或者强行推出
    -

    解决方法2: 暴力覆盖

    -
    git fetch --all #获取远端的全部内容
    git reset --hard origin/master #强行将远端的内容覆盖到本地的文件中
    git commit --amend
    git push -f #强行推出

    +

    Conda 常用命令

    +

    查看conda版本

    +
    conda --version/ conda -V
    +

    查看已有环境

    +
    conda info --envs
    conda env list
    conda info -e
    +

    进退环境

    +
    conda activate  [name]# 重新进入虚拟环境
    conda deactivate # 退出虚拟环境
    +

    创建新的环境

    +
    conda create -n *** python=0
    +

    删除环境

    +
    conda remove -n old_name --all # 删除环境old_name
    +

    激活环境

    +
    conda activate xxxx # 激活xxxx环境
    +

    关闭环境

    +
    conda deactivate # 关闭环境
    +

    克隆环境

    +
    conda create -n [new_name] --clone [old_name]
    +

    升级版本

    +
    conda update -n base conda #update最新版本的conda;
    conda update --all #更新所有包
    +

    Pip管理的常用包

    +
    pip search package_name 
    pip show package_name
    pip uninstall||package_name
    pip list
    +

    删除环境中的包

    +
    conda remove package #删除当前环境中的包
    conda remove -- name env_name package #删除指定环境中的包
    +

    指定环境中安装包

    +
    conda install --name env_name package_name 
    +

    Conda环境的python版本非指定

    +

    指定虚拟环境x的python版本是3.8,base环境是3.11;conda +activate激活x之后python版本仍为3.11。

    +

    原因:在base环境中修改了.zshrc文件中的python只定路径,让每次虚拟环境中的python找到的python都只能按照指定的python路径进行寻找,从而导致conda环境中的python版本不能制定。

    +

    修改方式:

    +
    vim .zshrc
    +

    进入 +.zshrc环境中进行修改,如果发现一类诸如其他python版本指定的路径的话,需要进行删除,只需要保留最原始的关于anaconda的命令初始化,完成之后输入

    +
    source ~/.zshrc
    +

    解决问题

    +

    镜像源安装

    +

    下载使用清华源加上: -i +https://pypi.tuna.tsinghua.edu.cn/simple

    +
    +

    清华:https://pypi.tuna.tsinghua.edu.cn/simple/

    +

    阿里云:http://mirrors.aliyun.com/pypi/simple/

    +

    中国科技大学 +:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

    +

    豆瓣:http://pypi.doubanio.com/simple/

    +
    ]]>
    基础工具 - 后端开发 + 基础工具
    @@ -1396,7 +1396,45 @@ id="ping检测当前服务器的网络是否通畅">ping检测当前服务器的 基础工具 + 后端开发 基础工具 + + + + 【后端开发】Golang基础 + /2023/11/27/go-%E5%9F%BA%E7%A1%80/ + +

    学习网站:8小时转职Golang工程师

    +

    Go的环境安装

    +

    下载官网:

    +

    go的官网下载网站,选择合适的系统版本进行安装https://go.dev/dl/

    +

    安装步骤:

    +
      +
    1. 下载安装包并按照安装包的指引下载相关的内容

    2. +
    3. 对于Mac系统会直接配置好环境变量,根据官网的安装手册进行安装 https://go.dev/doc/install

    4. +
    5. 测试GO的版本

      +
      go version
      +

      go version

    6. +
    7. 测试GO的环境变量

      +
      go env
      +

      go env

    8. +
    +

    go语言没有异常,全部都用ERROR来表示

    +

    Go基本语法

    +

    如何编译并运行一个Go文件

    +

    对于已经写好的go文件,这里以hello.go作为例子,直接使用以下语句进行编译并运行

    +
    go run hello.go
    +

    或者将编译和运行两个过程分开,先编译后运行:

    +
    go build hello.go
    ./ hello
    +]]>
    + + 后端开发 + + 后端开发
    @@ -1522,42 +1560,4 @@ alt="some bug" /> 深度学习 - - 【后端开发】golang基础 - /2023/11/27/go-%E5%9F%BA%E7%A1%80/ - -

    学习网站:8小时转职Golang工程师

    -

    Go的环境安装

    -

    下载官网:

    -

    go的官网下载网站,选择合适的系统版本进行安装https://go.dev/dl/

    -

    安装步骤:

    -
      -
    1. 下载安装包并按照安装包的指引下载相关的内容

    2. -
    3. 对于Mac系统会直接配置好环境变量,根据官网的安装手册进行安装 https://go.dev/doc/install

    4. -
    5. 测试GO的版本

      -
      go version
      -

      go version

    6. -
    7. 测试GO的环境变量

      -
      go env
      -

      go env

    8. -
    -

    go语言没有异常,全部都用ERROR来表示

    -

    Go基本语法

    -

    如何编译并运行一个Go文件

    -

    对于已经写好的go文件,这里以hello.go作为例子,直接使用以下语句进行编译并运行

    -
    go run hello.go
    -

    或者将编译和运行两个过程分开,先编译后运行:

    -
    go build hello.go
    ./ hello
    -]]>
    - - 后端开发 - - - 后端开发 - -
    diff --git "a/tags/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" "b/tags/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" index 4d8b112..261d874 100644 --- "a/tags/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" +++ "b/tags/\345\220\216\347\253\257\345\274\200\345\217\221/index.html" @@ -214,7 +214,7 @@ -
    【后端开发】golang基础
    +
    【后端开发】Golang基础