我需要使用Repast Simphony作为模拟器开发Java版本的Iterated Prisoner Dilemma.
这些想法是每个人Player都是一个代理人,我们有一个无法移动的n x n网格Player.每个人Player必须与4个邻居(北部,南部,西部和东部)进行比赛,根据每轮比赛的4个不同比赛的结果找到最佳策略.
由于没有内置系统在Repast Simphony中的代理之间交换消息,我必须实施某种解决方法来处理代理的同步(A vs B和B vs A应该算作同一轮,这就是他们需要的原因要同步).
这是通过将每一轮视为:
Player 我为4个敌人中的每一个选择了下一步行动Player 我向4个敌人中的每一个发送正确的动作Player 我等待4个敌人中的每一个回复根据我对Repast Simphony的理解,预定的方法是顺序的(没有代理级并行),这意味着我被迫以与发送方式不同的方式进行等待(以较低的pritority安排以确保完成所有发送)在开始等待之前).
这里的问题是,尽管收到了所有4条预期的消息(至少这是打印的内容),一旦等待方法启动它报告的接收元素少于4个.
这是从Player课程中获取的代码:
// myPoint is the location inside the grid (unique, agents can't move and only one per cell is allowed)
public int hashCode() {
final int prime = 31;
int result = …Run Code Online (Sandbox Code Playgroud) 在Windows 10系统上全新安装Repast Symphony 2.5.0(Win 64bit)和JDK 9.0.1后,导入JZombies_Demo示例时,无法使用默认配置启动模型.
错误说:
An internal error occurred during: "Launching JZombies_Demo Model".
org.codehaus.groovy.eclipse.core.builder.GroovyClasspathContainer.<init>(Lorg/eclipse/core/resources/IProject;)V
Run Code Online (Sandbox Code Playgroud)
当我编辑默认运行配置时,在Dependencies选项卡中,我只看到JRE系统库而没有其他内容.在同一选项卡中,启用了恢复默认条目 - 当我按下它时,将添加Repast Symphony中的所有依赖项,并且之前的错误消失.但是,在这种情况下,当尝试启动另一个错误时:
saf.core.runtime.Boot - null
java.lang.NullPointerException
at saf.core.runtime.Boot.init(Boot.java:79)
at saf.core.runtime.Boot.main(Boot.java:246)
at repast.simphony.runtime.RepastMain.main(RepastMain.java:43)
Run Code Online (Sandbox Code Playgroud)
我还在Repast Mailing List上看到了这个问题,看到有人在谈论boot.properties文件X\eclipse\plugins\repast.simphony.runtime_2.5.0夹中丢失的文件.但是,该文件在那里很好.因此,我尝试将此链接与上一个错误相关联,并看到(RepastMain.java:43)该pathInfo值实际上是X\eclipse\plugins\repast.simphony.bin_and_src_2.5.0.因此,我尝试boot.properties将运行时目录复制到bin_and_src - 这删除了以前的错误,但带来了一些与UI初始化和错误相关的警告:
repast.simphony.ui.RSUIPlugin - Fatal error starting Repast
java.lang.NoSuchMethodError: com.jgoodies.forms.layout.ColumnSpec.createGap(Lcom/jgoodies/forms/layout/ConstantSize;)Lcom/jgoodies/forms/layout/ColumnSpec;
at com.jgoodies.forms.layout.FormSpecs.<clinit>(FormSpecs.java:115)
at repast.simphony.ui.RunOptionsPanel.initComponents(RunOptionsPanel.java:114)
at repast.simphony.ui.RunOptionsPanel.<init>(RunOptionsPanel.java:39)
at repast.simphony.ui.RSGui.addRunOptionsView(RSGui.java:558)
at repast.simphony.ui.RSApplication.initGui(RSApplication.java:655)
at repast.simphony.ui.RSAppConfigurator.fillBars(RSAppConfigurator.java:52)
at saf.core.ui.GUICreatorDelegate.createDisplay(GUICreatorDelegate.java:160)
at saf.core.ui.GUICreator.createDisplay(GUICreator.java:12)
at repast.simphony.ui.RSUIPlugin$1.run(RSUIPlugin.java:102)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 大家都说Jave是用于大型系统和工程项目的语言,它的运行速度比大多数其他语言都要快得多。我只是将其与另一种基于Agent的建模语言-Netlogo进行了比较,发现Netlog在经典的狼羊模拟模型中比基于Jave的Repast快四倍。两种模型都使用相同的参数进行仿真,并实时运行5秒钟。Netlogo可以模拟8000多个时间步长,而Jave Repast只能执行2600多个时间步长。为什么?