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

发布于 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过程:
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,直到它们全部用完为止。
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
]
endhttps://stackoverflow.com/questions/46073375
复制相似问题