在 NetLogo 中死亡后,是否可以更新界面中的代理属性?
Is it possible to update the agent properties in the interface after its deat in NetLogo?
您好,我遇到以下困难:
模型描述:代理在环境中移动收集资源。达到最大资源值后,代理死亡。
问题:关于每个代理收集的资源的导出数据具有正确的值,但是通过 ui 检查代理,这些值在代理的最后一次迭代中没有更新(它死了).
问:有什么方法可以在代理死后更新界面中的代理属性?
display
可以强制视图更新其值。
有关更多信息,您可以阅读编程指南的 view updates section。
我认为理解你为什么要这样做是相关的。
通常情况下,构建模型是为了导出其数据 - 通过 BehaviorSpace 或与您的项目相关的其他方式。虽然在模型开发期间检查接口(包括检查代理)发生了什么很有用,但我想知道是什么需要让您想要更改代码以检查接口中的代理在一个滴答声中(代理人死亡的滴答声)。
and 您收到了您之前的一些问题的答案,一般是关于如何确保您的代码在代理必须导出数据和死亡的情况下顺利运行。
因此,我假设您的模型现在能够正确地从代理导出它需要的数据。这意味着您的一种选择是简单地读取导出数据的文件。
如果你真的想添加代码以便通过接口读取额外的数据滴答,那么你必须考虑到不,一旦代理人死亡,它的信息就消失了(除了代理人导出的信息到一个文件,这是你的情况)。
这意味着您有三个选择。
- 要求代理商将该信息保存在 NetLogo 中(即除了他们已经执行的导出之外)。这听起来很不切实际:你必须提前声明变量来存储这些信息……你知道在你的模型中有多少代理人在每个滴答声中死亡吗?另外,这似乎是一个非常不必要的结构,只从接口读取一条数据。让我们肯定地放弃这个选项。
- 要求代理商打印该信息。想象一下,您想知道海龟的
xcor
,而不是让它们 die
您会做:
to leave-simulation
show xcor
die
end
- 要求特工存活到足以让你在他们最后一次报价时检查他们。在这种情况下,您只需将位置更改为
die
过程。例如,如果初始代码具有这种类型的结构...
turtles-own [
resources
]
to setup
...
end
to go
ask turtles [
collect-resources
if (resources > X) [die]
]
end
to collect-resources
...
end
...你可以这样做:
turtles-own [
resources
]
to setup
...
end
to go
ask turtles [
if (resources > X) [die]
collect-resources
]
end
to collect-resources
...
end
所以只需调换 die
和 collect-resources
程序的顺序。这样,代理不会在达到最大资源值的 tick 期间死亡;相反,它们会在下一个 tick 开始时死亡,这将使您有时间在它们达到最大资源值时检查它们。
您还可以添加
to go
ask turtles [
if (resources > X) [die]
collect-resources
if (resources > X) [set color red] ; Or any other color that would distinguish these specific turtles.
]
end
以便从界面中清楚地知道哪些特工将在接下来的滴答声中死亡(无需您 运行 在命令中心进行查询,例如 ask turtles with [resources > X] [print self]
).
然而,对于上面的选项 3,我认为这一切都可以追溯到我已经提到的两个回复 ( and ) 中包含的基本概念,即只要你需要就不要杀死你的特工他们。
我开始怀疑这些问题是否都 事实上 重复?
您好,我遇到以下困难:
模型描述:代理在环境中移动收集资源。达到最大资源值后,代理死亡。
问题:关于每个代理收集的资源的导出数据具有正确的值,但是通过 ui 检查代理,这些值在代理的最后一次迭代中没有更新(它死了).
问:有什么方法可以在代理死后更新界面中的代理属性?
display
可以强制视图更新其值。
有关更多信息,您可以阅读编程指南的 view updates section。
我认为理解你为什么要这样做是相关的。
通常情况下,构建模型是为了导出其数据 - 通过 BehaviorSpace 或与您的项目相关的其他方式。虽然在模型开发期间检查接口(包括检查代理)发生了什么很有用,但我想知道是什么需要让您想要更改代码以检查接口中的代理在一个滴答声中(代理人死亡的滴答声)。
如果你真的想添加代码以便通过接口读取额外的数据滴答,那么你必须考虑到不,一旦代理人死亡,它的信息就消失了(除了代理人导出的信息到一个文件,这是你的情况)。 这意味着您有三个选择。
- 要求代理商将该信息保存在 NetLogo 中(即除了他们已经执行的导出之外)。这听起来很不切实际:你必须提前声明变量来存储这些信息……你知道在你的模型中有多少代理人在每个滴答声中死亡吗?另外,这似乎是一个非常不必要的结构,只从接口读取一条数据。让我们肯定地放弃这个选项。
- 要求代理商打印该信息。想象一下,您想知道海龟的
xcor
,而不是让它们die
您会做:
to leave-simulation
show xcor
die
end
- 要求特工存活到足以让你在他们最后一次报价时检查他们。在这种情况下,您只需将位置更改为
die
过程。例如,如果初始代码具有这种类型的结构...
turtles-own [
resources
]
to setup
...
end
to go
ask turtles [
collect-resources
if (resources > X) [die]
]
end
to collect-resources
...
end
...你可以这样做:
turtles-own [
resources
]
to setup
...
end
to go
ask turtles [
if (resources > X) [die]
collect-resources
]
end
to collect-resources
...
end
所以只需调换 die
和 collect-resources
程序的顺序。这样,代理不会在达到最大资源值的 tick 期间死亡;相反,它们会在下一个 tick 开始时死亡,这将使您有时间在它们达到最大资源值时检查它们。
您还可以添加
to go
ask turtles [
if (resources > X) [die]
collect-resources
if (resources > X) [set color red] ; Or any other color that would distinguish these specific turtles.
]
end
以便从界面中清楚地知道哪些特工将在接下来的滴答声中死亡(无需您 运行 在命令中心进行查询,例如 ask turtles with [resources > X] [print self]
).
然而,对于上面的选项 3,我认为这一切都可以追溯到我已经提到的两个回复 (