MATLAB常用语句总结5

记忆力比较差,把学习过程中常用的语法记录于此,方便回忆时索引

MATLAB总结5:非线性规划


前言

上一节讲到了线性规划的问题,那么方程中如果出现了高次的不等式,这时的线性的fminbnd就不再适用,我们要采用其他的函数


一、fmincon

1、参数定义

fmincon 函数用于求解非线性约束优化问题,它的基本语法如下:

[x,val] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

fun: 要最小化的目标函数句柄。函数必须返回一个标量值。
x0: 初始点向量。
A: 不等式约束矩阵。
b: 不等式约束右侧向量。
Aeq: 等式约束矩阵。
beq: 等式约束右侧向量。
lb: 决策变量的下界向量。
ub: 决策变量的上界向量。
nonlcon: 非线性约束函数句柄。函数必须返回两个向量:c和ceq。
options(一般不用): 优化算法的选项结构体,可以使用 optimoptions 函数进行设置。
fmincon 函数返回以下几个输出参数:

x: 优化后的决策变量值。
val: 优化后的目标函数值。

2、注意事项

使用 fmincon 时,需要注意以下几点:

目标函数和约束函数必须是连续可微的。
目标函数和约束函数的计算开销不能太大,否则会影响优化效率。
初始点的选择很重要,可以尝试多个初始点来提高收敛性。
可以设置优化算法的选项,如最大迭代次数、容差等,以控制优化过程。

3、代码求解例题

下面对于同一段非线性问题求解:

在这里插入图片描述

function [min,val]=fun3
Fun=@(x) 2*(x(1)-1)^2+3*(x(2)-1)^2+0.2*x(1)*x(2)+(2*x(3)-2)^2
A=[3 2 6;4 5 2;2 9 7];
b=[50;40;100];
Lb=[0,0,0];
ub=[15,9,25];
[min,val]=fmincon(Fun,[0,0,0],A,b,[],[],Lb,ub,@noncon);
function [c,ceq]=noncon(x)
c=[-2*x(1)^-x(2)^2-x(3)^2,
    x(1)^2+x(2)^2+2*x(3)^2];
ceq=[-5,200];

结果:
第一次:
在这里插入图片描述
第二次:
在这里插入图片描述
两次结果一样,说明问题是收敛的

4、常见问题

一、结果报错

  1. 需要注意的是,函数用来求最小值问题,所以每个不等式都得改为 <= 的形式,相应的变号
  2. 函数中的A,b,Aeq,Beq必须加入函数中,即使没有也要加入空矩阵 []

二、求解结果不同

fmincon 每次求解结果不同,这可能是由以下几个原因造成的:

  1. 初始点的影响:
    fmincon 是基于梯度的优化算法,它会从给定的初始点出发迭代优化。不同的初始点可能会导致算法收敛到不同的局部最优解。
  2. 算法选项的影响:
    fmincon 提供了许多优化算法选项,如算法类型、终止条件等。不同的选项设置会影响算法的收敛性和解的质量。
  3. 问题本身的特性:
    如果优化问题是非凸的、多峰值的,或者存在多个局部最优解,那么 fmincon 会更容易受初始点的影响,得到不同的解。
  4. 随机性:
    某些算法选项,如 “sqp” 算法的线搜索过程,可能会引入一定的随机性,从而导致每次求解结果不同。

为了提高结果的稳定性,可以采取以下措施:

  1. 尝试不同的初始点(改变 x0 的取值):
    可以多次运行 fmincon 并设置不同的初始点,记录下每次的最优解,从中选择最优的解。
  2. 调整算法选项:
    可以使用 optimoptions 函数设置优化算法的各种选项,如最大迭代次数、函数容差等,以控制算法的行为。

二、ga

1、参数定义

遗传算法是一种基于自然选择和遗传的随机优化算法,常用于解决复杂的全局优化问题。在 MATLAB 中,可以使用 ga 函数来实现遗传算法。

ga 函数的基本语法如下:

[x,fval] = ga(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
  1. 各参数的含义如下:
    fitnessfcn: 适应度函数的句柄,即要优化的目标函数。
    nvars: 决策变量的个数。
    A, b, Aeq, beq, lb, ub, nonlcon: 与 fmincon 中的同名参数含义相同,用于指定线性和非线性约束条件。
    options: 遗传算法的选项,可以使用 optimoptions 函数进行设置。

  2. ga 函数返回以下几个输出参数:
    x: 优化后的决策变量值。
    fval: 优化后的目标函数值。

2、注意事项

使用 ga 时,需要注意以下几点:

适应度函数 fitnessfcn 必须是一个返回标量值的函数。
决策变量的编码方式(二进制、实数等)需要根据问题的特点选择。
合理设置算法参数,如种群大小、交叉概率、变异概率等,可以提高算法的性能。
可以使用 optimoptions 函数设置算法的终止条件、输出选项等。
可以通过并行计算加速遗传算法的运行。

3、代码求解例题

在这里插入图片描述
同样对于上面的问题,使用 ga 算法

function [min,val]=fun32
fun=@(x)2*(x(1)-1)^2+3*(x(2)-1)^2+0.2*x(1)*x(2)+(2*x(3)-2)^2;
A=[3,2,6;4,5,2;2,9,7];
b=[50;40;100];
Lb=[0,0,0];
ub=[15,9,25];

[min,val]=ga(fun,3,A,b,[],[],Lb,ub,@minon);

function [c,ceq]=minon(x)
c(1)=-2*x(1)^-x(2)^2-x(3)^2;
c(2)=x(1)^2+x(2)^2+2*x(3)^2;
ceq(1)=-5;
ceq(2)=200;

结果:
第一次:
在这里插入图片描述
第二次:

在这里插入图片描述
第三次:
在这里插入图片描述
发现每次的求解结果不同,使用 ga 求解非线性方程,结果每次都不一样,这是由于遗传算法本身的特性造成的。

4、常见问题

遗传算法是一种随机搜索算法,它模拟了自然选择和遗传的过程。在每次迭代中,算法都会对种群进行选择、交叉和变异操作,产生新的个体。这种随机性是遗传算法的关键特点,也是导致结果不稳定的主要原因。

具体来说,遗传算法的结果不稳定主要有以下几个原因:

  1. 初始种群的随机生成:
    遗传算法从一个随机生成的初始种群开始,不同的初始种群会导致算法收敛到不同的解。
  2. 选择、交叉和变异操作的随机性:
    这些操作都有一定的随机性,每次迭代产生的新个体都是随机的。这种随机性会影响算法的收敛过程。
  3. 停止条件的影响:
    遗传算法通常会在满足某些停止条件(如最大迭代次数、适应度收敛等)时终止。不同的停止条件会导致算法得到不同的解。
  4. 问题本身的特性:
    如果优化问题存在多个局部最优解,遗传算法可能难以找到全局最优解,从而得到不同的结果。

为了提高结果的稳定性,可以采取以下几种措施:

  1. 多次运行并记录最优解:
    可以多次运行 ga 函数,记录每次的最优解,然后选择最优的那个。这样可以提高结果的可靠性。
  2. 调整算法参数:
    可以通过 optimoptions 函数调整种群大小、交叉概率、变异概率等参数,找到最佳的参数组合。
  3. 结合其他算法:
    可以将遗传算法与其他确定性算法(如 fmincon)相结合,先用遗传算法找到一个较好的初始点,然后再用确定性算法进行精细优化。
  4. 利用并行计算:
    遗传算法非常适合并行计算,可以利用多核处理器或GPU加速算法的运行。

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值