普通电梯调度算法

Posted Stolf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普通电梯调度算法相关的知识,希望对你有一定的参考价值。

普通电梯调度算法

GitHub: https://github.com/StolfdaInuit/object-oriented

编写程序的代码行数 调试的bug数 完成该次作业总耗时
277行 2个 1h

文件清单

\\ elevator-scheduling(normal)
	\\ main.cpp // 策略:估计当前 向上、向下、停靠 三类行动的耗时,采用预估耗时最少的
	
\\ BIN
    \\ elevator.exe // 运行一次测试五组数据
    \\ input.txt // 包含所有的五组测试数据
    \\ output.txt // 包含所有的五组测试结果

优化过程

问题给出的要求是实现一个正常的电梯调度算法,因为之前的作业就是当正常电梯来写的,所以在之前代码的基础上稍微改改就行了。
不过考虑到贪心算法很容易忽略掉一些条件,又重新整理了一遍公式。
下次如果还写电梯,打算用深搜了,贪心毕竟还是不够对口,虽然感觉如果考虑实际情况下的嵌入式算法可能贪心会更容易用到。。

总结了一下基本的运行流程:

电梯每一秒执行如下操作:

1. 遍历乘客信息,获取有效的目的地信息。

2. 目的地指:【已发出请求的未上电梯的乘客的起始楼层】 以及 【已上电梯的乘客的去往楼层】。

3. 把所有目的地归纳为三大类:向上,向下,停靠。

4. 对运行目标按照以下规则进行选择:
估计当前 向上、向下、停靠 三类行动的耗时,采用预估耗时最少的

5. 执行当前运行目标。

注:初始运行目标为停靠。

另外还把测试模式改成多组数据,也就是运行一次测试五组数据
因为没有考虑全局变量重置的问题,出了点小bug。


文件读写

#include<fstream>
......
fstream(const char *, int = ios::in); // 有参构造函数
void open(const char *, int =ios::in); // 打开文件
bool is_open() const; // 检查文件是否正确打开
void close(); // 关闭文件
  • 文件输出流类ofstream及文件输出
    – 【输出文本文件

    – 【输出二进制文件

  • 文件输入流类ifstream及文件输入
    – 【输入文本文件

    – 【输入二进制文件

  • 检查输入文件状态
    eof()检查文件是否已结束
    good()检查文件是否已损坏

  • 文件打开模式

  • 文件的随机读写
    – 文件输入流对象包含一个读文件指针
    – 文件输出流对象包含一个写文件指针

    istream& seekg(long bytes, ios::seek_dir origin); // 移动读文件指针
    long tellg(); // 返回当前读文件指针的位置
    ostream& seekp(long bytes, ios::seek_dir origin); // 移动写文件指针
    long tellp(); // 返回当前写文件指针的位置
    

git commit 日志


测试数据

  • 数据1:

目的信息同时出现,电梯应当达到理论最优解
0 5 8
5 4 9
5 2 5
5 6 7
5 8 2
```

```

测试结果:
64
得到最优解,符合预测
```


  • 数据2:

电梯应当在运行中掉头才能得到最优解
0 1 9
0 1 9
0 1 9
5 5 4
5 5 4
```

```

测试结果:
43
电梯掉头,符合预测
```


  • 数据3:

电梯应当在运行中不掉头才能得到最优解
0 1 8
0 1 8
0 1 8
0 1 8
3 6 1
```

```

测试结果:
46
电梯不掉头,符合预测
```


  • 数据4:

即使到达目的地也不能停,电梯应当优先满足多数人的需求
0 1 8
0 1 8
0 1 8
0 1 8
3 3 7
```

```

测试结果:
44
电梯中途未停,符合预测
```


  • 数据5:

随机的较大数据,观察是否出现异常
66666 3 9
66667 7 2
66660 5 2
66663 8 9
66673 1 9
```

```

测试结果:
80
电梯正常运行
```

以上是关于普通电梯调度算法的主要内容,如果未能解决你的问题,请参考以下文章

操作系统:电梯调度算法代码演示

电梯调度算法不智能的原因

双电梯电梯调度算法的简单分析

电梯调度算法模拟

结对作业——电梯调度算法的实现与测试之需求分析与算法设计

算法解密:电梯是如何实现上下调度的?