我正在模拟逃税行为。我的模型有固定交易者(一种龟)和顾客(另一种)。
交易员前往附近最便宜的交易员。
只要我的模型少于10个交易者,我就没有遇到过这个问题。但是当我把它提升到20以上时,其中一个交易者似乎偶然会遇到一组坐标,这些坐标会让每个客户陷入无限运动循环,他们向前移动1,但超过目标,转向周围,再次超调等。
通过减少向前移动而不是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
答案 0 :(得分:0)
在您的其他问题的代码中,我尝试按照您自己的代码,但您也可以这样做:
而不是找到一个交易员,你总是检查那个客户的一个密切交易者,最便宜的食物和最近的食物是客户财产。
Breed [Customers Customer]
Breed [Traders trader]
Customers-own
[cheapest-food nearest-food traders-close]
traders-own [price]
to setup
random-seed 234523432
clear-all
Create-traders 10 [move-to one-of patches set price random 100 set shape "house" set color white ]
create-Customers 50 [move-to one-of patches set shape "person" ]
reset-ticks
end
to go
ask customers
[
set-customers
find_food
]
tick
end
to set-customers
rt random 100
fd 1
set traders-close traders with [distance myself < 5]
set nearest-food min-one-of (traders-close )[distance myself]
set cheapest-food min-one-of traders-close [price]
end
to find_food
ifelse ( count traders-close < 2 )
[ifelse nearest-food != nobody
[Move-to nearest-food ]
[Move-to min-one-of Traders [Distance myself]]
]
[ ifelse cheapest-food != nobody
[Move-to cheapest-food]
[Move-to min-one-of Traders with [Distance myself < 5][price]]
]
end