在不高于的补丁上执行(更改一个变量的值)的代理

时间:2014-01-25 18:36:49

标签: patch agent netlogo

如何编写允许代理更改补丁变量值的代码,其中代理不在上面?这是农民的情况,在之前的一个问题中,我问过如何创建农场。代理是否可以在同一个滴答中更改不同补丁的变量?非常感谢你的帮助。

1滴后

enter image description here

30点后

enter image description here

3 个答案:

答案 0 :(得分:2)

NetLogo的一个特殊功能是代理可以直接更改其直接修补的变量值(即ask turtle 0 [ set pcolor blue ]会将turtle 0下的补丁转换为{{1但是,任何海龟都可以blue任何补丁来改变它的一个变量。

例如:

ask

将告诉所有海龟改变它们之前(不直接)到ask turtles [ ask patch-ahead 1 [ set pcolor green ] ] 之前的补丁的颜色。​​

他们也可以要求多个补丁执行操作,例如用户手册中的in-radius示例:

green

答案 1 :(得分:1)

如果这与您的Farmer问题有关,可以使用以下内容:

如果要对具有公共属性的一组修补程序进行更改,则应使用其公共属性对其进行更改,例如,如果您希望对修补程序进行更改,则属于同一Farmer ask Farm从一个食物= 1的农场你可以问

ask farm with [food = 1]

总之,我认为你应该在你的培养过程中加入这些条件来过滤哪个补丁被改变。

ask farm with [land-sustainability < 2.1 or water-level = 1]
[
 set food 1 
 set pcolor green
]

ask farm with [The condition which they should set fuel to 1]
[
set fuel 1
set pcolor red
 ]

<强>更新

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
  food
  fuel

 ]

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"
 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
ask farm [recolor-farm]
     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 profit-from-food  food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) 

    ask farm with [land-sustainability < 2.1 or water-level = 1] 
    [
      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 with [land-sustainability >= 2.1 or water-level != 1][
        set fuel 1 


      ]
    ]
    [

      set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) 

      ask farm with [land-sustainability >= 2.1 or water-level != 1] [
        set food 1

      ]

    ]
  ]



end

to recolor-farm
      if food = 1 [set pcolor green ]
      if fuel = 1 [set pcolor red]
end

enter image description here

答案 2 :(得分:0)

这是另一种方法:

  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
  food
  fuel

 ]

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"
 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
ask farm [recolor-farm]
     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
  let r risk-attitude 
  let e-f expected-fuel-sell-price
  let e-food expected-food-sell-price

  ask farm [
    ifelse land-sustainability < 2.1 or water-level = 1
    [ ask myself [set profit-from-food  food-sell-price * (((sum [food-yeld] of farm  ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) 
      ]set food 1 

    ]

    [

      if land-sustainability >= 2.1 or water-level  = 0
      [

        let utility-from-food (( food-yeld  * e-food * land-sustainability) ^ r ) / r
        let utility-from-fuel (( fuel-yeld  * e-f * land-sustainability) ^ (1 - r) ) / ( 1 - r)


        ifelse utility-from-food < utility-from-fuel
        [
          ask myself [set profit-from-fuel fuel-sell-price * (((fuel-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) ]
          set fuel 1 
        ]
        [ ask myself [set profit-from-food food-sell-price * (((food-yeld ) ^ (1 - alfa)) * (((water-level) ^ (1 - gamma)) * ((land-sustainability) ^ (gamma)) ^ alfa)) ]
          set food 1

        ]

      ]
    ]


  ]
end

to recolor-farm
      if food = 1 [set pcolor green ]
      if fuel = 1 [set pcolor red]
end

这是在第一次打勾之后:

enter image description here

这是最终观点:

enter image description here