MATLAB 线性规划实例应用

  • 线性规划
  1. 线性规划函数
  2. 功能:求解线性规划问题
  3. 语法
    • x = linprog(f,A,b):求解问题 min fx,约束条件为 Ax <= b
    • x = linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即 Aeqx = beq,若没有不等式存在,则令 A= []、b = []
    • x = linprog(f,A,b,Aeq,beq,lb,ub):定义设计变量 x 的下届 lb 和 上届 ub,使得 x 始终在该范围内,若没有等式约束,令 Aeq = []、beq = []
    • x = linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为 x0。该选项只适用于中型问题,默认大型算法将忽略初值
    • x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用 options 指定的优化参数进行最小化
    • [x,fval] = linprog(...):返回解 x 处的目标函数值 fval
    • [x,lambda,exitflag] = linprog(...):返回 exitflag 值,描述函数计算的退出条件
    • [x,lambda,exitflag,output] = linprog(...):返回包含优化信息的输出变量 output
    • [x,fval,lambda,exitflag,output] = linprog(...):将解 x 处的拉格朗日乘子返回到 lambda 参数中
  4. 变量及算法:lambda 参数介绍
    • lambda 是解 x 处的拉格朗日乘子,它的属性如下
    • lambda.lower:lambda 的下届
    • lambda.upper:lambda 的上届
    • lambda.ineqlin:lambda 的线性不等式
    • lambda.eqlin:lambda 的线性等式
    • 大型优化算法:采用 LIPSOL 法,该法在进行迭代计算之前首先要进行一系列的预处理
    • 中型优化算法:linprog 函数使用的是投影法,就像 quadprog 函数的算法一样,linprog 函数使用的是一种活动集方法,是线性规划中单纯形法的变种,他通过求解另一个线性规划问题来找到初始可行解
  • 线性规划问题的应用
  1. 生产决策问题

    • 某厂生产甲、乙两种产品,已知制成一吨产品甲需用资源A 3 吨,资源B 4 $m^3$,制成每吨产品乙需用资源A 2 吨,资源B 6 $m^3$,资源C 7 个单位。若每吨产品甲和乙的经济价值分别为 7 万元和 5 万元,3 种资源的限制量分别为 80 吨、220 $m^3$ 和 230 个单位,试分析应生产这两种产品各多少吨才能使创造的总经济价值最高?
    • 这里可以令生产产品甲的数量为 $x_1$,生产产品乙的数量为 $x_2$。根据题意,代码设置如下:

      clc
      clear
      f = [-7;-5];
      A = [3 2
           4 6
          0 7];
      b = [80;220;230];
      lb = zeros(2,1);

      然后调用 linprog 函数:

      [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)

      最优化结果如下:

    • 由上可知,生产甲种产品 4.7619 吨、乙种产品 32.8571 吨可使创造的总经济价值最高,最高经济价值为 197.6190 万元。exitflag = 1 表示过程正常收敛于解 x 处。

