#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. нет проблем, надеюсь, я не показался вам снисходительным. Если эти решения работают для вас, пожалуйста, используйте зеленую галочку, чтобы принять ответ.