Matlab随笔之线性规划

原文:Matlab随笔之线性规划

 
LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min  xs.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[email protected](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)

%下面是根据的需要改进的程序依据:|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

原文地址:https://www.cnblogs.com/lonelyxmas/p/9604869.html

时间: 2024-09-30 15:11:57

Matlab随笔之线性规划的相关文章

Matlab随笔(4)之分段线性函数化为线性规划

eg:         10x,            0<=x<=500 c(x)=1000+8x,    500<=x<=1000         3000+6x,    1000<=x<=1500   解法一: 可引入0-1变量,令z1=1,z2=1,z3=1分别表示0<=x<=500,500<=x<=1000,1000<=x<=1500,则 500z2<=x1<=500z1, 500z3<=x2<=50

Matlab笔记之线性规划

  LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.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,b

Matlab随笔之模拟退火算法

问题描述: 我方有一个基地,经度和纬度为( 70,40).假设我方飞机的速度为 1000 公里/小时. 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地.在敌方每一目 标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长). 这是一个旅行商问题.我们依次给基地编号为 1,敌方目标依次编号为 2, 3,…, 101, 最后我方基地再重复编号为 102(这样便于程序中计算). 距离矩阵 D = ( dij )102×102 , 其中 dij 表示表示 i, j 两

Matlab随笔之矩阵入门知识

直接输入法创建矩阵 – 矩阵的所有元素必须放在方括号“[ ]”内: – 矩阵列元素之间必须用逗号“,”或空格隔开,每行必须用“;”隔开 – 矩阵元素可以是任何不含未定义变量的表达式.可以是实数,或者是复数. – 例a=[1,2;3,4] 或 a=[2 1+3j;sqrt(4) 5] 创建基本矩阵的函数 – 空阵 [ ] — matlab允许输入空阵,当一项操作无结果时,返回空阵 – ones(N,M) —全部元素都为1的矩阵 – zeros(N,M) —全部元素都为0的矩阵 – rand(N,M

Matlab随笔(3)之指派问题的整数规划

注:除了指派问题外,一般的整数规划问题无法直接利用Matlab函数,必须Matlab编程实现分支定界法和割平面解法. 常用Lingo等专用软件求解整数规划问题. %指派矩阵为 % 3, 8, 2,10, 3 % 8, 7, 2, 9, 7 % 6, 4, 2, 7, 5 % 8, 4, 2, 3, 5 % 9,10, 6, 9,10 % %解题过程 c=[3 8 2 10 3; 8 7 2 9 7; 6 4 2 7 5; 8 4 2 3 5; 9 10 6 9 10];%指派矩阵 c=c(:);

Matlab随笔(1)之画图函数总结

MATLAB函数画图 MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization).本节将介绍MATLAB基本xy平面及xyz空间的各项绘图命令,包含一维曲线及二维曲面的绘制.列印及存档. 基本XY平面绘图命令 Plot 是绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的x及y座标.下例可画出一条正弦曲线: close all; %linspace(5,100,20)和5:5:100的区别在于前者已知元素总个数而不

Matlab随笔之插值与拟合(上)

1.拉格朗日插值 新建如下函数: function y=lagrange(x0,y0,x) %拉格朗日插值函数 %n 个节点数据以数组 x0, y0 输入(注意 Matlat 的数组下标从1开始), %m 个插值点以数组 x 输入,输出数组 y 为 m 个插值 n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end

Matlab随笔之三维图形绘制

1.三维曲线 用到了plot3函数.plot3(x,y,z)用来绘制3维曲线图,而不能绘制曲面图!就是把所有的(x,y,z)点连接在一起. t=linspace(0,10*pi,2000); x=sin(t); y=cos(t); z=t; plot3(x,y,z) 2.网格曲面 meshgrid是MATLAB中用于生成网格采样点的函数: mesh(X,Y,Z)函数功能是绘制由线条框构成的曲面. x=-3:0.1:3;y=-5:0.1:5; x1=ones(size(y'))*x;y1=y'*o

Matlab随笔之判别分析

从概率论角度,判别分析是根据所给样本数据,对所给的未分类数据进行分类. 如下表,已知有t个样本数据,每个数据关于n个量化特征有一个值,又已知该样本数据的分类,据此,求s个未分类数据的分类情况class. Matlab 的统计工具箱提供了判别函数 [class,err] = classify(sample,training,group, type) 其中,err 给出了分类误判率的估计值,type为分类方法,缺省值为'linear',即线性分类,type 还可取值'quadratic', 'mah