最近了解到Excel也能求解一些简单的线性规划,于是就去学习了一下,操作比较简单,适合电脑中没有安装MATLAB、Lingo、Python等编程求解规划的软件。所以想以实际的例子讲解Excel求解线性规划。
实例1
Excel求解线性规划的步骤
Step1:新建一个空白的excel。
Step2:点击数据,在Excel右上方看是否有规划求解工具箱。
如果没有该规划求解标识,则可以在搜索栏搜索“规划求解”,在弹出的加载项对话框中勾选规划求解加载项,点击确定即可出现规划求解标识。
Step3:在任意空白区域输入模型的目标函数和约束条件。
Step4:按照文字描述将模型转化为excel规划模型,没有的项,其系数为0。
Step5:将目标函数值处G19单元格的计算公式输入目标函数计算式。
Step6:将约束条件左半部分的计算公式输入对应的单元格。
例如K11单元格对应的是第一个约束条件,其计算公式如下
K12单元格对应的是第二个约束条件,其计算公式如下
以此类推,在相应的单元格输入相应的约束条件的计算公式。
K11单元格输入的计算公式为:
=G11*G16+H11*G17+I11*G18
K12单元格输入的计算公式为:
=G12*G16+H12*G17+I12*G18
K13单元格输入的计算公式为:
=G13*G16+H13*G17+I13*G18
K14单元格输入的计算公式为:
=G14*G16+H14*G17+I14*G18
K14单元格输入的计算公式为:
=G15*G16+H15*G17+I15*G18
Step7:利用Excel规划求解工具求解,点击数据->右上角的规划求解,弹出以下对话框。
我们首先将目标函数计算值的单元格选入为“设置目标”,同时将x1,x2,x3的变量取值处的单元格选择为“通过更改可变单元格”。
其次,我们要添加我们的约束条件,点击添加,弹出以下对话框。
例如我们将第一个约束条件添加到规划求解工具箱中,操作如下:
选择不等式约束的左边计算公式和右边常数部分,并按照约束条件选择关系符号,点击添加,即可将约束条件添加成功。其余约束条件以此类推。
第一个约束条件
第二个约束条件
第三个约束条件
第四个约束条件
第五个约束条件
最后规划求解工具箱对话窗口如图所示,选择求解最小值:
选择对应的计算方法非线性GRE或者单纯线性规划的方法求解,选择方法之后点击求解按键。
出现以下窗口,点击确定
Step8:获得规划求解结果
Step9:MATLAB编程求解该线性规划,检验Excel求解结果与MATLAB求解结果是否一致。
程序
clc;
clear all;
close all;
c = [2;3;1];
a = [1, 4,2;3,2,0];
b = [8;6];
[x,y] = linprog(c,-a,-b,[],[],zeros(3,1));
fprintf('当x1=%.4f x2 = %.4f x3 = %.4f时,目标函数取得最小值z = %.4fn',x(1),x(2),x(3),y);
运行结果
Optimal solution found.
当x1=2.0000 x2 = 0.0000 x3 = 3.0000时,目标函数取得最小值z = 7.0000
实例2
Excel求解线性规划
求解结果
MATLAB编程验证
clc;
clear all;
A = [-4 -32 -13 -8 -4 -14
-110 -205 -160 -160 -420 -260
-2 -12 -54 -285 -22 -80
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
];
b = [-55
-2000
-800
4
3
2
8
2
2
];
Aeq = [];
beq = [];
lb = [0;0;0;0;0;0];
ub = [ ];
c1 = [30 240 130 90 200 60];
[x1,goal1]=linprog(c1, A,b,Aeq,beq,lb,ub)
运行结果
x1 =
4.0000
0
0
2.0878
1.6808
2.0000
goal1 =
764.0695
实例3
MATLAB编程验证
clc;
clear all;
A = [];
b = [];
c1=-[91.4 141.28 95.73 149.89 35.38 91.4];
Aeq = [1 1 1 1 1 1];
beq = 372263;
lb = [50792 199626 3288.37 52173.88 33880.11 0];
ub = [51103.54 inf 3388.53 inf 34380.11 12730.39 ];
[x1,goal1]=linprog(c1, A,b,Aeq,beq,lb,ub);
fprintf('福州市经济效益目标函数单目标规划求解:f1(x) = %.2f n此时的变量取值:X1 = %.2f X2 = %.2f X3 = %.2f X4 = %.2f X5 = %.2f X6 = %.2fn',-goal1,x1(1),x1(2),x1(3),x1(4),x1(5),x1(6));
运行结果
Optimal solution found.
福州市经济效益目标函数单目标规划求解:f1(x) = 47051187.61
此时的变量取值:X1 = 50792.00 X2 = 199626.00 X3 = 3288.37 X4 = 84676.52 X5 = 33880.11 X6 = 0.00
参考内容
[1] CSDN博主ONERYJHHH的文章《利用Excel进行简单线性规划求解》,文章链接为:
https://blog.csdn.net/ONERYJHHH/article/details/114068617