关于结对作业
关于电梯调度系统,我们的想法很简单,做一个最简单的电梯。那么最简单的电梯有哪些标准呢?首先,静止时,某层有人按钮,会响应。在行进过程中,遇到正方向的响应(所谓正方向的响应,必须符合两个条件:1.电梯的行进方向和人所要去的方向一致2.人在电梯当前的行进方向上)会停止。人满不停。但是,考虑到有四个电梯,不同的调度方式对效率的影响很大。因此还需要去做一个选择,选择哪个电梯去响应需求。那么,该如何去选择呢?简单来讲,对此刻静止的电梯(未工作的电梯)和正方向电梯(人未满)按照离需求响应的距离排序,最近的优先响应需求。这样的话,就存在一个问题,可能某个需求没有电梯响应,比如所有的电梯都是逆向电梯或者人满。所以,进一步的解决这个问题,就需要另一个机制,保证实时响应,系统有个自带的时钟周期Tick,恰好每个tick,都会执行run()这个函数。我们应该很好的利用这个机制,这样的话,每个tick都做一次四个电梯的决策,这样的话,对于某个响应,如果一开始没有电梯符合条件可以响应,那么每个tick都做一次决策,最会有一个时间有电梯符合要求去响应这个需求。同时,这样的好处,也解决了如果一个电梯已经响应某个需求,但是在行进的途中被截断,从而不再满足要求,进而刚开始的需求没办法满足的问题。因为通过这样的实时机制,只要需求没被满足,每个tick都会发出一次需求响应,如果暂时要求被满足但是中途被截断从而不再满足,那么下一个tick还会再发出需求响应。
经过如上的分析,我们设计了move类,moving类,run类,record类,move是让电梯做正常的往复运动,到最高层停然后向下运动,到最低层停然后向上运动。record是记录下目前电梯里所有人要去哪层,同时需要返回nearest此刻最近的楼层是哪一层。moving是实际的电梯运动情况,在做move时,将电梯停在nearest,然后继续move。run是要对四个电梯做一个选择,选出此刻要响应需求的电梯具体是哪一个。
但是,由于整个项目有点复杂,最后这个想法没有实现。退而求其次,只是在原来最坏的基础上改为如果某层没人要上,也没人要下的话,电梯就不停。这样的话,没有考虑到四个电梯的选择问题,但是一定程度上也比bus的算法提高了效率。
最后,这不算是次成功的作业,要学的东西还很多,前面要走的路还很长。
关于结对编程的好处:
1、两个人可以讨论,不用的思路结合起来往往能有意想不到的收获!
2、两个人可以互补,项目做来更容易。
3、两个人可以互相监督、互相督促。
关于结对编程的坏处:
两个人如果都犯懒的话,互相靠对方,最后可能会得不到理想的效果。