当前位置:文档之家› MATLAB非线性优化fmincon

MATLAB非线性优化fmincon

MATLAB非线性优化fmincon
MATLAB非线性优化fmincon

M A T L A B非线性优化

f m i n c o n

Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

active-setandsqpalgorithms不接受用户提供的海塞矩阵,对拉格朗日的海塞矩阵提供一个拟牛顿的近似值;

目标函数估值次数与迭代次数?

优化成功或失败

一、求解失败

1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法:

(1)设置‘Display’为‘iter’,查看每步的迭代信息,这些信息包括:目标函数(Fvalorf(x)orResnorm)是否是下降的;检查约束越界(Maxconstraint)是否是递减趋向于0;查看一阶优化是否是递减趋向于0;查看置信域半径(Trust-regionradius)是否下降趋向于一个小的值。若其中至少一种情况为是,就表示结果是不断改善的。如果结果是不断改善的,可以采取下边的措施:设置MaxIter、MaxFunEvals比默认值大的值,默认值可以在优化工具箱或求解器的函数参考页的优化表中查看;从最后计算出的点开始重新求解。如果结果没有改善,尝试以下其他的方法。

(2)放松精度

如果TolX或TolFun太小,当求解器达到一个最小值时可能也不会识别到,这就会导致无限次徒劳的迭代。DiffMaxChange和DiffMinChange选项能影响求解器的改善,它们控制求导估计中有限差分的步长。

(3)从不同的初始点重新开始求解

(4)检查目标函数和约束函数的定义

举个例子,可以检查目标函数和非线性约束函数在某些特定点处返回正确的值。不可行的点不一定导致函数的错误。

(5)对问题进行中心化和标准化

当每个坐标轴对目标函数和约束函数有相同的影响时,求解器更能可靠的运行,对每个坐标轴方向乘以合适的量使得每个坐标轴的影响相同,在特定的坐标轴上加上合适的值使得它们长度一致。

(6)提供解析的梯度和雅可比矩阵

如果用户不提供解析的梯度或雅可比矩阵,求解器会用有限差分来估计这些值,因此提供这些导数可以减少运算时间,提高计算准确度。

对于约束问题,提供梯度还有另一个好处----求解器到达一个点x时能满足该点是可行的,但有限差分在x点周围可能会导致不可行的点,在这种情况下,求解器可能会失败或突然中断。

(7)提供海塞矩阵

当提供海塞矩阵时,求解器能运行的更可靠,而且运行的次数比较少。

2、无可行点

在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法:

(1)检查线性约束

通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。

i)定义一个目标函数是常值0的线性规划问题

f=zeros(size(x0));%assumesx0istheinitialpoint

ii)求解这个线性规划问题看是否有一个可行点

xnew=linprog(f,A,b,Aeq,beq,lb,ub);

iii)如果有可行点xnew,用xnew作为初始点去求解原始问题

iv)如果没有可行点,那说明原始模型建的不好,检查界约束和线性约束。

(2)检查非线性约束

在保证界约束和线性约束是可行的之后,检查非线性约束:

i)设置目标函数为0,然后求解优化问题,如果能找到一个可行点xnew,令x0=xnew返回到原始问题中去

ii)如果用0目标函数不能找到一个可行点,尝试几个不同的初始点重新求解,如果找到了一个可行点xnew,令x0=xnew并返回到原始问题中去,如果仍没找到可行点,试着用下列方法放松约束条件。

a.改变非线性约束函数c为c-Δ,Δ是一个正数,这会使得非线性约束更容易满足。

b.尝试用原始的目标函数或0目标函数对新的约束函数寻找一个可行点。如果找到一个可行点,那么减少Δ,并在之前找到的点处开始对新的约束函数重新找一个可行点;如果没有找到一个可行点,试着增大Δ并重新找。

如果一直没有找到可行点,那么原始问题可能确实是不可行的,重新检查约束函数的定义。

3、问题是无界的

求解器到达一个目标函数小于目标阈值界的点,那么

(1)原问题可能确实无界,即存在一系列满足问题约束的点xi,使得

limf(xi)=–∞。

(2)检查原问题建模正确,求解器是最小化目标函数,如果想得到最大化,将目标函数乘以-1.

(3)试着标准化或中心化原问题。

(4)放松目标函数界精度,用optimset减少ObjectiveLimit设定的精度值。

二、求解可能成功

1、最后的点等于初始点

初始点可能是局部极小点,因为它的一阶导数接近0,如果并不确定初始点确实是一个局部极小点,尝试下边的步骤:

(1)从不同的点开始重新求解

(2)检查目标函数和约束函数定义正确。

(3)改变精度,如TolFun,TolCon,TolX

(4)标准化原问题,使得每个坐标轴有相同的影响。

(5)提供解析的梯度和海塞矩阵。

2、可能的局部最小值(LocalMinimumPossible,not'LocalMinimumFound')求解器可能达到一个局部最小值,但并不确定,因为一阶导数不小于TolFun,为了检查得到的答案是否是可靠的,考虑下边的建议。

(1)非平滑函数

如果试着最小化一个非平滑的函数,或者有非平滑的约束,那么‘"LocalMinimumPossible’是最好的返回标志,因为一阶导数条件并不适用于非平滑的点。试着检查周围的点来确定结果是否真的可靠。

(2)在最后得到的点处开始重新优化

在最后得到的点处开始重新优化会得到一个在一阶导数估量上更好的点,更好的一阶导数估量能让人相信结果是可靠的。

