本文主要记录司守奎数模书中第一章所给例题
提示:以下是本篇文章正文内容,下面案例可供参考
一、非线性问题
1.问题描述与分析
1>、根据线性规划定义,目标函数和约束条件都要为线性方程的才算为LP问题。而上述所给目标函数中各个变量为绝对值,故为非线性。
2>、线性方程:因变量与自变量之间的关系为线性的关系,就是直角坐标系中一条直线;一个自变量对应一个因变量。而这里目标函数中有绝对值,所以很明显此方程肯定不是一个自变量对应一个因变量。
2.问题解决思路
1>、将非线性方程利用数学方法更改为线性方程,那么非线性规划问题就变为线性规划问题了。
2>、这里是由于绝对值导致方程非线性,故想方设法去掉绝对值。
二、具体求解步骤
1.引入ui与vi变量
构造xi与(ui,vi)的关系:xi = (ui,vi)
ui=(|xi|+xi)/2
vi=(|xi|-xi)/2
ui-vi=xi
ui+vi=|xi|
i = 1,2,3,4
2.引入变量后新方程
由于ui+vi=|xi| ,如:|x1| = u1+v1 2 |x2| = 2(u2+v2)
本来一个变量变为两个翻倍,故问题共有8个变量
目标函数minZ =(u1+v1)+2(u2+v2)+3(u3+v3)+4(u4+v4)
=u1+2u2+3u3+4u4+v1+2v2+3v3+4v4 (整齐好看点)
s.t.约束条件 A1(Ui-Vi) = 0
A2(Ui-Vi) = 1
A3(Ui-Vi) = -0.5
3.matlab程序
%% 非线性转为线性问题
clc;clear;
c = [1,2,3,4,1,2,3,4]';
A1 = [1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];
Aeq = [A1,-A1];
Beq = [0;1;-0.5];
Ib = zeros(8,1);
%三个等方式约束,不等式直接空矩阵
[x,f] = linprog(c,[],[],Aeq,Beq,Ib);
f
x = x(1:4)-x(5:8);
x
结果:
Optimal solution found.
f =
1.2500
x =
0.2500
0
0
-0.2500
总结
难点应该是:由于变量增加一倍,故梳理起来肯定会更复杂,但是我们可以展开,就是把具体化表达,从u1—>u4,都在方程中列写出来,这样更加清晰。也要注意目标函数中变量的顺序,因为系数不同,不要搞错系数了,还有就是,有一个矩阵的拼接。
A1 = [1,-1,-1,1;
1,-1,1,-3;
1,-1,-2,3];
Aeq = [A1,-A1]; % -A1整个矩阵加在A1矩阵右侧
结果:
Aeq =
1 -1 -1 1 -1 1 1 -1
1 -1 1 -3 -1 1 -1 3
1 -1 -2 3 -1 1 2 -3