用lua语言+Microcity Web解决空集装箱母港选址与配送问题(四)

       Microcity Web介绍:该网站由大连海事大学物流系的孙卓教授自主研发, Microcity Web采用的语言是lua,由于其语法简单,数据结构强大,自由度高,另外,lua也是最快的语言脚本之一,对于优化问题的求解,速度也是十分关键的。Microcity Web可以实现相关运筹问题的求解,在物流交通领域具有较强的适用性,而且具有强大的仿真功能,是新手尝试撰写仿真代码不二选择。
 

五、配送仿真及可视化

      本文依据问题三得出的结果对路线1与路线3进行仿真,让小船同时出发运输空箱,并返回母港。剩余航线也可不断叠加,即可同理得全部仿真航线。

1、创新点:同时出发,独立运行

      “while #paths[1] > 0 or #paths[2] > 0” 循环确保两艘船按照预定路径移动。这个循环条件检查两艘船的路径数组,只要至少有一艘船的路径数组中还有未处理的点(即数组长度大于0),循环就继续执行。在循环体内,每艘船根据自己的速度独立更新位置,并沿着当前路径段移动。当船只到达当前路径段的终点时,moveShipStep 函数会移除路径数组中的前三个元素(代表该路径段),使船只转移到下一段路径。这个过程持续进行,直到两艘船的路径数组都变为空,即它们都到达各自的终点。通过这种方式,两艘船可以同步开始移动,但根据各自的路径长度和速度异步到达终点,实现了在单线程环境下的有效路径跟踪和独立控制。

2、主要思路:

(1)设置场景和摄像机:通过设置正交视图摄像机并加载世界地图及GeoJson数据。并初始化地图特征和标签,在地图上显示出线段与港口对应的数字标签

(2)初始化两艘船,创建了两艘船只模型,并设置了它们的起始位置和大小。

(3)定义航线:该仿真的例子为航线为路1:SINGAPORE—>SHANGHAI—>SINGAPOR;路3:1—>SYDNEY—>MELBOURNE—>DURBAN—>COLOMBO—>MANILA—>1。输入航线代表的路径点坐标为routes = {{2, 11, 9, 10, 3, 2},{2, 4, 16, 1, 17, 2}},每艘船指定了一条由一系列点组成的航线。

(4)读取路径点:calculatePath 函数根据给定的航线读取出一系列连续的路径点,这些点是船只沿途经过的具体位置,将其存入table中,后面船舶行走时,逐个读取。

(5)船只移动逻辑:moveShipStep 函数负责按照设定的速度逐步移动船只。它首先计算两个连续路径点之间的直线距离(使用勾股定理),然后根据船只的速度将这段距离分割成较小的步长。每次函数调用时,船只沿这个方向移动一个步长。移动的方向由两点之间的水平和垂直距离(即斜率)确定。

(6)路径更新:当船只到达当前路径段的终点,脚本从路径数组中移除这一段,使船只可以开始沿着下一段路径移动。

(7)主循环控制:在主循环中,脚本连续调用moveShipStep,同时检查每艘船的路径数组。只要至少有一艘船的路径未完成(即路径数组非空),循环就继续,从而保持船只移动。每个循环周期结束时,场景被重新渲染以更新船只位置

3、仿真结果:

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值