云南大学数学系《运筹学通论》课程上机实验报告

合集下载

运筹学上机实验报告

运筹学上机实验报告

学生实验报告实验课程名称《运筹学》开课实验室计算机中心第二机房学院专业学生姓名学号开课时间 2015 至 2016 学年第二学期实验一中小型线性规划模型的求解与Lingo软件的初步使用一、实验目的了解Lingo软件的基本功能和简单线性规划模型的求解的输入和输出结果。

二、实验内容1.在Lingo中求解下面的线性规划数学模型:max z=2x1+3x2x 1+2x2≤84x1≤164x2≤12x 1, x2≥02.在Lingo中求解教材P55习题(1)的线性规划数学模型;3.建立教材P42例8的数学模型并用Lingo求解;4.建立教材P57习题的数学模型并用Lingo求解。

三、实验要求1.给出所求解问题的数学模型;2.给出Lingo中的输入;3.能理解Solution Report中输出的四个部分的结果;4.能给出最优解和最优值;5.能理解哪些约束是取等式和哪些约束取不等式。

四、实验步骤五、结论1.该线性规划模型的目标函数值为14,该线性规划经过一次迭代求得最优解,有2个总决策变量,包括目标函数一共有4个约束,最优解的变量X1=4,X2=2 。

2. 该线性规划模型的目标函数值为2,该线性规划经过2次迭代求得最优解,有4个总决策变量,包括目标函数一共有4个约束,最优解的变量X1=0、x2=8、x3=0、x4=-6。

3.该线性规划模型的目标函数值为-2,该线性规划经过0次迭代求得最优解,有3个总决策变量,包括目标函数一共有4个约束,最优解的变量x1=4、x2=1、x3=9。

4.该线性规划模型的目标函数值为150,该线性规划经过4次迭代求得最优解,有6个总决策变量,包括目标函数一共有7个约束,最优解的变量x1=60、x2=10、x3=50、x4=0、x5=30、x6=0。

实验二中小型运输问题数学模型的Lingo软件求解一、实验目的熟悉运输问题的数学模型,掌握简单运输问题数学模型的Lingo软件求解的方法,掌握解报告的内容。

运筹学上机实验报告

运筹学上机实验报告

运筹学实验报告一、实验项目名称:运筹学综合实验二、实验目的:1、熟悉WinQSB的用户界面2、学习建立数学模型的方法3、掌握用WinQSB求解运筹学的方法及步骤4、解读计算机运行结果,结合所学知识给出文字定性结论三、实验环境:WinQSB软件,计算机四、实验内容及步骤:①该项工程从施工开始到全部结束的最短周期;②如果引道混凝土施工工期拖延10天,对整个工程进度有何影响;③若装天花板的施工时间从12天缩短到8天,对整个工程进度有何影响;④为保证工期不拖延,装门这项作业最晚从哪一天开始开工;⑤如果要求该项工程必须在75天内完工,是否应采取措施及应从哪些方面采取措施。

2、分析题目并决定运用软件3、根据分析运用WinQSB软件进行求解1)、点击开始—程序—WinQSB—PERT-CTM,启动程序2)、点击file----New Problem----建立新问题,如图(1)(2)所示,填写问题名称,项目数量,问题类型,输入模式及时间分布类型,点击OK(1)(2)i3)、求解第①问:由题输入数据,结果如下图(3)所示(3)4)数据输入完毕后,求解问题的答案,点击Solve and Analyze-----Solve Critical Path,软件运行结果如图(4)所示(4)由图可知问题①的答案及从施工开始到全部结束的最短路线为80天。

为进一步得出其关键路线,可分别点击图标,得出下图(5)(6)(5)(6)6)、同样步骤求解第②问,即引道混凝土施工工期拖延10天的情况下,输入数据得到如下图图(7)所示结果(7)(8)(9)(10)由上图(7)(8)(9)(10)可知当引道混凝土工期拖延10天时,其最短周期还是80天,关键路线不变,即无影响。

7)、同样步骤求解第③问,即装天花板时间由12天缩短为8天情况下,输入数据得到如下图所示结果(11)(12)(13)(14)由图(11)(12)(13)(14)可知,当装天花板的施工时间从12天缩短为8天时,其最短周期由原来的80天缩短为76天,提前4天。

运筹学实践教学报告范文(3篇)

运筹学实践教学报告范文(3篇)

第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。

运筹学上机实验报告

运筹学上机实验报告

西安邮电大学运筹学上机实验报告院系:_______经济与管理学院____班级:________电子商务1201_____姓名:_________邓博__________学号:________02122023________实验一.线性规划与对偶理论线性规划启动程序:开始/程序/WinQSB/Liear and Integer Programming/File/New Problem输入变量数3、约束数3、目标最大化(默认)、表格输入形式(默认)、非负连续变量(默认)。

单击O K 弹出数据编辑窗口,并输入数据执行菜单命令:Solve and Analyze有3求解方式:选择第1项Solve the Problem,得运行结果选择第2 项Solve and Display Steps,由最终单纯表可直接见到最优解和最优值x1=4,x2=1,x3=9目标函数值为z=-2.对偶理论Max z=x1+2x2+4x3+2x43x1+9x3+5x4≤156x1+4x2+x3+7x4≤304x2+3x3+4x4≤205x1+x2+8x3+3x4≤40xj≥0,j=1,2,3,4(1)建立新问题,如下图:(2).求对偶问题,如图:分析结果实验二.目标规划与整数规划目标规划执行“程序/WinQSB/Goal Programming/File/New Problem”单击“OK”生成表格,生成类似于数据编辑窗口,但包括偏差变量均为x 的下标变量。

执行菜单命令“File/Variable Names”,修改偏差变量名单击“OK”,返回数据窗口并按数学模型输入数据执行菜单命令:“Solve and Analyze/Sove the Problem”得运行结果由运行结果可见,该解为无界解。

整数规划启动程序:开始/程序/WinQSB/Liear and Integer Programming/File/New Problem输入变量数6、约束数7、目标最小化、表格输入形式(默认),单击OK弹出数据编辑窗口更改变量名称:Edit/Variable Names执行菜单命令:Solve and Analyze/Solve the Problem,得运行结果由运行结果可见:(1)最优生产方案是使用第3种生产方式生产3500kg,总成本13500元(其中变量成本10500元,固定成本3000元)。

运筹学上机实践心得体会

运筹学上机实践心得体会

随着现代科学技术的飞速发展,运筹学作为一门应用广泛的交叉学科,已经渗透到了各个领域。

在大学期间,我有幸选修了运筹学这门课程,并通过上机实践深入学习了运筹学的基本原理和应用方法。

以下是我对运筹学上机实践的一些心得体会。

一、理论与实践相结合的重要性运筹学是一门理论与实践相结合的学科。

在课堂学习中,我们学习了线性规划、整数规划、网络流、决策分析等基本理论。

然而,这些理论知识的掌握仅仅停留在书本上,对于实际问题的解决能力还是有限的。

通过上机实践,我们可以将理论知识与实际问题相结合,提高解决实际问题的能力。

在上机实践中,我深刻体会到了理论与实践相结合的重要性。

首先,通过编程实现算法,可以让我们更加直观地理解算法的原理和步骤。

例如,在学习线性规划时,我们通过编写代码求解线性规划问题,可以清楚地看到目标函数、约束条件以及算法的迭代过程。

这种直观的理解有助于我们更好地掌握线性规划的基本原理。

其次,上机实践可以帮助我们检验和巩固课堂所学知识。

在编写代码的过程中,我们会遇到各种问题,如算法错误、数据异常等。

这些问题需要我们运用所学知识进行分析和解决。

通过不断尝试和修正,我们不仅能够巩固已学的知识,还能够提高自己的编程能力。

二、编程能力的提升运筹学上机实践对编程能力的要求较高。

