数学建模算法-day[20]

12.4 Matlab遗传算法函数

1.遗传算法使用规则

遗传算法是一种基于自然选择、生物进化过程来求解问题的方法。在每一步中,遗传算法随机地从当前种群中选择若干个体作为父辈,并且使用它们产生下一代的子种群。在连续若干代之后,种群朝着优化解的方向进化。可以用遗传算法求解各种不适宜用标准算法求解的优化问题,包括目标函数不连续、不可微、随机或高度非线性的问题。

遗传算法在每一步使用下列三类规则从当前种群来创建下一代:

  1. 选择规则:选择对下一代种群有贡献的个体(称为父辈)。
  2. 交叉规则:将两个父辈结合起来构成下一代的子辈种群。
  3. 变异规则:施加随机变化用父辈个体来构成子辈。

遗传算法与标准优化算法主要在两个方面有所不同,它们的比较情况归纳于表12.4中。

表12.4 遗传算法与标准优化算法比较

标准算法遗传算法
每次迭代产生一个单点,点的序列逼近一个优化解每次迭代产生一个种群,种群逼近一个优化解
通过确定性的计算在该序列中选择下一个点通过随机进化选择计算来选择下一代种群

2.遗传算法函数

遗传算法函数ga调用格式如下:

[x,fval]=ga(fun,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)

其中:fun是目标函数,nvars是目标函数中独立变量的个数,options是一个包含遗传算法选项参数的数据结构,其他参数的含义与非线性规划fmincon中的参数相同。

返回值x为所求函数的局部极小点,这里x为行向量,fval为目标函数的极小值。

例12.1 求下列问题的解
max⁡f(x)=2x1+3x12+3x2+x22+x3,s.t.{x1+2x12+x2+2x22+x3≤10,x1+x12+x2+x22−x3≤50,2x1+x12+2x2+x3≤40,x12+x3=2,x1+2x2≥1,x1≥0,x2,x3不约束. \max f(x)=2x_1+3x_1^2+3x_2+x_2^2+x_3,\\ s.t. \left\{\begin{aligned} & x_1+2x_1^2+x_2+2x_2^2+x_3\leq 10,\\ & x_1+x_1^2+x_2+x_2^2-x_3\leq 50,\\ & 2x_1+x_1^2+2x_2+x_3\leq 40,\\ & x_1^2+x_3=2,\\ & x_1+2x_2\geq 1,\\ & x_1\geq 0,x_2,x_3不约束. \end{aligned}\right. maxf(x)=2x1+3x12+3x2+x22+x3,s.t.x1+2x12+x2+2x22+x310,x1+x12+x2+x22x350,2x1+x12+2x2+x340,x12+x3=2,x1+2x21,x10,x2,x3不约束.

遗传算法程序的运行结果每一次都是不一样的,要运行多次,找一个最好的结果。

f=@(x) 2*x(1)+3*x(1)^2+3*x(2)+x(2)^2+x(3);
nvars=3;
A=[-1,-2,0;-1,0,0];b=[-1,0]';
[x,fval]=ga(f,nvars,A,b,[],[],[],[],@constr)

function [con1,con2]=constr(x)
    con1=[x(1)+2*x(1)^2+x(2)+2*x(2)^2+x(3)-10;x(1)+x(1)^2+x(2)+x(2)^2-x(3)-50;2*x(1)+x(1)^2+2*x(2)+x(3)-40];
    con2=x(1)^2+x(3)-2;
end

因为书里的遗传算法太抽象了,于是这里先介绍简单的ga函数。打算之后用python练一下,毕竟python有vscode带的插件和cursor,会比较容易。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值