3、尝试一个不同的算法

4、改变精度

5、重新标准化原问题

6、检查邻近点

7、改变有限差分的计算方法

中心有限差分用的时间更多,但更准确,可以设置'FinDiffType'为

'central'。

8、提供解析的梯度或雅可比矩阵

9、提供海塞矩阵

三、求解成功

当求解器返回成功信息时,也可能结果是错误的,下边有几种方法可以验证结果。

1、改变初始点

初始点对求解结果有很大影响,如果从不同的初始点得到了相同或较差的结果,说明原来求得的界是正确的。

2、检查邻近点

计算f(xfinal±Δ)的值,与f(xfinal)值做比较。

3、检查目标函数与约束函数

4、局部最优与全局最优

(1)为什么求解器找不到最小的最小值

通常,求解器返回的是一个局部最小值,该值也可能是一个全局最小值,但并不保证是。这部分讨论求解器得出这种结果的原因,并给出寻找全局最小值的建议。

一般求解器是在初始点的basinofattraction找到的最优值,但也有些例外:i)线性规划和正定二次规划是凸的,可行域也是凸的,所以只有一个basinofattraction。在设定某些条件下,linprog会忽略用户提供的初始点,quadprog也不需要。

ii)全局优化工具箱,如simulannealbnd,试着搜索不止一个basinofattraction。

(2)寻找一个更小的最小值

如果需要一个全局最小值,必须要在全局最小值的basinofattraction内找一个初始点。

设置初始点的建议:

i)用初始点的一个规则网格

ii)如果原始问题在所有的坐标轴上是有界的,那么从均匀分布得到一个随机初始点,如果有些部分是无界的,那么用正态、指数或其他随机分布得到初始点。对全局最优值的位置知道的越少,就要选择越分散的随机分布。例如,正态分布大部分样本在均值的三个标准偏差范围内,但柯西分布(密度函数

1/(π(1+x2)))样本很分散。

iii)如果有全局优化工具箱的许可,可以应用GlobalSearch或

MultiStart,这些求解器能在上下界范围内自动产生随机初始化点。

对可能的初始化点知道的越多,搜寻最优值会越集中,成功的几率会越大。(3)BasinsofAttraction

如果目标函数f(x)是平滑的,那么负梯度方向–?f(x)是函数值下降最快的方向。

matlab优化设计

MATLAB优化设计 学院:机电学院 专业:机械设计制造及其自动化 班级:072&&&-** 学号:20131****** 姓名:大禹 指导老师:祯 2015年10月25日