2.工作人员计划安排问题

    • 某昼夜服务的公共交通系统每天各时间段(每 4 小时为一个时间段)所需的值班人数如表所示,这些值班人员在某一时段开始上班后要连续工作 8 小时(包括轮流用餐时间),请问该公共交通系统至少需要多少名工作人员才能满足值班的需要?

    • 这里可设 $x_i$ 为第 i 个时段开始上班的人员数

      clc
      clear
      f = [1;1;1;1;1;1];
      A = [-1 0 0 0 0 -1
           -1 -1 0 0 0 0
           0 -1 -1 0 0 0
           0 0 -1 -1 0 0
           0 0 0 -1 -1 0
           0 0 0 0 -1 -1];
      b = [-50;-30;-70;-60;-40;-20];
      lb = zeros(6,1);    
    • 然后调用 linprog 函数

      [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
    • 最优化结果如下:

      可见只要 6 个时段分别安排 26 人、25 人、45 人、26 人、14 人和 24 人就可以满足值班的需要,共计 160 人,并且计算结果 exitflag = 1 是收敛的

3. 投资问题

    • 某单位有一批资金用于 4 个工程项目的投资,用于各工程项目时所得的净收益(投入资金的百分比)如表所示

    • 由于某种原因,决定用于项目 A 的投资不大于其他各投资之和,而用于项目 B 和 C 的投资要大于项目 D 的投资,试确定使该单位收益最大的投资分配方案。
    • 这里可以用 $x_1、x_2、x_3 和 x_4$ 分别代表用于项目 A、B、C 和 D 的投资百分数,由于各项目的投资百分数之和必须等于 100%,所以 $x_1+x_2+x_3+x_4 = 1$,代码设置如下:

      f = [-0.18;-0.1;-0.09;-0.12];
      A = [1 -1 -1 -1
           0 -1 -1 1];
      b = [0;0];
      Aeq = [1 1 1 1];
      beq = [1];
      lb = zeros(4,1); 
    • 调用函数:

      [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb)
    • 结果如下:

说明 A、B、C、D 投入资金的百分比分别为 50%、25%、0%、25% 时,该单位收益最大

4. 工件加工任务分配问题

    • 某车间有两台机床甲和乙,可用于加工 3 种工件。假定这两台机床的可用台时数分别为 600 和 900,3 种工件的数量分别为 400、600 和 500,且已知用两台不同机床加工单位数量的不同工件所需的台时数和加工费用(如表所示),问怎样分配机床的加工任务,才能既满足加工工件的需求,又使总加工费用最低?

    • 这里可设在甲机床上加工工件1、2 和 3 的数量分别为 $x_1、x_2、x_3$,在乙机床上加工工件1、2 和 3 的数量分别为 $x_4、x_5、x_6$,根据 3 种工种的数量限制,则有:$x_1+x_4 = 400(对工件 1) ,x_2+x_5 = 600(对工件 2),x_3+x_6=500(对工件 3)$,根据题意:

      clc
      clear
      f = [13;9;10;11;12;8];
      A = [0.6 1.2 1.1 0 0 0
           0 0 0 0.4 1.2 1.0];
      b = [600;900];
      Aeq = [1 0 0 1 0 0
             0 1 0 0 1 0
             0 0 1 0 0 1];
      beq = [400 600 500];
      lb = zeros(6,1);

      然后调用 linprog 函数:

      [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb)

      结果如下:

在甲机床上加工 500 个工件 2,在乙机床上加工 400 个工件 1、加工 100 个工件 2、加工 500 个工件 3,可在满足条件的情况下使总加工费用最小,最小费用为 14100 元。

5. 厂址选择问题

    • A、B、C 三地,每地都出产一定数量的产品,也消耗一定数量的原料(如表所示),已知制成每吨产品需 3 吨原料,各地之间的距离为:A-B,150km;A-C,100km,B-C,200km。假定每万吨原料运输 1lm 的运价是 5000 元,每万吨产品运输 1lm 的运价是 6000 元。由于地区条件的差异,在不同地点设厂的生产费用也不同。问究竟在哪些地方设厂,规模多大,才能使总费用最小?另外,由于其他条件限制,在 B 处建厂的规模(生产的产品数量)不能超过 6 万吨

    • 这里可令 $x_{ij}$ 为由 i 地运到 j 地的原料数量(万吨),$y_{ij}$ 为由 i 地运往 j 地的产品数量(万吨),i,j = 1,2,3(分别对应A、B、C三地),根据题意:

      clc
      clear
      f = [75;75;50;50;100;100;150;240;210;120;160;220];
      A = [1 -1 1 -1 0 0 3 3 0 0 0 0
           -1 1 0 0 1 -1 0 0 3 3 0 0
           0 0 -1 1 -1 1 0 0 0 0 3 3
           0 0 0 0 0 0 0 0 1 1 0 0];
      b = [21;17;22;6];
      Aeq = [0 0 0 0 0 0 1 0 1 0 1 0
                  0 0 0 0 0 0 0 1 0 1 0 1];
      beq = [6;12];
      lb = zeros(12,1);
      [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb);

      可见要使总费用最小,A、B、C 三地的建厂规模分别为 6 万吨、5.667 万吨和 6.333 万吨,最小总费用为 2.9733e+03 万元

6. 确定职工编制问题

    • 某工厂每日 8小时的产量不低于 1800 件。为了进行质量控制,计划聘请两个不同水平的检验员。一级检验员的速度为 25件/小时,正确率 98%,计时工资 4元/小时,二级检验员的速度为 15件/小时,正确率 95%,计时工资 3元/小时,检验员每错一次,工厂要损失 2 元。现有可供厂方聘请的检验员人数为一级 7人和二级 8人。为使总检验费用最省,该工厂应聘请一级、二级检验员各多少名?
    • 可设需要一级和二级检验员的人数分别为 $x_1$ 和 $x_2$ 名,根据题意:

      clc
      clear
      f = [40;36];
      A = [1 0
           0 1
           -5 -3];
      b = [7;8;-45];
      lb = zeros(2,1);
      [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);

可见,招聘一级检验员 7名,二级检验员 3名可使总检验费用最少,约为400.00元

7. 生产计划的最优化问题

    • 某工厂生产 A 和 B 两种产品,它们需要经过 3 种设备的加工,其加工如表所示,设备一、二和三每天可使用的时间分别不超过 11、9 和 12小时。产品 A 和 B 的利润随市场的需求有所波动,如果预测未来某个时期内 A 和 B 的利润分别为 5000元/吨和 3000元/吨,问在那个时期内,每天应生产A、B各多少吨,才能使工厂获利最大?

    • 这里可设每天应安排生产 A 和 B 分别为 $x_1$ 和 $x_2$ 吨,根据题意:

      clc
      clear
      f = [-5;-3];
      A = [4 3
           5 4
           6 3];
      b = [11;9;12];
      lb = zeros(2,1);
      [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)

      每天生产 A 产品 1.80吨、B产品 0 吨可使工厂获得最大利益 9000元/吨。

    

原文地址:https://www.cnblogs.com/NikkiNikita/p/9464886.html

时间: 2024-09-27 05:03:48

MATLAB 线性规划实例应用的相关文章

Matlab 绘图实例

概要 ? 每次用 Matlab 绘图都要搜一堆资料设置一些参数,本次将绘图中的一些参数设置实例展示在这里,以备不时之需.暂包括折线图,面积图. ? 折线图实例 ? 下图是效果图: 图 1:折线图效果图 ? Matlab 代码如下: clc;clear; y1 = 0; y2 = 0; len = 249; for i = 2:len y1(i) = y1(i-1) + unifrnd(-0.8,1); end for i = 2:len y2(i) = y2(i-1) + unifrnd(-0.

[zz]求一维序列的信息熵(香浓熵)的matlab程序实例

对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵.    但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的,不会是(0-255)这么确定,如果进行域值变换,使其转换到一个整数范围的话,就会丢失数据,请高手指点,怎么计算. 比如数字信号是x(n),n=1~N(1)先用Hist函数对x(n)的赋值范围进行分块,比如赋值范围在0~10的对应第      一块,10~20的第二块,以此类推.这之前需要对x(n)做

Matlab应用实例(8)—fminimax

设某城市有某种物品的10个需求点,第i个需求点Pi的坐标为(ai,bi),道路网与坐标轴平行,彼此正交.现打算建一个该物品的供应中心,且由于受到城市某些条件的限制,该供应中心只能设在x界于[5,8],y界于[5.8]的范围之内.问该中心应建在何处为好? P点的坐标为: ai 1 4 3 5 9 12 6 20 17 8 bi 2 10 8 18 1 4 5 10 8 9 解:设供应中心的位置为(x,y),要求它到最远需求点的距离尽可能小,此处采用沿道路行走计算距离(如图8-1),则数学模型为:

Matlab编程实例(1) 移动平均

MATLAB数字信号处理作业,把自己写的程序发上来..欢迎交流~ QQ 五幺九七九零六四 首先是任意点移动平均: 主程序:mov_average_main.m (运行) 函数:mov_average.m  (多点移动平均) /////////mov_average_main.m/////////// %多点移动平均 close all; clear all; numSample=500;    %采样精度为100 l=input('请输入用于平滑的窗口大小"n"'); if l>

Matlab应用实例(9)—A\b解线性方程组

说明:A\b用来求解线性方程组,只要写出系数矩阵A和资源向量b,就可以用左除的方法(高斯消元法)得到解.其调用格式为X=A\b. [例1]求下列线性方程组: 解:写成矩阵形式有: 用MATLAB进行求解 主函数: A=[1 -2 3;3 -2 1;1 1 -1]; b=[2;7;1]; X=A\b 解得: X = 1.6250 -1.5000 -0.8750 版权声明:本文为博主原创文章,未经博主允许不得转载.

matlab线性规划

clc; clear all; close all; %% =========linprog()========= % min(z) =cX %st. AX <=b % Aeq <=beq; %%========================= c= [3, -1, -1]; A = [1,-2,1;4,-1,-1]; b = [1,-3]; Aeq = [-2,0,1]; beq = 1; x = linprog(c,A,b,Aeq,beq); %%================= c

关于二阶齐次差分方程的MATLAB解法

看PDF的截图,凑活看吧 之后举个MATLAB的实例 解 X(K+2)+3X(K+1)+2X(K)=0 其中X(0)=0,X(1)=1 clc,clearsyms a k yka=[0 1;-2 -3]; a=sym(a);%a来自于上面截图中的A,将二阶转化为一阶的那个系数 [vec,val]=eig(a);y0=[0;1];yk=vec*val.^k*inv(vec)*y0 关于二阶齐次差分方程的MATLAB解法,布布扣,bubuko.com

(转)Matlab 正则表达式零基础起步教程

摘        要:正则表达式是一个重要的编程概念.应用正则表达式可以实现很多强大的字符处理功能,有时也可以为常规方法解决起来比较复杂的问题另辟蹊径.本文试图通过比较详尽的示例为没有基础的读者介绍正则表达式的基本概念.用法及其在Matlab中的实现.文末附上几个应用表达式解决实际问题的实例,以利于读者在自己的实践中应用. 关  键  词:正则表达式    Matlab    regexp 1.  引言 正则表达式就是一个表达式(也是一串字符),它定义了某种字符串模式——利用正则表达式,可以 对

MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] #MATLAB基本介绍Matlab工程软件是MathWorks公司推出的一款具备强大数学运算能力的数学软件.随着工具箱的不断丰富和完善,Matlab工程软件几乎可以应用于社会各种工程领