我正在根据从文件读取的值设置补丁。 这些值在列表列表中:

[[10001 53 1 2 160 4 4 4 1] [10004 69 1 2 143 4 4 4 2] [10005 70 2 2 135 3 3 4 2] [10006 51 2 2 132 4 4 3 3] ... ]

每个“内部”列表都有补丁属性的值。
位置2中的值(我从第一个值的0开始计数)代表性别:
1 =男性, 2 =女性。

我的程序:

 to setup-patches-as-agents [ patches-data ]
    set male-count 0
    set female-count 0
    set total-rows 0
    foreach patches-data [
       [ one-row ] ->  
       ask patches with [ pxcor = random-pxcor and pycor = random-pycor]  
       [ set total-rows total-rows + 1
      ;; add values to patch properties
      ;; ****  id  ****
      set p-midus_id item 0 one-row
      ;; **** age *****
      set p-age item 1 one-row
      ;; gender 1= MALE; 2= FEMALE; 7= DON'T KNOW; 8= REFUSE            
      set p-gender item 2 one-row   
      if item 2 one-row =  1 ;; male
        [ set pcolor blue
          set male-count male-count + 1 ]  ;; male
      if item 2 one-row =  2 ;; female
        [ set pcolor orange
          set female-count female-count + 1 ] ;; female
      ;; **** lose10lb ****
      set p-lose10lb item 3 one-row
      ;; **** weightYrAgo ****
      set p-weightYrAgo item 4 one-row
     ;; **** limitLiftCarryGroceries ****
      set p-limitLiftCarryGroceries item 5 one-row
      ;; **** limitClimbingStairs ****
      set p-limitClimbingStairs item 6 one-row
      ;; **** limitWalkingSeveralBlocks ****
      set p-limitWalkingSeveralBlocks item 7 one-row
      ;; **** limitWalkingSeveralBlocks ****
      set p-limitWalkingSeveralBlocks item 8 one-row
    ]   
  ]
  type "male-count: "
  print male-count
  type "female-count: "
  print female-count
  type "total-count: "
  print total-rows
end