在实践过程中,我逐渐认识到编程能力的重要性。

以下是我对编程能力提升的一些体会:1. 熟练掌握编程语言:在上机实践中,我们通常会使用一种或多种编程语言进行算法实现。

因此,熟练掌握编程语言是进行运筹学上机实践的基础。

我通过学习Python、MATLAB等编程语言,提高了自己的编程能力。

2. 熟悉算法实现:运筹学中的各种算法都有相应的编程实现方法。

在上机实践中,我们需要了解并掌握这些算法的实现方法。

例如,在求解线性规划问题时,我们需要了解单纯形法、内点法等算法的编程实现。

3. 优化代码结构:在编写代码时,我们需要注意代码的可读性、可维护性和可扩展性。

运筹学上机实验报告

运筹学上机实验报告

一、 线性规划问题(利用excel 表格求解)1212121212max 1502102310034120..55150,0z x x x x x x s t x x x x =++≤⎧⎪+≤⎪⎨+≤⎪⎪≥⎩解:1 将光标放在目标函数值存放单元格(C7),点击“工具”,出现下图:2 点击“规划求解”出现下图3.在可变单元格中选择决策变量单元格B2,C2,出现下图。

4. 点击“添加”,出现下图。

5.输入约束条件6. 输入约束条件,点击“确定”,出现下图。

7. 点击“选项”,出现下图。

8. 点击确定,回到规划求解对话框,出现下图。

9.点击“求解”,出现下图‘10.点击“确定”,回到Excell 工作表,出现下图。

在工作表中,给出了最优解情况:120,30,max 6300x x z === 。

二、 求解整数线性规划(excel 表格处理) 某公司从两个产地A1,A2将物品运往三个销地B1,B2,B3,各产地的产量、各销地的销量和各产地运往各销地的每件物品的运费如下表所示:应如何调运,是的总运费最小? 1、建立模型分析:这个问题是一个线性规划问题。

故应该确定决策变量、目标函数及约束条件。

设X ij 表示从产地A i 调运到B j 的运输量(i=1,2;j=1,2,3),根据问题的要求由分析可得如下模型:minW =6X 11+4X12+6X 13+6X 21+5X 22+5X 23 (所需费用最低)X 11+ X 12+ X 13=200; X 21+ X 22+ X 23=300;约束条件 X 11+ X 21=150;X 12+ X 22=150; X 13+ X 23=200; X ij >=0(i=1,2;j=1,2,3).建立规划求解工作表,如下图所示:1、在可变单元格(B4:G4)中输入初始值(1,1,1,1,1, 1)2、在上图有关单元格输入如下公式单元格地址公式B5 =B3+C3+D3B6 =E3+F3+G3B7 =B3+E3B8 =C3+F3B9 =D3+G3B10 =B2*B3+C2*C3+D2*D3+E2*E3+F2*F3+G2*G33、求最佳组合解:●单击[office开始]→[excel选项] →[加载项] →[转到]→[线性规划加载项] →[确定] →[数据] →[规划求解]出现如下对话窗:●在“设置目标单元格”窗口,输入B10。

大学生运筹学实训报告范文

大学生运筹学实训报告范文

一、引言运筹学是一门应用数学的分支,它运用数学模型、统计方法和计算机技术等工具,对复杂系统进行优化和决策。

为了更好地理解和掌握运筹学的理论和方法,提高实际操作能力,我们开展了大学生运筹学实训。

以下是本次实训的报告。

二、实训目的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. 实训过程中,我们要敢于尝试,勇于创新,不断提高自己的实践能力。

反圈法(最小支撑树)

