修正单纯形法求解约束优化问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修正单纯形法求解约束优化问题
姓名王铎
学号 2007021271
班级机械078
日期 2010/6/23
一.问题分析
求解约束优化问题中,假如目标函数和约束条件都是线性的,像这类约束函数和目标函数都是线性函数的优化问题称作线性规划问题。从实际问题中建立数学模型一般有以下三个步骤:
1.根据影响所要达到目的的因素找到决策变量;
2.由决策变量和所在大道目的之间的函数关系确定目标函数;
3.有决策变量所受的限制条件确定决策变量所要满足的约束条
件;
求解线性规划问题的基本方法是单纯形法,而本文研究的是修正单纯形法。1965 年由J.A.Nelder 等提出。是在基本单纯形优化法的基础上,引入了反射、扩展与收缩等操作规则,变固定步长推移单纯形为可变步长推移单纯形,在保证优化精度的条件下,加快了优化速度。是各种单纯形优化法在分析测试中应用最广的一种。
二.数学模型
1、线性规划问题的formalization
问题(1.1)称为线性规划问题:
x= arg min_x c^T x
s.t. Ax=b
x>=0 (1.1)
其中x为n维列向量,A为m*n的矩阵,b和c分别为m,n维的常数向量。
任意一个线性不等式组约束下求解线性函数的最大最小值问题
都可以归结到问题(1.1)来。
比如
A(i,:) x <= b(i)
<=>
A(i,:) x + y(i) = b(i)
y(i)>=0 (1.2)
A(i,:) x >= b(i)
<=>
A(i,:) x - y(i) = b(i)
y(i)>=0 (1.3)
x
<=>
x=x'-x"
x'>=0
x">=0 (1.4)
2、单纯形法
设m
最优问题同样没有意义。)
此时记A=[B,N],B为m*m的方阵,N为m*(n-m)的矩阵,假设B 非奇异,(奇异的情况后面会讨论)
则x=[x_B,x_N]^T=[B^-b,0]^T满足(1.1)的约束。所有这样的x(因为对A进行列重排可得到不同的B,也就有不同的N)组成的集合称为问题(1.1)的
基解。
理论基础:
线性规划问题(1.1)的满足约束Ax=b , x>=0的所有x的集合F 称为(1.1)的可行解,则有
F是凸多边形,
且
问题(1.1)的最优解如果存在必定可以在F的顶点处找到,且F 的顶点是基解的子集,也就是说,穷举基解,则必定可以找到(1.1)的最有解
单纯形法在已知一个基解的情况下,通过一个规则来搜索其他基解得到最优解,步骤如下:
1、用非基元素x_N通过约束表出x_B
2、将x代入目标函数c^T x 得到关于x_N的线形函数z_0 + z^T x_N
3、任取x_N中系数z_i<0的项 z_i x_i ,增加x_i(因为此时x_N=0 => c^Tx=z_0,增加x_i可以使c^Tx=z_0+x_i z_i减小),若z>=0则该解为最
优解,结束。(此时算法得到最优解,有关证明见《线性规划》P36定理3.1)
4、x_i增加的步长必须满足x>=0的约束。此时x_N不必考虑,因为x_N>=0,而x_B用x_N表出,所以选择的步长必须保证x_B>=0,若x_B>=0对任意
的l成立,那么,该问题无最优解,因为l可以任意大,意味着z_0可以任意小)否则选取的最大步长将使得x_B中的一个元素x_r 变为0(详细过
程如下),此时得到了另一个基解:以x_B\x_r 并上 x_i 为基的基解。这个基解得到的函数值_0'=z_0-z_i*l 目标函数就减小了单纯形法每次搜索都保证目标函数的非增性。(也有可能不变,这时采用最小下标法避免循环)。 详细过程: [B,N][x_B =b x_N] 假设一个基解已知: B x_B + N x_N= b => x_B= B^- b - B^- N x_N (1.5) 代入c^T x: z=c^Tx =c_B^T B^- b - c_B^T B^- N x_N + c_N^T x_N (1.6) 选择z_i<0的x_i增加其值,所增加的步长l满足x_B>=0,(若不存在这样的z_i,则得到最优解,算法结束) 则有 x_B= B^- b - B^- N x_N - (B^-N)(i,:)*l = B^- b - B^ - (B^-N)(i,:)*l >=0 (若B^ - (B^-N)(i,:)<=0则对任意的l有x_B>=0,此时该问 题无最优解) => l=min{ (B^- b)(j)/(B^-N)(i,j) , j=1,2,...,m } 若l=(B^- b)(r)/(B^-N)(i,r),则x_r=0,x_i=l 把x_i添入x_B,把x_r添入x_N,再用上述过程进行计算 3、有效单纯形法 每次将x_i入基x_r出基时,B要变动,此时导致无论用x_N表示x_B(1.5)还是c^Tx(1.6)都要重新计算一遍B^-,如何利用B变动前后的关系有效计 算(1.5,1.6)就是有效单纯形法所要解决的问题。 假设变动后的B为B',B^-为已知。因为 B' x'_B + N' x'_N= b' 所以 B^- B' x'_B + B^- N' x'_N = B^- b' => x'_B = (B^- B')^- (B^- b' - B^- N' x'_N) 记A=[A1,A2..,Am,...,An]则B=[A1,.Ar.,Am],B'=[A1..,Ai,..Am] 因此B^- B'= [B^- A1,B^- A2,..,B^- Ai,..B^- Am] =