实验 一 线性规划求解
实验属性: 验证性
实验目的
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.完成实验报告。
根据实验内容,将给定的产品资源数据整理成Excel表格,包括劳动力、设备、原材料A、原材料B的单位需求,以及产品I和产品II的单位利润。将产品决策初始化为0,表示该线性规划问题的初始搜索方案,并将实际资源使用和总获利使用公式进行初始化填写。
Excel初始条件表
通过加载Excel的规划求解加载项,可以方便定义线性规划问题的目标函数和约束条件,从而利用Excel的规划求解功能来解决问题。
Excel中加载规划求解功能
总利润单元格(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
将单元格格式表达式填写完成后,结果如下图

完成所有单元格的表达式定义之后,单击“规划求解”菜单,而后完成相关参数的填写即可完成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进行画图指令可得:
