Matlab Optimization Toolbox中的遗传算法工具包(GA)

  • matlab optimization 中使用了GA求解器 默认的是小于等于

找到GA 工具包

  • 找到 APP
  • 选择 Optimization Tool

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第1张图片

  • 选择Solver 
    • ga - Genetic Algorithm

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第2张图片

应用GA solver

定义适应度函数(Fitness function)与问题约束(Constraints)

example one 

  • 优化函数 sin(x) + 2 * cos(x)
  • 极其重要的 inline 方法

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第3张图片

 

  • result 

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第4张图片

example two

  • 优化函数 sin(x) + 2 * cos(x) + sin(y) + 3 * cos(y) 
    • min = - 5.39834563766817(无约束)
  • 不等约束
    • A【x;y】>= [-0.7;0.2]
    • A = [-1,-1;1,-1]
    • 注意:
      • 我们得到的结果显然是一个周期性的结果,也就是说我们肯定能找出一个满足这个不等约束的解
      • 为了将解约束到我们想要的值,我们得动点脑筋,不过我就不动了
        • x = -arctan 2 + 2n\pi -\pi/2
        • y = -arctan 3 + 2n\pi -\pi/2
>> f2 = @(x) sin(x(1)) + 2 * cos(x(1)) + sin(x(2)) + 3 * cos(x(2));

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第5张图片


Matlab Optimization Toolbox中的遗传算法工具包(GA)_第6张图片

  • 等式约束
    • B [x;y] = [1,1;0,0][x;y]=[1;0]
    • 也就是变成了 sin(x) + 2 * cos(x) + sin(1-x) + 3 * cos(1-x)

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第7张图片

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第8张图片


Matlab Optimization Toolbox中的遗传算法工具包(GA)_第9张图片

 Matlab Optimization Toolbox中的遗传算法工具包(GA)_第10张图片

设置遗传算法参数(Options)

  • 其实这个我也不懂就是了。。。。。。

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第11张图片

实战案例

  • 我们不可能永远只使用GUI界面

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第12张图片

MAIN.m 

fun = @(x) (x(1)-1)^2 + (x(2)-1)^2;

% 定义变量的上下界
lb = [-10, -10];
ub = [10, 10];

% 定义非线性约束
nonlcon = @nonlinearConstraint;

% 使用GA求解器进行优化
options = optimoptions('ga', 'Display', 'iter');
[x, fval] = ga(fun, 2, [], [], [], [], lb, ub, nonlcon, options);
disp(x)
disp(fval)

nonlinearConstraint.m

function [c, ceq] = nonlinearConstraint(x)
    % 非线性约束函数
    f1 = @(m, a)  m.^2 + m
    b = 100;
    c = [x(1)^2 + x(2)^2 - 1;   % x1^2 + x2^2 >= 1
         x(1) + x(2) - 2;       % x1 + x2 <= 2
         integral(@(n) f1(n, x(2)), x(1), b)];      
    ceq = [0;0;0];                  
end

优化问题

  • 这个优化问题绝对足够解决你所会预见的全部问题了。

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第13张图片

几次解

Matlab Optimization Toolbox中的遗传算法工具包(GA)_第14张图片

 

 

  • 显然
    • 这个问题的解不太稳定,需要多跑几次 
    • 好吧 跑了也没有 毕竟no feasible point found.......

options 设置

  • MAIN.m

fun = @(x) (x(1)-1)^2 + (x(2)-1)^2;

% 定义变量的上下界
lb = [-10, -10];
ub = [10, 10];

% 定义非线性约束
nonlcon = @nonlinearConstraint;

% 使用GA求解器进行优化
% options = optimoptions('ga', 'Display', 'iter');
% for i = 1:10
%     [x, fval] = ga(fun, 2, [], [], [], [], lb, ub, nonlcon, options);
% end
 

  • nonlinearConstraint.m

function [c, ceq] = nonlinearConstraint(x)
    % 非线性约束函数
    f1 = @(m, a)  a * m.^2 - m
    b = 10;
    c = [x(1)^2 + x(2)^2 - 1;   % x1^2 + x2^2 <= 1
         x(1) + x(2) - 2;       % x1 + x2 <= 2
         ];      
    ceq = [0;0;0];                  
end


Matlab Optimization Toolbox中的遗传算法工具包(GA)_第15张图片

 

  • Population
  • Fitness scaling
  • Selection
  • Reproduction
  • Mutation
  • Crossover
  • Migration
  • Constraint parameters
  • Hybrid function
  • Stopping criteria 

你可能感兴趣的:(常用数理软件应用选讲,数学模型与物理仿真,matlab,开发语言)