一、备注
上周主要是调整了一些基本参数,适当减少了阅读器的数量,但是并不能明显地改变读写器碰撞的问题,老师认为BPSO能够较好地解决读写器-读写器碰撞问题,因为它考虑了阅读器的开关状态,能够较好地对阅读器进行调度,于是老师让我改进这个算法。
二、改进
在BPSO中,在每个时隙,所有阅读器的开关状态会用0或1来表示,0表示关闭,1表示打开,对于10个阅读器,100个时隙而言,粒子的维度就是10*100+10*2=1020, 维度过高导致后期算法难以收敛。于是,我们在编码上做了一点改进,对于每个时隙,我们用一个二进制数来表示阅读器的开关状态,10个阅读器对应一个10位的二进制数,比如0表示000000000020000000000_200000000002,对应10个阅读器全部关闭的状态,1023表示111111111121111111111_211111111112,对应10个阅读器全部开启的状态,这样,粒子的维度就变为10*2+100=120, 维度与之前相比大大降低。
同时,考虑到这120维向量的不同部分取值不同,我将两个部分的惯性参数设定得也不同,向量可以表示阅读器的位置和阅读器的状态,这两部分用不同的惯性参数,对于阅读器位置,由于取值范围较小,惯性权重也相应的较小;对于阅读器状态,由于取值范围较大,惯性权重也较大,可以保证粒子能够充分到底每一个可能的取值。之前我们还忽略了一个问题,由于粒子的维度比较大,为了避免粒子陷入局部最优解,我们还增大了粒子的数量以及迭代的次数,粒子数量有原来的50增加至200,迭代次数由100增大至2000。
三、效果
这次运行的效果要比上次好多了,
算法 | 任务1 | 任务2 | 任务3 | 任务4 | 总分 |
---|---|---|---|---|---|
改进前 | 0.0505 | 0.2925 | 1 | 0.53 | 0.39 |
改进后 | 0.0792 | 0.3860 | 1 | 0.29 | 0.55 |
四个任务的权重分别为5%,10%,15%,70%,所以任务3和任务4得分更高,具体的结果可以看我之前的github。
虽然有改进,但是准确率还是不够,只有55%左右,在现实中肯定是不够的,我们需要进一步改进该算法。