NetLogo-创建集群作为海龟管理的农场
在设置中,我将创建一个命令,该命令生成随机数目的随机维度集群。每个集群将由一个代理农民管理。每一块土地都代表着农民可以用不同类型的种子种植的潜在作物。是否值得在radius中使用该函数?如果你需要更多的细节,请问我 非常感谢你的回答,这正是我需要的!现在我有另一个问题,我按照你的建议实施了这个计划,现在我展示了一个像你这样的世界,但我不知道如何让我的代理人——农民——在他们农场大小的每一块土地上行动。在我的模拟中,农民只在他们所在的补丁上进行操作。我尝试以不同的方式扩展代理函数补丁集的操作,但每次在运行过程中都出现错误。 正如Marzy在上一篇文章中所建议的,我将我的模型代码包括在内。 主要问题是将代码底部的耕种过程扩展到属于农民的每个补丁 多谢各位NetLogo-创建集群作为海龟管理的农场,netlogo,Netlogo,在设置中,我将创建一个命令,该命令生成随机数目的随机维度集群。每个集群将由一个代理农民管理。每一块土地都代表着农民可以用不同类型的种子种植的潜在作物。是否值得在radius中使用该函数?如果你需要更多的细节,请问我 非常感谢你的回答,这正是我需要的!现在我有另一个问题,我按照你的建议实施了这个计划,现在我展示了一个像你这样的世界,但我不知道如何让我的代理人——农民——在他们农场大小的每一块土地上行动。在我的模拟中,农民只在他们所在的补丁上进行操作。我尝试以不同的方式扩展代理函数补丁集的操作,但每
turtles-own [
profit-from-fuel
profit-from-food
expected-fuel-sell-price
expected-food-sell-price
profit
farm
farm-size
;risk-attitude-food
;risk-attitude-fuel
]
patches-own [
fuel-yeld
food-yeld
land-sustainability
water-level
belongs-to
]
globals [
fuel-sell-price
food-sell-price
governs
]
to setup
clear-all
clear-all-plots
create-farmers
setup-land
reset-ticks
ask turtles
[ set-farm-in-radius farm-size ]
set fuel-sell-price 30 ;+ random 2 + random -2
set food-sell-price 30 ;+ random 2 + random -2
end
to create-farmers
create-turtles 30
[
set shape "person farmer"
setxy random-pxcor random-pycor
set profit-from-fuel 0 ; indicizzazione del profitto iniziale a 0
set profit-from-food 0 ; indicizzazione del profitto iniziale a 0
set farm-size random 5 + 1
set label farm-size
]
end
to setup-land
ask patches [set belongs-to nobody]
ask patches
[
set pcolor 3
set food-yeld 10000
set fuel-yeld 10000
set land-sustainability random 5
set water-level random 3
]
end
to set-farm-in-radius [d]
move-to one-of patches with [not any? other patches in-radius d with [belongs-to != nobody]]
set farm patches in-radius farm-size
ask farm [set belongs-to myself]
let c random 6 + 61
ask farm [set pcolor c]
end
to set-farm-distance [d]
move-to one-of patches with [not any? other patches with [belongs-to != nobody and distance myself < d]]
set farm patches with [distance myself < d]
ask farm [set belongs-to myself]
let c random 6 + 61
ask farm [set pcolor c]
end
to go
tick
ask turtles [
set expected-fuel-sell-price fuel-sell-price + random 5 + random -5
if expected-fuel-sell-price < 0 [set expected-fuel-sell-price 1]
set expected-food-sell-price food-sell-price + random 5 + random -5
if expected-food-sell-price < 0 [set expected-food-sell-price 1]
set profit profit-from-fuel + profit-from-food
if profit = 0 [ set profit 1 ]
]
set fuel-sell-price fuel-sell-price + random 5 + random -5
if fuel-sell-price < 0 or fuel-sell-price = 0 [set fuel-sell-price 1 ]
set food-sell-price food-sell-price + random 5 + random -5
if food-sell-price < 0 or food-sell-price = 0 [set food-sell-price 1]
ask turtles [
cultivate
set profit profit-from-food + profit-from-fuel
;if water-level > 0.95 [ set profit profit - (profit * ( 2 / profit )) ] valutare se inserire anche una failing probability
]
if ticks = Duration [ stop ]
if ticks > Duration [stop]
end
to cultivate
ifelse land-sustainability < 2.1 or water-level = 1
[ set pcolor green set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
]
[
let utility-from-food ((food-yeld * expected-food-sell-price * land-sustainability) ^ risk-attitude ) / risk-attitude
let utility-from-fuel ((food-yeld * expected-fuel-sell-price * land-sustainability) ^ (1 - risk-attitude) ) / ( 1 - risk-attitude)
ifelse utility-from-food < utility-from-fuel
[
set pcolor red
set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
]
[
set pcolor green
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
]
]
end
新版本_______--
正如Seth所说,这与stackoverflow中的其他问题类似,下面是更相关的答案:
turtles-own [farm farm-size]
patches-own [belongs-to]
to setup
clear-all
ask patches [set belongs-to nobody]
create-turtles 9
[
set farm-size random 5 + 1
set label farm-size
]
ask turtles
[
set-farm-in-radius farm-size
]
ask patch -8 14 [set plabel "set-farm-in-radius"]
end
to set-farm-in-radius [d]
move-to one-of patches with [not any? other patches in-radius d with [belongs-to != nobody]]
set farm patches in-radius farm-size
ask farm [set belongs-to myself]
let c random 8 + 21
ask farm [set pcolor c]
end
to set-farm-distance [d]
Move-to one-of patches with [not any? other patches with [belongs-to != nobody and distance myself < d]]
set farm patches with [distance myself < d]
ask farm [set belongs-to myself]
let c random 8 + 21
ask farm [set pcolor c]
end
更新:
to cultivate
ifelse land-sustainability < 2.1 or water-level = 1
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set food 1
]
]
[
let utility-from-food ((food-yeld * expected-food-sell-price * land-sustainability) ^ risk-attitude ) / risk-attitude
let utility-from-fuel ((food-yeld * expected-fuel-sell-price * land-sustainability) ^ (1 - risk-attitude) ) / ( 1 - risk-attitude)
ifelse utility-from-food < utility-from-fuel
[
set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set fuel 1
]
]
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set food 1
]
]
]
end
to recolor-farm
if food = 1 [set pcolor green ]
if fuel = 1 [set pcolor red]
end
在培养后添加询问农场[Recor farm]第二部分的答案:
to cultivate
ifelse land-sustainability < 2.1 or water-level = 1
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm
[
set food 1
]
]
[
let utility-from-food ((food-yeld * expected-food-sell-price * land-sustainability) ^ risk-attitude ) / risk-attitude
let utility-from-fuel ((food-yeld * expected-fuel-sell-price * land-sustainability) ^ (1 - risk-attitude) ) / ( 1 - risk-attitude)
ifelse utility-from-food < utility-from-fuel
[
set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm
[
set fuel 1 ]
]
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set food 1]
]
]
ask farm [
if food = 1 [set pcolor green]
if fuel = 1 [set pcolor red]
]
end
最好包含一些代码,并询问radius中到底有什么问题,这可能很好,但您需要什么样的集群?这似乎与and非常相似。我建议看看那些;他们应该帮助你解决问题和/或提出更具体的问题。请注意,在堆栈溢出时,您可以编辑自己的问题以改进它并添加更多详细信息。作为旁注,您应该在安装结束时调用reset ticks,并在go结束时调用ticks。我尝试让代理管理其拥有的修补程序,但使用我的代码,代理仅对其所在的修补程序执行操作。我把我的代码放在原始注释中,我如何实现代码,使代理能够管理并决定他们拥有的所有补丁的耕种类型?以培育。。。问农场[…]…非常感谢,现在我看到组成农场的所有补丁都变成了相同的颜色。我试图找到一种方法,使农场的每一块土地都有不同的颜色。我想到了一个模型,在这个模型中,每一个农民都决定自己农场的每一块田地种植哪种产品。问我是否需要更多详细信息。我想你需要一个补丁变量,然后当你要求farm设置与该变量相关的pColor时。我创建了另外两个补丁varaibes食物和燃料,它们在函数ifelse的每个条件结束时的Cultate过程中都有价值,然后我在go程序中设置一个条件,如果食物=1组颜色为绿色,如果燃料=1组颜色为红色;但它不起作用,这样只有在有农民的地方才能改变颜色。。。我将模型的新版本粘贴在原始帖子中。嗨,我尝试了新的程序,但结果是一样的。。。如果一个农民决定种植哪种植物,他会把农场的所有小块都变成同一种颜色。也许我的解释遗漏了什么,如果你需要更多关于模型的细节,请问我。非常感谢你的时间。你设定食物和燃料价值的条件与每一个补丁无关,他们只考虑了农民的一些利润,你应该在与补丁相关的条件下改变食物或燃料的价值,而不是给农民。因此,我需要将粮食利润和燃料利润这两个变量放在一个补丁自己的环境中进行移动?补丁有自己的利润价值是合理的吗:燃料和粮食都基于其他变量,农民根据他们对最终产品价格的预期来决定使用哪一种?在这种情况下,我只需要改变培育程序?我已经在我的模型中做了一些改变,但我在管理海龟的活动范围方面仍然存在问题,我不知道如何将它们的活动扩展到其他补丁。我已经创建了两个新变量,食物产量和燃料产量,它们是在go程序开始时设置的。
to cultivate
ifelse land-sustainability < 2.1 or water-level = 1
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set food 1
]
]
[
let utility-from-food ((food-yeld * expected-food-sell-price * land-sustainability) ^ risk-attitude ) / risk-attitude
let utility-from-fuel ((food-yeld * expected-fuel-sell-price * land-sustainability) ^ (1 - risk-attitude) ) / ( 1 - risk-attitude)
ifelse utility-from-food < utility-from-fuel
[
set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set fuel 1
]
]
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set food 1
]
]
]
end
to recolor-farm
if food = 1 [set pcolor green ]
if fuel = 1 [set pcolor red]
end
to cultivate
ifelse land-sustainability < 2.1 or water-level = 1
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm
[
set food 1
]
]
[
let utility-from-food ((food-yeld * expected-food-sell-price * land-sustainability) ^ risk-attitude ) / risk-attitude
let utility-from-fuel ((food-yeld * expected-fuel-sell-price * land-sustainability) ^ (1 - risk-attitude) ) / ( 1 - risk-attitude)
ifelse utility-from-food < utility-from-fuel
[
set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm
[
set fuel 1 ]
]
[
set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa))
ask farm [
set food 1]
]
]
ask farm [
if food = 1 [set pcolor green]
if fuel = 1 [set pcolor red]
]
end