Generative Adversarial Imitation Learning – 这篇是首创GAIL的论文,数学比较多 大概看一下就行 不用读太深

GAIL-Imitating Driver Behavior with Generative Adversarial Networks 这篇是GAIl模型用在NPC车辆上的第一篇论文
Wasserstein-GAN 是GAIL的训练框架 GAN的变体
Info Gail是引入了隐变量,使一个模型可以训练出多种驾驶风格

RAIL是对强化学习的Reward Function进行了改动 对危险驾驶行为进行了惩罚

模仿学习

模仿学习方法 通过模仿专家演示的样本以解决决策问题,它不需要从环境中获得奖赏反馈, 其反馈信息来自于专家的决策样本。在很多实际问题中,相较于设置合适的奖赏函数,获取专家样本往往更容易且代价更小。

模仿学习方法可以分为两类:行为克隆方法(Behavioral Cloning,简称 BC)和基于逆向强化学习的模仿学习方法(Imitation Learning via Inverse Reinforcement Learning,简称IRL-IL)

  • 行为克隆方法的主要思想是直接克隆专家样本在各状态处的单步动作映射,即对专家样本进行监督学习.BC并不考虑当前状态之后的长远影响.在有足够多专家样本的前提下,它具有良好的表现.由于不考虑长远影响,BC会将细微的误差在序贯的决策过程中逐步放大,即产生级联误差问题。
  • 逆向强化学习假设专家策略等价于由未知的真实奖赏函数推导出的最优策略。逆向强化学习是RL的逆向过程,它根据给定的专家样本求解未知的奖赏函数.基于解的奖赏函数,通过RL方法求解最优策略的方式,间接地还原专家策略.这种模仿专家的方式使IRL-IL具备了长远规划的能力

基于生成对抗网络的模仿学习方法(GANs-IL)从IRL-IL发展而来,是一 类结合了生成对抗网络的模仿学习方法.两者的主要区别是奖赏函数、策略的表示模型以及模型的训练方式.GANs-IL用两个神经网络来表示IRL-IL中的奖赏函数和策略,并用对抗的方式来优化这两个网络的参数.原始的生成对抗网络由生成模型(又称生成器)和判别模型(又称判别器)这两个相对抗的网络模型共同构成.

在这里插入图片描述

模仿学习的目标是学习得到与专家尽可能相似的决策模型.因此,模仿学习的评价标准一般为学习得到的策略与专家策略的性能对比。

Read more »

7、 基于规则和网络结合的智能模型构建技术

传统的规则智能体往往采用行为树或者状态机的方式进行决策,尽管在某些场景下能取得一定的效果,但是智能体对决策空间的探索度低,智能性不高;而纯粹的强化学习智能体尽管有很强的探索性以及探索最优解的能力,但却通常会遇到学习困难、效果不稳定、动作建模复杂等问题。

为了能更好的应用于复杂的J事场景,本项目采用了知识规则融合模型智能体决策体系来对博弈智能体进行构建。

7.1 智能体构建框架

1、分层,高层智能体+有限状态机

在军事场景下,决策任务往往受到条令的限制,并且不同任务之间可能存在着先后顺序和依赖纠缠。为了更好地处理这种情况,我们将智能体的决策流程进行了分层设计。

在上层,有一个智能体负责粗粒度的决策。它的主要职责是判定任务类型和目标,并根据整体战略制定高级指令和计划,为下层智能体分配任务和优先级。

在下层,基于有限状态机,对任务进行了具体实现。有限状态机允许智能体根据当前的状态和环境条件,灵活地做出不同的决策,以适应任务需求。

这种分层设计使得决策系统更加有条理和灵活。上层智能体负责整体规划和任务分配,从宏观角度指导军事行动。而下层智能体通过有限状态机实现局部的决策,使得它们能够根据不同情况作出适时的反应。

由于整个战场决策分为预设任务与实时决策任务,同时为了在保证对抗效果的前提下最大化探索效率。最后实现的智能体结构如下

Read more »

