Matlab随笔之线性规划

简介: 原文:Matlab随笔之线性规划  LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t.
原文: Matlab随笔之线性规划

 
LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:
min x
s.t.
A·x b
Aeq·x=beq
vlb x vub
其中 ,b,beq均为向量,A,Aeq为矩阵,x为向量变量.矩阵A和向量b是线性不等式约束条件的系数,

Aeq和beq是等式约束条件的系数.

在MATLAB中,用于LP的求解函数为linprog.其调用格式为:
[x,fval,lambda]=linprog(f,A,b,Aeq,beq,vlb,vub,x0,options)
其中f,A,b,是不可缺省的输入变量,x是不可缺省的输出变量,它是问题的解.vlb,vub均是向量,分别表示x的下界和上界,x0为x的起始点,options为optimset函数中定义的参数的值,fval是目标函
数在解x处的值,lambda为在解x处的lagrange乘子.lambda.lower对应于vlb,lambda.upper对应于ulb,lambda.ineqlin是对应于线性不等式约束的,lambda.eqlin是对应于线性等式约束的.

例子1

>>% 求解下列线性规划问题 
% max z=2x1+3x2-5x3 
% s.t. x1+x2+x3=7 
%      2x1-5x2+x3>=10 
%      x1+3x2+x3<=12 
%      x1,x2,x3>=0

f=[2;3;-5];%目标函数列矩阵 
A=[-2,5,-1;1,3,1];%不等矩阵 
b=[-10;12]; 
Aeq=[1,1,1];%相等矩阵 
beq=7; 
x=linprog(-f,A,b,Aeq,beq,zeros(3,1)); 
%zeros(m,n)产生m×n的double类零矩阵,zeros(n)产生n×n的全0方阵 
value=f'*x%目标值,其值等于[x,y]=linprog(-f,A,b,Aeq,beq,zeros(3,1))的-y 
Optimization terminated.

value =

   14.5714

>> x

x =

    6.4286 
    0.5714 
    0.0000

>>

例子2

>> % 求解下列线性规划问题 
% min z=2x1+3x2+x3 
% s.t. x1+4x2+2x3>=8 
%      3x1+2x2>=6 
%      x1,x2,x3>=0 
f=[2;3;1]; 
A=[-1,-4,-2;-3,-2,0]; 
b=[-8;-6]; 
x=linprog(f,A,b,[],[],zeros(3,1))%无等式,用[]代替 
value=f'*x %其值等于[x,y]=linprog(f,A,b,[],[],zeros(3,1))的y 
Optimization terminated.

x =

    0.8066 
    1.7900 
    0.0166


value =

    7.0000

>>

例子3

% min  z=|x1|+2|x2|+3|x3|+4|x4|;
% s.t.   x1-x2-x3+x4=0;
%        x1-x2+x3-3*x4=1;
%        x1-x2-2*x3+3*x4=-0.5
%目标函数 
objfun=@(x)abs(x(1))+2*abs(x(2))+3*abs(x(3))+4*abs(x(4)) 
%等式约束 
Aeq=[1 -1 -1 1 
     1 -1 13 
     1 -1 -2 3];
beq=[0 1 -0.5]'; 
x0=[0 0 0 0];%给一个初值 很关键
x=fmincon(objfun,x0,[],[],Aeq,beq)

%下面是根据的需要改进的程序
依据:|x|=u+v,x=u-v(u,v>=0) 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 -3
  1 -1 -2 3];
  Aeq=[Aeq,-Aeq];

beq=[0 1 -0.5]';
%边界条件
lb=zeros(8,1);
%调用linprog
x=linprog(f,[],[],Aeq,beq,lb)

Optimization terminated.

x =

 
 

    0.2500
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.2500

目录
相关文章
|
8月前
|
算法
优化模型:Matlab线性规划
优化模型:Matlab线性规划
90 0
|
10月前
Matlab画线性规划可行域
线性规划什么的应该是运筹学的内容,虽然数学建模比赛不会考这个,但大家日常学习还是会遇到相关的问题。除了用单纯型法,也可以用传统的画图法,画出可行域,再寻求可行解。可行域一般手画更快,但要放在论文中还是应该用电脑画。下面以一个例题,来看如何在matlab中画可行域(我只是业余画一下,代码仅供参考,大家多多指导)。
matlab 线性规划 单纯形法
matlab 线性规划 单纯形法
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现(二)
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现(二)
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现(一)
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现(一)
Matlab随笔之分段线性函数化为线性规划
原文:Matlab随笔之分段线性函数化为线性规划 eg:         10x,            0
2721 0
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
|
3月前
【数值分析】迭代法求方程的根(附matlab代码)
【数值分析】迭代法求方程的根(附matlab代码)
|
3月前
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)