gpt4 book ai didi

netlogo - 是否有可能有一个带有两个条件(ticks mod 和概率)的 ifelse 语句?

转载 作者:行者123 更新时间:2023-12-02 00:50:02 25 4
gpt4 key购买 nike

我是 Netlogo 的新手,但我想建立一个模型,其中代理人(汽车司机)将以一定的概率在特定时间离开他的家。假设他星期一早上 1 点离开(如果将滴答声与时间联系起来,那么一个滴答声就是一个小时)。

我尝试将 ifelse 语句与第二个语句结合使用,该语句必须经过验证才能使整个语句变为真。在下面的例子中,汽车/智能体应该以 7.7% 的概率离开它的房子并开到一个叫做 underway-patches 的补丁。由于一周有 168 小时,我尝试通过 mod ticks 链接小时(因此,mod ticks = 1 等于星期一早上 1 点)。

仅此一项就有效:

ifelse ticks mod 168 = 1 and random-float 100.0 < 7.7
[ ask turtles [ move-to one-of underway-patches ] ]
[ ask turtles [ move-to one-of home-patches] ]

这很好用。所以我总是 100 只海龟中大约有 7 只移动到进行中的补丁。

但是如果我现在加上第二个小时,那么凌晨 2 点,第一个函数就不再起作用了(凌晨 1 点根本没有海龟移动——只有凌晨 2 点)。我预计 100 只海龟中大约有 7 只会在凌晨 1 点移动到航行区,然后我预计 100 只海龟中大约有 5 只会在凌晨 2 点移动到航行区(第一个小时的另外 7 只应该返回)到家庭补丁)。

这不再有效了:

; Monday, 1 am
ifelse ticks mod 168 = 1 and random-float 100.0 < 7.7
[ ask turtles [ move-to one-of underway-patches ] ]
[ ask turtles [ move-to one-of home-patches] ]

; Monday, 2 am
ifelse ticks mod 168 = 2 and random-float 100.0 < 5.1
[ ask turtles [ move-to one-of underway-patches] ]
[ ask turtles [move-to one-of home-patches] ]

感谢您的帮助!提前致谢。

最佳答案

首先,祝贺您提出了一个非常明确的问题,尽管您是该网站的新手。

问题不在于您有多个 ifelse 语句,这很好。问题是您的 ifelse 语句正在对所有海龟应用单一测试。只需看第一个带有一条语句的示例:

ifelse ticks mod 168 = 1 and random-float 100.0 < 7.7
[ ask turtles [ move-to one-of underway-patches ] ]
[ ask turtles [ move-to one-of home-patches] ]

想象一下,它是刻度数 1。计算机运行随机数生成器并得到 2。太好了,条件为真,所以第一个 block 开始运行。这将使所有海龟移动到进行中的补丁。类似地,如果随机数生成器返回 10,则条件为 false,所有海龟都会移动到 home-patches。

你可能想要更像的东西(你不必在多行上做括号,我这样做是为了让你可以看到结构的逻辑 block ):

ifelse ticks mod 168 = 1
[ ask turtles-on home-patches
[ if random-float 100.0 < 7.7
[ move-to one-of underway-patches
]
]
]
[ ask turtles-on underway-patches [ move-to one-of home-patches] ]

或者如果你想要移动正确比例的海龟:

ifelse ticks mod 168 = 1
[ let num-to-move 0.077 * count turtles-on home-patches
ask n-of num-to-move turtles-on home-patches
[ move-to one-of underway-patches
]
]
[ ask turtles-on underway-patches [ move-to one-of home-patches] ]

只是一般性的观察,如果你要为每个可能的开始时间编写代码,你将有很多相同的代码,除了刻度和比例。你说你是 NetLogo 的新手,所以我不想太快跳到更高级的概念,但是当你进一步思考你的模型时再回来,我们可能会帮助你创建一个过程这减少了重复代码的需要。

更新:重用代码的一种方法

这不太正确,因为我不太清楚你想要什么样的运动,但这是一个完整的模型,其中比例存储在一个列表中,ticks 用于识别列表中的正确项目。然后将该比例传递给一段移动海龟的代码。

globals
[ home-patches
underway-patches
proportions
]

to setup
clear-all
set proportions [0 0.077 0.05 0.15]
set home-patches patches with [abs pxcor <= 3 and abs pycor <= 3]
ask home-patches [ set pcolor white ]
set underway-patches patches with [not member? self home-patches]
ask underway-patches [ set pcolor yellow ]
create-turtles 100
[ set color red
]
reset-ticks
end

to go
move-turtles item (1 + ticks mod 3) proportions
tick
end

to move-turtles [#prop]
print #prop
ask turtles
[ ifelse member? patch-here home-patches
[ if random-float 1 < #prop
[ move-to one-of underway-patches
]
]
[ move-to one-of home-patches
]
]
end

关于netlogo - 是否有可能有一个带有两个条件(ticks mod 和概率)的 ifelse 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com