Matlab 遗传算法工具箱使用问题小结(自用) | 您所在的位置:网站首页 › MATLAB怎么调出遗传算法工具箱 › Matlab 遗传算法工具箱使用问题小结(自用) |
一.遗传算法画出的图 适应度值或者罚函数值在图中离散分布,没有出现收敛的情况: ![]() 自用调整方法: options = optimoptions( 'ga' , 'PopulationSize',100,'PenaltyFactor',100); 修改ga函数的option值 修改种群大小:'PopulationSize',100(工具箱存在默认值,可在ga函数中查看) 如果有非线性约束等,可以增大约束的惩罚因子,'PenaltyFactor',100(默认为100),或者是在约束项中乘上一个较大的因子,保证约束能够被强保证。 调整交叉率以及变异率,这可视具体情况而定,本人修改的效果不明显。 'CrossoverFraction', 0.8,' 'MigrationFraction', 0.01 二.在迭代图中,程序会在51次迭代时停止,以及跳出以下提示: ![]() 自用调整方法: 1.在option中加入画图函数:'PlotFcn' ,{@gaplotbestf,@gaplotstopping},前者上图,后者可以测试程序停止的大致原因,可从图中观察: Stop criteria:指定约束条件, (1)Generation和Timelimit指定迭代代数和时间的最大极限 (2)Fitness limit指定小于某一阈值就可以收敛, (3)stall Generation和stallTimelimit:经过多少代或多久最优值没有出现变化时就收敛。 本人是由于Stall Generation达到设定的默认值而停止,如果想要完成所有迭代次数之后再终止程序,那么可以在option中设置 'StallGenLimit', value value值大于你设置的迭代次数。 三. 在迭代图中出现最优值不变的情况,如下: ![]() 自我解释(不保真): 由于本人是离散变量取值,在变量所有的离散值可能的组合数≤所设定的种群数时,本人认为,种群个体的编码已经可以全部遍历,那么也就是能够达到全局最优的一个效果(虽然被师兄以及一些文章告知不一定能够求得全局最优)但是我的试验告诉我 有这么一个可能性是这样,有待验证。(本人在将种群大小修改至小于可能组合数时,最优值是会变化的,一旦大于等于,则是一个值) 四. 想要提取每一次迭代的适应度值: 自用: 可以从画的图中提取对应的值再存入矩阵,从修改m文件的角度,题主是没有实现,由于ga封装在c盘的缘故,有能力的可以试试。大概代码是以下的形式: lh=findall(gca,'type','line'); yc=get(lh,'ydata'); ycc=cell2mat(yc); 暂时先记录这么多,以上内容皆为本人在debug过程中自己的问题以及自己的理解,如有相同却方法无效,那需自行努力,题主也无可奈何,有错可纠正,不喜勿喷。 |
CopyRight 2018-2019 实验室设备网 版权所有 |