实现简单电梯调度(2)
GitHub:pullself
承接上文:2017面向对象程序设计寒假作业2!
上文调度方式的更新与优化
由于现在电梯可以在任意楼层停靠并且上下人。进行对应的修改。
建立在上文所使用的调度方式为基础,继续给出以预知和非预知为条件的两个程序。
代码行数 | 调试bug | 编码时间 |
---|---|---|
?行 | ?个 | ?h |
?行 | ?个 | ?h |
预知版本
通过分析,我们可以知道,只需要对搜索方式进行修改即可,修改为通过接受到的请求,动态增加所需要搜索节点。
具体实现方式:
- 在搜索过程中加入目的地判断与记录。
- 动态增加目的地停靠的搜索节点。
- 有选择性的删除节点。
实现难度不高。
尾言:作为一个算法验证的版本,将不会在下一次的作业中进行更新。
非预知版本
(文章前半部分的重点)
鉴于之前有考虑到后续的修改问题,所以在最终版本的时候将函数功能细分。
程序依然是由7-8个函数组成:
- dfs类:有原版dfs改造;
void sorting0(int m)
:全排列可执行的请求void sprting1(int n)
:在全排列中插入目的地组成搜索全排列。void sortrequest(void)
:创造排序搜索队列。void caltime(void)
:在搜索中计算时间与请求状态更新。void mintime(void)
:记录当前最优策略。
- move类:由原版move改造;
int enter(void)
:判断有没人进入,以及可处理请求的删除。返回值为1
或0
代表有人或没人。int exit0(void)
:判断是否有人出去,以及计算等待时间。返回值为1
或0
代表有人或没人。int end(void)
:判断是否所有人都被扔出。
分析过后,我们能知道需要修改的函数分别为sorting0
,sorting1
以及end
。在此基础上,可以继续将几个搜索函数整合。
bug以及优化记录
(施工中……)
尾言
由于该程序的最终目标是找到一个所有乘客等待时间总和最短的方案,但在上文中经过很多的测试数据后会发现:在不少情况下,有可能出现某个人的等待时间占据了所有人等待时间的50%以上。在现实中,这显然是不合理的。一个人的等待时间是有限的,若一个电梯反复的改变是一个人的等待时间过长,显得不公平。再通过分析现实中的电梯运行情况,就会发现现实中的电梯运行是有其的道理的。所以在此基础上再出发改造出一个代码。同时上文中的方案将不再更新。
电梯模拟
在现实的基础上给出的算法,在现实电梯的基础上给出尽可能优的运行策略。前提是非预知。同时准备在这个基础上对未来可能会产生的修改以及需求预先留下空间和数据。
代码行数 | 调试bug | 编码时间 |
---|---|---|
?行 | ?个 | ?h |
(施工中……)
测试数据
(施工中……)