matlab用内点惩罚函数法求解下面的最优化问题怎么解决

matlab用内点惩罚函数法求解下面的最优化问题怎么解决,第1张

1、在电脑中启动matlab,新建一个函数文件,用来写目标函数。

2、在编辑器窗口中写入要求的目标函数,并保存,注意使函数名与文件名相同。

3、再新建一个函数文件,用来编写非线性约束条件,将两个函数文件放在同一个文件夹中。

4、在命令行窗口处写入fmincon命令,对于没有的线性约束条件的位置药用空矩阵代替,并且初始条件需要满足非线性约束条件。

5、敲下键盘上的enter建,结果得出,exitflag=1是大于0的,结果正确。MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析,无线通信,深度学习,图像处理与计算机视觉,信号处理,量化金融与风险管理,机器人,控制系统等领域。

1、是不是局部最优可以通过退出代码exitflag辅助判断。至于说全局最优,没有哪种优化方法能够保证,即使用全局优化工具箱中的遗传算法之类的,也只是增加得到全局最优解的机会。

2、那个警告没影响,可以忽略,不想看到的话,也可以关闭或通过指定算法来避免。

3、受字数限制,代码只能贴,但这样我没法测试,只能给你提这些建议。必要时,可以考虑通过网盘或博客上传代码。或者私信也可以。

程序还是不给你,自己学会了,要写很简单的。按照步骤,照猫画虎就可以了。由于我不能贴图,例子中的数学模型没有写,供你参考。

优化工具箱提供fmincon函数用于对有约束优化问题进行求解,其语法格式如下:

x = fmincon(fun,x0,A,b)

x = fmincon(fun,x0,A,b,Aeq,beq)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

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

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, )

[x,fval] = fmincon()

[x,fval,exitflag] = fmincon()

[x,fval,exitflag,output] = fmincon()

其中,x, b, beq, lb,和ub为线性不等式约束的上、下界向量, A 和 Aeq 为线性不等式约束和等式约束的系数矩阵矩阵,fun为目标函数,nonlcon为非线性约束函数。

显然,其调用语法中有很多和无约束函数fminunc的格式是一样的,其意义也相同,在此不在重复介绍。对应上述调用格式的解释如下:

x = fmincon(fun,x0,A,b) 给定初值x0,求解fun函数的最小值x。fun函数的约束条件为Ax <= b,x0可以是标量或向量。

x = fmincon(fun,x0,A,b,Aeq,beq) 最小化fun函数,约束条件为Aeqx = beq 和 Ax <= b。若没有不等式线性约束存在,则设置A=[]、b=[]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 定义设计变量x的线性不等式约束下界lb和上界ub,使得总是有lb <= x <= ub。若无等式线性约束存在,则令Aeq=[]、beq=[]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 在上面的基础上,在nonlcon参数中提供非线性不等式c(x)或等式ceq(x)。 fmincon函数要求c(x) <= 0且ceq(x) = 0。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 用options参数指定的参数进行最小化。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,) 将问题参数P1, P2等直接传递给函数fun和nonlin。若不需要这些变量,则传递空矩阵到A, b, Aeq, beq, lb, ub, nonlcon和 options。

[x,fval] = fmincon() 返回解x处的目标函数值到fval。

[x,fval,exitflag] = fmincon() 返回exitflag参数,描述函数计算的有效性,意义同无约束调用。

[x,fval,exitflag,output] = fmincon() 返回包含优化信息的输出参数output。

非线性不等式约束nonlcon的定义方法

该参数计算非线性不等式约束c(x)<=0 和非线性等式约束ceq(x)=0。 nonlcon 参数是一个包含函数名的字符串。该函数可以是M文件、内部文件或MEX文件。它要求输入一个向量x,返回两个变量—解x处的非线性不等式向量c和非线性等式向量ceq。例如,若nonlcon='mycon',则M文件myconm须具有下面的形式:

function [c,ceq] = mycon(x)

c = % 计算x处的非线性不等式。

ceq = % 计算x处的非线性等式。

若还计算了约束的梯度,即options = optimset('GradConstr','on')

则nonlcon函数必须在第三个和第四个输出变量中返回c(x)的梯度GC和ceq(x)的梯度Gceq。

function [c,ceq,GC,GCeq] = mycon(x)

c = % 解x处的非线性不等式。

ceq = % 解x处的非线性等式。

if nargout > 2 % 被调用的nonlcon函数,要求有4个输出变量。

GC = % 不等式的梯度。

GCeq = % 等式的梯度。

end

41应用举例

已知某设计问题可以简化为如下数学模型:

显然,此模型属于一个二维约束优化问题。应用fmincon函数求解此优化模型,需要如下几个步骤:

1)编制目标函数的M文件

在Matlab主窗体的命令行中键入:“edit myobjm”,并在打开的窗口中编制代码创建目标函数M文件:

function f=myobj(x)

f=2x(1)^2+2x(2)^2-2x(1)x(2)-4x(1)-6x(2);

将其保存为myobjm备用。

2)编制非线性约数函数的M文件

若有非线性约束,则应用如下步骤创建约束函数M文件:在Matlab主窗体的命令行中键入:“edit myconm”并在打开的窗口中编制相应的代码创建约束函数M文件:

function [c,ceq]=mycon(x)

% 非线性不等式约束条件的表达式,c(1)=,c(2)=

c(1)=x(1)+5x(2)^2-5;

%非线性等式约束条件的表达式

ceq=[];

本例中没有非线性约束,故可以用上述表达方式,也可省略这一步。

3)确定其他类型约束条件的系数矩阵及常数向量

如本例中的优化模型所示,容易确定其余的输入参数,线性不等式约束条件的系数矩阵A和常数向量分别为: A=[1 1],b=[2 ],线性等式约束不存在,故Aeq=[],beq=[],设计变量X的上、下界向量:lb=[0 0]',ub=[inf inf]',其中inf表示无穷大。

4)调用fmincon函数进行求解

经过上述各步骤设置以后,可以编制主程序进行优化求解,相应的代码如下:

>> x0=[1 1]; %设置计算初始值

>> options=optimset('LargeScale','off','display','iter'); %设定优化选项参数

>> [x,fval,exitflag]=fmincon(@myobj,x0,A,b,[],[],lb,ub,@mycon,options) %进行优化求解

讲过运算以后得到结果如下所示:

Optimization terminated successfully:

First-order optimality measure less than optionsTolFun and

maximum constraint violation is less than optionsTolCon

Active Constraints:

3

4

x =

11190 08810

fval =

-76771

exitflag =

1

matlab最优化程序包括

无约束一维极值问题 进退法 黄金分割法 斐波那契法 牛顿法基本牛顿法 全局牛顿法 割线法 抛物线法 三次插值法 可接受搜索法 Goidstein法 WolfePowell法

单纯形搜索法 Powell法 最速下降法 共轭梯度法 牛顿法 修正牛顿法 拟牛顿法 信赖域法 显式最速下降法, Rosen梯度投影法 罚函数法 外点罚函数法

内点罚函数法 混合罚函数法 乘子法 G-N法 修正G-N法 L-M法 线性规划 单纯形法 修正单纯形法 大M法 变量有界单纯形法 整数规划 割平面法 分支定界法 0-1规划 二次规划

拉格朗曰法 起作用集算法 路径跟踪法 粒子群优化算法 基本粒子群算法 带压缩因子的粒子群算法 权重改进的粒子群算法 线性递减权重法 自适应权重法 随机权重法

变学习因子的粒子群算法 同步变化的学习因子 异步变化的学习因子 二阶粒子群算法 二阶振荡粒子群算法

很多条件不明确:

1、每次优化都需要导入不同的A和B,到底A和B是什么?

2、x有个范围,是整数,也就是说还有其他约束条件,为什么不给出来?

3、我很怀疑,这样的目标函数还算是线性规划吗?当然,由于前面说的x是整数,已经决定了这是整数规划问题。

定义目标函数时,用function f=objfun(x,a)

调用fmincon时,事先定义好变量a,然后: = fmincon(@(x) objfun(x,a), )

在matlab中为什么改变目标函数,优化结果不变呢,哪儿出错了

一、实现题主给出的代码是无法得到最优解的,方法错误。

二、分析题主给出的具体问题,该问题实际非线性函数优化问题,应该使用fmincon()函数才对。求解方法的思路是:

1、自定义目标函数,myfun(x)。即

x1=x(1);y1=x(2);z1=x(3);

f=(1100962500x1y1pi(500+z1)+2652318750000z1pi);

2、自定义约束条件函数,mycon(x)。即

eq = symsum(16y1/(500+my1)(500+z1+my1)^2/((500+z1+my1)^2-500^2),m,1,n);  %求和

314sqrt(3)(500+x1y1+z1)^2/((500+x1y1+z1)^2-500^2)-13582/(x1y1+z1)-17727x1y1/(x1y1+z1)-2eq≤0  %约束

3、确定初始值,x0=[6       8            8]

4、确定x的上下限,即lb=[6,8,8];ub=[12,20,20];

5、使用fmincon()函数求出,x、y、z值

6、验证约束条件是否接近于0

按上述方法进行编程,运行可以得到如下结果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12175711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存