如何在 Anylogic 上按路线(而不是距离)获取时间?

Posted

技术标签:

【中文标题】如何在 Anylogic 上按路线(而不是距离)获取时间?【英文标题】:How to get time by route (instead of distance) on Anylogic? 【发布时间】:2022-01-17 23:57:46 【问题描述】:

我正在 Anylogic 中开发一个模拟模型,其中有一个车队为旅行者提供拼车服务。为了确定车辆是否可以接载某个旅行者,我有一个函数可以确定他与车辆的距离,即基于此:“getDistanceByRoute​”,然后我将其除以平均速度以获得值“等待时间”(如果计算出的等待时间低于某个定义值,则授权车辆取走它)。事实上,真正重要的是等待时间而不是距离。但是现在,我找不到计算时间而不是距离的函数。车辆的速度将取决于车辆使用的道路类型,这完全由 Anylogic 在 GIS 地图中计算得出。但是在车辆已经在路上行驶之前我不知道这个道路速度,理想情况下我应该在计算之前知道它以确定真正的“等待时间”(而不是基于计算的距离和定义的平均速度的估计) . 有人可以帮忙吗? 感谢您的宝贵时间!

【问题讨论】:

您能否详细说明一下:车辆的速度将取决于车辆使用的道路类型,这完全是在 GIS 地图中计算出来的。 Don'您是否手动定义代理速度? 不是,因为我通过提供纬度和经度来使用“moveToInTime”功能,然后agent在GIS Map中移动。尽管我根据自己的选择为代理定义了一定的速度,但当代理通过地图中的路径/道路时,它会考虑并假设道路的速度限制(或平均速度)。实际上,行程时间大致对应于 Google 地图为您提供的该路径。 但是void moveToInTime(Point location, double tripTime) 有tripTime 作为输入... 是的,但是在运行模型时,它没有考虑时间估计,它只是使用自己从 GIS 地图中计算出来的。 我对这个解释有疑问。引用 AnyLogic 帮助:当您使用函数 moveToInTime() 时,代理以恒定速度移动,以便在指定为函数参数之一的时间长度内到达目的地。 【参考方案1】:

你有 timeToArrival() 的方法。

但是如果你使用 moveTo 块移动到目的地,那么你需要在移动开始后至少 1 毫秒计算这个......

任何时候你都可以做 agent.timeToArrival() 并且如果代理正在移动,那么它将返回一个非零值

【讨论】:

但这实际上并不能解释他似乎应用的 GIS 路径的速度变化,对吗? 只要只涉及 1 个 moveTo 就可以工作(我认为) 方法“timeToArrival()”的问题在于,如果代理没有移动,它会假定值为 0,并且经常会停放汽车而不移动。【参考方案2】:

车辆的速度将取决于车辆使用的道路类型,这完全由 Anylogic 在 GIS 地图中计算

GIS 地图上的移动不会以任何方式改变相对于道路的速度;这是 AnyLogic 中 GIS 功能“缺失”的主要内容之一(即,没有关于速度限制的元知识或与交通/道路工程等事物挂钩的能力)。 [如果添加的话,这将是一项重要的新功能,并且绝对不会“刚刚发生”,因为这意味着许多历史模型将是错误的。]

我刚刚测试了moveTomoveToInTime 以确保它也始终确保在指定的时间按预期到达(从一开始就设置一个固定的速度,即在给定的时间内到达所需的速度时间)。

所以你总是知道潜在的到达时间:如果使用moveTo,则为距离/速度,如果使用moveToInTime,则为指定时间。

如果您看到其他任何内容,我怀疑是错误或您没有打印您认为的速度(或者您自己的模型逻辑中存在动态改变车辆速度的东西)。

如果您在移动发生时明确更改速度,AnyLogic 在您调用时重新计算timeToArrival()。并且moveToInTime 将不再在指定的时间内到达(因为所做的只是预先设定了最初的速度;它不会在发生运动时“监控”运动)。

【讨论】:

路线是从 OSM 服务器请求的,我认为这就是它在考虑道路的情况下计算速度的方式。我已经确认,路线旅行时间将与您在 Google 地图上获得的非常相似,速度是不同的,我敢肯定,我将其打印为输出,我实时观看,并且路线具有相同的距离由于道路类型不同,行程时间也会不同。 我已经与 AnyLogic 支持人员核实过,他们确认没有任何 GIS 移动配置可以实现您所声称的。 (正如我所说,这是 AnyLogic 中 GIS 地图/数据的已知“限制”,如帮助中所述。)因此,此时您需要使用示例模型来证明它。 我想理论上仍有可能存在某些特定的路由提供商(可能是针对特定国家/地区的路由)以某种方式发生这种情况(尽管完全没有记录并且 AnyLogic 支持团队本身 --- 加上所有SO 上经验丰富的 AnyLogic 建模者——完全不知道它)但它绝对不会在任何正常配置中发生。此外,AnyLogic 生成的 GISRoute 数据甚至没有存储速度数据的能力(即使它可以从路由提供商处获得)。

以上是关于如何在 Anylogic 上按路线(而不是距离)获取时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Anylogic 中存储作业车间生产中的路线

Anylogic——如何计算行人之间的距离

Anylogic - 使用自定义 GIS 路线绘制动画帧时出错

如何在离散事件模拟中的 Anylogic 中绘制代理在图上行驶的距离?

Anylogic个人学习版如何模拟事故

在 Anylogic 中定义不同区域之间的距离