Есть еще некоторые участки, на которые черепаха может перейти, но ОШИБКА - PullRequest
1 голос
/ 05 марта 2020

Я прошу черепаху А перейти к патчу, у которого есть сосед, у которого черепаха того же типа, что и черепаха А. Она работает хорошо до ОШИБКИ (MOVE-TO ожидал, что входной сигнал будет агентом, но вместо этого получил НИКТО) выходит. Визуально есть еще несколько доступных патчей. Как кодировать так, чтобы все доступные патчи были заняты, и сообщать или останавливать программу, когда больше нет патчей, которые нужно занять? Любые комментарии будут действительно полезны. Я сделал следующее:

to set-move
 ask migrants
  [let pot-target patches with [value < 11 and not any? turtles-here]
   let target pot-target with [count neighbors with [any? turtles-here with [value < 11]] = 1]
    ifelse target != 0 and (status != "resident") [move-to min-one-of target [value]
                                              set status "resident"
                                              set color blue]
                                              []   
  ] 

end 

Это полный код

breed [migrants migrant]
breed [residents resident]

patches-own [value]
turtles-own [income
status]

to setup
  ca
  let total problo + probmid + probhi
  if (total != 100) 
     [print (word "prob is more than 100")]
  ask patches [set value random-normal 10 3
  let patch-value value
    set pcolor scale-color (gray - 5) patch-value 10 3]
  ask patches
  [if random 100 < 3
    [sprout-residents 1
      [set color red
       set shape "default"
       set size 1
       set status "resident"   
      ]
    ]
  ]
end

to go

  ask patches 
  [if random 100 < 1 
    [sprout-migrants 1
      [set color green
       set shape "default"
       set size 1 
        set status "migrant"
       set-move 
  ]]]

end

to set-move
 ask migrants
  [let pot-target patches with [value < 11 and not any? turtles-here]
   let target pot-target with [count neighbors with [any? turtles-here with [value < 11]] = 1]
    ifelse target != 0 and (status != "resident") [move-to min-one-of target [value]
                                              set status "resident"
                                              set color blue]
                                              []   
  ] 

end 

enter image description here

1 Ответ

2 голосов
/ 05 марта 2020

Эта строка: let target pot-target with [count neighbors with [any? turtles-here with [value < 11]] = 1] определяет патчи, где есть ровно 1 сосед, удовлетворяющий этим условиям. Так что патч с двумя такими соседями будет недоступен. Из вашего описания я думаю, что вы действительно хотите> = вместо =:

let target pot-target with [count neighbors with [any? turtles-here with [value < 11]] >= 1]

...