反圈法(最小支撑树)
End
五、调试过程
1.程序代码
function tr=mintree(a) n=length(a); flag=1; k=n-1; e(1)=1; e(2:n)=0; for s=1:k k=k-1; min=inf; for j=1:n for i=1:n if(e(i)==1&e(j)==0&min>a(i,j)&a(i,j)~=0) col=j; row=i;
3 v2 4
4 v3 3
1 v5
v7 总权重 w(T ) 为 17。
对于没有最小支撑树的情况,可以将(d)问题中的 v1v4 , v4 v5 , v3v4 , v5v6 ,对应的边 抹去,易知其不存在最小支撑树。代入数据,运行程序如下。 输入:
4
云南大学数学与统计学院实验教学中心
b=[0 3 6 0 0 0 0;3 0 4 0 0 0 7;6 4 0 0 5 0 3;0 0 0 0 0 2 0; 0 0 5 0 0 0 6;0 0 0 2 0 0 0;0 7 3 0 6 0 0]; tr=mintree(b); 输出: 没有最小支撑树 因为将 v4 , v6 独立出来,所以图 G 并不连通,故不能得到最小支撑树。
2.运行窗口
输入: a=[0 3 1 1 0 0 0;3 0 2 0 0 5 0;1 2 0 0 2 0 0;2 0 0 0 2 0 3; 0 0 2 2 0 3 2;0 5 0 0 3 0 4;0 0 0 3 2 4 0]; tr=mintree(a); 输出: tr = 0 0 1 1 0 0 0 0 0 2 0 0 0 0 1 2 0 0 2 0 0 2 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 3 0 0 0 0 0 0 2 0 0
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.实验目的
通过使用prim算法(反圈法)求解最小支撑树问题.
二.实验内容
设图G =(V,E),其生成树的顶点集合为U。

①.把v0放入U。

②.在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成
树。

③.把②找到的边的v加入U集合。

如果U集合已有n个元素,则结束,否
则继续执行②。

其算法的时间复杂度为O(n^2)
Prim算法实现:
图用邻接阵表示,路径不通用无穷大表示,在计算机中可用一个大整数代
替。

