Как сделать это во вложенном ifelse выражении - PullRequest
0 голосов
/ 17 января 2019

В настоящее время я работаю над проектом, в котором требуется следующее: я хочу, чтобы порт (порода) спрашивал места хранения (другая порода), имеют ли они определенную ценность. Если нет, переходите к следующему месту хранения и т. Д., Пока он не найдет это место с правильным значением. Если это так, то нужно предпринять другое действие (например, построить что-то). Я получил это сейчас, которое, кажется, работает, но это очень долго и слишком сложно, я думаю.

to check-pipeline-26
  ask storage 26
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-27]
  ]
end

to check-pipeline-27
  ask storage 27
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-28]
  ]
end

to check-pipeline-28
  ask storage 28
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-29]
  ]
end

to check-pipeline-29
  ask storage 29
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-30]
  ]
end

Дайте мне знать, если у вас есть какие-либо советы, чтобы сделать это проще или проще. Заранее спасибо!

Макс

1 Ответ

0 голосов
/ 17 января 2019

Вот рекурсивное решение, в котором я передаю номер конвейера в качестве параметра:

to check-pipeline [n]
    if n <= max [who] of storages
    ask storage n [ifelse pipeline < 1 
     [build-pipeline]
     [check-pipeline n + 1]
]
end

Примечание: вы, вероятно, отслеживаете своего максимального-кого в переменной, а не каждый раз вычисляете.

В качестве альтернативы, это может быть лучшим решением, где вы могли бы просто использовать цикл for и сортировать агентов по их кому, чтобы заставить их идти по порядку:

 to check-pipeline
     foreach sort-on  [who] storages
      [astorage -> ask astorage[ if pipeline < 1 [build-pipeline stop]]]
    ]
 end
...