读取的总行数为:6325(读取文件后输出,与文件中的行数匹配
男性总数应为:3004,女性总数为:3321。通过这些变量获得的计数会发生变化,包括“行数”的总数

知道为什么吗?

#1楼 票数:2

很高兴您找到了解决方法! 只给我两美分,我认为您的解决方案指出了您的第一个代码可能存在的问题-您的

ask patches with [ pxcor = random-pxcor and pycor = random-pycor]

不会从补丁程序池中删除具有指定值的补丁程序-也就是说,您可以多次选择一个补丁程序,因此每次选择它的初始值都会被覆盖。 由于在turtles解决方案中,您为每一行都创建了一个新的海龟,因此不会发生覆盖。

如果您需要将其作为补丁而不是乌龟,则可以将with语句更改为仅选择尚未分配值的补丁。 例如(假设您的设置先前未设置p-gender),则可以利用以下事实:所有声明的变量默认情况下都设置为0,直到它们在代码中更改并将原始代码更改为类似

...
foreach patches-data [
  [ one-row ] -> 
  ask one-of patches with [ p-gender = 0 ] [ 
...

在同一遍中,您可以只使用one-of而不是手动选择随机的pxcorpycor我认为这更简单。

此外,这显然取决于您,而不是手动增加malefemale计数器,您可能只想设置一个to-report为您监视这些事件to-report过程。 例如,如果您的代码中包含以下内容:

to-report male-turtle-count
  report count turtles with [ gender = 1 ]
end

然后print male-count (或在界面上使用监视器),它将显示当前性别为1的海龟数量。这会动态更新,因此您不必跟踪计数器。

#2楼 票数:0

我切换到了乌龟并设置了所有属性,包括初始坐标,现在我得到了正确的计数。 我怀疑坐标选择补丁的条件可能是个问题,但我不确定。 无论如何,这是我的解决方案:

to setup-turtles [ turtles-data ]
  foreach turtles-data [
    [ one-row ] -> 
    crt 1 [
      set shape "square"
      setxy random-xcor random-ycor
      set size 2
      ;;(item 0 one-row) and ycor = (item 1 one-row) ] [
      ;; ****  id  ****
      set midus_id item 0 one-row
      ;; **** age *****
      set age item 1 one-row
      ;; gender 1= MALE; 2= FEMALE; 7= DON'T KNOW; 8= REFUSE            
      set gender item 2 one-row 
      if item 2 one-row =  1 ;; male
        [ set color blue ]  ;; male
      if item 2 one-row =  2 ;; female
        [ set color orange ] ;; female
      ;; **** lose10lb ****
      set lose10lb item 3 one-row
      ;; **** weightYrAgo ****
      set weightYrAgo item 4 one-row
     ;; **** limitLiftCarryGroceries ****
      set limitLiftCarryGroceries item 5 one-row
      ;; **** limitClimbingStairs ****
      set limitClimbingStairs item 6 one-row
      ;; **** limitWalkingSeveralBlocks ****
      set limitWalkingSeveralBlocks item 7 one-row
      ;; **** physicalFitnessCompared5YrAgo ****
      set physicalFitnessCompared5YrAgo item 8 one-row
    ]  
  ]
end

  ask by user2520792 translate from so

未解决问题?本站智能推荐:

1回复

嵌套的Foreach列表NetLogo

你好 在Netlogo v.6中,我试图计算对等方协作行为的时间加权度量。 关键是,我无法弄清楚如何在NetLogo中执行嵌套的foreach。 我目前的做法: 设置列表:信誉_对等 设置一个列表:变量1(行为)和变量2(时间刻度)的信誉列表 每次遇到时,
1回复

Netlogo列表及时更新

我正在用Netlogo编写代码,基本上应该执行以下操作: 在定向链接之间,进行交互并找出其协作行为(coop_b)。 将coop_b与交互时间一起存储在列表变量中(reputation_now) 每次互动时,都将信誉_now添加到更大的列表中,信誉_h(信誉历史记录)
1回复

按Netlogo中的元素对列表进行分组

假设我有一个Netlogo模型,现在对开发一个按第一个元素对列表进行分组的报告程序/过程感兴趣。 举例来说, 我想创建一个列表列表,以便在每个列表中都有以相同元素开头的列表。 因此,所需的输出是 也就是说,第一个元素将所有列表以a放在首位,第二个元素以“ b”开头。 理
1回复

Netlogo:不平等在foreach下无法正常工作

它假设是一个简单的代码,但我不知道为什么它不能正常工作。 如果满足条件,我想将非白龟的颜色改回白色。 我把不平等作为条件。 例如,如果红海龟的数量> = 5,那么[做某事]。 没有代码的错误消息,但我发现在满足条件之前执行了[执行某些操作]代码。 例如,当乌龟的数量是1或4时
1回复

NetLogo - 基于刻度延迟某些命令的执行

您好 NetLogo 社区, 我试图要求名为“users”的代理为最后两个刻度(执行“Go”命令时的最后两个实例)保存变量的某个值(字符串)。 但是,用户必须在前两个滴答后存储这些值。 谁能建议我出路? 我尝试实现以下逻辑,但似乎不起作用。 “history-length-TM”是要存储值的
1回复

NETLOGO:仅对满足条件的变量的乌龟发出命令-在“ foreach”之后

用户, 我正在尝试命令具有各种变量的海龟。 我的代理商叫消费者。 每个“消费者”都有其颜色代表的不同需求(我使用14种颜色作为基准)。 当具有特定颜色的消费者数量达到10个以上时,我希望他们将颜色更改为白色。 我在下面使用代码,导致所有消费者将颜色更改为白色。 虽然我只需要满足变
2回复

使agentset不在列表中

这与刚才提出的问题有关。 如何将列表(代表乌龟)转换为代理集? 例如,我想 包含4个元素的agentset [乌龟0乌龟3乌龟4乌龟7] 不在列表中[“ turtle 0”“ turtle 3”“ turtle 4”“ turtle 7”] 我曾经尝试过“ fore
1回复

NetLogo列表和条件修改

我想有选择地修改列表中的某些成员但不是全部取决于成员是否满足某些条件。 例如,在值列表中,我想从大于9的所有值中减去9。 我试过了 但得到一个'预期的恒定'错误。 我也尝试了if-else和玩括号。 谁能帮我? 我觉得好像这可能是在某个地方明确说明但我找不到的地方。