【发布时间】:2018-02-14 20:03:40
【问题描述】:
在发布我的问题之前,我已经尝试并探索了这个论坛上已经回答的问题。我正在为农民建立一个用水模型。我希望农民使用他们自己的水,然后从他们的补丁中使用,然后希望改变补丁、农民的水变量,并将其作为农民和补丁的地表水的全局变量总和。我希望在每个滴答声中看到最大和最小水的输出。但是我的监视器和图表显示相同的值。我找不到错误,请指导。下面给出了带有GUI图片的代码。谢谢。
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
界面设置:
情节设置:
您好,我想建立一个农民一年种植时间表的模型,并更新农民每年的收入、财富、可用水、用水等。为此,我尝试建立一个模型,考虑以前对此答案的建议邮政。我需要完全解决给定的问题。如果我将代码中的 access-water 作为全局变量。我的水的最大值和最小值发生了变化,但是当我停止模型时它保持不变。但是根据建议,如果我将多余的水作为农民拥有,那么多余的水图会显示一条恒定的线以及恒定的最大和最小水。尽管我试图在我的模型中包含用水量,但我需要看到波动。我的模型的预期输出主要是用水/取水、地下水和地表水。请建议更正。 谢谢
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
【问题讨论】: