当前位置: 代码迷 >> 综合 >> 线性规划的典型例题:生产决策问题(思考+程序代码)
  详细解决方案

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

热度:80   发布时间:2024-02-07 06:14:10.0

线性规划的典型例题

例题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/100002-0.35-250*8/40002.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的个数

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