matlab linprog用matlab的linprog命令求解线性规划时,出现下面提示:Exiting: One or more of the residuals, duality gap, or total relative error has stalled: the primal appears to be infeasible (and the dual unbounded). (The dual residual < TolFun=1.00e-008.)这时求出的解能当作这个线性规划问题的解吗?对这个线性规划问题来说出现上述提示的原因是什么?------解决方案--------------------
MATLAB中的线性规划问题的标准形式描述如下:Min z=fTXs.t. AXbAeqX=beqlbXub其中:f、X、b、beq、lb、ub为向量,A、Aeq为矩阵。注意:1 本教材中标准形式的目标函数是求Max;2 任何形式的线性规划问题都能够经过适当的变换化成上述的标准形式。在MATLAB6.0及以上的版本中,求解线性规划问题的函数是linprog。调用格式1:x=linprog(f,A,b)说明:求Min z=fTX,s.t. AXb线性规划的最优解。调用格式2:x=linprog(f,A,b,Aeq,beq)说明:等式约束Aeq X = beq,若没有不等式约束AXb,则A=[],b=[]。调用格式3:x=linprog(f,A,b,Aeq,beq,lb,ub)说明:约束X:lbXub,若没有等式约束AeqX=beq,则Aeq=[],beq=[]。调用格式4:x=linprog(f,A,b,Aeq,beq,lb,ub,x0)说明:设置初值x0。该选项只适用于中型问题,默认时大型问题将忽略初值。调用格式5:x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)说明:options为指定的优化参数,参数详情请查看optimset和optimget函数。调用格式6:[x,fval]=linprog(…)说明:返回目标函数最优值,即fval= fTX。调用格式7:[x,lambda,exitflag]=linprog(…)说明:lambda为解x的Lagrange乘子。若lambda=lower表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束。调用格式8:[x,lambda,fval,exitflag]=linprog(…)说明:exitflag为终止迭代的错误条件:若exitflag>0表示函数收敛于解x, exitflag=0,表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x。根据问题规模的不同,linprog函数使用不同的算法: 大型优化问题——采用的是LIPSOL法。该方法在迭代计算之前首先要进行一系列的预处理。 中型优化问题——采用的是投影法,就象quadprog函数的算法一样。Linprog函数使用的是一种活动集方法,是线性规划中单纯形的变种。它通过求解另外一个线性规划问题来找到初始可行解。对于大型问题算法,算法的第一步涉及到一些约束条件的预处理问题。有些问题可能导致Linprog函数退出,并显示不可行的消息。若Aeq参数中某行的所有元素都为零,但beq参数中对应的元素不为零,则显示以下退出信息:exiting due to infeasibility: an all zero row in the constraint matrix does not have a zero in corresponding right hand side entry.若x的某个元素没有在界内,则显示以下退出信息:exiting due to infeasibility: objective f*x is unbounded below.若Aeq参数中某一行中只有一个非零值,则x中相关值称为奇异变量。这里,x中该成分的值可以用Aeq和beq算得。若算得的值与另外一个约束条件相矛盾,则显示以下退出信息:exiting due to infeasibility: singleton variables in equality constraints are not feasible.若奇异变量可以求解,但其解超过上界或下界,则显示以下退出信息:exiting due to infeasibility: singleton variables in the equality constraints are not within bounds.注意:预处理的步骤是累加的。例如,即使约束矩阵开始不含有元素全为零的行,其他预处理的步骤也会引起某行元素全为零。一旦预处理结束,将进行迭代运算,直到满足终止准则。若迭代的残差在增加而不是在减少,或者残差不增加也不减少,则分别给出下面二条终止信息:one or more of the residuals, duality gap, or total relative error has grown 100000 times greater than its minimum value so far:或者one or more of the residuals, duality gap, or total relative error has stalled.对于中型优化问题,当解不可行时,linprog函数给出下面警告消息:warning: the constraints are overly stringent; there is no feasible solution.这里,linprog函数给出一个结果,使约束矛盾的最坏程度变到最小。当等式约束不协调时,linprog函数给出下面警告消息:warning: the equality constraints are overly stringent; there is no feasible solution.超出边界的解给出下面警告消息:warning: the solution is unbounded and at infinity; the constraints are not restrictive enough.这里,linprog函数返回x的值,该值满足约束条件。另外,对于中型优化问题,显示水平参数只能使用‘off’和‘final’。进行迭代输出的‘iter’属性不可用。