一.遗传算法画出的图 适应度值或者罚函数值在图中离散分布,没有出现收敛的情况:

自用调整方法:
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过程中自己的问题以及自己的理解,如有相同却方法无效,那需自行努力,题主也无可奈何,有错可纠正,不喜勿喷。