{"name":"ai","services":{"ai-web":{"image":"uuv_web","ports":["36345:80"],"volumes":["D:/TianGong/ai/ai_ui/dist:/usr/share/nginx/html","./nginx-uuv.conf:/etc/nginx/conf.d/default.conf"]},"ai-mysql":{"image":"mysql:5.7.24","ports":["23306:3306"],"volumes":["./mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf"],"environment":["MYSQL_ROOT_PASSWORD=123456","MYSQL_DATABASE=zcdb"],"command":["--character-set-server=utf8mb4","--collation-server=utf8mb4_general_ci","--skip-character-set-client-handshake"]},"ai-server1":{"image":"uuv_server_v2","volumes":["D:/TianGong/ai/ai_server/code/zcProject:/home/zc"],"ports":["38045:8000"],"command":["/bin/bash","-c","python /home/zc/manage.py makemigrations\npython /home/zc/manage.py migrate\npython /home/zc/manage.py runserver 0.0.0.0:8000\n"],"tty":true,"restart":"always","depends_on":["ai-mysql","ai-web"]}}}
Read more »

{"name":"ray","services":{"work":{"image":"ray_server_v2","environment":["NVIDIA_VISIBLE_DEVICES=all"],"restart":"always","network_mode":"host","command":"/bin/bash -c \"/root/miniconda3/envs/train_uuv/bin/ray start --address='192.168.2.2:6379' --block\""}}}
Read more »

{"name":"ray","services":{"head":{"image":"ray_server_v2","network_mode":"host","volumes":["/home/user/uuv/code/:/home"],"environment":["NVIDIA_VISIBLE_DEVICES=all"],"command":"/bin/bash -c \"/root/miniconda3/envs/train_uuv/bin/ray start --head --node-ip-address='0.0.0.0' --dashboard-host='0.0.0.0' --dashboard-port=8265 --block\"","tty":true}}}
Read more »

背景

在强化学习解决问题的场景中,动作是体现学习效果最直接的因素,直接影响了智能体下一步的走向和对环境状态的改变。在应用强化学习解决实际问题时,往往不同于gym库中倒立摆那样的情况,而是存在很多的约束。例如,在t时刻智能体可选的动作为1,2,3,但是在t+1时刻只能选1,2.3处于不可用的状态。在这种情况下,就需要借助掩码mask来对智能体的动作进行处理。

有人会疑问:就不能制定相应的奖励函数使得智能体学习到这种约束吗?这样做是可以的,但是付出的训练代价很大,并且极其容易导致模型发散。因此,在大多数RL落地的场景下,都会使用MASK掩码方法解决动作约束的问题。

MASK的方法

Mask的核心就是在输出的动作或者值函数的向量上戴个“面具”,点乘一个{0,1}或者{−∞,1}的行向量,以规范化输出。这样智能体选出的动作就可以进行简单的规范化。

MASK的两个关键点

由于强化学习,尤其是深度强化学习,学的最后还是分布,因此只是单单的不让智能体选择不符合规则的动作并不能加速模型的收敛。

因此,MASK一般加在选择动作前的值函数向量或者其他数据向量上,并且会将MASK后的值传入神经网络训练。
两个关键点分别是:

1-mask分布

2-回传训练

具体做法

Read more »

全网解析 支持站点

  • 奇艺视频 腾讯 优酷 土豆 芒果 乐视 搜狐 PPTV 华数TV 风行 咪咕 哔哩哔哩 ACfun 暴风 CCTV CNTV 范特西 9i广场舞 搜狐自媒体 M1905视频 看看视频 27盘 虎牙直播 全民直播 战旗直播 人人视频 爆米花 今日头条 天翼视频 糖豆视频 龙珠视频 快手视频
    一直播 新浪视频 360小视频 熊猫TV 斗鱼TV 花椒直播 网易公开课 音悦台 秒拍网 美拍网 爱拍 凤凰视频 梨视频 微录客 人民微视频 17173视频 优米视频 m3u8 mp4视频 微博视频 YY视频 私有云资源

https://cdn.yangju.vip/k/?url=后面加上播放的地址即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
https://cdn.yangju.vip/k/?url=

https://jx.lache.me/cc/?url=

https://api.653520.top/vip/?url=

https://jx.ab33.top/vip/?url=

https://vip.mpos.ren/v/?url=

https://jx.000180.top/jx/?url=

https://jx.km58.top/jx/?url=

https://api.smq1.com/?url=

https://jx.hezeshi.net/ce/jlexi.php?url=

https://www.kkflv.com/?url=

https://jx.618g.com/?url=

永久性,重要的是够稳定!而且CDN加速!!解析接口支持:URL模式

Read more »

Redis5.0开始引入了Stream这个数据结构,Stream可以很好地用于消息队列,它支持消息持久化,同时可以记录消费者的位置,即使客户端断开重连,也不会丢失消息。

使用 XADD 向队列添加消息,如果指定的队列不存在,则创建一个队列,XADD 语法格式:

1
2
3
4
XADD key ID field value [field value ...]
key :队列名称,如果不存在就创建
ID :消息 id,我们使用 * 表示由 redis 生成,可以自定义,但是要自己保证递增性。
field value : 记录。
1
2
3
4
5
6
redis> XADD mystream * name Sara surname OConnor
"1601372323627-0"
redis> XADD mystream * field1 value1 field2 value2 field3 value3
"1601372323627-1"
redis> XLEN mystream
(integer) 2

XADD 中的key为队列ID,默认为*自动生成,也可以手动指定

1
2
3
XADD mystream 10000000 name Anna  
XADD mystream 10000001 name Bert
XADD mystream 10000002 name Cathy

可以使用MAXLEN选项来限制Stream队列流中的最大元素数量。

在这里插入图片描述

读取Stream队列,想从数据流的开头读取多达100个条目:

1
XREAD COUNT 100 STREAMS mystream 0 
Read more »

Ray的远程函数功能remote应该被认为是功能性和无副作用的。仅限于远程函数限制我们使用分布式函数式编程,这对于许多用例来说都很好,但实际上有点受限。
Ray使用Actor扩展了数据流模型。Actor本质上是一个有状态的worker(或服务)

假设我们有多个任务在同一个actor上调用方法。例如,我们可能有一个Actor记录来自许多任务的执行信息。我们可以将actor句柄作为参数传递给相关任务来实现这一点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@ray.remote
class Actor(object):
def method(self):
pass

# 创建actor
actor = Actor.remote()

@ray.remote
def f(actor):
# 激活actor的函数
x_id = actor.method.remote()
# 真正的阻塞调用返回结果
return ray.get(x_id)

# 三个任务都会调用同一个actor的方法
f.remote(actor)
f.remote(actor)
f.remote(actor)

参考官方文档
https://docs.ray.io/en/latest/ray-core/patterns/global-variables.html#anti-pattern-using-global-variables-to-share-state-between-tasks-and-actors

全局变量共享是一种反模式的使用方法,不要使用全局变量与任务和参与者共享状态。相反,将全局变量封装在参与者中,并将参与者句柄传递给其他任务和参与者。

Ray 驱动程序、任务和 Actor 运行在不同的进程中,因此它们不共享相同的地址空间。这意味着,如果您在一个进程中修改全局变量,则更改不会反映在其他进程中

解决方案是使用Actor的实例变量来保存全局状态,并将参与者句柄传递到需要修改或访问状态的地方。

成功的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@ray.remote
class GlobalVarActor:
def __init__(self):
self.global_var = []

def set_global_var(self, var):
self.global_var.append()

def get_global_var(self):
return self.global_var


@ray.remote
class Actor:
def __init__(self, global_var_actor):
self.global_var_actor = global_var_actor

def f(self):
return ray.get(self.global_var_actor.get_global_var.remote()) + 3


global_var_actor = GlobalVarActor.remote()
actor = Actor.remote(global_var_actor)
ray.get(global_var_actor.set_global_var.remote(4))
# This returns 7 correctly.
assert ray.get(actor.f.remote()) == 7

失败的示例:

Read more »