一、题目描述
实验 一 线性规划求解
实验属性: 验证性
实验目的
1.理解线性规划解的基本概念;
2.掌握运筹学软件的使用方法;
3. 掌握线性规划的求解原理和方法。
实验内容
认真阅读下题,利用Excel求解产品I、II的决策变量数值,各资源的实际使用量,以及总获利,实验过程参考书本P52.
产品 资源 | 产品I | 产品II | 资源限额 | 实际资源使用 |
劳动力 | 8 | 4 | 360 | ? |
设备 | 4 | 5 | 200 | ? |
原材料A | 3 | 10 | 250 | ? |
原材料B | 4 | 6 | 200 | ? |
单位利润(元) | 80 | 100 | \ | \ |
产品决策 | ? | ? | \ | \ |
总获利 | ? |
1.记录实验步骤与结果
2.对结果作适当分析(与图解对比);
3.完成实验报告。
二、实验内容
步骤1:数据准备
根据实验内容,将给定的产品资源数据整理成Excel表格,包括劳动力、设备、原材料A、原材料B的单位需求,以及产品I和产品II的单位利润。将产品决策初始化为0,表示该线性规划问题的初始搜索方案,并将实际资源使用和总获利使用公式进行初始化填写。
Excel初始条件表
步骤2:加载规划求解项
通过加载Excel的规划求解加载项,可以方便定义线性规划问题的目标函数和约束条件,从而利用Excel的规划求解功能来解决问题。
Excel中加载规划求解功能
步骤3:定义单元格表达式
总利润单元格(C9)格式为:
C9= C7*C8+D7*D8
实际资源使用单元格(F3、F4、F5、F6)格式依次为:
F3= C3*C8+D3*D8
F4= C4*C8+D4*D8
F5= C5*C8+D5*D8
F6=C 6*C8+D6*D8
将单元格格式表达式填写完成后,结果如下图
步骤4:规划求解参数
完成所有单元格的表达式定义之后,单击“规划求解”菜单,而后完成相关参数的填写即可完成Excel的线性规划操作。
Excel规划求解参数设置
步骤5:结果展示
Excel进行规划求解,将线性规划问题进行计算,并将结果输出到表格中指定的单元格中,结果如图:
Excel求解结果表
三、实验结果分析与实验总结:
可自行结合EXCEL求解与图解法进行比较(可使用MATLAB进行图形描述),说明各特点,并将图解法的步骤总结出来............
附有相关matlab代码(软件支持为matlab R2020a)
x1 = linspace(0, 100, 100); % 定义x1的取值范围
x2 = linspace(0, 100, 100); % 定义x2的取值范围
[X1, X2] = meshgrid(x1, x2); % 创建网格点
% 定义约束条件
constraint1 = 8*X1 + 4*X2 <= 360;
constraint2 = 4*X1 + 5*X2 <= 200;
constraint3 = 3*X1 + 10*X2 <= 250;
constraint4 = 4*X1 + 6*X2 <= 200;
constraint5 = X1 >= 0;
constraint6 = X2 >= 0;
figure;
hold on;
% 绘制约束条件
plot(x1, (360-8*x1)/4, 'r', 'LineWidth', 2);
plot(x1, (200-4*x1)/5, 'g', 'LineWidth', 2);
plot(x1, (250-3*x1)/10, 'b', 'LineWidth', 2);
plot(x1, (200-4*x1)/6, 'm', 'LineWidth', 2);
% 绘制坐标轴和标签
axis([0 100 0 100]);
xlabel('x1');
ylabel('x2');
title('运筹学实验1图解法');
% 添加图例
legend('8x1 + 4x2 <= 360', '4x1 + 5x2 <= 200', '3x1 + 10x2 <= 250', '4x1 + 6x2 <= 200');
hold off;
figure;
hold on;
% 绘制约束条件
plot(x1, (360-8*x1)/4, 'r', 'LineWidth', 2);
plot(x1, (200-4*x1)/5, 'g', 'LineWidth', 2);
plot(x1, (250-3*x1)/10, 'b', 'LineWidth', 2);
plot(x1, (200-4*x1)/6, 'm', 'LineWidth', 2);
% 填充可行域
fill([0, 0, 100, 100], [0, 100, 100, 0], 'y', 'FaceAlpha', 0.3);
% 绘制坐标轴和标签
axis([0 100 0 100]);
xlabel('x1');
ylabel('x2');
title('运筹学实验1图解法');
% 添加图例
legend('8x1 + 4x2 <= 360', '4x1 + 5x2 <= 200', '3x1 + 10x2 <= 250', '4x1 + 6x2 <= 200');
hold off;
使用MATLAB进行画图指令可得: