Netlogo 而条件应检查两个变量之和是否低于阈值

Netlogo 而条件应检查两个变量之和是否低于阈值,netlogo,Netlogo,我正在研究一种模型,在这种模型中,我的代理人应该开车上班。但是,他们的到达范围是有限的,这就是为什么我想使用WHILE功能来检查开车到目的地的距离(到工作的距离)加上在目的地开车的距离(例如,使用自己的汽车进行送货服务=到工作的距离)是否低于某个阈值(这里是130公里)。这个想法是,如果代理开车的距离不超过130公里,那么他们可以开车上班和下班,也就是说,工作距离和工作距离之和应该小于130公里。否则,汽油就会用完 根据概率分布绘制距离。每个变量的概率分别被称为几率距离和几率距离。例如,在3%的

我正在研究一种模型,在这种模型中,我的代理人应该开车上班。但是,他们的到达范围是有限的,这就是为什么我想使用WHILE功能来检查开车到目的地的距离(到工作的距离)加上在目的地开车的距离(例如,使用自己的汽车进行送货服务=到工作的距离)是否低于某个阈值(这里是130公里)。这个想法是,如果代理开车的距离不超过130公里,那么他们可以开车上班和下班,也就是说,工作距离和工作距离之和应该小于130公里。否则,汽油就会用完

根据概率分布绘制距离。每个变量的概率分别被称为几率距离和几率距离。例如,在3%的概率下,他们开车2公里去上班,在8%的概率下,他们开车4公里去上班,等等。在工作时开车的距离也是如此。我打算通过嵌套的ifelse语句推导距离

我想重复“绘制”我的chance_distance_to/at_work变量,直到两个变量(距离/工作距离)之和等于或小于130,这允许他们回到自己的家乡

turtle-own [
distance-to-work
distance-at-work
]

to setup-driving-pattern

ask full-time-employees [

; the loop should continue until the sum of both, distance-to-work 
; and distance-at-work is 130 or less
while [distance-to-work + distance-at-work >= 131] [

; I created two variables for the chance of each variable,
; in order to assign a certain number (km). This variable 
; should draw a random number between 0 and 99. According 
; to this number (or probability) the respective 
, distance-to-work or distance-at-work is drawn.

let chance_distance_at_work random 100
let chance_distance_to_work random 100

; here is a nested ifelse statement which continues until 100%, 
; but this is just an example
ifelse chance_distance_to_work < 3 [set distance-to-work 2 ] [
ifelse chance_distance_to_work < 8 [set distance-to-work 4 ] ... ]

ifelse chance_distance_at_work < 4  [set distance-at-work 1 ] [
ifelse chance_distance_at_work < 12 [set distance-at-work 2 ] ... ]
 ]
]

end
乌龟自己的[
工作距离
工作距离
]
设置驾驶模式
询问全职员工[
;循环应继续,直到两者的总和,即工作距离
;工作距离为130或更少
而[工作距离+工作距离>=131][
;我为每个变量的概率创建了两个变量,
;以指定某个数字(km)。此变量
;应绘制一个介于0和99之间的随机数。根据
;相应的
,绘制工作距离或工作距离。
让机会和距离随机工作100
让随机距离为100
;这是一个嵌套的ifelse语句,它将一直持续到100%,
;但这只是一个例子
ifelse chance_距离_工作<3[将距离设置为工作2][
ifelse机会距离距离工作<8[设置距离工作4]…]
ifelse工作时的距离小于4[设置工作时的距离1][
ifelse工作时的距离小于12[设置工作时的距离2]…]
]
]
结束

