首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >监视器没有在Netlogo中显示最大和最小的水

监视器没有在Netlogo中显示最大和最小的水
EN

Stack Overflow用户
提问于 2017-09-06 10:54:51
回答 1查看 131关注 0票数 1

在发表我的问题之前,我曾尝试和探讨过这个论坛上已经回答的问题,我正在建立一个农民用水的模式。我希望农民用他们自己的水,然后从他们的斑块中,然后改变水的斑块变量,农民和作为一个全球变量之和的农民和斑块的地表水。我希望在每一次滴答中输出的水量都是最高的和最低的。但是我的显示器和图表显示相同的值。我找不到错误,请guide.Codes在下面给出GUI.Thanks的图片。

代码语言:javascript
复制
globals [TW  well-depth]; total water
breed [farmers farmer]
farmers-own [SWA] ;surface water availbility
patches-own [ wtd GW ] ;water table depth and Groundwater

to setup
  clear-all
  create-farmers num-farmers [
    move-to one-of patches
    set SWA  random 12
  ]
  ask patches [
    set WTD 2
    set GW 3
    set pcolor green
  ]
  reset-ticks
end

to go
  ask farmers [
    update-water
  ]
  tick
end

to update-water
  ifelse swa < 5 [
    ask patches in-radius 1 [ 
      set pcolor blue
      set TW gw + [SWA] of myself
    ]
  ]
  [
    ask patches in-radius 1 [ 
      set gw  gw - random-float .0005
      set well-depth wtd / gw 
    ]
    set tw swa
  ]

end

接口设置:

情节设置:

嗨,我想为一年内农民种植的时间表建立一个模型,并更新农民年收入、财富、可用水、用水etc.For,这是我尝试建立的一个模型,考虑了之前对这篇文章的答复。我需要彻底解决这个问题。如果我把我的代码中的水作为一个全局变量。我的最大和最小值的水被改变,但它保持不变的时候,我停止了模型。但是根据建议,如果我把多余的水作为农民拥有的,那么过剩水图表就会显示出一条恒定的线和一个恒定的最大和最小的水。我需要看到波动,虽然我已经尝试将用水纳入我的model.Expected输出,我的模型将主要是水的使用/访问-水,地下水和地面water.Please建议修正。谢谢

代码语言:javascript
复制
      Globals [ potential-buyers  year season  TAWS TGWU TWR   rprice wprice  excess-water ]
    Breed [rfarmers rfarmer]
    Breed [pfarmers pfarmer]
    Breed [wcrops wcrop]
    Breed [ccrops ccrop]
    Breed [rcrops rcrop]
    rfarmers-own [
  savings
    tubewell
    wyield
    ryield
    land
  CRPDCSN
   WR-wheat
  SWA-rabi
  GWA pumping-on?
   seasonality
  input-cost
wealth
  wrevenue
  wincome
  wwealth
  allowed-pumped-water
  wr-rice
  income-1
  SWA-kharif
  income-2
  rincome
  rrevenue
  rwealth
]
patches-own [Gwater well-depth
WTD]

    to setup
  clear-all
  ask patches [set pcolor green
    Set WTD 3 + random-float 18.005

  set Gwater  GW / WTD 
   ]
  create-rfarmers no-of-rfarmers [set shape "person"
                                  set color brown
                                 move-to one-of patches
                                 set land 12
                                 set wealth 1000 + random 500
                                set input-cost 5 + random 3
                                set tubewell 1
                                set wr-wheat 10 + random-float 12   
                                set SWA-rabi 4 + random-float 6.6    
                                set SWA-kharif 6 + random-float 9.6  
                                set wr-rice 18 + random-float 15
                                set GWA   pumping-on?

                                set wprice 1.300 + random 5.0  
                                set rprice 1.500 + random 1.00 
                                set wyield 25 + random 20
                                set ryield 40 + random 20
                                                               ]
Reset-ticks
end

to go
ask rfarmers [cropping-decision
;use-GW
update-wealth-w
 ]
tick
update-timeline


end
to cropping-decision
    ifelse  wealth > input-cost and land > 2 and ticks mod 2 = 0
                 [ set CRPDCSN "wheat"
                   if wr-wheat < SWA-rabi [ use-GW]
                   set seasonality "Rabi"
                    ]

                    [set CRPDCSN "rice"
                     Set seasonality "Kharif"
                    go-2]

    end
to use-GW
    ifelse (SWA-rabi - wr-wheat) < 0  [set pumping-on? true

                                                       ask patches in-radius 4 [ set wtd wtd + random-float 1.00005]
                                                      set input-cost input-cost  + 0.0005  * ( wr-wheat - SWA-rabi) / wtd ; changed from 200 to 20 t0 .05
                                                      set gwater gwater - random-float 0.0005 / wtd
                                                      set excess-water SWA-rabi - wr-wheat + sum [gwater] of patches in-radius 1
                                                      if excess-water > 0 [sell-buy-accesswater]] 


  [set pumping-on? false
    set wyield wyield - random-float 0.0005
  set excess-water SWA-rabi 
  set input-cost input-cost  - random-float 1 ]

end

to sell-buy-accesswater
                       set potential-buyers other rfarmers in-radius 4 with [(excess-water <= 0)] 
                      ask potential-buyers [set input-cost input-cost + 0.0005 * ( wr-wheat - SWA-rabi) / WTD
                                             set wyield wyield - .0005 ]
                                             set income-1 0.0005 * excess-water
                                             set wyield wyield + random-float .000005
                                             set excess-water excess-water - [excess-water] of potential-buyers

end
to update-wealth-w
set wrevenue wprice * (wyield * land)
              set wincome wrevenue - input-cost * land
              set  wwealth wealth + wincome + income-1

end
to update-timeline
 if ticks mod 2 = 0 [set season "Rabi"   set year year + 1
   set wprice wprice + 1 ]
;Ask rfarmers [set SWA-Rabi SWA-Rabi - random-float .0005]] ;to incorporate effect of climate
  if ticks mod 2 = 1 [set season "Kharif"
    set rprice rprice + 1]
 ; ask rfarmers [Set SWA-Kharif  SWA-kharif - random-float .001] 

end


to go-2
ask rfarmers [use-GW-R
;buying-selling-GW-R
;lsell-buy-water-r
update-wealth-r
update-wealth
]


end

 ;;;;;;;;;;; Same procedure is adopted for rice;;;;;;;;;;;;
to use-GW-r
  ifelse (SWA-kharif - wr-rice) < 0  [set pumping-on? true
                                                      ;set Gwater  (gwater - (SWA-rabi - wr-wheat))
                                                     ;set GWA 10 + random-float 10
                                                      set input-cost input-cost  + .0006  * ( wr-rice - SWA-kharif) / wtd ; changed from 200 to 20 t0 .05
                                                      ask patches in-radius 4 [ set wtd wtd + random-float .005 ]
                                                     set excess-water ( SWA-kharif - wr-rice + gwater )
                                                      if excess-water > 0 [sell-buy-accesswater-r] ] ; + GWater]

         [set pumping-on? false
          set ryield ryield - random 2]

end

to sell-buy-accesswater-r
  set potential-buyers other rfarmers in-radius 3 with [(excess-water <= 0)] ; and  (wtd >= allowable-lm-pumping)]
                ask potential-buyers [set input-cost input-cost + 0.0005  * ( excess-water) / WTD
                                      set ryield ryield - .005 ]
                                      set income-2 0.5 * (excess-water)

end

to update-wealth-r
 set rrevenue (rprice * ryield * land)
              set rincome rrevenue - (input-cost * land)
              set rwealth  rincome + income-2

end

to update-wealth
  if ticks mod 2 = 1
  [ set wealth  wealth + .0005 * (rwealth + wwealth) ]
end

下面是模型的接口设置

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-06 17:00:31

您正在请求您的图解来显示海龟的TW,但是TW是一个全局变量-- TW只有一个值。当您请求[TW] of turtles时,您将返回一个相同值的列表(无论当前的TW是什么),这些值的长度与当前海龟的数量相同。例如,假设您有5只海龟和一个TW为11;当您请求plot max [TW] of turtles时,您实际上是要求Netlogo绘制[ 11 11 11 11 11 ]的最大值,最小值也是如此。

此设置的另一个问题是,由于TW是一个全局变量,所以每次运行update-water时,都会让每个修补程序修改TW。在您的模型中,当前设置的任何TW都将被上次调用的修补程序覆盖。您可能希望重新工作您的update-water,使其特定于农民或补丁程序,而不是使用全局变量。

我不知道你到底在策划什么--你想要一个农民能得到的最低限度和最高限度的水吗?可能是这样的:

首先,将FW添加到farmers-own变量中,然后尝试以下修改的update-water过程:

代码语言:javascript
复制
to update-water

  ifelse swa < 5 [
    ask patches in-radius 1 [
      set pcolor blue
    ]
    set FW swa + sum [gw] of patches in-radius 1
  ]
  [
    ask patches in-radius 1 [
      set gw gw - random-float 0.0005
      set well-depth wtd / gw
    ]
    set FW swa
  ]

end

当您现在show [FW] of turtles时,您将得到一个类似于[10 17 6 19 18 7 9 15 5 10]的列表,而不是一个相同数字的列表。现在,尝试使用前面使用的绘图更新命令进行绘图,但是使用FW而不是TW。如果我离得很远,请告诉我你想要策划什么。

编辑:

简单的用水例子,农民每人“用完”可用的swa。将update-water过程替换为下面的程序并运行您的模型--您应该看到农民开始使用他们的swa,直到他们的swa小于5,然后他们将开始使用附近的修补程序gw,直到它们全部用完为止。

代码语言:javascript
复制
to update-water

  ifelse swa > 5 [
    set swa swa - random-float 0.5
    set FW swa 
  ]
  [
    set swa 0
    ask patches in-radius 1 [
      if gw > 0 [
        set pcolor blue
        set gw gw - random-float 0.25
      ]
      if gw <= 0 [
        set gw 0
        set pcolor black
      ]
    ]
    set FW swa + sum [gw] of patches in-radius 1
  ]

end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46073375

复制
相关文章

相似问题

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