我使用R构建一个基于代理的模型,使用蒙特卡罗过程.这意味着我有许多使用某种随机引擎的函数.为了获得可重复的结果,我必须修复种子.但是,据我所知,我必须在每个随机抽签或样本之前设置种子.这是一个真正的痛苦.有没有办法修理种子?
set.seed(123)
print(sample(1:10,3))
# [1] 3 8 4
print(sample(1:10,3))
# [1] 9 10 1
set.seed(123)
print(sample(1:10,3))
# [1] 3 8 4
Run Code Online (Sandbox Code Playgroud) 我在Python 3中复制了一小块Sugarscape代理仿真模型.我发现我的代码的性能比NetLogo慢约3倍.它可能是我的代码的问题,还是它可能是Python的固有限制?
显然,这只是代码的一个片段,但是Python花费了三分之二的运行时间.我希望如果我写了一些非常低效的东西,它可能会出现在这个片段中:
UP = (0, -1)
RIGHT = (1, 0)
DOWN = (0, 1)
LEFT = (-1, 0)
all_directions = [UP, DOWN, RIGHT, LEFT]
# point is just a tuple (x, y)
def look_around(self):
max_sugar_point = self.point
max_sugar = self.world.sugar_map[self.point].level
min_range = 0
random.shuffle(self.all_directions)
for r in range(1, self.vision+1):
for d in self.all_directions:
p = ((self.point[0] + r * d[0]) % self.world.surface.length,
(self.point[1] + r * d[1]) % self.world.surface.height)
if self.world.occupied(p): # checks if p is in a lookup …Run Code Online (Sandbox Code Playgroud) 我正在学习Scala,目的是使用actor并发编写基于代理的模拟.我目前对OpenCL知之甚少,在我潜入之前,有人可以告诉我它是否可能适合/兼容基于代理的模拟?
如果是这样,那么ScalaCL看起来非常有吸引力.
我正在用R构建基于代理的模型,但是尝试使用大对象却遇到了内存问题。特别地,在初始化时创建8个3D阵列,并且在每个时间步骤中,每个3D阵列都由不同的功能填充。
目前,反导系统运行了1825天,模拟了2500个人在整个景观中移动。风景中有1000个单元格。使用此配置,我没有内存问题。
在初始化时
1个3D阵列类似于:
h <- array(NA, dim=c(1825, 48, 2500),
dimnames=list(NULL, NULL, as.character(seq(1, 2500, 1))))
## 3th dimension = individual ID
Run Code Online (Sandbox Code Playgroud)1个3D阵列类似于:
p <- array(NA, dim=c(1825, 38, 1000),
dimnames=list(NULL, NULL, as.character(seq(1, 1000, 1))))
## 3th dimension = cell ID
Run Code Online (Sandbox Code Playgroud)6个3D阵列如下:
t <- array(NA, dim=c(1825, 41, 2500),
dimnames=list(NULL, NULL, as.character(seq(1, 2500, 1))))
## 3th dimension = individual ID
Run Code Online (Sandbox Code Playgroud)数组包含字符/字符串数据类型。
理想情况下,我想增加个人数量和/或补丁数量,但是由于内存问题,这是不可能的。似乎有一些可用的工具,例如bigmemory,gc来管理内存。这些工具有效吗?我是编程的初学者,没有管理内存和高性能计算的经验。任何建议都将不胜感激,感谢您的宝贵时间。
sessionInfo()R版本3.5.3(2019-03-11)平台:x86_64-w64-mingw32 / x64(64位)运行于:Windows 7 x64(内部版本7601)Service Pack 1
我最近遇到过"多智能体计算"这个术语,我并不知道它是什么.我读过一本关于它的书,但这并没有回答代理人是什么的基本问题.
有人在那里有一个指向一些清晰简洁的参考指针并且在没有废话/营销说话的情况下回答问题吗?我想知道这是否是我应该熟悉的事情,或者是否是我可能忽略的一些废话,因为我真的说不出来.
NetLogo是大型模型(> 10,000个补丁,海龟)的良好平台吗?
如何加快运行速度非常慢的模型?
在二维空间模拟中跟踪代理的一些好的数据结构是什么?
我已经看到一些对四叉树(我理解)和kd树(我不太了解)的引用.
我正在寻找一个代理人可以有效地说出的话,"我知道我的位置,我想知道哪些代理人在我附近(在我自己的某个半径范围内)."
非常感谢示例(伪代码很好).
我在Java工作.
我正在考虑在我的模型中为不同类型的代理实施学习策略。说实话,我还是不知道该先问什么样的问题,或者从哪里开始。
我有两种类型的代理,我希望他们通过经验来学习,他们有一组行动,根据可能发生的具体情况,每种行动都有不同的奖励。我是强化学习方法的新手,因此欢迎任何关于我应该问自己什么样的问题的建议:)
以下是我将如何阐述我的问题:
在我的模型中,动作和后续状态之间没有关系,这让我想知道在这种情况下是否可以考虑强化学习。
我希望在这里优化的是我的代理能够以更好的方式推理当前情况,而不仅仅是响应由其内部状态触发的需求。他们有一些个性,可以定义他们的长期目标,并可以影响他们在不同情况下的决策,但我希望他们记住在某种情况下采取的行动有助于他们增加他们首选的长期目标。
reinforcement-learning agent-based-modeling netlogo q-learning
NetLogo非常适合基于代理的建模......除了语言.我总是发现自己被扭曲我的大脑试图找出如何做一些事情,应该是简单的代码(如实现一个简单的case语句)中的NetLogo的Logo实现.徽标不是程序员的语言(对于这个断言所激怒的人道歉).
我看到了Abe Gong的Tengolo项目,声称这样做(http://compsocsci.blogspot.com/2012/02/announcing-tengolo-python-alternative.html),但该项目似乎已被放弃.堆栈溢出中的另一个问题(基于代理的模拟:性能问题:Python与NetLogo和Repast)似乎表明Python会更慢.
看起来很可能使用Jython编译成NetLogo可以使用的模块,但我想知道是否有人知道某些事情会让我用像Python这样的合理语言进行NetLogo模拟.思考?
netlogo ×4
modeling ×2
multi-agent ×2
performance ×2
python ×2
r ×2
2d ×1
java ×1
memory ×1
montecarlo ×1
opencl ×1
q-learning ×1
quadtree ×1
scala ×1
scalacl ×1
simulation ×1
toolkit ×1