多路电梯调度算法(一)
我们的电梯调度算法比较简陋笨拙,再此献丑了,希望大家看看就好哈,不要太当真。。。
我们将电梯分为三种状态,第一种状态,正在向下行使中,第二种状态,正在向上行驶中,第三种状态,处于停止中。由于第一种状态与第二种状态类似,故此,我们下面只讨论第一种和第三种状态是对电梯的调度。
对于第一种状态即电梯正在向下行使,分为有人与没人两种情况。
当第一种状态的电梯里有人时,那么电梯向着最近的target floor驶去,如果此时中途有人(current floor 与 target floor之间)有向下的请求且电梯可以到达,那么改变电梯的target floor,使电梯在有人处停止。
当第一种状态的电梯里(即正处于向下行使)没人时,假设此时的电梯所在的层数为i,那么搜索 i-1到0层间是否有向下的请求,如果有那么将最近的一个请求所在楼层设为target,如果没有,那么在搜索0到i-1层间是否向上的请求,如果有将最远的一个请求所在的楼层设为target。
第二种情况与第一种类似,再此不做多述。
对于第三种情况的电梯即处于开门状态或者处于关门但是没有明确目标的电梯。同样分为有人与没人两种状态,若有人,那么找到这些人想去的最近的目标这位target,若没人将target设为整个楼层中请求最早的地方。
我们的算法就这么简单,当处理多台电梯怎么分配任务时我们是这么处理的,比如,1,3号电梯都正向上走它们处于7层以下,若此时7,9层有向上的请求,那么我们将第7层的请求分给离7层最近的电梯,比如为1,那么就会将9层的响应分给3。在分配时我们采取最近的判断标准,谁离得近就将任务分配给谁。。。
关于我们的算法,有许多缺点,比如,没有仔细考虑乘客的类型(比如早上从0,1层上楼的比较多),这是我的失误,还一个没有考虑重量(比如如果电梯载重接近极限就可以不响应别的请求了)的问题,这是我的懒惰(由于test framework中没有获取当前电梯的当前重量,我又比较懒没有试图通过别的方法获取这个信息。。。),再此表示十分歉意。。。
总的测试下来,我们的效果不是很好,希望别的同学能取得好的成果!谢谢您的阅读。。。
MicroTeam Liuhang
CodingCrazy Binxing
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述