主要内容

遗传算法的自定义输出函数

此示例显示在遗传算法求解器中使用自定义输出功能GA.。自定义输出函数执行以下任务:

  • 将群体的前两个组成部分的范围绘制为矩形。矩形的左侧和下侧位于最小值x(1)x(2)分别,右侧和上侧位于相应的最大值。

  • 当最佳函数值下降下降时停止迭代0.1(目标函数的最小值是0.)。

  • 记录名为的变量中的整个人口盖亚人口历史每10代Matlab®工作区中。

  • 将初始交叉分数修改为自定义值0.2,然后将其更新回默认值0.8经过25代之后。初始设置0.2使得第一个迭代主要通过突变进行随机搜索。后来的设置0.8使以下迭代主要通过现有总体成员的组合进行搜索。

目标职能

目标函数用于四维X谁的前两个组件是整数值的。

作用f = gaintobj(x)f = restriginsfcn([x(1)-6 x(2)-13]);f = f + Restriginsfcn([x(3)-3 * pi x(4)-5 * pi]);

输出功能

自定义输出函数在初始化期间设置绘图,并在迭代期间维护绘图。输出功能也暂停了迭代0.1s.所以你可以看到它的剧情。

作用[状态,选项,OPTCHANGED] = GAOUTFUN(选项,状态,标志)执着的h1历史r optchanged=错误;转换旗帜案件“初始化”H1 =数字;AX = GCA;ax.xlim = [021];ax.ylim = [021];l1 = min(state.population(:,1));m1 = max(state.population(:,1));l2 = min(state.pulation(:,2));m2 = max(state.population(:,2));r =矩形(斧头,“位置”,[L1 L2 M1-L1 M2-L2]);历史(:,:,1)= state.population;Assivein(“基地”'gapopulationhistory',历史);案件'iter'%每10代更新历史记录。如果REM(State.generation,10)== 0 SS =大小(历史,3);历史(:,:,ss + 1)= state.population;Assivein(“基地”'gapopulationhistory',历史);结尾%找到最佳的客观函数,如果它很低,则停止。ibest=state.Best(end);ibest=find(state.Score==ibest,1,'最后的');bestx = state.population(ibest,:);bestf = gaintobj(bestx);如果bestf <= 0.1 state.stopflag ='是';disp('得到0.1'的)结尾%更新绘图。图(h1)l1 = min(state.population(:,1));m1 = max(state.population(:,1));l2 = min(state.pulation(:,2));m2 = max(state.population(:,2));R.Position = [L1 L2 M1-L1 M2-L2];暂停(0.1)%在25代后更新突变和交叉的分数。如果State.generation == 25选项.CrossoverFraction = 0.8;OptChanged = True;结尾案件'完毕'%包括历史上的最终群体。ss=大小(历史记录,3);历史记录(:,:,ss+1)=状态。人口;分配(“基地”'gapopulationhistory',历史);结尾

问题设置和解决方案

设置下限和上限。

lb = [1 1 -30 -30];UB = [20 20 70 70];

设置整数变量和变量数。

Intcon = [1 2];nvar = 4;

设置选项以调用自定义输出函数,并在开始时几乎没有交叉。

选项=最佳选项('GA''outputfcn',@ gaoutfun,'Crossoprofaction',0.2);

对于再现性,设置随机数生成器。

RNG(10)

设置目标函数并调用求解器。

有趣= @gaintobj;[,fval] = ga(fun,nvar,[],[],[],[],LB,UB,[],INTCON,选项)
低于0.1优化终止:y x=6.0000 13.0000 9.4217 15.7016 fval=0.0098

输出函数停止了求解器。

查看录制历史记录的大小。

DISP(尺寸(差距))
40 4 7.

40×4种群矩阵(40个个人,每一个4元素排矢量)有七个记录。

相关话题