🕳 踩坑 💡 所思所感
    昨天碰到了一个严重影响算法性能的问题:在动态优化中,多样性的增强很重要,用于应对动态的变化,而当种群收敛时可以看作多样性的缺失。种群在收敛时(半径小于阈值)会被休眠,而触发多样性调整时会唤醒种群,我在此犯了个大错,我底层使用的是PSO,计算种群的半径用的是PSO的pbest到其中心点的距离的平均值,这就导致在种群唤醒时,虽然在其solut上做了布朗运动(扰动,增加其多样性),但由于其pbest基本不变,导致种群半径依旧不变,进而导致种群就算被唤醒,也会由于下一代的半径也符合收敛条件而被立刻休眠,导致根本无法应对环境的变化。所以,使用solut来计算半径,更加合理,当唤醒时,solut会被扰动,此时种群半径已无法再满足休眠条件,进而开始搜索,如若环境没有变化,则很快就会进入收敛状态,如若环境发生变化,亦可迅速响应,追踪新的全局最优解。

    此外,还遇到了一个问题:在比较两个解的dominate的时候,发现有一个解居然objective.size()居然为0,初步想法是没有被评价,但不对啊,没有评价objective.size()也应该是1,只不过适应值为0,后来又想是不是构造的时候出问题了,翻来翻去,发现我也只用了一种构造函数,是一定构造了objective信息的,后来经过调试仔细观察,发现其使用了引用,而其引用的对象objective.size()居然是470,非常令人匪夷所思,询问了大师兄,发现问题是这个解变成了野指针,在某个地方释放了,因为使用的是引用,所以此处所引用的对象自然不存在了,我推断时m_his_sols与ssp.his_sols引用的是同一个份解,m_his_sols中解被removeoutdated之后,而恰巧ssp.his_sols中未被移出,所以才导致了这个问题,预想的解决办法第一种是对m_his_sols操作后,同时对所有的ssp中的his_sols进行更新;第二种就是确保对m_his_sols进行淘汰时,同步淘汰ssp.his_sols中的相应的个体,现在是通过评价时间控制的,淘汰m_his_soks中大于evaltime的粒子时,并未正确淘汰掉对应ssp中his_sols超过evaltime的粒子,导致了粒子消亡后,还存在ssp列表中,算法更新每个ssp列表中best solut时,索引到了这个已经被释放的个体,导致出问题。这只是分析,明天再看看具体什么情况。

    看见我厨艺见长了吗?





    我真的很讨厌,精致的利己主义者

    天目湖!

    突破 1000KM!

    再相逢!

    去了一趟大疆,嗯,被 action4 的价格完完全全吸引了,拥有它的欲望又死灰复燃了

    还是得请求帮助,专业的人做专业的事情,叫昱燃师弟帮忙配环境,我在旁边学习,学到了非常多,感恩

    不小心把实验环境改炸了,conda回退也没反应,怕是又要搞好久才搞得好

    99.23服务器不稳定,防止ssh断开导致训练断开,可以使用后台训练:
    nohup /home/spsv/miniconda3/envs/OpenSTL/bin/python /mnt/data/student/2020/pengmai/OpenSTL/mytest/visualize.py >> train.log 2>&1 &