题目 1 1、求解如下最优化问题 步骤一:对已有的数学模型matlab 编程 1. 编写.m 文件并保存: h=[2 ,-2;-2, 4]; %实对称矩阵 f=[-2;-6]; %列向量 a=[1, 1;-1, 2]; %对应维数矩阵 b=[2;2]; %列向量 lb=zeros(2, 1); [x,value]=quadprog(h, f, a ,b ,[] ,[], lb) 2. 运行.m 文件结果如图1.0所示: subject to 2 21≤+x x 22-21≤+x x 0 21≥x x ,2 2 2121212262)(m in x x x x x x x f +-+--=

图1.0题目一文件运行结果 步骤二:matlab运行结果分析阶段 由图1.0知,当x1=0.8,x2=1.2时,min f (x)= -7.2。 题目 2 2、某农场拟修建一批半球壳顶的圆筒形谷仓,计划每座谷仓容积为300立方米,圆筒半径不得超过3米,高度不得超过10米。半球壳顶的建筑造价为每平方米150元,圆筒仓壁的造价为每平方米120元,地坪造价为每平方米50元,求造价最小的谷仓尺寸为多少?

步骤一:题目分析阶段 设:圆筒的半径为R,圆筒的高度为H 。 谷仓的容积为300立方米,可得: 3003 232=+R H R ππ 圆筒高度不得超过10米,可得: 100≤≤H 圆筒半径不得超过3米,可得: 30≤≤R 当造价最小时: 2225021202150),(m in R H R R H R f πππ+?+?= 步骤二:数学模型建立阶段 2 225021202150),(m in R H R R H R f πππ+?+?=

应用matlab求解约束优化问题

应用matlab求解约束优化问题 姓名:王铎 学号: 2007021271 班级:机械078 上交日期: 2010/7/2 完成日期: 2010/6/29

一.问题分析 f(x)=x1*x2*x3-x1^6+x2^3+x2*x3-x4^2 s.t x1-x2+3x2<=6 x1+45x2+x4=7 x2*x3*x4-50>=0 x2^2+x4^2=14 目标函数为多元约束函数,约束条件既有线性约束又有非线性约束所以应用fmincon函数来寻求优化,寻找函数最小值。由于非线性不等式约束不能用矩阵表示,要用程序表示,所以创建m文件其中写入非线性不等式约束及非线性等式约束,留作引用。 二.数学模型 F(x)为目标函数求最小值 x1 x2 x3 x4 为未知量 目标函数受约束于 x1-x2+3x2<=6 x1+45x2+x4=7 x2*x3*x4-50>=0 x2^2+x4^2=14 三.fmincon应用方法 这个函数的基本形式为 x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 其中fun为你要求最小值的函数,可以单写一个文件设置函数,也可是m文件。 1.如果fun中有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在fun中统一都是用x(1),x(2)....x(n) 表示的。 2. x0, 表示初始的猜测值,大小要与变量数目相同 3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵。 4 Aeq beq为线性相等约束,Aeq*x = beq。 Aeq beq同上可求 5 lb ub为变量的上下边界,正负无穷用 -Inf和Inf表示, lb ub应为N阶数组 6 nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq 可按下面的例子设置 function [c,ceq] = nonlcon1(x) c = [] ceq = [] 7,最后是options,可以用OPTIMSET函数设置,具体可见OPTIMSET函数的帮助文件。 四.计算程序

基于MATLAB的优化设计

基于MATLAB的曲柄摇杆机构优化设计 1.问题的提出 根据机械的用途和性能要求的不同,对连杆机构设计的要求是多种多样的,但这些设计要求可归纳为以下三种问题:(1)满足预定的运动规律要求;(2)满足预定的连杆位置要求;(3)满足预定的轨迹要求。在在第一个问题 里按照期望函数设计的思想,要求曲柄摇杆机构的曲柄与摇杆转角之间按照φ=f(?)(称为期望函数)的关系实现运动,由于机构的待定参数较少,故一 般不能准确实现该期望函数,设实际的函数为φ=F(?)(称为再现函数),而再 现函数一般是与期望函数不一致的,因此在设计时应使机构再现函数φ=F(?) 尽可能逼近所要求的期望函数φ=f(?)。这时需按机械优化设计方法来设计曲 柄连杆,建立优化数学模型,研究并提出其优化求解算法,并应用于优化模型的求解,求解得到更优的设计参数。 2.曲柄摇杆机构的设计 在图1所示的曲柄摇杆机构中,l1、l2、l3、l4分别是曲柄AB、连杆BC、摇杆CD和机架AD的长度。这里规定?0为摇杆在右极限位置φ0时的曲柄起始 位置角,它们由l1、l2、l3和l4确定。 图1曲柄摇杆机构简图 设计时,可在给定最大和最小传动角的前提下,当曲柄从?0转到?0+90?时,要求摇杆的输出角最优地实现一个给定的运动规律f(?)。这里假设要求: (?-?0)2(1)φE=f(?)=φ0+2 3π

s=30;qb=1;jj=5;fx=0; fa0=acos(((qb+x(1))^2-x(2)^2+jj^2)/(2*(qb+x(1))*jj)); %曲柄初始角 pu0=acos(((qb+x(1))^2-x(2)^2-jj^2)/(2*x(2)*jj));%摇杆初始角for i=1:s fai=fa0+0.5*pi*i/s; pui=pu0+2*(fai-fa0)^2?(3*pi); ri=sqrt(qb^2+jj^2-2*qb*jj*cos(fai)); alfi=acos((ri^2+x(2)^2-x(1)^2)/(2*ri*x(2))); bati=acos((ri^2+jj^2-qb^2)(/2*ri*jj)); if fai>0&fai<=pi psi=pi-alfi-bati; elseif fai>pi&fai<=2*pi psi=pi-alfi+bati; end fx=fx+(pui-psi)^2; end f=fx; (2)编写非线性约束函数M文件confun.m function[c,ceq]=confun(x); qb=1;jj=5;m=45*pi/180;n=135*pi/180; c(1)=x(1)^2+x(2)^2-(jj-qb)^2-2*x(1)*x(2)*cos(m); %最小传动角约束c(2)=-x(1)^2-x(2)^2+(jj+qb)^2+2*x(1)*x(2)*cos(n); %最大传动角约束ceq=[]; (3)在MATLAB命令窗口调用优化程序 x0=[6;4]; lb=[1;1]; ub=[]; %线性不等式约束 a=[-1-1;1-1;-11];b=[-6;4;4];[x,fn]=fmincon(@optimfun, x0,a,b,[],[],lb,ub,@confun); (4)运行结果

利用Matlab求解机械设计优化问题的分析

利用MATLAB求解机械设计优化问题的分析 周婷婷 (能源与动力学院,油气0701) 摘要:MATLAB是目前国际上最流行的科学与工程计算的软件工具, 它具有强大的数值分析、矩阵运算、信号处理、图形显示、模拟仿真和最优化设计等功能。本文浅谈MATLAB在机械设计优化问题的几点应用。 关键词:MATLAB 约束条件机械设计优化 引言:在线性规划和非线性规划等领域经常遇到求函数极值等最优化问题,当函数或约束条件复杂到一定程度时就无法求解,而只能求助于极值分析算法,如果借助计算器进行手工计算的话,计算量会很大,如果要求遇到求解极值问题的每个人都去用BASIC,C和FORTRAN之类的高级语言编写一套程序的话,那是非一朝一日可以解决的,但如用MATLAB语言实现极值问题的数值解算,就可以避免计算量过大和编程难的两大难题,可以轻松高效地得到极值问题的数值解,而且可以达到足够的精度。 1无约束条件的极值问题的解算方法 设有Rosenbrock函数如下: f(X1,X2)=100(X2-X1*X1)2+(1-X1)2 求向量X取何值时,F(x)的值最小及最小值是多少? 先用MATLAB语言的编辑器编写求解该问题的程序如下: %把函数写成MATLAB语言表达式 fun=’100*(X(2)-X(1)*X(1)2+(1-X(1))2 %猜自变量的初值 X0=[-1 2]; %所有选项取默认值 options=[ ]; %调用最优化函数进行计算。 %函数最小值存放在数组元素options(8)中

%与极值点对应的自变量值存放在向量X里 %计算步数存放在数组元素options(10)中 [X,options]=fmins(fun,X0,options); %显示与极值点对应的自变向量X的值。 %显示函数最小值 options(8) %显示函数计算步数 options(10) 把上面这段程序保存为m文件,然后用“Tools”菜单中的“Run”命令行这段程序,就可以轻松的得到如下结果: X=9.999908938395383e-001 9.99982742178110e-001 ans=1.706171071794760e-001 ans=195 显然,计算结果与理论结果的误差小到e-10级,这里调用了MATLAB的最优化函数fmins(),它采用Nelder-Mead的单纯形算法,就是因为这个函数的采用,使最小值问题的解算变得非常简单。 2.带约束条件的极值问题的解法 设目标函数和约束条件如下: f(x) =-3X1+X2+X3 -X1+2X2-X3>= -11 4X1-X2-2X3<=-3 2X1-X3= -1 X1>=0,X2>=0,X3>=0; 求X向量取何值时函数取极小值? 对条件极值问题通常的做法都是将约束条件标准化(即把等式约束条件写成等号为0的形式,把不等式写成<=0的形式)。然后把条件极值问题转换为非条件极值问题,MATLAB也采用同样的做法。

matlab 无约束优化问题

实验八 无约束优化问题 一.实验目的 掌握应用matlab 求解无约束最优化问题的方法 二.实验原理及方法 1:标准形式: 元函数 为其中n R R f X f n R x n →∈:) (min 2.无约束优化问题的基本算法一.最速下降法(共轭梯度法)算法步骤:⑴ 给定初始点 n E X ∈0,允许误差0>ε,令k=0; ⑵ 计算() k X f ?; ⑶ 检验是否满足收敛性的判别准则: () ε≤?k X f , 若满足,则停止迭代,得点k X X ≈*,否则进行⑷; ⑷ 令() k k X f S -?=,从k X 出发,沿k S 进行一维搜索, 即求k λ使得: ()() k k k k k S X f S X f λλλ+=+≥0 min ; ⑸ 令k k k k S X X λ+=+1,k=k+1返回⑵. 最速下降法是一种最基本的算法,它在最优化方法中占有重要地位.最速下降法的优点是工作量小,存储变量较少,初始点要求不高;缺点是收敛慢,最速下降法适用于寻优过程的前期迭代或作为间插步骤,当接近极值点时,宜选用别种收敛快的算法..牛顿法算法步骤: (1) 选定初始点n E X ∈0,给定允许误差0>ε,令k=0; (2) 求()k X f ?,()() 1 2-?k X f ,检验:若() ε

机械优化设计MATLAB程序文件

机械优化设计作业1.用二次插值法求函数()()()22 ?极小值,精度e=0.01。 t t =t 1- + 在MATLAB的M文件编辑器中编写的M文件,如下: f=inline('(t+1)*(t-2)^2','t') a=0;b=3;epsilon=0.01; t1=a;f1=f(t1); t3=b;f3=f(t3); t2=0.5*(t1+t3);f2=f(t2); c1=(f3-f1)/(t3-t1); c2=((f2-f1)/(t2-t1)-c1)/(t2-t3); t4=0.5*(t1+t3-c1/c2);f4=f(t4); k=0; while(abs(t4-t2)>=epsilon) if t2f4 f1=f2;t1=t2; t2=t4;f2=f4; else f3=f4;t3=t4; end else if f2>f4 f3=f2;t3=t2; t2=t4;f2=f4; else f1=f4;t2=t4; end end c1=(f3-f1)/(t3-t1); c2=((f2-f1)/(t2-t1)-c1)/(t2-t3); t4=0.5*(t1+t3-c1/c2);f4=f(t4); k=k+1; end %输出最优解 if f2>f4 t=t4;f=f(t4); else t=t2;f=f(t2); end fprintf(1,'迭代计算k=%3.0f\n',k) fprintf(1,'极小点坐标t=%3.0f\n',t) fprintf(1,'函数值f=%3.4f\n',f)

运行结果如下: 迭代计算k= 7 极小点坐标t= 2 函数值f=0.0001 2.用黄金分割法求函数()32321+-=t t t ?的极小值,精度e=0.01。 在MATLAB 的M 文件编辑器中编写的M 文件,如下: f=inline('t^(2/3)-(t^2+1)^(1/3)','t'); a=0;b=3;epsilon=0.01; t1=b-0.618*(b-a);f1=f(t1); t2=a+0.618*(b-a);f2=f(t2); k=1; while abs(b-a)>=epsilon if f1

MATLAB解决线性规划问题

运行环境:Windows+MATLAB 解决问题:线性规划问题(特定题目) 实验简述: MATLAB 可以高效、方便地解决线性规划问题。线性规划是合理利用、调配资源的一种应用数学的方法。它的基本思路就是在满足一定的约束条件下,使预定的目标达到最优。它的研究内容可归纳为两个方面:一是系统的任务已定,如何合理筹划,精细安排,用最少的资源去实现这个任务:二是资源的数量已定,如何利用、分配,使任务完成得最多。前者是求极小,后者是求极大。线性规划是在满足企业内、外部的条件下,实现管理目标和极值问题,就是要以尽少的资源输入来实现更多的社会需要的产品的产出。现在通过专门的数学MATLAB 软件,只要将模型中的目标函数系数、约束条件系数、不等关系输入计算机,就会很快算出结果。 在生活实践中,很多重要的实际问题都是线性的(至少能够用线性函数很好的近似表示),所以我们一般把这些问题化为线性的目标函数和约束条件进行分析,通常将目标函数和约束都是线性表达式的规划问题称为线性规划。 它的一般形式是: ) ,,2,1(0. .min 221122222121112121112211n i x b x a x a x a b x a x a x a b x a x a x a t s x c x c x c f i m n mn m m n n n n n n =>=???????<=+++<=+++<=++++++= 也可以用矩阵形式来表示: 0,..min >=<==x b Ax t s x c f T 线性规划的可行解是满足约束条件的解;线性规划的最优解是使目标函数达到最优的可行解。 线性规划关于解的情况可以是: 1、无可行解,即不存在满足约束条件的解; 2、有唯一最优解,即在可行解中有唯一的最有解; 3、有无穷最优解,即在可行解中有无穷个解都可使目标函数达到最优; 4、有可行解,但由于目标函数值无界而无最优解。 一般求解线性规划的常用方法是单纯形法和改进的单纯形法,这类方法的基

matlab(四连杆优化设计)

机械优化设计在matlab中的应用 东南大学机械工程学院** 一优化设计目的: 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 " 二优化设计步骤: 1.机械优化设计的全过程一般可以分为如下几个步骤: 1)建立优化设计的数学模型; 2)选择适当的优化方法; 3)编写计算机程序; : 4)准备必要的初始数据并伤及计算; 5)对计算机求得的结果进行必要的分析。 其中建立优化设计数学模型是首要的和关键的一步,它是取得正确结果的前提。优化方法的选取取决于数学模型的特点,例如优化问题规模的大小,目标函数和约束函数的性态以及计算精度等。在比较各种可供选用的优化方法时,需要考虑的一个重要因素是计算机执行这些程序所花费的时间和费用,也即计算效率。 2.建立数学模型的基本原则与步骤 ①设计变量的确定; — 设计变量是指在优化设计的过程中,不断进行修改,调整,一直处于变化的参数称为设计变量。设计变量的全体实际上是一组变量,可用一个列向量表示: x=。 ②目标函数的建立; 选择目标函数是整个优化设计过程中最重要的决策之一。当对某以设计性能有特定的要求,而这个要求有很难满足时,则针对这一性能进行优化会得到满意的效果。目标函数是设计变量的函数,是一项设计所追求的指标的数学反映,因此它能够用来评价设计的优劣。 目标函数的一般表达式为: 。 f(x)=,要根据实际的设计要求来设计目标函数。 ③约束条件的确定。 一个可行性设计必须满足某些设计限制条件,这些限制条件称为约束条件,简称约束。 由若干个约束条件构成目标函数的可行域,而可行域内的所有设计点都是满足设计要求的,一般情况下,其设计可行域可表示为

用MATLAB求解规划问题

§15. 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解: % min f'x % s.t .(约束条件):Ax<=b % (等式约束条件):Aeqx=beq % lb<=x<=ub linprog函数的调用格式如下: x=linprog(f,A,b) x=linprog(f,A,b,Aeq,beq) x=linprog(f,A,b,Aeq,beq,lb,ub) x=linprog(f,A,b,Aeq,beq,lb,ub,x0) x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) [x,fval]=linprog(…) [x, fval, exitflag]=linprog(…) [x, fval, exitflag, output]=linprog(…) [x, fval, exitflag, output, lambda]=linprog(…) 其中: x=linprog(f,A,b)返回值x为最优解向量。 x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令 111

A=[ ]、b=[ ] 。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。 Options的参数描述: Display显示水平。选择’off’ 不显示输出;选择’I ter’显示每一步迭代过程的输出;选择’final’ 显示最终结果。 MaxFunEvals 函数评价的最大允许次数 Maxiter 最大允许迭代次数 TolX x处的终止容限 [x,fval]=linprog(…) 左端fval 返回解x处的目标函数值。 [x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分: exitflag描述函数计算的退出条件:若为正值,表示目标函数收敛于解x 处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。 output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。 lambda返回x处的拉格朗日乘子。它有以下属性: lambda.lower-lambda的下界; lambda.upper-lambda的上界; lambda.ineqlin-lambda的线性不等式; lambda.eqlin-lambda的线性等式。 112

(完整word版)优化设计Matlab编程作业

优化设计

无约束优化 min f(x)= 21x +22x -21x 2x -41x 初选x0=[1,1] 程序: Step 1: Write an M-file objfun1.m. function f1=objfun1(x) f1=x(1)^2+2*x(2)^2-2*x(1)*x(2)-4*x(1); Step 2: Invoke one of the unconstrained optimization routines x0=[1,1]; >> options = optimset('LargeScale','off'); >> [x,fval,exitflag,output] = fminunc(@objfun1,x0,options) 运行结果: x = 4.0000 2.0000 fval = -8.0000 exitflag = 1 output = iterations: 3 funcCount: 12 stepsize: 1 firstorderopt: 2.3842e-007 algorithm: 'medium-scale: Quasi-Newton line search' message: [1x85 char] 非线性有约束优化 1. Min f(x)=321x +2 2x +21x -32x +5

Subject to: 1g (x)=1x +2x +18≤0 2g (x)=51x -32x -25≤0 3g (x)=131x -412 2x 0≤ 4g (x)=14≤1x 130≤ 5g (x)=2≤2x 57≤ 初选x0=[10,10] Step 1: Write an M-file objfun2.m function f2=objfun2(x) f2=3*x(1)^2+x(2)^2+2*x(1)-3*x(2)+5; Step 2: Write an M-file confun1.m for the constraints. function [c,ceq]=confun1(x) % Nonlinear inequality constraints c=[x(1)+x(2)+18; 5*x(1)-3*x(2)-25; 13*x(1)-41*x(2)^2; 14-x(1); x(1)-130; 2-x(2); x(2)-57]; % Nonlinear inequality constraints ceq=[]; Step 3: Invoke constrained optimization routine x0=[10,10]; % Make a starting guess at the solution >> options = optimset('LargeScale','off'); >> [x, fval] = ... fmincon(@objfun2,x0,[],[],[],[],[],[],@confun1,options) 运行结果: x = 3.6755 -7.0744 fval = 124.1495

MATLAB第12章工程优化设计实例

MATLAB第12章工程优化设计实例 第12章工程优化设讣实例优化设讣的数学模型 优化设讣的数学模型是描述实际优化问题的设计内容、变量关系、有关设计条件和意图的数学表达式,它反映了物理现象各主要因素的内在联系,是进行优化设计的基础。优化设计数学模型的三大要素: ?设计变量 ?约束条件 ? LI标函数 1.设计变量 一个设计方案可以用一组基本参数的数值来表示,这些基本参数可以是构件尺寸等儿何量,也可以是质量等物理量,还可以是应力、变形等表示丄作性能的导出量。设计变量:在设讣过程中进行选择并最终必须确定的各项独立的基本参数,乂叫做优化参数。 设计变量的全体实际上是一组变量,可用一个列向量表示 2.约束条件 设计空间是所有设计方案的集合,但这些设计方案有些是工程上所不能接受 的。如一个设计满足所有对它提出的要求,就称为可行设计。 一个可行设讣必须满足某些设讣限制条件,这些限制条件称作约束条件,简称约 束。3.目标函数 为了对设计进行定量评价,必须构造包含设讣变量的评价函数,它是优化的口标, 称为LI标函数,以F(X)表示。

FxFxxx ()(),, , , 12n 在优化过程中,通过设计变量的不断向F(X)值改善的方向自动调整,最后求得 F(X)值最好或最满意的X值。在构造LI标函数时,应注意:訂标函数必须包含全部设计变量,所有的设计变量必须包含在约束函数中。 模型输入时需要注意的问题 使用优化工具箱时,山于优化函数要求口标函数和约束条件满足一定的格式,所以需要用户在进行模型输入时注意以下儿个问题: 1.目标函数最小化 优化函数 fminbnd、fminsearchx fminunc、fmincon、fgoalattdin、fminmax 和1 sqnonlin都要求LI标函数最小化,如果优化问题要求LI标函数最大化,可以通过使该LI标函数的负值最小化即-f(x)最小化来实现。近似地,对于quadprog函数提供-H 和-f,对于1 inprog函数提供-f。 2.约束非正 优化工具箱要求非线性不等式约束的形式为Ci(x)?0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的U的,如Ci (x)?0形式的约束等价于- Ci(x)?0;Ci(x)?b形式的约束等价于- Ci(x)+b?0。 3.避免使用全局变量 Fmincon是mat lab最主要内置的求解约束最优化的函数,该函数的优化问题的标准形式为:1.数学模型标准形式: min f , X, s. t. AX?b ,线性不等式约束, AeqX二beq ,线性等式约束, C(X)?0 ,非线性不等式约束条件,

转向梯形优化设计matlab程序

优化计算MATLAB程序 首先,将目标函数写成M文件,其程序语句如下; function f = fun (x) global K L thetamax alpha for i=1:61 f = 0 betae = atan(tan(alpha(i)/(1-(K/L)*tan(alpha(i)))); A(i)=2*x(1).^2*sin(x(2)+alpha(i)); B(i)=2*K*x(1)-2*x(1).^2*cos(x(2)+alpha(i)); C(i)=2*x(1).^2-4*x(1).^2*(cos(x(2)).^2+4*K*x(1)*cos(x(2))-2*K*x(1)* cos(x(2)+alpha(i)); theta3(i)= 2*acot((A(i)+sqrt(A(i).^2+B(i).^2-C(i).^2))/(B(i)+C(i))); beta(i)=x(2)+theta3(i)-pi; if alpha(i)<=pi/18 f(i)=1.5*abs(beta(i)-betae3(i)); elseif alpha>=pi/18,alpha(i)<=pi/9;f(i)=abs(betaa(i)-betae3(i)); elsef(i)=0.5*abs(beta(i)-betae3(i)); global K L thetamax alpha K=input L=input thetamax=input x0(1)=input

x0(2)=input thetamax = thetamax*pi/180; x0(2)=x0(2)*pi/180;lb(1)=0.17K; lb(2)=0.17*K; ub(1)=acot(K/(1.2*L))ub(2)=pi/2; alpha=linspace (0, theamax ,61); lb=[lb(1),lb(2)]; ub=[ub(1),ub(2)];x(0)=[x0(1),x0(2)]; options = optimset ( ‘TolFun’,‘le-10’,‘TolCon’,‘le-6’) [x,resnorm] = lsqnonlin(‘fun’,x0,lb,ub,options) g lobal K L thetamax alpha K = input L= input thetamax= input x ( 1) = input x ( 2) = input thetamax = thetamax * pi/ 180; x ( 2) = x ( 2) * pi/ 180; alpha= linspace( 0, thetamax , 61) ; fo r i= 1∶61 betae= atan( tan( alpha( i) ) / (( 1- K/ L) * tan( alpha( i) ) ) ) ; A ( i) = 2* ( x ( 1) ) .∧2* sin ( x ( 2) + alpha( i) ) ; B( i) = 2* K* x( 1) - 2* ( x ( 1) ) . ∧2* cos( x( 2) + alpha( i) ) ) ;

简述基于MATLAB的优化设计

基于MATLAB 的曲柄摇杆机构优化设计 1. 问题的提出 根据机械的用途和性能要求的不同,对连杆机构设计的要求是多种多样的,但这些设计要求可归纳为以下三种问题:(1)满足预定的运动规律要求;(2)满足预定的连杆位置要求;(3)满足预定的轨迹要求。在在第一个问题里按照期望函数设计的思想,要求曲柄摇杆机构的曲柄与摇杆转角之间按照()f φ?=(称为期望函数)的关系实现运动,由于机构的待定参数较少,故一般不能准确实现该期望函数,设实际的函数为()F φ?=(称为再现函数),而再现函数一般是与期望函数不一致的,因此在设计时应使机构再现函数()F φ?=尽可能逼近所要求的期望函数()f φ?=。这时需按机械优化设计方法来设计曲柄连杆,建立优化数学模型,研究并提出其优化求解算法,并应用于优化模型的求解,求解得到更优的设计参数。 2. 曲柄摇杆机构的设计 在图 1 所示的曲柄摇杆机构中,1l 、2l 、3l 、 4l 分别是曲柄AB 、连杆BC 、摇杆CD 和机架AD 的长度。这里规定0?为摇杆在右极限位置0φ时的曲柄起始位置角,它们由1l 、2l 、3l 和4l 确定。 图1 曲柄摇杆机构简图 设计时,可在给定最大和最小传动角的前提下,当曲柄从0?转到090??+时,要求摇杆的输出角最优地实现一个给定的运动规律()f ?。这里假设要求: ()()2 0023E f φ?φ??π ==+ - (1)

对于这样的设计问题,可以取机构的期望输出角()E f φ?=和实际输出角 ()F φ?=的平方误差之和作为目标函数,使得它的值达到最小。 2.1 设计变量的确定 决定机构尺寸的各杆长度1l 、2l 、3l 和4l ,以及当摇杆按已知运动规律开始运行时,曲柄所处的位置角0?应列为设计变量,即: []12340T x l l l l ?= (2) 考虑到机构的杆长按比例变化时,不会改变其运动规律,通常设定曲柄长度 1l =1.0,在这里可给定4l =5.0,其他杆长则按比例取为1l 的倍数。若取曲柄的初始 位置角为极位角,则?及相应的摇杆l 位置角φ均为杆长的函数,其关系式为: ()()()()222221243230124225arccos 210l l l l l l l l l l l l ?????++-+-+==????++???????? (3) ()()22222124323034325arccos 210l l l l l l l l l l ????? +--+--==???????????? (4) 因此,只有2l 、3l 为独立变量,则设计变量为[][]2312T T x l l x x ==。 2.2目标函数的建立 目标函数可根据已知的运动规律与机构实际运动规律之间的偏差最小为指标来建立,即: ()()2 1min m Ei i i f x φφ==-→∑ (5) 式中,Ei φ-期望输出角;m -输出角的等分数;i φ-实际输出角,由图 1 可知: ()()02i i i i i i i παβ?πφπαβπ?π--≤≤??=?-+≤≤?? (6) 式中,222222322132arccos arccos 22i i i i i r l l r x x rl r x α???? +-+-== ? ????? (7) 222241424arccos arccos 210i i i i i r l l r rl r β???? +-+== ? ????? (8) i r == (9) 2.3约束条件

matlab在优化设计中的应用

m a t l a b在优化设计中的 应用 The Standardization Office was revised on the afternoon of December 13, 2020

Matlab 在优化设计中的应用 摘 要 常见的优化问题包括线性规划、无约束优化、约束优化、最下二乘优化、多目标规划等。本文研究了matlab 在这些常见优化问题中的应用及求解。 在进行研究本课题之前,我们先通过网络、电子书刊等各种有效渠道获取我们所需信息,在充分了解与熟练掌握了各种优化问题的具体特点及性质后,我们给出了关于如何用matlab 进行多类优化问题的求解基本方法,在此前提下,为了体现该软件在这些优化领域的实际应用效果,我们结合若干个优化问题的实例进行分析、建模、以及运用matlab 编程求解,在求解过程中,通过得到的精确数据和反应结果的图例,我们了解到matlab 工具箱的功能强大,是处理优化问题的非常方便的编程工具。 关键词:matlab 优化问题 二、基本概念 线性规划 线性规划是优化的一个重要分支。它在理论和算法上都比较成熟,在实际中有广泛的应用。例如数学表达形式: ???? ? ??? ?=≥=+++=+++=++++++n i x b x a x a x a b x a x a x a b x a x a x a t s x c x c x c i m n mn m m n n n n n n ,,2,1,0..min 221 122222121112121112211

在MTLAB 提供的优化工具箱中,解决规划的命令是linprog ,它的调用格式如下, ),,(b A c linprog x = 求解下列形式的线性规划: ?? ?≤b Ax t s x c T ..min ),,,,(beq Aeq b A c linprog x = 求解下面形式的线性规划: ?? ? ? ????=?≤beq x Aeq b Ax t s x c T ..min 若没有不等式约束b Ax ≤,则只需命令 [][],==b A 。 ),,,,,,(ub lb beq Aeq b A c linprog x = 求解下面形式的线性规划: ??? ?????? ? ??≤≤=?≤ub x lb beq x Aeq b Ax t s x c T ..min 若没有不等式约束b Ax ≤,则只需令[][],==b A ;若只有下界约束,则可以不用输入 ub 。 无约束优化算法 对于无约束优化问题,已经有许多有效的算法。这些算法基本都是迭代法,它们都遵循下面的步骤: ① 选取初始点x 0 ,一般来说初始点越靠近最优解越好;

MATLAB 函数解优化问题

MATLAB 函数在优化问题中的应用 §1 线性规划模型 一、线性规划课题: 实例1:生产计划问题 假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。甲单位产品的利润70元,乙单位产品的利润120元。问如何安排生产,才能使该厂所获的利润最大。 建立数学模型: 设x1、x2分别为生产甲、乙产品的件数。f为该厂所获总润。 max f=70x1+120x2 s.t 9x1+4x2≤3600 4x1+5x2≤2000 3x1+10x2≤3000 x1,x2≥0 实例2:投资问题 某公司有一批资金用于4个工程项目的投资,其投资各项目时所得的净收益(投入资金锪百分比)如下表: 工程项目收益表 由于某种原因,决定用于项目A的投资不大于其他各项投资之和而用于项目B和C的投资要大于项目D的投资。试确定全文该公司收益最大的投资分配方案。 建立数学模型:

设x 1、 x 2 、x 3 、x 4分别代表用于项目A 、B 、C 、D 的投资百分数。 max f=0.15x 1+0.1x 2+0.08 x 3+0.12 x 4 s.t x 1-x 2- x 3- x 4≤0 x 2+ x 3- x 4≥0 x 1+x 2+x 3+ x 4=1 x j ≥0 j=1,2,3,4 实例3:运输问题 有A 、B 、C 三个食品加工厂,负责供给甲、乙、丙、丁四个市场。三个厂每天生产食品箱数上限如下表: 四个市场每天的需求量如下表: 从各厂运到各市场的运输费(元/每箱)由下表给出:

用matlab求解200变量优化问题

200变量优化 原创 问题: 某超市有十个收银台,分别标号为1,2,3,4,5,6,7,8,9,10。已知该十个收银台平均每收取100元所需时间为t=[2,1,1,2 ,3,2,2,1,1,3](单位为分钟)。现有顾客20名,已知该20名顾客购物金额分别为p=[1,2,3,4,4,3,1,1,4,1,2,3,4,2,5,4,3,2,1,2](单位为百元)。现已知每个收银台同时最多容纳10名顾客。问如何安排可使总收银时间最少?并求出最小时间值。 数学模型: 建立一个10×20的矩阵A , 令矩阵A 的元素:x(k)=A[i,j]=?? ?号收银台号顾客不选,号收银台号顾客选,j 0j i 1i 则,目标函数为: Min(Z)= [2,1,1,2 ,3,2,2,1,1,3]A [1,2,3,4,4,3,1,1,4,1,2,3,4,2,5,4,3,2,1,2]T 不等式约束条件: ∑=20 1)(k k x 10≤; ;10)(40 21≤∑=k k x ;10)(6041 ≤∑=k k x 10)(8061≤∑=k k x ;10)(200 181≤∑=k k x

等式约束条件: x(1)+x(21)+x(41)+x(61)+ +x(161)+x(181)=1; x(2)+x(22)+x(42)+x(62)+ +x(162)+x(182)=1; x(3)+x(23)+x(43)+x(63)+ +x(163)+x(183)=1; x(4)+x(24)+x(44)+x(64)+ +x(164)+x(184)=1; x(19)+x(39)+x(59)+x(79)+ +x(179)+x(199)=1; x(20)+x(40)+x(60)+x(80)+ +x(180)+x(200)=1;MATLAB计算程序: f=[2 4 6 8 8 6 2 2 8 2 4 6 8 4 10 8 6 4 2 4 ... 1 2 3 4 4 3 1 1 4 1 2 3 4 2 5 4 3 2 1 2 ... 1 2 3 4 4 3 1 1 4 1 2 3 4 2 5 4 3 2 1 2 ... 2 4 6 8 8 6 2 2 8 2 4 6 8 4 10 8 6 4 2 4 ... 3 6 9 12 12 9 3 3 12 3 6 9 12 6 15 12 9 6 3 6 ... 2 4 6 8 8 6 2 2 8 2 4 6 8 4 10 8 6 4 2 4 ... 2 4 6 8 8 6 2 2 8 2 4 6 8 4 10 8 6 4 2 4 ... 1 2 3 4 4 3 1 1 4 1 2 3 4 2 5 4 3 2 1 2 ... 1 2 3 4 4 3 1 1 4 1 2 3 4 2 5 4 3 2 1 2 ... 3 6 9 12 12 9 3 3 12 3 6 9 12 6 15 12 9 6 3 6]; a=zeros(10,200); for i=1:10 for j=1:200 if j>20*(i-1) & j<=20*i a(i,j)=1; else a(i,j)=0; end end end b=[10 10 10 10 10 10 10 10 10 10]; aeq=zeros(20,200); for i=1:20 for j=i:20:200 aeq(i,j)=1; end

相关主题
文本预览
相关文档 最新文档