首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海龟超过它们的目标,陷入无限的运动循环

海龟超过它们的目标,陷入无限的运动循环
EN

Stack Overflow用户
提问于 2013-11-29 03:54:28
回答 1查看 239关注 0票数 2

我在模拟逃税。我的模型有固定的交易者(一种乌龟)和客户(另一种乌龟)。

交易者会去找附近最便宜的交易者。

只要我的模型有少于10个交易员,我就没有遇到过这个问题。但当我将其提升到20以上时,其中一名交易员似乎偶然地处于一组坐标中,这使得每个客户都陷入了一个无限的移动循环中,他们向前移动了1,但超过了目标,转过身,并再次超过目标,等等。

我可以通过将向前移动减少到0.001而不是1来减少问题,但问题最终仍然会发生。

有没有快速解决这个问题的方法?我可以想象一种解决方案,当ifelse使他们在范围1或其他范围内时直接跳到交易员坐标中,但有没有更简单的方法?

我已经尝试过在给定距离的情况下移动到最近的交易者--就像我上面建议的那样,但是现在客户在没有交易者的情况下,在随机的地点成群结队地排起了康加队。

这是关于移动的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-12-18 07:02:17

在您的另一个问题的代码中,我尝试遵循您自己的代码,但您也可以这样做:

而不是找到一个交易商,你总是检查一个与该客户关系密切的交易商,最便宜的食物和最近的食物都是客户的财产。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20273890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档