我正在建立一个模拟病毒在全世界传播的模型。我目前有16个区域,每个区域有28个变量影响病毒的传播。由于存在大量变量/区域,我知道使用列表是最有效/最好的。
这是我目前设置区域的代码:
Set Name 0
Set Living-Pop 1
Set Infected-Pop 2
Set Dead-Pop 3
Set Vaccinated-Pop 4
Set Count-Patches 5
Set Density 6
Set Infected-Density 7
Set Development 8
Set Healthcare 9
Set Research-Constant 10
Set Research-Rate 11
Set Water-Constant 12
Set Water-Rate 13
Set Airport-Security 14
Set Border-Security 15
Set Vaccine-Constant 16
Set Vaccine-Rate 17
Set Region-Number 18
Set Airports? 19
Set Hospitals? 20
Set ER? 21
Set Research? 22
Set Water? 23
Set Infected-water? 24
Set Infected? 25
Set Vaccine? 26
Set Borders? 27
set region-data [
[ "Hinterlands" 36138177 0 0 0 2702 13374.60289 0 10 0.975 7.5E-11 0.027103633 0.5 5 0.25 0.03 50000000000 0.007227635 1 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "USA" 318433268 0 0 0 1272 250340.6195 0 10 1 7.5E-11 0.238824951 0.5 5 0.25 0.075 50000000000 0.063686654 2 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Central America" 204157962 0 0 0 383 533049.5091 0 6 0.45 2.5E-11 0.030623694 0.6 3.6 0.4 0.01 50000000000 0.024498955 3 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Andes" 97253901 0 0 0 558 174290.1452 0 5 0.45 2.5E-11 0.012156738 0.2 1 0.3 0.05 50000000000 0.00972539 4 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Amazon" 186508253 0 0 0 1407 132557.3937 0 6 0.45 1.5E-11 0.016785743 0.35 2.1 0.33 0.03 50000000000 0.02238099 5 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Patagonia" 94307819 0 0 0 481 196066.1518 0 5 0.65 1.5E-11 0.007073086 0.4 2 0.3 0.05 50000000000 0.009430782 6 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Europe" 742538246 0 0 0 1175 631947.4434 0 10 0.85 2.5E-11 0.185634562 0.5 5 0.1 0.01 50000000000 0.148507649 7 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Middle East" 209455634 0 0 0 1197 174983.8212 0 5 0.3 1.5E-11 0.015709173 0.1 0.5 0.5 0.5 50000000000 0.020945563 8 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "North Africa" 459321750 0 0 0 2661 172612.4577 0 4 0.2 2.5E-11 0.045932175 0.1 0.4 0.3 0.2 50000000000 0.03674574 9 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "South Africa" 695349014 0 0 0 1535 452996.1003 0 4 0.1 2.5E-11 0.069534901 0.2 0.8 0.3 0.03 50000000000 0.055627921 10 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Russia" 143538971 0 0 0 4071 35258.89732 0 8 0.5 7.5E-11 0.086123383 0.5 4 0.25 0.03 50000000000 0.022966235 11 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "East Asia" 1510450616 0 0 0 1602 942853.0687 0 7 0.35 6.5E-11 0.68725503 0.7 4.9 0.25 0.075 50000000000 0.211463086 12 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "South Asia" 1674152344 0 0 0 1346 1243798.175 0 5 0.25 3.5E-11 0.29297666 0.8 4 0.3 0.01 50000000000 0.167415234 13 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Austalia" 23132574 0 0 0 1156 20010.87716 0 9 0.85 5E-11 0.010409658 0.3 2.7 0.25 0 50000000000 0.004163863 14 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Oceania" 43984482 0 0 0 121 363508.1157 0 2 0.3 5E-12 0.000439845 0.01 0.02 0.25 0 50000000000 0.001759379 15 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE]
[ "Ocean" 0 0 0 0 56542 0 0 0 0 0 0 0 0 0 0 0 0 16 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE]
在设置过程中,我想编写一个程序,从区域数据列表中选择1个区域(带选择器),然后替换Infected? with true和Infected-Pop,随机整数为1-10。在我的go程序中,我计划编写程序,根据感染百分比,tbd感染率,医疗保健,发展,总密度,为每个滴答感染pop,pop-pop和dead-pop设置新值。和感染的密度。
在转换为将数据存储在补丁中存储数据之前,我已将此代码用于:
to-infect
ask patches with [infected?][
if infected-pop < living-pop [
set infected-pop ((infected-pop + (((((infected-pop / living-pop) * (infection-rate / healthcare)) / development) * ((density - infected-density))) * 10))) ]
if infected-pop > living-pop [ set infected-pop living-pop ]
end
并且需要找到一种方法来重写该代码以使用列表。
是否有人能够帮助我编写设置程序来完成我的目标/帮我修改列表而不是修补程序的go程序?
答案 0 :(得分:1)
可能有更聪明的解决方案,但你可以这样做:
to replace [region var-position new-value]
let i 0
foreach region-data
[
if item 0 ? = region
[
set region-data replace-item i region-data replace-item var-position ? new-value
]
set i (i + 1)
]
end
if-condition,检查当前region-data
子列表的第一项是否等于spcified region
。
if条件内的Command是嵌套的replace-item
函数。内部的子列表采用region-data
的当前子列表,并用指定的var-position
替换子列表的指定new-value
。外部用于使用此修改后的列表替换region-data
中的旧子列表。
在您的情况下,假设您的界面上有一个名为“region-chooser”的选择器,您可以调用替换功能,如下所示:
replace region-chooser Infected? TRUE
replace region-chooser Infected-Pop random 10
您也可以将此功能用于以下任何区域:
replace "USA" Water-rate 50