跳到内容

Svalorzen/AI-工具箱

存储库文件导航

AI-工具箱

AI-工具箱

库概述视频

这个C++工具箱旨在表示和解决常见的人工智能问题,实现一个易于使用的界面,希望它可以扩展解决许多问题,同时保持代码可读性。

当前的开发包括MDP、POMDP和相关算法。这个工具箱最初是受Matlab的启发而开发的MDP工具箱,其中你可以找到在这里,以及来自pomdp解决方案由A.R.Cassandra编写的软件,您可以找到在这里.

如果你是强化学习领域的新手,我们有几个简单的教程那会有帮助你开始吧。这是对强化学习可以在网上免费找到.

如果您使用此工具箱进行研究,请考虑引用我们的JMLR公司文章:

@第{JMLR:v21:18-402条,author={Eugenio Bargiacchi和Diederik M.Roijers以及Ann Now,title={AI Toolbox:用于强化学习和规划的C++库(带有Python绑定)},journal={机器学习研究杂志},年份={2020年},体积={21},数字={102},页数={1-12},url={http://jmlr.org/papers/v21/18-402.html}}

例子

//模型可以是任何遵循10方法接口的自定义类。
汽车模型=makeTigerProblem();未签名的地平线=10;//解决方案的范围。

//0.0是收敛参数。它提供了一种阻止
//如果策略在范围之前收敛,则进行计算。AI工具箱::POMDP::增量修剪解算器(地平线,0);//对模型进行求解,得到最优值函数。
汽车[bound,valueFunction]=解算器(模型);//我们从解决方案中创建一个策略来计算代理的操作。
//参数是模型的大小(SxAxO)和值函数。AI工具箱::POMDP::策略政策(2,,2,valueFunction);//我们以统一的信念开始模拟。我们从信仰中取样
//为了获得世界的“真实”状态,因为此代码必须
//模拟环境并控制代理。AIToolbox::POMDP::信念b(2); b条<<0.5,0.5;汽车s=AI工具箱::样本概率(b.size(),b,rand);//我们对第一个动作进行了采样。id稍后将遵循策略树。
汽车[a,id]=policy.sampleAction(b,horizon);双重的totalReward(总奖励)=0;//例如,我们存储总奖励。
对于(整数t=地平线-1; t>时间>=0; --t){//我们向世界迈进了一步。
    汽车[s1,o,r]=模型。样本SOR(s,a);totalReward+=r;//我们根据观察结果选择下一步行动。
    标准::领带(a,id)=策略。示例操作(id,o,t);s=s1;//最后,我们为下一个时间步更新世界。}

文档

最新文档可用在这里.我们有几个教程这可以帮助您开始使用工具箱。教程是用C++编写的,但是这个示例文件夹中包含等效的Python代码,您可以遵循这些代码也一样。

对于Python文档,您可以通过键入帮助(AIToolbox)来自口译员。它应该显示每个类的导出API,以及任何输入/输出差异。

特征

Cassandra POMDP格式解析

Cassandra的POMDP格式是一种文本文件,其中包含MDP或POMDP模型。你可以找到一些例子在这里.虽然绝对没有必要使用这种格式,您可以通过代码定义模型,我们确实解析了一个合理的子集Cassandra的POMDP格式,允许重用已定义的问题这个图书馆。这是关于它的文档.

Python 2和3绑定!

与Python相比,该库的用户界面几乎相同只需使用C++就可以了。请参阅示例文件夹以查看如何许多Python和C++代码彼此相似。因为Python不允许模板中,类被尽可能多的实例化绑定。

此外,该库还允许使用本地Python生成模型(当您不需要指定转换和奖励功能时,您只需采样下一个状态并奖励)。例如,这允许直接使用OpenAI健身房环境,只需编写最少的代码。

也就是说,如果您需要定制特定的实现以使其执行在你的特定使用卡上做得更好,或者如果你想完全尝试一些东西新的,您将不得不使用C++。

公用设施

图书馆有一套广泛的实用程序,太长了在此枚举。特别是,我们有以下实用程序组合学,多面体,线性规划,抽样和分配,自动统计,信念更新,许多的 数据 结构,登录中,播种还有更多。

强盗/普通游戏:

模型
基本模型
政策
探索自私强化学习(ESRL) Q-贪婪政策 Softmax策略
线性奖励惩罚 汤普森抽样(学生t分布) 随机策略
Top-Two Thompson抽样(学生t分布) 连续拒绝 T3C(正态分布)

单代理MDP/随机游戏:

模型
基本模型 稀疏模型 最大似然模型
稀疏最大似然模型 汤普森模型(Dirichlet+Student-t分布)
算法
Dyna-Q公司 Dyna2型 预期SARSA
滞后Q学习 重要性抽样 线性规划
蒙特卡洛树搜索(MCTS) 政策评估 策略迭代
优先扫描 Q-学习 双Q学习
Q(λ) R学习 SARSA(λ)
SARSA公司 后退(λ) 树备份(λ)
值迭代
政策
基本政策 Epsilon贪婪政策 Softmax策略
Q-贪婪政策 PGA-应用程序 赢得或学习快速策略迭代(WoLF)

单代理POMDP:

模型
基本模型 稀疏模型
算法
增强MDP(AMDP) 盲目的策略 快速知情绑定
间隙最小值 增量修剪 线性支架
佩塞乌斯 带UCB1的POMCP 基于点的值迭代(PBVI)
质量管理计划 实时信念状态搜索(RTBSS) SARSOP公司
见证人 rPOMCP公司
政策
基本政策

保理/联合多代理:

土匪:

在Python中还没有。

模型
基本模型 扁平模型
算法
最大Plus 多目标变量消除(MOVE) 上置信变量消除(UCVE)
变量消除 本地搜索 重用迭代局部搜索
政策
Q-贪婪政策 随机策略 线性奖励学习(LLR)
多智能体高置信度探索(MAUCE) 多代理汤普森抽样(学生t分布) 多代理RMax(MARMax)
单一行动政策

中密度聚乙烯:

在Python中还没有。

模型
合作基本模型 合作最大似然模型 合作汤普森模型(Dirichlet+Student-t分布)
算法
保理LP 多智能体线性规划 联合行动学员
稀疏合作Q-Learning 合作优先清扫
政策
所有盗贼政策 Epsilon贪婪政策 Q-贪婪政策

构建说明

依赖关系

要构建库,您需要:

此外,现在还需要C++20支持(这意味着至少g++-10)

在Ubuntu系统上,可以使用以下命令安装这些依赖项命令:

sudo apt安装g++-10 cmake libboost1.71-all-dev liblpsolve55-dev lp-solve libeigen3-dev

建筑物

一旦您拥有了所有必需的依赖项,您可以简单地执行以下操作项目主文件夹中的命令:

mkdir构建光盘建造/cmake。。制作

克马克可以使用一系列标志调用以自定义输出,如果建造一切都不可取。以下标志可用:

CMAKE_BUILD_TYPE(建筑类型)#定义生成类型MAKE_ALL(全部制作)#构建项目中要构建的所有内容,但Python除外。制造_LIB#构建整个核心C++库(MDP、POMDP等)制造_MDP#仅构建核心C++MDP库制造_FMDP#仅构建核心C++Factored/Multi-Agent和MDP库MAKE_POMDP公司#仅构建核心C++POMDP和MDP库制造_测试#为编译的核心库构建库的测试制作_示例#使用编译的核心库构建库的示例制造_巨蟒#为编译的核心库构建Python绑定AI_PYTHON_版本#选择所需的Python版本(2或3)。如果没有
                   #指定时,我们尝试根据您的默认解释器进行猜测。AI_登录_禁用#库日志记录代码是否在运行时启用。

可以根据需要组合这些标志。例如:

#将构建MDP和MDP Python 3绑定cmake-DCMAKE_BUILD_TYPE=调试-DMAKE_MDP=1-DMAKE_PYTHON=1-DAI_PYTHON_VERSION=3。。

未指定任何内容时的默认标志为全部制作(_A)CMAKE_BUILD_TYPE=发布.

注意,默认情况下MAKE_ALL(全部制作)不会像以前那样构建Python绑定C++静态库的性能受到了轻微影响。您可以轻松启用它们通过使用标志制造_巨蟒.

静态库文件将直接在构建目录中可用。构建了三个独立的库:AI工具箱MDP,A工具箱POMDPAI工具箱FMDP。如果要链接到POMDP库或Factored MDP库,您还需要与MDP库链接,因为它们都使用MDP功能。

您可以在测试/文件夹。您可以使用以下命令在构建项目后执行它们直接从建造目录,完成后制作:

ctest测试

测试还简要介绍了框架,等待更完整的描述性总结。仅对库的各个部分进行测试您编译的将被构建。

要编译库的文档,您需要编程辅助工具。要使用它,只需执行从项目的根文件夹执行以下命令:

多西根

之后,文档将生成为html格式文件夹中的主目录。

编译程序

使用AI-Toolbox对C++/CMake项目进行广泛的预先设置Linux操作系统,请结帐储存库。它包含使用AI-Toolbox时我个人使用的设置。它还附带许多您可能需要其他工具,但这些工具都是可选的。

或者,要编译使用此库的程序,只需链接它针对所需的编译库,可能还针对lp_解决库(如果使用POMDP或FMDP)。

请注意,由于POMDP和FMDP库都依赖于MDP代码,因此您必须指定那些库之前链接时的MDP库,否则可能导致符号未找到错误。POMDP和保理MDP库当前不相互依赖,因此它们的顺序不问题。

对于Python,只需导入AI工具箱.so模块,您将能够使用导出到Python的类。所有类别都有文档记录,并且可以在Python CLI中运行

帮助(AIToolbox.MDP)帮助(AIToolbox.POMDP)

查看每个特定类的文档。