请高手帮忙用matlab解决线性规划问题

2024年11月29日 10:49
有1个网友回答
网友(1):

不小心的告诉你Matlab的线性规划函数linprog无法求解,非线性的目标函数,因为你的带有绝对值符号,故linprog是无能为力的

但是幸运的是Matlab提供了fmincon

%by dynamic
%see also http://www.matlabsky.com
%2009.2.16
%
%目标函数
objfun=@(x)abs(x(1))+2*abs(x(2))+3*abs(x(3))+4*abs(x(4))
%等式约束
Aeq=[1 -1 -1 1
1 -1 1 -3
1 -1 -2 3];
beq=[0 1 -0.5]';
x0=[0 0 0 0];%给一个初值 很关键 和很重要哦
x=fmincon(objfun,x0,[],[],Aeq,beq)

恩你的想法的确高,佩服,下面是根据的需要改进的程序

min z=[1 2 3 4 1 2 3 4]*[u1 u2 u3 u4 v1 v2 v3 v4]'

s.t.

A=[1 -1 -1 1 1 -1 -1 1
1 -1 1 -3 1 -1 1 -3
1 -1 -2 3 1 -1 -2 3]

x=[u1 u2 u3 u4 v1 v2 v3 v4]'

b=[0 1 -0.5]'

Ax=b
x>=0

%目标函数
f=[1 2 3 4 1 2 3 4];
%等式约束
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];
beq=[0 1 -0.5]';
%边界条件
lb=zeros(8,1);
%调用linprog
x=linprog(f,[],[],Aeq,beq,lb)

Optimization terminated.

x =

0.2500
0.0000
0.2500
0.0000
0.2500
0.0000
0.2500
0.0000