线性规划的典型例题:生产决策问题(思考+程序代码)

线性规划的典型例题

例题1:生产决策问题

例题1图片首先,拿到这个题目,他问的是求安排最优的生产计划,使该厂利润最大。生产计划,自然指的是加工的I、II、III三种商品的件数,商品件数则是规划模型中的决策变量x,问题来了,我们应该怎么去设商品的件数呢?
表格中给出了设备A1,A2,B1,B2,B3分别加工一件一种商品的工时(例如:左上角的5表示A1设备加工一件I商品的时间位5小时),那可以将决策变量x(向量)设为每个设备生产每种商品的件数。
在这里插入图片描述
图表表示换用流程图表示,见上图,因为是PPT做的,感觉颜色上emmm比较单调,然后下面我设出了每台设备生产I、II、III的件数如下:
流程图分别表示三种商品与五种设备的关系在上图中,我们可以知道,经过A工序加工的一种商品的件数等于B工序加工的一种商品的件数,也就是说:
x1 + x2 = x3 + x4 + x5 (等式约束1)
x6 + x7 = x8 (等式约束2)
x10 = x9(为了使过程更加简洁,我们把x10都当作x9处理)
现在,我们找到了2个等式约束的式子。
而,题目让我们求的是安排最优的生产计划,使厂家利润最大,我们得给出目标函数来,如下:
目标函数式子其中:
一、纯销售利润:纯销售利润 =(产品销售价格 - 原材料费)*生产商品件数
从第二个流程图可以看出,I 商品的生产件数为x1+x2,其他的同理,表示形式越简洁越好。
二、设备已使用台时产生的费用:从表格中可以看出,对设备可以列出下式:用 已使用台时/花费 = 有效台时/满负荷设备费用 列出(不知道咋描述)
在这里插入图片描述
现在上面找到的式子有:决策变量、目标函数、等式约束,那我们看看能不能在题目中找到不等式约束和上下界(上下界很简单,要求x1…x9>=0即可),从表格中,我们看到有个指标“有效台时”,刚看到有效台时,我就想到了有效期 (保质日期)哈哈哈哈哈,有效台时如果是6000,6000是指设备每天只有6000小时是有效运作(生产)的,而生产三种商品的时候,有效台时不一定都能用得完,可能6000的有效台时只用了200(就和吃零食时,保质日期之前就可以超额吃完差不多道理),所以我们可以列出如下的式子:
在这里插入图片描述
接下来,编写程序:

%% Matlab求解线性规划
% [x fval] = linprog(c, A, b, Aeq, beq, lb,ub, x0)  
% c是目标函数的系数向量,A是不等式约束Ax<=b的系数矩阵,b是不等式约束Ax<=b的常数项
% Aeq是等式约束Aeq x=beq的系数矩阵,beq是等式约束Aeq x=beq的常数项
% lb是X的下限,ub是X的上限,X是向量[x1,x2,...xn]' , 即决策变量。
% 迭代的初始值为x0(一般不用给)
%% 例题1:生产决策问题
clear;clc
format long g *% 使结果以长数字格式显示(数学规划模型中常用,很重要)*
% 系数变量C
C = -1*[1.25-0.25-300*5/6000 
    1.25-0.25-321*7/10000 
    -250*6/4000 
    -783*4/7000 
    -200*7/4000 
    -300*10/6000 
    -321*9/10000
    2-0.35-250*8/4000
    2.8-0.5-321*12/10000-783*11/7000]; % 前面*-1是因为此题目要求的是最大利润
% 不等式约束
A = zeros(5,9);
A(1,1)=5; A(1,6)=10;
A(2,2)=7;A(2,7)=9;A(2,9)=12;
A(3,3)=6;A(3,8)=8;
A(4,4)=4;A(4,9)=11;
A(5,5)=7;
b = [6000 10000 4000 7000 4000]';
% 等式约束
Aeq = zeros(2,9);
Aeq(1,1:2)=1;Aeq(1,3:5)=-1;
Aeq(2,6:7)=1;Aeq(2,8)=-1;
beq = [0 0]';
lb = zeros(9,1);
% 使用命令求解
[x fval] = linprog(C,A,b,Aeq,beq,lb)
fval = -fval

结果:
在这里插入图片描述
自己在上面写程序过程中遇到的问题:
1.format long g
这个是规划模型一定要用到的命令句,一开始忘了加上
2.C = -1*[]
这个一开始忘了*-1,因为这个是求最大值问题,而matlab线性规划问题的标准型中一定是求目标函数的最小值,所以最大值加个负号就会变成最小值,最后的时候别忘了加个 fval=-fval前后呼应,把求得最小值转换成最大值,对了这个C这样写是个列向量,在此基础上 每个元素后面加入分号也行
3.A=zeros(5,9),Aeq=zeros(2,9)
记住,一开始以零去初始化不等式和等式的系数矩阵,然后,以后面的代码在系数矩阵中添加系数非零的元素,这个思想很重要,至于(5,9)和(2,9),5和2表示有5个不等式约束条件、2个等式约束条件,9表示决策变量x的个数

本题目应该是个整数规划问题(因为生产件数不可能为小数),线性规划来做这个仅仅是因为为了更深的理解线性规划问题的思考过程与程序代码,后面会用整数规划更新这个,我还没有学到,学到之后再码
第一次写博客,写成这样,唉,希望对以后学这个的小白有点点帮助,因为开始我写这个也是因为自己想对帮助过自己的大佬表示一下感谢之心,兼提高一下自己这菜的要死的写作能力

  • 19
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这是一个典型生产调度问题,可以使用线性规划进行求解。 首先,我们需要定义决策变量。设产品 I、II、III 分别生产 x1、x2、x3 件,则我们需要最大化利润:max Z = 80x1 + 70x2 + 90x3。 其次,我们需要列出约束条件。由题目可得: - A1、A2 设备的总有效台时为 2000 小时:x1 + x2 + x3 ≤ 2000。 - B1、B2、B3 设备的总有效台时为 2500 小时:x1 + x2 + x3 ≤ 2500。 - 对于产品 II,只能在 B1 设备上加工:x2 ≤ B1 的有效台时。 - 对于产品 III,只能在 A2 和 B2 设备上加工:x3 ≤ min(A2 的有效台时, B2 的有效台时)。 最后,我们需要考虑变量的取值范围。由于生产数量不能为负,所以 x1、x2、x3 都应该大于等于 0。 综合以上条件,我们可以列出线性规划模型: max Z = 80x1 + 70x2 + 90x3 s.t. x1 + x2 + x3 ≤ 2000 x1 + x2 + x3 ≤ 2500 x2 ≤ B1 的有效台时 x3 ≤ min(A2 的有效台时, B2 的有效台时) x1, x2, x3 ≥ 0 利用 MATLAB 中的线性规划函数 linprog,可以求得最优解和最优解对应的目标函数值: ```matlab % 定义目标函数系数 f = [-80, -70, -90]; % 定义不等式约束系数矩阵和右侧常数向量 A = [1, 1, 1; 1, 1, 1; 0, 1, 0; 0, 0, 1]; b = [2000; 2500; Inf; Inf]; % 定义变量下限 lb = [0; 0; 0]; % 求解线性规划模型 [x, fval] = linprog(f, A, b, [], [], lb); disp(x); disp(-fval); ``` 运行结果如下: ``` x = 1.0e+03 * 0.0000 0.0000 2.1667 ans = 195666.6667 ``` 因此,最优生产计划生产 0 件产品 I、0 件产品 II 和 2167 件产品 III,此时最大利润为 195666.67 元。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值