问题标签 [repast-simphony]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
repast-simphony - Repast:初始化缓慢的原因
我发现初始化我的模型非常慢。完成需要 40 秒!
我的代码包含两个主要部分:1)CSV 数据阅读器将首先运行以加载数据,完成读取和处理 35000+ 行需要不到 1 秒的时间(请参见下面的第一部分代码);2) 随后初始化代理和边。特别是,边缘初始化将利用 CSV 阅读器中加载的数据(参见下面的第二部分代码)。
第一部分:CSVReader 代码
这是 CSVReader 使用的输入文件:
第二部分:边缘(路由)初始化代码。我怀疑是查询循环消耗了大部分初始化时间:
更新:根据我的测试,我发现这条线会大大减慢初始化过程。
如果没有这条线,它只需要 3 秒就可以完成。使用这条线,模型需要 20 秒!context.add() 的底层机制是什么?如何解决和改善这个问题?
repast-simphony - Repast:无法从 Context Builder 中的另一个类调用方法
我不知道为什么我得到 NullPointerException:
下面是代码。当我将它直接放在初始化(上下文构建器)中时,查询有效,但是当我将此代码放在另一个类中并在上下文构建器中调用它时,它会报告 NullPointerException。
当我在上下文生成器中执行此操作时,它会报告 nullPointerException
更新:
我只是找到“上下文上下文 = ContextUtils.getContext(this);”这一行 不管用。上下文仍然为空。为什么?但我需要这一行,因为查询需要上下文作为参数。
但是,如果我按照您的建议将上下文直接传递给 load_data() 方法,它就可以工作。
为什么我无法使用“Context context = ContextUtils.getContext(this);”识别上下文 ? 如果它在 step() 中作为方法调用,则此方法有效,但如果在 Context Builder 中作为方法调用,则此方法失败。
repast-simphony - 就餐 Simphony 3D GIS
我正在将 Repast Simphony 用于涉及空域的项目,并希望代理在具有静态地面代理的 GIS 投影上方的 3D 连续空间中移动。目前,我在同一上下文中有单独的投影Geography
和ContinuousSpace
投影,并在两个投影中同时移动代理,但就代理运动而言,GIS 显示仅为 2D。
我注意到Geometry
用于在 a 中设置位置的对象Geography
有一个Coordinate.z
字段,但是将z
值设置为除此之外的任何其他值什么NaN
都不做。我在文档中没有找到任何关于此的内容。
我计划实现接口并进行自己的投影,因为由于方法签名('getAdder')冲突Projection
,我无法在同一个类中实现Geography
and 。ContinuousSpace
这似乎是一项相当艰巨的任务,所以我认为值得检查是否有更好的方法来解决这个问题?
repast-simphony - 在 Repast Symphony 中动态更改代理的边框颜色
我必须动态更改代理的边框颜色。代理在显示屏上显示为默认圆圈。显示的颜色必须根据代理类中定义的布尔变量进行更改。首次创建和显示代理时,它具有正确的样式,但是当代理类中的布尔变量发生变化时,边框颜色不会改变。如果我对代理的填充颜色执行相同的操作,则效果很好。我把我使用的代码放在这里:
创建代理并将其添加到上下文时,它会采用正确的颜色,但如果isParticularNode
更改,边框颜色不会更改。我也尝试过导入界面StyleOGL2D
,但问题仍然存在
agent-based-modeling - 使用模型参数列表调用 Repast 模型
我有一个基于代理的模型,它是在 Repast 中开发的。要校准模型,我需要使用参数列表运行模型。并且,使用一些优化算法来找到最佳参数集(最小化一些损失值)。我想知道如何在 Repast Simphony 中做到这一点。显然,标准的 Repast GUI 不支持这一点。我尝试了批量运行,但似乎也不是我想要的。我可以将 JAVA 代码打包为 JAR 文件,然后从命令行运行它。但是如何让程序在我的 Repast/JAVA 实现中采用命令行参数呢?
repast-simphony - Repast - 如何从查询中对代理集进行排序?
以 Jzombie 模型为例,如果我想查询所有能量等于 5 的人并将他们放在一个列表中,我将有以下代码:
但是,human_list 中的 human 的顺序是随机的,并且在不同的模拟运行之间是不同的。这会导致结果不一致的问题,如下所示:
我实际上想用 engergy == 5 查询人类并按他们的 id 对它们进行排序,例如:
这样当我执行一些进一步的操作时,我总能得到一致的结果。
repast-simphony - Repast - 从另一个 java 程序调用模拟
我正在尝试从另一个 java 程序中调用我的模拟模型。我按照官方说明获得了如下代码:
它没有用。我认为这是由于错误的类路径。如何正确配置?
java - Repast Simphony:由网络投影引起的运行时 NullPointerException
我在使用网络投影的 Repast Simphony 时遇到问题。我有一系列代理在连续空间上排列成一个环,每个代理都使用网络投影连接到它的后继者。在实践中,每个代理都有一个从自身开始并指向其后继者的 Edge,然后它又被另一个 Edge 指向。代理来来去去,在执行模拟器时,我有以下堆栈跟踪:
有趣的事实:如果我从显示器上移除网络投影,什么都不会失败。
这是我在构建器中初始化网络和连续空间的方式:
在代码中我以这种方式访问网络
最后,在代理的代码中,我以这种方式更改边缘:
关于发生了什么的任何想法?
编辑:我模拟的是Chord,一种分布式哈希表协议。我的代理称为节点,每个节点都有一个指向其前任和后继的指针,并且它还处理指向其后继的边缘。
在任何滴答声中,都会选择并移除 3 个随机节点。此移除旨在作为节点的自愿离开,因此每个节点都会通过以下方式通知其后继者和前任者离开:
之后,每个被移除的节点都会从上下文中移除。
以类似的方式,每个滴答都会创建 3 个新节点。选择一个随机位置后,将节点添加到上下文中,并添加一条从自身指向其后继节点的边,以这种方式
最后,每个节点都有一系列计划的方法,这些方法在每次迭代时执行。他们检查是否有新的后继者,在这种情况下,删除当前边,并添加新边
这些都是在网络上执行的所有操作。当然,协议是在稳定状态下模拟的,所以在开始时,构建器会创建一个包含N个节点和所有已校正边的上下文。
错误发生的时刻是不确定的:有时在 150 个滴答声之后,有时在第 5 个。
repast-simphony - java - 从 Eclipse 运行 repast simphony 时出现 NSException 错误
我遇到了一个错误,当 Eclipse 提示时,它会阻止 repast simphony 运行。在出现提示时,该窗口会消失并且错误消息会出现在 Eclipse 中,而不是运行模型。
我在 Mac 上执行的步骤(用于就餐 simphony 设置)是:
1) 从 Adopt Open JDK 下载 Java 8 JDK(因为我需要 Java 8 以后才能使用 repast 3D)。将包复制到 /Library/Java/JavaVirtualMachines。
2) 下载 Eclipse IDE for Eclipse Committers 2019-06 并放入 Applications 文件夹。
3)从更新站点(https://dist.springsource.org/release/GRECLIPSE/3.4.0/e4.12 )安装Groovy Eclipse 3.4.0 ,并从这里安装Eclipse Groovy开发工具和Groovy编译器2.4 Eclipse 中的链接。
4)在 Eclipse 中从https://repocafe.cels.anl.gov/repos/repast安装 repast simphony 2.7.0 。
5) 在 Eclipse 中将 Groovy 编译器设置为 2.4.17。
6) 导入就餐示例
7) 选择一个演示模型(例如,GeoZombies)并尝试运行。
完成上述第 7 步后,我会收到几条控制台警告消息:
警告:发生了非法反射访问操作警告:com.thoughtworks.xstream.core.util.Fields 的非法反射访问(文件:/Applications/Eclipse.app/Contents/Eclipse/plugins/repast.simphony.runtime_2.7.0/ lib/xstream-1.4.7.jar) 到字段 java.util.TreeMap.comparator 警告:请考虑将此报告给 com.thoughtworks.xstream.core.util.Fields 的维护者 警告:使用 --illegal-access=warn启用对进一步非法反射访问操作的警告警告:所有非法访问操作将在未来版本中被拒绝
即使 Eclipse 控制台中出现此错误,repast simphony 的 Java 窗口也会打开。但是,当我在 GeoZombies 的 Java 窗口中单击“开始运行”按钮时,Java 窗口会在没有警告的情况下关闭,并且 Eclipse 控制台会产生以下错误:
2019-12-03 11:03:46.637 java[63571:533520] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“NSWindow 拖动区域只能在主线程上无效!” *jnilib 0x0000000136bfdf9e Java_jogamp_nativewindow_macosx_OSXUtil_CreateNSWindow0 + 398 7 ??? 0x000000011e0f5c90 0x0 + 4799290512 ) libc++abi.dylib:以 NSException 类型的未捕获异常终止
我将不胜感激有人可以提供有关如何解决此错误并使就餐 simphony 正常工作的任何帮助。谢谢你。