我猜WHILE函数中的加法有问题。因为没有while函数,每个海龟(这里是全职员工)都会得到自己的工作距离和工作距离变量。此外,如果条件或报告人没有说明[工作距离+工作距离=131],而是[工作距离+工作距离我不理解这个问题,但我的回答太长,无法给出“评论”,因此我将把它作为“答案”放在这里

首先,这个开放式的没有结束语:“问全职员工[“所以我假设你还想要一个”]”

但是,您没有“while”语句的正确语法——它必须在测试和测试通过时要运行的命令周围都有括号。也就是说,它必须始终如下所示:

ifelse chance_distance_to_work < 3 [set distance-to-work 2 ] [ ...]

你只有这个: 而

因此,编辑器将给您一个错误:“虽然预期有两个输入,一个真/假块和一个命令块。”

同样,我假设您的意思是将其余代码放在WHILE循环中

因为我没有看到他们的“let”语句,所以我尝试假设工作距离和工作距离是全局变量。(请下次发布所有代码,这样我们就不需要猜测!)但是,如果它们是全局变量,您的代码将失败,因为它们将被初始化为零,因此WHILE测试将始终失败

无论如何,我认为您测试这些总和是否大于130是毫无意义的,如果大于130,则继续驾驶。我假设您希望在总行驶距离超过130公里时停止驾驶

对于第一个员工,WHILE测试将为TRUE,但这些数字将增加,直到最后WHILE测试失败,员工将停止驾驶。但是您编写的任何内容都不会将这些变量重置为零,因此对于其他每个驾驶员,WHILE测试将失败。不好

因此,这些变量需要是局部变量,而不是全局变量,并且需要在“ask full time employees[]中声明(通过“let”语句)并初始化为零 街区,靠近街区的起点

接下来,我不明白您想做什么,您有这样的测试:

ifelse chance_distance_to_work < 3 [set distance-to-work 2 ] [ ...]
ifelse chance\u距离\u工作<3[设置工作距离2][…]
你为什么要这样做呢?我想你要做的只是将新的机会距离加在旧的跑步总距离“工作距离”上,然后将新的机会距离加在旧的跑步总距离“工作距离”上,然后结束这个街区。然后,你以(工作距离+工作距离)等于到目前为止行驶的总距离,您可以在下一次WHILE循环中进行测试,对吗

我将假设这是正确的,下面是代码以及其中所做的更改。此代码将运行。我放入了许多“打印”语句以显示它正在执行的操作。我希望这能回答您的问题

下面是它生成的代码和示例输出

breed [full-time-employees full-time-employee]

to setup
  clear-all
  create-full-time-employees 2  ;; 2 is enough for testing
  reset-ticks
end

to go
ask full-time-employees [
    print word "Analyzing employee number " who
    let distance-to-work 0       ;; this is a running sum
    let distance-at-work 0       ;; this is a running sum 
    let total-distance-so-far 0  ;; this will be distance-to-work + distance-at-work

    ; the loop should continue until the sum of both, distance-to-work and distance-at-work is 131 or more
    while [total-distance-so-far <= 130] [

          ; drive one more day
          let chance-distance-at-work random 50
          let chance-distance-to-work random 50

          print word "......chance-distance-to-work today = " chance-distance-to-work
          print word "......chance-distance-at-work today = " chance-distance-at-work


          ;; calculate the total distance driven so far
          set distance-to-work ( distance-to-work + chance-distance-to-work)
          set distance-at-work ( distance-at-work + chance-distance-at-work)

          set total-distance-so-far distance-to-work + distance-at-work      
          print word "...At the end of this pass of the WHILE loop, total distance so far = " total-distance-so-far
     ]

     print word "......After we exit the WHILE loop, total distance so far = " total-distance-so-far
     print word " ----------- done with employee " who
     print " "
  ]   
  tick
end
bride[全职员工全职员工]
设置
清除所有
创建全职员工2;;2足以进行测试
重置滴答声
结束
外带
询问全职员工[
打印单词“分析员工编号”谁
让工作距离为0;;这是一个连续和
让工作距离为0;;这是一个连续和
让到目前为止的总距离为0;;这将是工作距离+工作距离
;循环应持续,直到两者之和,工作距离和工作距离为131或mor