List 尝试替换嵌套列表中每个勾号的项
我正在建立一个模拟病毒在全世界传播的模型。我目前有16个区域,每个区域有28个影响病毒传播的变量。由于变量/区域数量众多,我知道使用列表是最有效/最好的 这是我当前设置区域的代码:List 尝试替换嵌套列表中每个勾号的项,list,simulation,netlogo,nested-lists,List,Simulation,Netlogo,Nested Lists,我正在建立一个模拟病毒在全世界传播的模型。我目前有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 S
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-10的随机整数的true和Infected Pop。在我的go程序中,我计划编写程序,根据感染百分比、tbd感染率、医疗保健、发展、总密度和感染密度,为每个蜱虫的感染流行、存活流行和死亡流行设置新值
在将数据存储在修补程序中转换为将数据存储在列表中之前,我使用了以下代码:
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
感染
询问带有[已感染?]的修补程序[
如果感染流行性感冒<活流行性感冒[
设置受感染的pop((受感染的pop+((((受感染的pop/活的pop)*(感染率/医疗保健))/development)*((密度-受感染的密度))*10))]
如果感染流行歌曲>生活流行歌曲[设置感染流行歌曲生活流行歌曲]
结束
并且需要找到一种方法来重写代码以处理列表
有人能帮我写一个安装程序来完成我的目标吗?有人能帮我修改列表而不是补丁的go程序吗?可能有更智能的解决方案,但你可以这样做:
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
replace region-chooser Infected? TRUE
replace region-chooser Infected-Pop random 10
replace "USA" Water-rate 50
if条件检查区域数据的当前子列表的第一项是否等于指定的区域。
if条件内部的命令是一个嵌套的replace item
函数。内部的命令获取区域数据的当前子列表
,并用指定的新值
替换子列表的指定变量位置
。外部的命令用此m替换区域数据
中的旧子列表修改后的名单。
在您的情况下,假设您的界面上有一个名为“region chooser”的选择器,您可以通过如下方式调用replace函数:
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
replace region-chooser Infected? TRUE
replace region-chooser Infected-Pop random 10
replace "USA" Water-rate 50
您也可以将此功能用于以下任何区域:
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
replace region-chooser Infected? TRUE
replace region-chooser Infected-Pop random 10
replace "USA" Water-rate 50
看起来使用map
和ifelse值
会更容易些?