我正在尝试创建一个模型,模拟代理穿过从 GIS 导入的卡路里表面从原点移动到终点的过程。卡路里表面显示通过景观上任何斑块的运动相对难度,用 1(最简单)和 10(最难)之间的数字表示,存储为称为“难度”的变量。
我希望代理更喜欢更容易的方向,同时总体上向终点移动。我已经能够导入 GIS 景观并分配“难度”变量。我还知道一旦确定目标如何让特工行动。我的问题是让代理选择适当的补丁。
我认为我需要做的是将临时变量分配给代理周围的 8 个补丁,其中补丁值将是栅格的难度值 - X,如果补丁更接近末尾,则 X 是一个更高的数字观点。因此,如果代理站在每个补丁都同样困难的区域,则距离终点较近的像素将获得值 8,而下一个最近的补丁将获得 7,然后对于最远的补丁则降至 1。然后代理会选择最小的数字并移动到该补丁。
我怀疑我需要做一些事情,比如让代理
ask patches in-radius 1
检查它们到终点的距离,然后让补丁比较这些值以将它们排名在1到8之间,然后将这些值分配给一个临时变量。然后取补丁的难度值并减去临时距离变量以获得代理可以决定移动到的临时值。
首先,您可能应该将这个问题发布到 NetLogo 用户论坛而不是这里,因为它是建模问题,而不是编程问题。然而...
无论您是否清楚,您的代理人正在尝试解决一个权衡问题。它的行为方式需要追求两个目标:减少移动难度和到达目的地。权衡对于现实世界的决策至关重要,但对于建模来说并不是那么简单,而且很少包含在 ABM 中。
对问题进行建模的经典方法是数学优化。定义一个特定的目标函数,例如最小化从起点到目标的总难度,然后使用动态规划等技术来找到最佳路径。
经典方法的问题在于,它只有在你假设你的智能体知道所有补丁的难度时才有效——并且没有任何其他智能体改变它们的难度,或者补丁难度变化的其他原因。但听起来你并没有假设你的智能体“了解”他们的整个世界并且可以进行动态编程......这就是我们使用 ABM 的原因,因为我们知道这样的假设是不现实的。
我的第一个建议是使用 ODD 协议用文字写出你的模型http://jasss.soc.surrey.ac.uk/23/2/7.html, 特别关注其设计理念。这将迫使你明确地了解你的代理可以感知什么以及他们的目标是什么等等。除非你准确地决定它试图解决什么问题以及它的约束是什么,否则你无法编写一个好的代理行为模型.
您可以制定一种特殊的行为方法,例如通过它们使代理更接近目标还是远离目标的程度来衡量相邻补丁的难度。您可以通过调整权重参数等来使该方法更好地发挥作用。如果卡路里表面是随机的,你可能无法做得更好。
但是,如果你的卡路里表面不是随机的,并且有趋势或渠道,那么更聪明的方法可能会更有效(也许更现实,取决于你希望你的代理有多聪明)。我们写了一本关于 ABM 中权衡决策建模的书,使用与优化相同的概念思想,但对代理所知道的内容有现实限制,并假设他们在优化不可能时使用预测和近似来做出“好的”决策。是这里: https://press.princeton.edu/books/paperback/9780691195285/modeling-populations-of-adaptive-individuals.