【问题标题】:Taking fixed values from CSV file turn by turn in Netlogo在 Netlogo 中轮流从 CSV 文件中获取固定值
【发布时间】:2020-07-23 11:59:12
【问题描述】:

我正在努力编写灌溉模型。我希望海龟从带有刻度的 CSV 文件中获取值。列表中有 100 个值。我希望 10 只海龟依次选择第一个(假设为 20)值,即海龟 0、1,2 3 .. 将依次(每个刻度)在列表中取第一个值,并且在第 10 个刻度之后全部海龟将采用第二个值(如 22),依此类推。概念与需水量有关,需水量是固定的,每只海龟会在 10 天后发生变化。 100 个值将在 1000 个刻度中消耗 在这方面的任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: csv netlogo


    【解决方案1】:

    这里有一些代码可以帮助您入门。我通过简单地创建一个随机需求数列表demand-list 从 CSV 文件中抽象出来——您可以在模拟开始时从 CSV 文件中读取它们。从那时起,使用turtles-own 变量demand 创建了十只海龟,并将其放入按who 编号排序的列表中。

    go 过程使用当前刻度和 floor 运算符来查找需求列表中的哪个元素是这组十个刻度的正确元素,mod 运算符确定哪个海龟(消费者)在消费者列表中,此时应采用该值作为其demandshow 简单地显示了每只海龟在每个刻度结束时的需求。

    globals [demand-list consumer-list]
    turtles-own [demand]
    
    to setup
      clear-all
      set demand-list n-values 100 [random 50]
      create-turtles 10 [set demand 0]
      set consumer-list sort turtles
      reset-ticks
    end
    
    to go
      let list-element floor ticks / 10
      let chosen-consumer ticks mod 10
      ask item chosen-consumer consumer-list [set demand item list-element demand-list]
      show map [c -> [demand] of c] consumer-list
      tick
    end
    

    【讨论】:

    • 非常感谢查尔斯。我已经在我的模型中进行了翻译,程序运行良好。我还想问一件事。我在下面添加答案。请指教。
    【解决方案2】:

    如果您要问一个新问题,它确实应该作为一个新问题提出,而不是作为旧问题的附加问题。但是让我在这里回答一下。我已经使用了您上面的代码并进行了一些更改。首先,我已将 setxy 询问从 create-farmers 块中取出。该块中的任何内容都由每个创建的农民执行,因此在这种情况下,它会执行 10 次。接下来,尽量避免使用who 号码。你几乎从不需要它们。特别是,farmers-list 包含农民的排序列表,您可以简单地使用它直接询问适当的农民来设置其需求。此外,您不需要每个农民都设置list-element,因为在任何给定的刻度中,所有农民都是一样的。你有两个tick 命令——你只想要一个。最后,您会看到我已经简化了您的file-read 命令。在您的情况下,file-read 返回一个值,您可以将其添加到列表中。

    Breed [farmers farmer]
    globals [demand-list  IWR-perday farmers-list]
    farmers-own [current-demand irrigation-turn ]
    
        to setup
          clear-all
          create-farmers 10 [ set irrigation-turn [0] ]
          ask farmer 0 [ setxy min-pxcor + 1 0]
          ask farmer 1 [ setxy min-pxcor + 3 0]
          ask farmer 2 [ setxy min-pxcor + 5 0]
          ask farmer 3 [ setxy min-pxcor + 7 0]
          ask farmer 4 [ setxy min-pxcor + 9 0]
          ask farmer 5 [ setxy min-pxcor + 11 0]
          ask farmer 6 [ setxy min-pxcor + 13 0]
          ask farmer 7 [ setxy min-pxcor + 15 0]
          ask farmer 8 [ setxy min-pxcor + 17 0]
          ask farmer 9 [ setxy min-pxcor + 19 0]
          set farmers-list sort turtles
          import-data 
          reset-ticks
          
        end
    
    to go
      let list-element floor ticks / 10 
      ask item (ticks mod 10) farmers-list [
        set current-demand item list-element IWR-perday
      ]
      show map [c -> [current-demand] of c] farmers-list
      tick
    end
    
    to import-data  
      ;; Import water demand
      ifelse ( file-exists? "IWR-perday.txt" )
      [
        set IWR-perday []
        file-open "IWR-perday.txt"
        while [ not file-at-end? ]
        [
          set IWR-perday lput file-read IWR-perday
        ]
        file-close
        show IWR-perday
      ]
      [ user-message "There is no IWR-perday.txt file in current directory!" ]
    end
    

    我想如果你用你的数据文件运行这个,我做了检查,你会看到在每组十个滴答声中,十只海龟的需求是一个一个设置的。 IWR-perday 中有超过 1000 个值,这将持续超过 10,000 个滴答声!

    【讨论】:

    • 这应该以 10000 滴答声应用程序结束,因为它包含多年来每 10 天作物的需水量。感谢您的帮助。这意味着很多。
    【解决方案3】:

    IWR-perday 是一个 CSV 文件。我想问我不排序不写农民名单!这将如何在显示地图中显示以查看代码是否正常工作。

    Breed [farmers farmer]
    globals [demand-list  IWR-perday farmers-list]
    farmers-own [current-demand irrigation-turn ]
    
    to setup
      clear-all
           create-farmers 10 [ set irrigation-turn [0]
                          ask farmer 0 [ setxy min-pxcor + 1 0]
                          ask farmer 1 [ setxy min-pxcor + 3 0]
                          ask farmer 2 [ setxy min-pxcor + 5 0]
                          ask farmer 3 [ setxy min-pxcor + 7 0]
                          ask farmer 4 [ setxy min-pxcor + 9 0]
                          ask farmer 5 [ setxy min-pxcor + 11 0]
                          ask farmer 6 [ setxy min-pxcor + 13 0]
                          ask farmer 7 [ setxy min-pxcor + 15 0]
                          ask farmer 8 [ setxy min-pxcor + 17 0]
                          ask farmer 9 [ setxy min-pxcor + 19 0]]
                           set farmers-list sort turtles
      import-data 
        reset-ticks
    
    end
    
    to go
      
    foreach [0 1 2 3 4 5 6 7 8 9 ] [ ?1 ->
      ask farmers with [who = ?1] [let list-element floor ticks / 10 
          set current-demand item list-element IWR-perday]]
          show map [c -> [current-demand] of c] farmers-list
      tick
        tick
    end
    to import-data
        
        ;; Import water demand
      ifelse ( file-exists? "IWR-perday.txt" )
      [
        set IWR-perday []
        file-open "IWR-perday.txt"
        while [ not file-at-end? ]
        [
          *set IWR-perday sentence IWR-perday (list file-read)
        ]
        file-close
      ]
      [ user-message "There is no IWR-perday.txt file in current directory!" ]
    end*
    

    【讨论】:

      猜你喜欢
      • 2023-02-06
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多