哈工大运筹学实验报告实验一,实验二
- 格式:pdf
- 大小:3.88 MB
- 文档页数:14
《运筹学》实验报告成绩:班级:学号:姓名:实验一、线性规划(25分)一、实验目的:安装WinQSB软件,了解WinQSB软件在Windows环境下的文件管理操作,熟悉软件界面内容,掌握操作命令;利用WinQSB软件求解线性规划问题。
二、实验内容:安装与启动软件;建立新问题,输入模型,求解模型,结果的简单分析。
三、操作步骤:(1)安装与启动WinQSB软件(5分)1.安装双击Setup.exe,弹出窗口如下图0—1所示:图0—1输入安装的目标文件夹,点Continue按钮,弹出窗口如图0—2所示:图0—2输入用户名和公司或组织名称,点Continue按钮进行文件的复制,完成后弹出窗口如图0—3:图0—3显示安装完成,点“确定”退出。
WinQSB软件安装完毕后,会在开始→程序→WinQSB中生成19个菜单项,分别对应运筹学的19个问题。
如图0—4所示:图0—42.启动在开始菜单中选择Linear and Integer Programming,运行后出现启动窗口如下图0—5所示:图0—5(2)建立线性规划问题并输入模型(5分)选题:P32例八,题目如下:miz z=-3x1+x2+x3x1-2x2+x3≤11-4x1+x2+2x3≥3-2x1 +x3=1x1,x2,x3≥0输入数据,如下图所示:、(3)分析模型并求解(5分)计算结果:a) 运用软件计算的具体过程:b)计算的最终结果如下:(4)实验结果分析(5分)最优解=[4,1,9],即x1=4,x2=1,x3=9最优值=-2,min z=-2四、实验中遇到的主要问题及解决方法(5分)起初未能正确的Variable Type选择导致了计算结果出现错误,最后仔细的检查了操作过程,改变了Variable Type,得出了正确的结果。
实验二、运输问题(25分)一、实验目的:熟悉运用WinQSB软件求解运输问题和指派问题,掌握操作方法。
二、实验内容:求解实际中某一运输问题,建立、输入并求解模型,结果的简单分析。
运筹学综合实验报告本次实验中,我们使用了运筹学的方法来解决了一个经典的优化问题,即整数线性规划问题(Integer Linear Programming,简称ILP)。
一、实验目的本次实验的主要目的是熟悉ILP的求解过程,了解ILP在实际问题中的应用,以及掌握使用现代优化软件Gurobi来求解ILP的方法。
二、实验原理1. 整数线性规划问题整数线性规划问题是在所有线性规划问题中的一个非常重要的子集。
它将优化目标函数的线性组合与整数限制相结合。
一个典型的ILP问题可以被描述为:最大化(或最小化)目标函数:\max(\min) \sum_{j=1}^{n}c_j x_j满足如下的约束条件:\sum_{j=1}^{n}a_{ij} x_j \leq b_i,\ i=1,2,\cdots,mx_j \geq 0,\ j=1,2,\cdots,nx_j \in Z,\ j=1,2,\cdots,nx_j表示自变量,c_j表示目标函数中的系数,a_{ij}表示第i个约束条件中x的系数,b_i表示约束条件的右侧常数,m表示约束条件的数量,n表示变量的数量。
最后两个约束条件要求自变量只能是整数。
2. Gurobi优化软件Gurobi是一个商业优化软件,经过多年的发展,已成为当前最流行的数学优化软件之一。
Gurobi支持多种数学优化方法,包括线性规划、非线性规划、混合整数规划、二次规划等。
Gurobi使用了现代算法来实现高效的求解效果,是工业和学术界备受推崇的优化软件。
三、实验内容1. 利用Gurobi求解整数线性规划问题我们使用Gurobi来求解如下的整数线性规划问题:\max\ \ 2x_1 + 3x_2 + 7x_3满足如下的约束条件:x_1 + x_2 + x_3 \leq 6x_1 - x_2 + x_3 \leq 4x_1, x_2, x_3 \in Z,\ x_1 \geq 0,\ x_2 \geq 0,\ x_3 \geq 0我们使用Python代码来实现该问题的求解过程:```pythonimport gurobipy as gbmodel = gb.Model("integer linear programming")# Create variablesx1 = model.addVar(vtype=gb.GRB.INTEGER, name="x1")x2 = model.addVar(vtype=gb.GRB.INTEGER, name="x2")x3 = model.addVar(vtype=gb.GRB.INTEGER, name="x3")# Set objectivemodel.setObjective(2*x1 + 3*x2 + 7*x3, gb.GRB.MAXIMIZE)# Add constraintsmodel.addConstr(x1 + x2 + x3 <= 6)model.addConstr(x1 - x2 + x3 <= 4)# Optimize modelmodel.optimize()# Print resultsprint(f"Maximum value: {model.objVal}")print(f"x1 = {x1.x}")print(f"x2 = {x2.x}")print(f"x3 = {x3.x}")```运行该代码,得到的输出结果为:```Optimize a model with 2 rows, 3 columns and 6 nonzerosVariable types: 0 continuous, 3 integer (0 binary)Coefficient statistics:Matrix range [1e+00, 1e+00]Objective range [2e+00, 7e+00]Bounds range [0e+00, 0e+00]RHS range [4e+00, 6e+00]Found heuristic solution: objective 9.0000000Presolve time: 0.00sPresolved: 2 rows, 3 columns, 6 nonzerosVariable types: 0 continuous, 3 integer (0 binary)Root relaxation: objective 1.500000e+01, 2 iterations, 0.00 secondsNodes | Current Node | Objective Bounds | WorkExpl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time0 0 15.00000 0 1 9.00000 15.00000 66.7% - 0sH 0 0 14.0000000 15.00000 7.14% - 0s0 0 15.00000 0 1 14.00000 15.00000 7.14% - 0sExplored 1 nodes (2 simplex iterations) in 0.03 secondsThread count was 4 (of 4 available processors)Solution count 2: 14 9Optimal solution found (tolerance 1.00e-04)Best objective 1.400000000000e+01, best bound 1.400000000000e+01, gap 0.0000%Maximum value: 14.0x1 = 2.0x2 = 4.0x3 = 0.0```经过Gurobi的求解,我们得到了最大值为14,同时x_1=2, x_2=4, x_3=0时取到最优值。
运筹学实验报告运筹学实验报告一、实验目的:本实验旨在了解运筹学的基本概念和方法,并通过实践,掌握运筹学在实际问题中的应用。
二、实验过程:1.确定运筹学的应用领域:本次实验选择了物流配送问题作为运筹学的应用领域。
2.收集数据:我们选择了一个小型企业的物流配送数据进行分析,并将数据录入到计算机中。
3.建立模型:根据所收集的数据,我们建立了一个代表物流配送问题的数学模型。
4.运用运筹学方法进行求解:我们运用了线性规划的方法对物流配送问题进行求解,并得到了最优解。
5.分析结果:通过分析最优解,我们得出了一些有关物流配送问题的结论,并提出了一些优化建议。
三、实验结果:通过运用运筹学方法对物流配送问题进行求解,我们得到了一个最优解,即使得物流成本最低的配送方案。
将最优解与原始的配送方案进行对比,我们发现最优解的物流成本降低了20%,节省了货物运输的时间,减少了仓储成本。
四、实验结论:通过本次实验,我们了解了运筹学的基本概念和方法,并成功应用运筹学方法解决了物流配送问题。
通过分析最优解,我们发现采用最优解可以降低物流成本,提高配送效率。
因此,我们得出结论:运筹学在物流配送问题中的应用具有重要意义,可以帮助企业降低成本、提高效率。
五、实验心得:通过本次实验,我对运筹学有了更深入的了解。
通过实践应用运筹学方法,我明白了运筹学的实用性和价值。
在以后的工作中,我会更加注重运筹学方法的应用,以解决实际问题,提高工作效率。
本次实验不仅增强了我的动手实践能力,也培养了我分析和解决问题的能力。
我将继续学习和探索运筹学的知识,为将来的工作打下坚实的基础。
第1篇一、引言运筹学作为一门应用数学分支,广泛应用于经济管理、工程技术、军事决策等领域。
本报告旨在通过运筹学实践教学,验证理论知识在实际问题中的应用效果,提高学生的实践能力和创新能力。
以下是对本次实践教学的总结和反思。
二、实践教学内容1. 线性规划问题本次实践教学选择了线性规划问题作为研究对象。
通过建立线性规划模型,我们尝试解决生产计划、资源分配等实际问题。
- 案例一:生产计划问题某公司生产A、B两种产品,每单位A产品需消耗2小时机器时间和3小时人工时间,每单位B产品需消耗1小时机器时间和2小时人工时间。
公司每天可利用机器时间为8小时,人工时间为10小时。
假设A、B产品的利润分别为50元和30元,请问如何安排生产计划以获得最大利润?- 建模:设A产品生产量为x,B产品生产量为y,目标函数为最大化利润Z = 50x + 30y,约束条件为:\[\begin{cases}2x + y \leq 8 \\3x + 2y \leq 10 \\x, y \geq 0\end{cases}\]- 求解:利用单纯形法求解该线性规划问题,得到最优解为x = 3,y = 2,最大利润为240元。
- 案例二:资源分配问题某项目需要分配三种资源:人力、物力和财力。
人力为50人,物力为100台设备,财力为500万元。
根据项目需求,每种资源的需求量如下:- 人力:研发阶段需20人,生产阶段需30人;- 物力:研发阶段需30台设备,生产阶段需50台设备;- 财力:研发阶段需100万元,生产阶段需200万元。
请问如何合理分配资源以满足项目需求?- 建模:设人力分配量为x,物力分配量为y,财力分配量为z,目标函数为最大化总效用U = x + y + z,约束条件为:\[\begin{cases}x \leq 20 \\y \leq 30 \\z \leq 100 \\x + y + z \leq 500\end{cases}\]- 求解:利用线性规划软件求解该问题,得到最优解为x = 20,y = 30,z = 100,总效用为150。
运筹学实验报告一实验一:线性规划【例l】某制药厂用甲、乙两台机器生产A、B两种药物。
每种药物要经过两道工序,在甲机器上搅拌,在乙机器上包装。
生产每千克药物所需的加工时间以及机器1周可用于加工的总时间如下表1所示。
已知生产每千克药物A的利润是30元,B是25元,问应如何安排1周的生产计划才能使工厂获利最大?表 1 两种药物在各机器上所需加工时间及各机器可用于加工的总时间(1)写出数学模型,建立新问题、输入选项(电子表格、变量取非负连续)、输入数据、存盘、求解模型、结果存盘、观察结果。
(2)将电子表格格式转换成标准模型。
(3)将结果复制到Excel或Word文档中。
(4)分析结果。
解:(1)从已知条件写出该问题的数学模型:max Z=30x1+25x2;2x1+4x2<=40;3x1+2x2<=30;x1>=0,x2>=0.建立新问题、输入选项(电子表格、变量取非负连续)、输入数据、存盘、求解模型、结果存盘、观察结果:求解模型过程Simplex Tableau -- Iteration 1X1 X2 Slack_C1 Slack_C2Basis C(j) 30.0000 25.0000 0 0 R. H. S. RatioSlack_C1 0 2.0000 4.0000 1.0000 0 40.0000 20.0000Slack_C2 0 3.0000 2.0000 0 1.0000 30.0000 10.0000C(j)-Z(j) 30.0000 25.0000 0 0 0Simplex Tableau -- Iteration 1X1 X2 Slack_C1 Slack_C2Basis C(j) 30.0000 25.0000 0 0 R. H. S. RatioSlack_C1 0 2.0000 4.0000 1.0000 0 40.0000 20.0000Slack_C2 0 3.0000 2.0000 0 1.0000 30.0000 10.0000C(j)-Z(j) 30.0000 25.0000 0 0 0Simplex Tableau -- Iteration 3X1 X2 Slack_C1 Slack_C2Basis C(j) 30.0000 25.0000 0 0 R. H. S. RatioX2 25.0000 0 1.0000 0.3750 -0.2500 7.5000X1 30.0000 1.0000 0 -0.2500 0.5000 5.0000C(j)-Z(j) 0 0 -1.8750 -8.7500 337.5000(2)将电子表格格式转换成标准模型。
一、引言运筹学是一门应用数学的分支,它运用数学模型、统计方法和计算机技术等工具,对复杂系统进行优化和决策。
为了更好地理解和掌握运筹学的理论和方法,提高实际操作能力,我们开展了大学生运筹学实训。
以下是本次实训的报告。
二、实训目的1. 理解运筹学的基本概念、原理和方法;2. 学会运用运筹学解决实际问题;3. 提高团队协作和沟通能力;4. 培养独立思考和创新能力。
三、实训内容1. 线性规划(1)实训目的:通过线性规划实训,掌握线性规划问题的建模、求解和结果分析。
(2)实训内容:以生产问题为例,建立线性规划模型,运用单纯形法求解最优解。
2. 整数规划(1)实训目的:通过整数规划实训,掌握整数规划问题的建模、求解和结果分析。
(2)实训内容:以背包问题为例,建立整数规划模型,运用分支定界法求解最优解。
3. 非线性规划(1)实训目的:通过非线性规划实训,掌握非线性规划问题的建模、求解和结果分析。
(2)实训内容:以旅行商问题为例,建立非线性规划模型,运用序列二次规划法求解最优解。
4. 网络流(1)实训目的:通过网络流实训,掌握网络流问题的建模、求解和结果分析。
(2)实训内容:以运输问题为例,建立网络流模型,运用最大流最小割定理求解最优解。
5. 概率论与数理统计(1)实训目的:通过概率论与数理统计实训,掌握概率论与数理统计的基本概念、原理和方法。
(2)实训内容:以排队论为例,建立概率模型,运用排队论公式求解系统性能指标。
四、实训过程1. 组建团队,明确分工;2. 针对每个实训内容,查阅相关资料,了解理论背景;3. 根据实际问题,建立数学模型;4. 选择合适的算法,进行编程实现;5. 对结果进行分析,总结经验教训。
五、实训成果1. 理解了运筹学的基本概念、原理和方法;2. 掌握了线性规划、整数规划、非线性规划、网络流和概率论与数理统计等运筹学工具;3. 提高了团队协作和沟通能力;4. 培养了独立思考和创新能力。
六、实训心得1. 运筹学是一门实用性很强的学科,它可以帮助我们解决实际问题,提高工作效率;2. 在实训过程中,我们要注重理论联系实际,将所学知识应用于实际问题的解决;3. 团队协作和沟通能力在实训过程中至关重要,要学会与团队成员共同进步;4. 实训过程中,我们要敢于尝试,勇于创新,不断提高自己的实践能力。
运筹学实验总结引言:运筹学是一门综合了数学、经济学和工程学等多学科知识的学科,它通过建立数学模型和运用各种优化方法,帮助我们在现实问题中寻找最优解决方案。
在这学期的运筹学课程中,我们进行了一系列实验。
这些实验不仅加深了对运筹学理论的理解,还提供了一种应用运筹学方法解决问题的实践平台。
在本文中,我将总结我参与的运筹学实验,并分享我的体会和收获。
实验一:线性规划问题求解在这个实验中,我们学习了线性规划的基本概念和求解方法。
我选择了一个典型的生产调度问题作为实验题目。
通过建立数学模型,并运用线性规划软件,我成功地解决了这个问题。
通过这个实验,我深刻理解了线性规划问题的本质,以及如何利用线性规划方法找到最优解。
实验二:整数规划问题求解整数规划是线性规划的扩展,它在决策问题中更加实用。
在这个实验中,我选择了货物配送路线问题作为研究对象。
通过构建整数规划模型,并运用求解软件,我得到了最佳的货物配送方案。
这个实验不仅对我的数学建模能力提出了要求,还培养了我的实际问题解决能力。
实验三:动态规划动态规划是一种重要的优化方法,它广泛应用于最优化问题的求解。
在这个实验中,我们学习了动态规划的基本原理和设计思想。
我选择了旅行商问题作为研究对象,通过建立递推关系和寻找最优子结构,我成功地解决了该问题。
这个实验让我意识到了动态规划方法的强大威力,同时也对我的算法设计能力提出了更高的要求。
实验四:模拟退火算法模拟退火算法是一种全局搜索优化算法,具有很强的应用能力。
在这个实验中,我选择了旅行商问题作为研究对象,通过模拟退火算法的迭代和优化,我得到了一个较好的解。
通过这个实验,我掌握了模拟退火算法的基本原理和实现过程,也了解到了算法的优越性。
实验五:遗传算法遗传算法是一种模拟自然选择和遗传机制的优化算法。
在这个实验中,我选择了装箱问题作为研究对象。
通过运用遗传算法的交叉、变异和适应度选择,我得到了一个较好的装箱方案。
这个实验不仅对我的算法设计能力提出了更高的要求,还让我意识到了遗传算法的创新性和解决复杂问题的能力。
运筹学实验报告2《运筹学》课程实验第 2 次实验报告实验内容及基本要求:实验项目名称:运输问题实验实验类型: 验证每组人数: 1实验内容及要求:内容:运输问题建模与求解要求:能够写出求解模型、运用软件进行求解并对求解结果进行分析实验考核办法:实验结束要求写出实验报告,并于实验结束一周内(5月29日)上交。
实验结果:(附后)内容主要包括以下3点:1. 问题分析与建立模型,阐明建立模型的过程(一定要给出模型)。
2. 实验步骤,包含使用什么软件以及详细的实验过程。
3. 实验结果及其分析。
成绩评定:该生对待本次实验的态度 ?认真 ?良好 ?一般 ?比较差。
本次实验的过程情况 ?很好 ?较好 ?一般 ?比较差对实验结果的分析 ?很好 ?良好 ?一般 ?比较差文档书写符合规范程度 ?很好 ?良好 ?一般 ?比较差综合意见: 成绩指导教师签名刘长贤日期 2012.5.31实验背景:某农民承包了五块土地工206亩,打算种小麦、玉米和蔬菜三种农作物。
各种农作物的计划播种面积(亩)以及每块土地各种不同农作物的亩产量(公斤)如表1所示。
问如何安排种植计划,可使总产量最高,表1 每块土地种植不同农作物的亩产数量土地块别计划1 2 34 5 播种作物种类面积小麦 500 600650 1050 80086850 800 700 900 95070 玉米1000 950 850550 70050 蔬菜44 32 46 36 48土地亩数一(问题分析与建立模型 1.问题分析:总产量为目标函数maxZ;计划播种面积和土地亩数是约束条件;每块土地种植的不同农作物的亩产数量是决策变量2数学模型:目标函数1112131415MaxZ,500x,600x,650x,1050x,800x,2122232425 850x,800x,700x,900x,950x,1000x31,950x32,850x33,550x34,700x35约束条件x,x,x,x,x,861112131415x,x,x,x,x,702122232425x,x,x,x,x,503132333435x,x,x,36112131x,x,x,48122232x,x,x,44132333x,x,x,32142434 x,x,x,46152535xi,j,0,i,1,2,3,4,5;j,1,2,3二(实验步骤1.根据数学模型和题目要求,使用Excel软件建立如下表格2.单元格名称指定:选中要指定名称的单元格,点击“插入-名称-定义/指定”,则可对上图中的“亩产数量(=Sheet1!$C$3:$G$5),种植量(=Sheet1!$C$8:$G$10),实际面积(=Sheet1!$H$8:$H$10),计划面积(=Sheet1!$J$8:$J$10),实际亩数(=Sheet1!$C$11:$G$11),土地亩数(=Sheet1!$C$13:$G$13),总产量(=Sheet1!$L$12)”进行名称的指定3.单元格赋值:(1)利用“求和”函数对“实际面积”和“实际亩数”相应的单元格进行赋值,例如H8=SUM(小麦),C11=SUM(土地1)(2)利用“SUMPRODUCT”函数对“总产量”对应的单元格L12进行赋值,由于之前指定了单元格名称,故总产量=SUMPRODUCT(亩产数量,种植量) (3)由于当前各决策变量的值为0,故相应的实际面积,实际亩数,总产量为0 4.单击“工具”>“加载宏”>“规划求解”设置相关参数,如下图目标单元格为总产量可变单元格为每块土地种植的不同农作物对应的单元格约束条件为实际面积=计划面积;实际亩数=计划亩数5.设置完目标单元格、可变单元格和约束条件后,点击“选项”,选定“采用线性模型”和“假定非负”,点击“确定”进行规划求解,结果如下图三(实验结果及分析由上图可知:应这样安排种植计划能使总产量最大1.在土地1上种植34亩玉米和2亩蔬菜2.在土地2上种植48亩蔬菜3.在土地3上种植44亩小麦4.在土地4上种植32亩小麦5.在土地5上种植10亩小麦和36亩玉米。
运筹学实验报告一、实验目的:通过实验熟悉单纯形法的原理,掌握matlab循环语句的应用,提高编程的能力和技巧,体会matlab在进行数学求解方面的方便快捷。
二、实验环境:Matlab2012b,计算机三、实验内容(包含参数取值情况):构造单纯形算法解决线性规划问题Min z=cxs.t. Ax=bxj>=0,j=1,…,n函数功能如下:function[S,val]=danchun(A1,C,N)其中,S为最优值,Val为最优解,A1为标准形式LP问题的约束矩阵及最后一列为资源向量(注:资源向量要大于零),A1=[A+b];C是目标函数的系数向量,C=c;N为初始基的下标(注:请按照顺序输入,若没有初始基则定义N=[])。
先输入A1,C,N三个必要参数,然后调用danchun(A1,C,N)进行求解。
在此函数中,首先判断N的长度是否为空,若为空,则flag=1,进入初始解问题的迭代求值,添加辅助问题,构建单纯形表,求g所对应的RHS值,若其>0,则返回该问题无解,若其=0,则返回A1,C,N三个参数,继续构造单纯形表求解。
A1为经过变换后的系数及资源向量,C为单纯形表的第一行,N为经过辅助问题求解之后的基的下标。
否则,直接构建单纯形表,对该问题进行求解,此时flag=2,多次迭代后找到解。
另外,若在大于零的检验数所对应的系数均小于零时,会显示“此问题无界”。
若找到最优解和最优值时,会输出“val”和“S=”以及具体数值。
四、源程序(在matlab中输入edit后回车,写在.M文件中,并保存为danchun.M)function[S,val]=danchun(A1,C,N)if(length(N)==0)gN=zeros(1,length(A1(:,1)));gC=[-C,gN,0];%原文题的检验数的矩阵G=[zeros(1,length(C)),-ones(1,length(gN)),0];val=zeros(1,length(C));%val为最优解;for i=(length(C)+1):length(C)+length(A1(:,1))%生成基变量gN(i-length(C))=i;endNn=gN;%%%%%%%ll=zeros(1,length(N));%比值最小原则%生成除了最上端两行的表的矩阵gb=A1(:,length(C)+1);A1(:,length(C)+1)=[];l=zeros(length(gN),length(gN));gA=[A1,l,gb];for i=1:length(gb)gA(i,gN(i))=1;endfor i=1:length(gN)%J为基本可行基所对应的检验数J(i)=G(gN(i));endfor i=1:length(gN)%找到基本可行基的检验数,将其赋值为0 if(J(i)~=0)G=G-(J(i)/gA(i,gN(i)))*gA(i,:);endendflag=1;elseflag=2;A=A1;Z=[-C,0];%单纯形表的第一行val=zeros(1,length(C));%val为最优解;ll=zeros(1,length(N));%比值最小原则end%%初始解问题while flag==1for i=1:length(gN)%J为基本可行基所对应的G的检验数J(i)=G(gN(i));JZ(i)=Z(gN(i));%JZ为基本可行基所对应的Z的检验数endfor i=1:length(gN)%找到基本可行基的检验数,将其赋值为0 if(J(i)~=0)G=G-(J(i)/gA(i,gN(i)))*gA(i,:);Z=Z-(JZ(i)/gA(i,gN(i)))*gA(i,:);endG1=G;%G1为检验数G1(:,length(G1))=[];D=max(G1);%找到检验数的最大值if(D<=0)%检验数都小于0if(G(length(G))>=1)disp('此情况无解');flag=0;elseif(G(length(G))>=0)for i=1:length(gN)if(max(gN)<=length(A1(1,:)));flag=2;for j=1:length(Nn)a=Nn(1);gA(:,a)=[];Z(a)=[];endA=gA;N=gN;break;endendendendelse%检验数大于0for i=1:length(G)if(G(i)==D)%找到最大的那个检验数所对应的元素for j=1:length(gN)if(gA(j,i)>0)ll(j)=gA(j,length(G))/gA(j,i);%求比值elsell(j)=10000;endendd=min(ll);for k=1:length(ll)%找到进基和离基if(ll(k)==d)gN(k)=i;gA(k,:)=gA(k,:)/gA(k,i);for m=1:k-1gA(m,:)=-(gA(m,i)/gA(k,i))*gA(k,:)+gA(m,:);endfor n=k+1:length(ll)gA(n,:)=-(gA(n,i)/gA(k,i))*gA(k,:)+gA(n,:);endbreak;endendendendendendwhile(flag==2)for i=1:length(N)%J为基本可行基所对应的检验数J(i)=Z(N(i));endfor i=1:length(N)%找到基本可行基的检验数,将其赋值为0if(J(i)~=0)Z=Z-(J(i)/A(i,N(i)))*A(i,:);endendZ1=Z;%Z1为检验数Z1(:,length(Z1))=[];D=max(Z1);%找到检验数的最大值if(D<=0)%检验数都小于0disp('已找到最优解和最优值')for i=1:length(N)val(N(i))=A(i,length(Z));endS=Z(length(Z));disp('val');disp(val);flag=0;else%检验数大于0for i=1:length(Z)if(Z(i)==D)%找到最大的那个检验数所对应的元素for j=1:length(N)if(A(j,i)>0)ll(j)=A(j,length(Z))/A(j,i);%求比值elsell(j)=10000;endendd=min(ll);if(d==10000)disp('此问题无界')flag=0;break;endfor k=1:length(ll)%找到进基和离基if(ll(k)==d)N(k)=i;A(k,:)=A(k,:)/A(k,i);for m=1:k-1A(m,:)=-(A(m,i)/A(k,i))*A(k,:)+A(m,:);endfor n=k+1:length(ll)A(n,:)=-(A(n,i)/A(k,i))*A(k,:)+A(n,:);endbreakendendendendendend五、运行结果与数据测试参考例题:例1:Min z=3x1+x2+x3+x4s.t. -2x1+2x2+x3=43x1+2x+x4=6Xj>=0,j=1,2,3,4在workspace中写入,形式如下:>> A=[-2 2 1 0 43 1 0 1 6]A =-2 2 1 0 43 1 0 1 6>> C=[3 1 1 1]C =3 1 1 1>> N=[3 4]N =3 4>> danchun(A,C,N)已找到最优解和最优值val0 2 0 4ans =6例2:初始解问题Min z=5x1+21x3s.t. x1-x2+6x3-x4=2x1+x2+2x3-x5=1xj>=0,j=1,…,5在workspace中写入,形式如下:>> A=[1 -1 6 -1 0 21 12 0 -1 1]A =1 -1 6 -1 0 21 12 0 -1 1 >> C=[5 0 21 0 0]C =5 0 21 0 0>> N=[]N =[]>> danchun(A,C,N)已找到最优解和最优值val0.5000 0 0.2500 0 0ans =7.7500六、求解实际问题(即解决附件中的实验题目)实验题目列出下列问题的数学模型,并用你自己的单纯形算法程序进行计算,最后给出计算结果。
《运筹学(二)》实验报告2011~2012学年第二学期学院(部):姓名/学号:实验目的:加强学生分析问题的能力,锻炼数学建模的能力。
利用所学知识,设计动态规划和决策树算法,并完成程序设计。
实验内容:题1(动态规划):(投资问题)现有资金5百万元,可对3个项目进行投资。
假设2#项目的投资不得超过3百万元,1#和3#项目的投资均不得超过4百万元,3#项目至少要投资1百万元。
投资5年后每个项目预计可获得的收益由表1给出。
问如何投资可获得最大的收益。
表1实验过程参考答案:建立模型:MATLAB程序代码:题2:在某单人理发店顾客到达为普阿松流,平均到达间隔为20分钟,理发时间服从负指数分布,平均时间为15分钟。
求(1)顾客来理发不必等待的概率;(2)理发店内顾客平均数;(3)顾客在理发馆内平均逗留时间;(4)若顾客在店内平均逗留时间超过1.25小时,则店主将考虑增加设备及理发员,问平均到达率提高多少时店主才做这样考虑呢?MATLAB程序代码:function[PO,Ls,Lp,Ws,Wq]=model6lenda=input('请输入到达速率:');mhu=input('请输入服务速率:');rho=lenda/mhu;PO=1-rho;Ls=lenda/(mhu-lenda);Lq=Ls-rho;Ws=1/(mhu-lenda);Wq=Ws-1/mhu;POLsLqWsWq结果分析:>> model6请输入到达速率:1/20请输入服务速率:1/15PO =0.2500Ls =3.0000Lq =2.2500Ws =60.0000Wq =45.0000ans =0.25001.PO=0.252.Ls=33.Ws=604.lenda=4/75(人/分钟)5.题3:某企业为了扩大某产品的生产,拟建设新厂。
据市场预测,产品销路好的概率为0.7,销路差的概率为0.3。
有三种方案可供企业选择:方案一、新建大厂,需投资300万元。