Matlab利用遗传算法求解函数最小值问题

摘要:本文介绍了在MATLAB中,如何利用遗传算法求解一个具体函数的最小值。通过编写简洁的代码,我们成功找到了函数的最优解,并得出了最小值。

        1. 函数最小化问题描述

我们需要求解的函数为:min y = 20 + X1^2 + X2^2 + 10cos(X1)X2^2 - sin(X2)X1^2,其中 X1 和 X2 的取值范围均为 [-5, 5]。

        2.1 目标函数和变量边界

我们定义了目标函数 fitnessFunction,同时设置了变量 X1 和 X2 的取值范围。

fitnessFunction = @(x) 20 + x(1)^2 + x(2)^2 + 10 * cos(x(1)) * x(2)^2 - sin(x(2)) * x(1)^2;

lb = [-5, -5]; % 变量下界

ub = [5, 5];  % 变量上界

        2.2 遗传算法选项

我们使用 optimoptions 函数设置遗传算法的参数。

options = optimoptions('ga', 'PopulationSize', 100, 'MaxGenerations', 200, 'PlotFcn', {@gaplotbestf, @gaplotbestindiv});

        2.3 运行遗传算法

使用 ga 函数运行遗传算法,得到最优解 x 和最小值 fval。

[x, fval] = ga(fitnessFunction, 2, [], [], [], [], lb, ub, [], options);

        3. 结果展示

我们将最优解和最小值输出到命令行窗口。

fprintf('最优解: x1 = %f, x2 = %f\n', x(1), x(2));

fprintf('最小值: %f\n', fval);

可得最小值为-204.593699,X1,X2值如图

%用遗传算法求解min y=20+X1^2+10cos(X1)*X2^2-sin(X2)*X1^2

% 其中x1:[-5,5],x2:[-5,5]

% 目标函数 

fitnessFunction = @(x) 20 + x(1)^2 + x(2)^2 +10 * cos(x(1))*x(2)^2- sin(x(2))*x(1)^2; 


% 变量边界 

lb = [-5, -5]; % 变量下界 

ub = [5, 5];  % 变量上界 

% 遗传算法选项 

options = optimoptions('ga', ... 

    'PopulationSize', 100, ... % 初始种群大小 

    'MaxGenerations', 200, ... % 最大代数 

    'PlotFcn', {@gaplotbestf, @gaplotbestindiv}); % 绘图函数,绘制最佳函数值和最佳个体 


% 运行遗传算法 

[x, fval] = ga(fitnessFunction, 2, [], [], [], [], lb, ub, [], options); 


% 显示结果 

fprintf('最优解: x1 = %f, x2 = %f\n', x(1), x(2)); 

fprintf('最小值: %f\n', fval);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容