首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetLogo -将集群创建为由海龟管理的农场

NetLogo -将集群创建为由海龟管理的农场
EN

Stack Overflow用户
提问于 2014-01-16 22:06:49
回答 2查看 1K关注 0票数 1

在设置过程中,我将创建一个命令,生成具有随机维度的随机数量的集群。每个集群将由一个代理(农民)管理。每一块土地都代表着一种潜在的作物,农民可以用不同类型的种子种植。是否值得使用半径内的函数?如果你需要更多的细节,问我。

非常感谢你的回答,这正是我所需要的!现在我有了另一个问题,我按照你的建议实施了这个计划,现在我展示了一个像你这样的世界,但我不知道如何让我的代理人(农民)对他们农场大小的每一块土地采取行动。在我的模拟中,农民只在他们所在的一个补丁上行动。我尝试以一种不同的方式扩展代理的操作(函数补丁集),但是每次在运行过程时都会出现错误。正如Marzy在上一篇文章中所建议的,我包含了我的模型的代码。主要问题是将“培育”过程(代码的底部)扩展到属于农民的每个补丁。

非常感谢

代码语言:javascript
复制
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

新version_______

代码语言:javascript
复制
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)) 
 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)) 
   set fuel 1 
    ] 
   [
  set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) 
   set food 1
 ]
  ]
  ask farm [
  if food = 1 [set pcolor green]
  if fuel = 1 [set pcolor red]
 ]
  end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-17 10:58:49

正如Seth所说的,它类似于堆栈溢出中的其他问题,下面是更相关的答案:

代码语言:javascript
复制
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

在下面的设计中使用距离结果,我已经设置了每个补丁的变量belongs_to,它显示了谁在plabel中拥有该补丁,这样您就可以更好地看到它。

更新:当您想要对农场的每个修补程序进行更改时,应该是ask farm []

代码语言:javascript
复制
to cultivate


  ifelse land-sustainability < 2.1 or water-level = 1
  [ 
    ask farm [
    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
  [ ask farm [
    set pcolor red  
  ]
   set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) 

  ]
  [
    ask farm [
    set pcolor green ]
    set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) 
    ]

]



end

更新:

代码语言:javascript
复制
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

培养后加入ask farm [recolor-farm]

票数 0
EN

Stack Overflow用户

发布于 2014-01-23 06:21:52

你对第二部分的答复如下:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21173909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档