Matlab遗传算法

遗传算法是一种模拟生物进化过程的优化算法,由John Holland提出,常用于解决复杂组合优化问题。它包括选择、交叉和变异三个基本操作。在MATLAB中,可以使用gaoptimset()设置参数,ga()启动计算。例如,一个包含非线性约束的优化问题可以通过定义目标函数和约束函数,结合ga()求解。遗传算法能有效寻找全局最优解,已被广泛应用在各个领域。
摘要由CSDN通过智能技术生成

     遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论自然选择遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的优化结果。遗传算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。

选择操作:

  从旧个体中以一定概率选择优良个体组成新的种群,以繁殖得到下一代

交叉操作:

  从种群中随机选择两个个体,通过两个染色体的交换组合,把父串的优秀特征遗传给子串,从而产生新的优秀个体

变异操作:

  从种群中随机选择一个个体,选择个体中的一点进行变异以产生更优秀的个体

原理图:

 

Matlab中关于遗传算法自带的两个函数:gaoptimset()、ga()

gaoptimset()      设置遗传算法的一些参数

调用格式

options = gaoptimset('Param1', value1, 'Param2', value2, ...);(返回一个结构体)


Param1、Param2等是需要设定的参数,比如种群规模、交叉比例等等
value则是Param对应的值
CrossoverFraction             交叉比例                                                           0.8
Generations             算法中止的最大迭代次数                                           100
PopulationSize                 种群规模                                                             20
MigrationFraction             变异概率                                                             0.2
FitnessLimit       当适应度函数达到设定的值时算法中止                               -
StallGenLimit     当超过StallGenLimit代适应度函数为改善时,算法中止    50

ga()          %开始遗传算法的计算           (参数不需要则设置为空矩阵[])

调用格式

[x_best,fval] = ga(fun, nvars, A, b, Aeq, beq, lb, ub, nonlcon, options);


fun为目标函数句柄  (在定义的函数名前加个@即可)
nvars为自变量个数
A、b、Aeq、beq、lb、ub你都很熟了
nonlcon非线性约束函数句柄
options上述函数返回的结构体

举个栗子:

非线性约束函数的设立:

function [c,ceq] = nonlconfun(x)
c = -(1/4).*x(1)^2 + x(2)^2 - 1;
ceq = [];
end

目标函数句柄的设立:

function y = fun(x)
y = (x(1)-2)^2+(x(2)-1)^2;
end

主要m文件:

clc;clear
options = gaoptimset('PopulationSize', 300, 'Generations', 800);
nvars = 2;  A = [-1, 2];  b = [1];
Aeq = []; beq = []; lb = []; ub = [];
nonlcon = @nonlconfun; 
[x_best,fval] = ga(@fun, nvars, A, b, Aeq, beq, lb, ub, nonlcon, options)

运行m文件,即可得到如下所示结果:

即当x1取2,x2取1的时候,函数取得最小值0 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值