数学建模算法与应用习题1-3 解析 MATLAB 整数规划

数学建模算法与应用习题 1.3

某厂生产三种产品Ⅰ,Ⅱ,Ⅲ。每种产品要经过A,B两道工序加工。设该厂有两种规格的设备能完成A工序,以A1,A2 表示;有三种规格的设备能完成B工序,以B1,B2,B3,表示。产品Ⅰ可在A,B任何一种规格设备上加工。产品Ⅱ可在任何规格的A设备上加工,但完成B工序时,只能在B1设备上加工;产品Ⅲ只能在A2与B2设备上加工。已知在各种机床设备的单件工时、原材料费、产品销售价格、各种设备有效台时以及满负荷操作时机床设备的费用如表1.2所列,试安排最优的生产计划,使该厂利润最大。

设备产品Ⅰ产品Ⅱ产品Ⅲ设备有效台时满负荷时的设备费用/元
A15106000300
A2791210000321
B1684000250
B24117000783
B374000200
原料费/(元/件)0.250.350.50
单价/(元/件)1.252.002.80

这里,我们可以设产品Ⅰ的A1、A2、B1、B2、B3参与生产的产品数量分别为x1、x2、x3、x4、x5。
设产品Ⅱ的A1、A2、B1参与生产的产品数量分别为x6、x7、x8。
设产品Ⅲ的A2、B2参与生产的产品数量分别为x9、x10。

根据利润公式——利润 = 单价 - 原料 - 设备费用,得出:
在这里插入图片描述

z = (1.25-0.25)(x1+x2)+(2 -0.35)x8+(2.8-0.5)x9 
-(300/6000)(5x1+10x6) - (321/10000)(7x2+9x7+12x9)  
-(250/4000)(6x3+8x8) - (783/7000)(4x4+11x10) 
-(200/4000)7x5

可能公式不是很好理解
(单价-成本)*(产品数量)-(设备单位时间价格)*时间
这里的产品数量可以使用所有在A或者B加工的数量来表示,因为这个产品必须要经过A,B两道工序,所以说使用一个产品参与的所有的A或者B工序数量就可以。

整理后
有些朋友不知道利润系数是什么,自己把上面的利润公式化简后就知道了!
利润公式系数分别为 3/4,7753/10000,-3/8,-3132/7000,-7/20,-1/2,-2889/10000,1.15,19148/10000,-8613/7000。

下面是条件限制

5x1 + 10x6 ≤ 6000
7x2 + 9x7 + 12x9 ≤ 10000
6x3 + 8x8 ≤ 4000
4x4 + 11x10 ≤ 7000
7x5 ≤ 4000
x1 + x2 = x3 + x4 + x5,
x6 + x7 = x8
x9 = x10
x = 1:10

得出代码:

clc;clear;
c = [3/4,7753/10000,-3/8,-3132/7000,-7/20,-1/2,-2889/10000,1.15,19148/10000,-8613/7000];
A = [5,0,0,0,0,10,0,0,0,0;0,7,0,0,0,0,9,0,12,0;
     0,0,6,0,0,0,0,8,0,0;0,0,0,4,0,0,0,0,0,11;
     0,0,0,0,7,0,0,0,0,0];
b = [6000,10000,4000,7000,4000];
aeq = [1,1,-1,-1,-1,0,0,0,0,0;
       0,0,0,0,0,1,1,-1,0,0;
       0,0,0,0,0,0,0,0,1,-1];
beq = [0,0,0];
options = optimoptions('linprog','Algorithm','dual-simplex');
[x,y] = linprog(-c,A,b,aeq,beq,zeros(10,1),[],options);

fprintf('最优方案应该为:\n')
for i = 1:10
   fprintf('x%d = %.5f\n',i,x(i)); 
end
fprintf('最大利润为%.5f元\n',-y);


输出为:


Optimal solution found.

最优方案应该为:
x1 = 1200.00000
x2 = 230.04926
x3 = 0.00000
x4 = 858.62069
x5 = 571.42857
x6 = 0.00000
x7 = 500.00000
x8 = 500.00000
x9 = 324.13793
x10 = 324.13793
最大利润为1146.56650元

同答案上Lingo程序的结果对比基本一致,又因为需要进行整数规划。这里我们对代码进行一下修改。

clc;clear;
c = [3/4,7753/10000,-3/8,-3132/7000,-7/20,-1/2,-2889/10000,1.15,19148/10000,-8613/7000];
A = [5,0,0,0,0,10,0,0,0,0;0,7,0,0,0,0,9,0,12,0;
     0,0,6,0,0,0,0,8,0,0;0,0,0,4,0,0,0,0,0,11;
     0,0,0,0,7,0,0,0,0,0];
b = [6000,10000,4000,7000,4000];
aeq = [1,1,-1,-1,-1,0,0,0,0,0;
       0,0,0,0,0,1,1,-1,0,0;
       0,0,0,0,0,0,0,0,1,-1];
beq = [0,0,0];
intcon = [1 2 3 4 5 6 7 8 9 10];
[x,y] = intlinprog(-c,intcon,A,b,aeq,beq,zeros(10,1),[]);
fprintf('最优方案应该为:\n')
for i = 1:10
   fprintf('x%d = %.5f\n',i,x(i)); 
end
fprintf('最大利润为%.5f元\n',-y);


输出为:

最优方案应该为:
x1 = 1200.00000
x2 = 230.00000
x3 = 0.00000
x4 = 859.00000
x5 = 571.00000
x6 = 0.00000
x7 = 500.00000
x8 = 500.00000
x9 = 324.00000
x10 = 324.00000
最大利润为1146.41420元
  • 35
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
数学建模算法应用习题解答的程序及数据“data.mat”是一个MATLAB文件,包含了第一章中使用的数据。该文件中存储了一些数值和矩阵数据,用于问题的建模和求解。 MATLAB是一种用于数值计算和科学仿真的软件环境,它具有强大的数学建模和数据处理功能。通过使用MATLAB,我们可以编写程序来实现数学建模算法,并利用提供的数据进行问题求解。 “data.mat”文件可以通过MATLAB的load函数进行加载,加载后我们可以使用其中的数据进行计算和分析。根据具体的问题,我们可以编写相应的程序来读取“data.mat”文件中的数据,并进行数学建模算法的求解。 在第一章中,我们可能会使用到一些基本的数学建模算法,例如线性回归、最小二乘法、插值方法等。这些算法可以通过编写MATLAB程序来实现,并且我们可以使用“data.mat”中的数据作为输入。 通过“data.mat”文件中的数据,我们可以进行模型的构建、数据的分析和算法的实现。解答习题的程序及数据的使用可以帮助我们更好地理解和掌握数学建模的方法和技巧。同时,通过编写程序并运行数据,我们可以得到与习题相关的计算结果,用于验证和分析问题的解答。 总之,数学建模算法应用习题解答的程序及数据“data.mat”是一个用于支持数学建模问题求解的MATLAB文件,其中存储了问题所需的数据。我们可以通过加载该文件,使用其中的数据进行数学建模算法的实现和求解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值