Я моделирую уклонение от уплаты налогов. У моей модели есть постоянные трейдеры (одна порода черепах) и клиенты (другая порода).черепахи превышают свою цель и застревают в бесконечной петле движения
Трейдеры идут к самому дешевому торговцу в их окрестностях.
Пока у моей модели менее 10 трейдеров, я не испытывал этой проблемы. Но по мере того, как я наращиваю его до более чем 20, один из трейдеров, похоже, случайно попадает в набор координат, которые заставляют каждого клиента застревать в бесконечном цикле движения, где они продвигаются вперед на 1, но превышают цель, поворачиваются вокруг и перерегулирования снова и т. д.
У меня может быть меньше проблем, если уменьшить движение вперед, чтобы сказать 0.001 вместо 1, но проблема все равно будет возникать в конечном итоге.
Есть ли быстрое решение этой проблемы? Я могу представить себе решение, в котором ifelse заставляет их прыгать непосредственно в координаты трейдеров, когда они находятся в радиусе действия 1 или что-то еще, но есть ли более простой способ?
Я попытался реализацией двигается в направлении ближайшего торговца заданного расстояния - как я предложил выше, но теперь клиент застревают в конги линий в группах в случайных местах без торговца
Вот код относительно движения:
to find_food
ifelse (num-traders-close < 2)
[nearest_food]
[choose-cheapest]
end
to nearest_food
let nearest-food min-one-of (traders)[distance myself]
let cf-dist distance min-one-of traders [distance myself]
ifelse closest-trader > 1
[face nearest-food
fd 1]
[face nearest-food
fd cf-dist]
end
to choose-cheapest
let cheapest-food min-one-of traders [price]
let cf-dist distance min-one-of traders [distance myself]
ifelse closest-trader > 1
[face cheapest-food
fd 1]
[face cheapest-food
fd cf-dist ]
end
Пожалуйста, разместите код, который вызывает проблему. –
Отредактировано сообщение, чтобы включить код. Интересно, может ли проблема быть связана с каждым трейдером, пытающимся перейти на одно и то же место? Может быть, проблема может быть решена, если все они будут двигаться одновременно? – Ullsokk
Код выглядит хорошо для меня. Возможно, вам нужно какое-то детектирование столкновения, чтобы сказать, когда клиент достиг трейдера и перестанет двигаться. Маловероятно, что клиент и трейдер будут занимать точно такую же точку из-за ограниченной точности компьютера. Таким образом, он всегда будет двигаться на крошечную сумму, но затем должен измениться в направлении, и поэтому в конечном итоге покачивается на месте. Это то, что происходит? –