采用堆,可以将复杂度降为O(m log n),如果采用Fibonaci堆可以将
复杂度降为O(n log n + m)
三.使用环境
Windows XP 环境下C语言编写
四.调试过程
程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INFINITY 1000
#define max_name 50
#define max_vertex_num 50
typedef char vertex[max_name];//顶点名字串
typedef int adjMatrix[max_vertex_num][max_vertex_num];//邻接距阵
typedef struct
{vertex adjvex; //邻接矩阵
int lowcost; //权值
}close[max_vertex_num];//定义一个结构以便在后面closedge 使用
typedef struct//定义图
{
vertex vexs[max_vertex_num]; //顶点集
adjMatrix arcs; //边
int vexnum,arcnum;//点个数,边个数
}MGraph;
int LocateVex(MGraph G,vertex u)//若G中存在顶点u,则返回该点在图中位置;
否则返回其他信息;
{
int i;
for(i=0;i<G.vexnum;++i)
if(strcmp(u,G.vexs[i])==0)
return i;
return 1;
}
void CreateGraph(MGraph &G)
{
int i,j,k,w;
vertex v1,v2;
printf("输入无向图顶点数和边数: \n");
scanf("%d %d",&G.vexnum,&G.arcnum);
printf("输入各顶点的值:\n", G.vexnum);
for(i=0;i<G.vexnum;++i) //构造顶点集
scanf("%s",&G.vexs[i]);
for(i=0;i<G.vexnum;++i) //初始化邻接方阵
for(j=0;j<G.vexnum;++j)
G.arcs[i][j]=INFINITY;
printf("输入一条边依附的顶点及权值:\n",G.arcnum);//输入一条边依附的顶
点及权值
for(k=0;k<G.arcnum;++k)
{
scanf("%s%s%d",v1,v2,&w);
i=LocateVex(G,v1);//v1在图中位置
j=LocateVex(G,v2);//v2在图中位置
G.arcs[i][j]=G.arcs[j][i]=w; //置于对称弧
}
}
int minimum(close c,MGraph G)//求出下一个节点第k个顶点
{
int i=0,j,k,min;
min=INFINITY;
//初始化
k=-1;
for(j=0;j<=G.vexnum;j++)//求最小
if(c[j].lowcost<min&&c[j].lowcost>0)
{
min=c[j].lowcost;
k=j;
}
return k;
}
void PRIM(MGraph G,vertex u)
{
int i,j,k=0;
close closedge;//一个结构
bool isbreak=false;
k=LocateVex(G,u);//u在图中位置返回G.vexs[i]中下标
for(j=0;j<=G.vexnum;++j) //辅助数组初始化closedge从O 开始
{
if(j!=k)//没有自己到自己的
closedge[k].lowcost=0;
strcpy(closedge[j].adjvex,u);
closedge[j].lowcost=G.arcs[k][j];//列
}
int flag[1000];
flag[0]=0;
int count=1;
for(i=1;i<G.vexnum;++i)
{
k=minimum(closedge,G);
if(k==-1)
{
isbreak=true;
break;
}
printf("%s-%s%d\n",closedge[k].adjvex,G.vexs[k],G.arcs[k][LocateVex(G,closedg
e[k].adjvex)]); //输出生成树的边
closedge[k].lowcost=0; // 第k个顶点并入U集
flag[count]=k;
count++;
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j]<closedge[j].lowcost)//新顶点并入U后重新选择最小边
{
strcpy(closedge[j].adjvex,G.vexs[k]);
closedge[j].lowcost=G.arcs[k][j];
}
}
if(isbreak)
{
printf("此图不连通,无最小支撑树!\n访问过的点为:\n");
for(i=0;i<count;i++)
{
printf("%s ",G.vexs[flag[i]]);
}
printf("\n");
}
}
void main()
{
MGraph G;
CreateGraph(G);
printf("最小生成树的各条边为: \n");
PRIM(G,G.vexs[0]);
}
五.实验结果
此处給出两个赋权图, 用prim算法找出赋权图上的最小树.
图1结果如下
:
注释 :图1中有7个点10条边, 最后结果输出最小生成树为:
图1最小权值W=5+1+2+3+4+1= 16
1133 2
5
4
6
6 5
2
4
1
3 1 图1.
7
1 1133 2
5
4 6
6 5
2
4
4
1 7
3
1 图1.
7
1
图2结果如下
:
注释:图2中有7个点10条边,但较图1相比图2中(4-5)(5-6)无边相連,固输入权值为0.
所以结果出现了两个連通子图.整个图2不連通,无最小支撑
树. 结果如下:
六.实验总结1
1
3
3
2
5
4
6
5
2
1 3
1 7
1
图2 1
1
3
3
2
5
4
6
6
5
2
1
7
3
1 7
1
图2
1.无向图的生成树就是从图的边集中选择一些边,使得这些边构成一个连通无环图,也就是树。

如果给每一条边加一个权,所有生成树中权和最小的生成树称为最小生成树。

普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法是利用MST性质构造最小生成树的算法.此次实验图的存储用的是邻接矩阵的形式.Prim算法的解答结果有时候不是唯一的,例如在此次实验中
(4-6)(5-6)两条边权值都等于4,但由于输入的顺序,最后打印的结果是(4-6)这个条边组成的边,其实包含(5-6)这条边的最小支撑树也是正确的结果.所以结果和对图遍历时的顺序有关,但是必须注意的是所有的最小生成树其网络代价和是一样的.
2.实验中由于以前在<<数据结构>>课程中学过給定连通图算法实现最小支撑树,后来变化了要求,如果一开始給出的是不连通图,我的程序就实现不了了, 但此程序是基于连通来写的,后来调程序废了很多时间,想了一些办法,最后在k=LocateVex(G,u)这里找到突破口,打印出了遍历的结果.
3.在实验中出现了很多错误,例如对C++不熟悉,在进行编译以前就出错。

一些初值
也出现了错误.后来改正了错误.
4.加强理论学习和上机实践,感觉两方面自己都做的不好,望今后能做的更好些。

相关文档
最新文档