NetLo go: как заставить модель остановиться, пока она ждет файл - PullRequest
1 голос
/ 22 апреля 2020

Я строю модель NetLo go, которая должна интегрироваться с другой моделью (не NetLo go). Поэтому, если модель NetLo go настроена на непрерывную работу, на каждом тике я хочу, чтобы она ожидала появления файла, созданного связанной моделью, в родительской папке. Когда этот файл появляется, NetLo go читает его и продолжает все шаги, указанные в Go. По сути, я хотел бы, чтобы NetLo go приостановил работу, пока он ожидает файл, а затем, как только файл появится, возобновите работу. Я пытался использовать функцию while, но она не выполняла эту работу.

Например, когда я настраивал ее следующим образом

to go

while [file-exists? "biosim.asc"][

grow-grass
grow-herd
delete-biosim
tick]

Здесь NetLo go считывает файл biosim и после завершения процедур grow-grass, grow-herd программа удаляет biosim файла ascii. В идеале я хотел бы, чтобы он дождался появления нового файла с именем biosim в рабочей папке и затем повторил шаги. Приведенный выше код не дает мне то, что я хочу. Любая помощь будет оценена.

Спасибо, Реха

1 Ответ

1 голос
/ 23 апреля 2020

Что произойдет, если вместо этого вы используете while l oop для удержания прогона, когда файла нет, а затем поместите действия за пределы l oop. Например:

to go
  while [not file-exists? "biosim.asc"] [wait 1]
  grow-grass
  grow-herd
  delete-biosim
  tick
end

Возможно, вы могли бы просто иметь [] вместо wait, но я подозреваю, что это будет довольно неэффективно, поскольку будет постоянно проверять. Вместо этого он проверяет каждую 1 секунду (вы можете сделать проверку короче или длиннее, конечно, в зависимости от того, как часто файл создается), и как только файл появляется, он переходит к другому коду.

Другой вариант зависит на каком языке встроена другая модель. Если это что-то вроде R java, вы можете управлять моделью NetLo go из этого кода и напрямую связывать модели.

...