多路电梯调度算法
多路电梯调度算法(一)思想篇 -------------小组成员***贾川 李驭龙
2014年3月5日,我们就在老师布置完结对项目的当天,我们组便开始上网查阅电梯调度部分资料各自总结。
3月6日,我们把各自整理的资料相互交流,总结出了一个大体的思考方向,即分情况讨论,各自总结可预见的各种实际情况。
3月7日,我们把各自总结的实际情况进行交流,发现遇到的突发情况及实际操作比较多,很复杂,我们便摒弃了这一思想,经过研究后,我们终于想到了另一个可行的思维,我们把它称为“巨无霸”思想。
3月8日,我们主要把这一思想涉及到的内容及所发生的各种情况做一假设,发现上一思想所遇到的各种情况都能解决,于是我们就确立了以这一思想为基础的编程方案。
3月9日,截止今日,基本完善了这一思想的大致走向,中间也做了局部的调整,虽然还不是太完美,但还有其他的后续工作,现在以博客的形式发表出来。
总体思路:
总体算法就是电梯有一个上升或下降的趋势,用电梯内部人员的控制指令与电梯趋势作比较,比较结果再与外部人员控制指令作比较判断是否允许进入,下面是详细算法。
把电梯定义为一个结构体
struct elevator
{
int mount;//电梯内部人数
int weight;//电梯内部人员总重量;
int num[20];//电梯内部人员指令,即要到达的楼层数
}elev[3]//有两个相同电梯,定义三个电梯即可
第一步,标记电梯趋势,上升为1,下降为-1。把电梯的趋势初值赋值为外部第一个指令,即第一个人选择的上升或下降指令:上升为1,下降为-1。
第二步,判断电梯内部指令,即电梯内人员楼层数字选择情况,用选择层与当前停留层(目的层)数值做差,大于0则为1,小于0则为-1.然后把得到的数值同电梯上升趋势数值做比较,如果有至少一个与其相同,电梯就继续这一趋势,反之则反方向运行。电梯关闭趋势瞬间清0.
第三步,这是判断外部人员是否允许进去的情况,先判断电梯内部是否超重,用每部电梯的最大载重量减去45,如果电梯内的在中已超过这个数值,则不允许进入;然后再继续,如果选择的趋势与电梯内部指令和总趋势比较后的趋势相同则允许进入,反之则不允许进入。
这是大体的思路框架,其中的多种细节没有涉及到,会在后续的程序代码中提现到。
这是我们经过讨论后最终的算法,初步认为无视各种特殊情况,没有什么分类讨论,一个大的算法思路就能运行下来,具体代码还没完成,后续工作正在紧张进行中。虽然还不知道能不能真正实现,看着好多人都是分情况讨论的,对于他们的思想没有深入研究,觉得自己的还不错,如果最终你运行不出来可能还会转变思路,目前情况就是正在火热研究中,具体代码结果,敬请期待... ...
春晖楼调研数据: