Как выбрать второе по величине значение переменной исправления в NetLogo 6.2?

#netlogo

Вопрос:

У меня возникли трудности с выполнением следующего кода: у меня есть фрагмент кода, в котором черепахи внутри конуса выбирают патч, у которого ресурс gt; 30. Когда участок, на котором черепаха имела наибольшее значение, черепаха не двигалась. Поэтому я вставил строку кода, используя команду «другое». Однако сейчас происходит следующее: если патч, в котором находится черепаха, имеет наибольшее значение ресурса, она выбирает другой патч с ресурсом gt; 30. Проблема в том, что, например, на стороне черепахи есть патч со значением ресурса = 51 и еще один, со значением 31, и она выбирает 31. Я хотел бы реализовать следующее: если патч, в котором находится черепаха, имеет наибольшее значение ресурса (и черепаха уже собрала этот ресурс), она выберет другой соседний патч, который имеет второе по величине значение ресурса. Я попытался использовать max-one-of, но получил ошибку: «MAX-ONE-ИЗ ожидаемых 2 входов, набора агентов и числового блока.

У кого-нибудь есть какие-либо идеи, как я могу это решить?

Заранее спасибо

 to go  ask turtles  [  let availablePatch patches in-cone 5 90 with [ resource-value gt; 30 ]   ask patch-here [ set availablePatch other availablePatch ] ;; remove the patch it is in, because if the patch it is in is the one with the highest value within your range of vision, the turtle does not move   ; ask patch-here [ set availablePatch other max-one-of [ availablePatch ] ]  let neighAvailable count availablePatch  ifelse neighAvailable = 0  [  move-around  ]  [  let target max-one-of availablePatch [ resource-value ]  face target move-to target  set step-count step-count   1  ]   ]  end  to move-around  right random 360   let step-length 2  forward step-length end  

Комментарии:

1. вы должны знать, что вы создаете availablePatch в контексте черепахи, а затем изменяете его в контексте исправления. это всегда чревато ошибками и неожиданными результатами. Неясно, что other должно означать в этом контексте.

2. также полезно, если вы начнете с описания программы в более общих чертах (что она должна представлять, что делают черепахи и почему?)

Ответ №1:

Как это часто бывает с новыми программистами, вы слишком глубоко увязли в определенном образе мышления. Таким образом, вы делаете проблему действительно технической, а код раздутым, когда код всегда должен отражать то, что вы пытаетесь сделать. То, что вы хотите, просто, поэтому код должен быть простым. попробуйте уменьшить масштаб и подумайте о других вариантах.

Если я правильно понимаю, черепахи должны выбирать патчи с высоким ресурсом, чтобы использовать их/собирать их ресурсы. Но они не должны выбирать один и тот же патч дважды.

возможные решения, которые имеют смысл:

-после того, как черепаха воспользовалась патчем, ресурсы должны быть ниже 30. таким образом, это не будет кандидатом. если она не ниже 30, переезд в любом случае не имеет большого смысла.

-используйте собственную переменную patches «exploited», которую вы установили в «true» после того, как черепаха переместилась туда, и в «false» после того, как черепаха ушла. Тогда вы можете использовать with [ resource-value gt; 30 amp; exploited = false ] вместо текущего with чека.

Комментарии:

1. Спасибо, Джумбоман!

2. нет проблем, надеюсь, я не показался вам снисходительным. Если эти решения работают для вас, пожалуйста, используйте зеленую галочку, чтобы принять ответ.