我在模拟逃税。我的模型有固定的交易者(一种乌龟)和客户(另一种乌龟)。
交易者会去找附近最便宜的交易者。
只要我的模型有少于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发布于 2013-12-18 07:02:17
在您的另一个问题的代码中,我尝试遵循您自己的代码,但您也可以这样做:
而不是找到一个交易商,你总是检查一个与该客户关系密切的交易商,最便宜的食物和最近的食物都是客户的财产。
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]]
]
endhttps://stackoverflow.com/questions/20273890
复制相似问题