在GitHub的年度报告中,从编程语言的受欢迎程度(即代码库贡献)来看,Python的排名仅次于JavaScript,是世界上第二大受欢迎的语言。Python是一种用于强化学习、数据处理和数据展示的流行语言。对此,AnyLogic开发了专用于与python交互使用的API库插件——Pypeline库,让您的仿真模型更上一层楼。本文我们会简单的介绍一下Pypeline库的安装和使用,想要了解更多使用信息,可以查看我们的Pypeline 网络研讨会视频以及相关的自带案例。
Pypeline是支持AnyLogic在模型运行时调用Python的定制连接库。它可以与本地安装的Python连接,辅助使用Python库。
Pypeline库是为用户调用Python开发的,并非软件自带的资源库,因此想要使用Pypeline库还需要做一下准备工作,将它集成到AnyLogic后使用。
首先,你要有AnyLogic程序(无拘版本,PLE、专业版、科研版都可以);
其次,你需要在计算机上安装有Pyhton 3 (任何版本都可,Windows 商店除外)。
如果条件达成那就可以开始准备Pypeline的导入了。
注意:由于无法从外部调用其可执行文件,因此不支持 Windows 商店中的 Python。 支持任何其他来源(例如,官方安装程序、anaconda、系统包管理器)。
Pypeline库的导入或者说安装非常简单,下载并导入即可,详细步骤如下:
Step 1.下载Pypeline.jar包压缩文件,并解压。
下载链接:
https://github.com/t-wolfeadam/AnyLogic-Pypeline/releases
AnyLogic-Pypeline/releases
Step 2.下载好Pypeline库后,打开AnyLogic软件,找到面板(Palette)>>左下角的“+”>>管理库……
Step 3.进入管理库页面,选择“添加”,找到Step 1中我们下载的库文件jar包,进行添加。
Step 4. 添加后,可以在管理库页面和面板栏中看到导入Pypeline库件。
这一部分中我们会介绍Pypeline使用的简单测试以及基础用法。
安装后可以运行一个简单的模型,测试是否正确连接:
如同其他的AnyLogic组件一样,将pyCommunicator拖拽到编辑区后,选中,可以查看并修改其属性设置:
下面我们接着上面的测试连接时的模型,做一个小的使用示例,您也可以用软件自带案例Demo - Passing Data Types,了解传递数据类型这个用法。
注:其中pyCommunicator为拖入的Pypeline组件的名称
Step 1 .从控件面板拖拽一个按钮到编辑区,设置标签为“设置X 值”,在其行动属性中键入下列代码:
pyCommunicator.run("x = 3.14"); |
---|
Step 2 .从控件面板拖拽另一个按钮,设置标签为“获取X”,在其行动属性中键入下列代码:
Attempt xValue = pyCommunicator.runResults(double.class, "x");traceln(xValue); |
---|
Step 3 .运行模型!首先单击“设置x”按钮,然后按“获取x”按钮;之后,指定的数字应打印到控制台。
1.直接运行一个字符串形式的Python代码。
使用run函数,可以直接调用Python运行String类型的Python代码。例如:pyname.run(“xxxx”),pyname为pypeline智能体的名称,xxxx为Python代码。.
2. 用runResults,可以直接读取python代码运行结果
例如:pyname.runResults(String.class, "file.read()");
file.read()是python代码,表示读取文件
3. 用String.format获取java中参数赋值给python代码
例如:
run(
String.format("with open('%s', 'w') as f:", filename),
String.format(" f.write('''%s''')", json)
);
4. 调用.py文件
一是runFile方法 例如:
runFile(PythonCommandType.PYTHON, "say_hello.py");
二是run("from tsp_solver import FacilityOrderSolver");导入所需文件名中的某一方法使用,此方法需要传参时可以通过run运行下方方法传参
例如:
String.format( // pass in distance matrix and home index
"solver = FacilityOrderSolver(%s, %s)",
pyCom.toJson(buildDistanceMatrix()),
home_index
)
在目前的AnyLogic中,Java是唯一的原生脚本语言,Pypeline库是为使用Python搭建的桥梁,不能作为取代方案。并且,需要注意使用Pypeline是会增加一定的计算机负载的。另外,以Python为原生脚本语言的AnyLogic Python在去年已经进入测试阶段,未来或许您可以直接使用Python进行AnyLogic建模,让我们一起期待吧。
想要了解更多使用信息,可以查看我们的Pypeline 网络研讨会视频以及相关的自带案例。
帮助>>示例模型>>How-To Models>>Using Python in AnyLogic