public class AssignWorkProblem {
创新互联是一家专注于做网站、成都网站制作与策划设计,翁源网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:翁源等地区。翁源做网站价格咨询:13518219792
public static void main(String[] args) {
/*
*测试
**/
int[][] cost=new int[][]{{2,15,13,4},{10,4,14,15},{9,14,16,13},{7,8,11,9}};
System.out.println(Arrays.toString(awpProcedure(cost, 4, 4)));
cost=new int[][]{{12,7,9,7,9},{8,9,6,6,6},{7,17,12,14,12},{15,14,6,6,10},{4,10,7,10,6}};
System.out.println(Arrays.toString(awpProcedure(cost, 5, 5)));
}
/*
* 费用矩阵costMatrix,由于要改变costMatrix的值,clone方法只能对基本类型;
* pnum即为几个人,也是costMatrix的行数,wnum是几个任务,也是costMatrix的列数
* 返回值:没两个数字为一组,表示i,j。如返回[1,1,2,0]表示costMatrix[1][1]、costMatrix[2][0]费用最低
*/
public static int[] awpProcedure(int[][] costMatrix,int pnum,int wnum){
if(pnum1||pnumwnum)
return null; //test n=m
int[][] costC=new int[pnum][]; //clone 一份costMatrix
for(int i=0;ipnum;i++){
costC[i]=costMatrix[i].clone();
}
//每行减去最小的元素
int[] lzeroa=new int[pnum+1]; //记录每行0的个数,lzero[pnum]记录0最少的行标
lzeroa[pnum]=-1;
int i,j;
for(i=0;ipnum;i++){
int lmin=costC[i][0]; //记录每行最小的
for(j=1;jwnum;j++)
lmin=lmincostC[i][j]?costC[i][j]:lmin;
for(j=0;jwnum;j++){
costC[i][j]-=lmin;
lzeroa[i]+=costC[i][j]==0?1:0;
}
}
for(j=0;jwnum;j++){
int cmin=costC[0][j]; //记录每列最小的
for(i=1;ipnum;i++)
cmin=cmincostC[i][j]?costC[i][j]:cmin;
if(cmin==0)continue;
for(i=0;ipnum;i++){
costC[i][j]-=cmin;
lzeroa[i]+=costC[i][j]==0?1:0;
}
}
int[] rzerop;
int whilenum=0;
while(true){
boolean[] lzerob=new boolean[pnum]; //记录某行是否查找过
rzerop=new int[pnum*2]; //记录0元素所在的行列
Arrays.fill(rzerop, -1);
if(awpIsSolution(costC,pnum,wnum,lzeroa.clone(),lzerob,rzerop))
break;
//下面调整矩阵
int[] coverLC=new int[pnum+wnum]; //要被标记的行列,0-pnum-1为行,pnum以后为列
Arrays.fill(coverLC, -1);
//没有找到合适0元素的行做标记
for(i=0;ipnum;i++)
if(lzerob[i]==false)coverLC[i]=i;
//对已经标记的行上的0元素所在的列做标记
for(i=0;ipnum;i++)
if(coverLC[i]!=-1){
for(j=0;jwnum;j++){
if(costC[coverLC[i]][j]==0)
coverLC[pnum+j]=j;
}
}
//对已经标记的列上的已经选中的0元素所在的行做标记
for(j=0;jwnum;j++){
if(coverLC[pnum+j]!=-1){
for(i=0;irzerop.lengthrzerop[i]!=-1;i+=2){
if(rzerop[i+1]==j)
coverLC[rzerop[i]]=rzerop[i];
}
}
}
//确定能找出新最小值的区域,直线覆盖掉没有打勾的行,打勾的列,最终coverLC[x]!=-1就是能选择的数
for(i=0;iwnum;i++){
if(coverLC[pnum+i]!=-1)coverLC[pnum+i]=-1;
else coverLC[pnum+i]=i;
}
//从区域中找出最小元素
int nmin=-1;
for(i=0;ipnum;i++){
if(coverLC[i]==-1)continue;
for(j=0;jwnum;j++){
if(coverLC[pnum+j]==-1)continue;
if(nmin==-1)nmin=costC[i][j];
else nmin=nmincostC[i][j]?costC[i][j]:nmin;
}
}
//打勾的列加上nmin,打勾的行减去nmin,记录0个数的数组作相应变化
for(j=0;jwnum;j++){
if(coverLC[pnum+j]==-1){
for(i=0;ipnum;i++){
if(costC[i][j]==0)lzeroa[i]-=1;
costC[i][j]+=nmin;
}
}
}
for(i=0;ipnum;i++){
if(coverLC[i]!=-1){
for(j=0;jwnum;j++){
costC[i][j]-=nmin;
if(costC[i][j]==0)lzeroa[i]+=1;
}
}
}
whilenum++;
if(whilenum==100){
System.out.println("100次之内矩阵调整没有找到");
return null;
}
}
return rzerop;
}
/*
* 测试矩阵costC是否有解,已经通过变换或者调整得到的矩阵
*/
public static boolean awpIsSolution(int[][] costC,int pnum,int wnum,int[] lzeroa,boolean[] lzerob,int[] rzerop){
int i,j,rzeropi=0;
for(int p=0;ppnum;p++){ //开始按照匈牙利法划去0所在的行列
//查找0元素个数最少的行
for(i=0;ipnum;i++){
if(lzerob[i]||lzeroa[i]1)continue; //如果某行已经查找过或者没有0元素,可能被划去了
if(lzeroa[pnum]!=-1lzeroa[i]lzeroa[lzeroa[pnum]])lzeroa[pnum]=i;
else if(lzeroa[pnum]==-1) lzeroa[pnum]=i;
}
//没有找到足够的不在同一行同一列的0元素,需要对矩阵进行调整,如果lzeroa[pnum]有值,则说明该行一定能找到
if(lzeroa[pnum]==-1){
return false;
}
//划去找到的行中没有被覆盖的0元素所在的行列
for(j=0;jwnum;j++){
if(costC[lzeroa[pnum]][j]!=0)continue;
//第一次找0元素最少的行
if(rzeropi==0){
rzerop[rzeropi++]=lzeroa[pnum];
rzerop[rzeropi++]=j;
lzerob[lzeroa[pnum]]=true; //找到第lzeroa[pnum]行,第j列0元素
//划去所在的行列时 lzeroa做相应的变化
for(i=0;ipnum;i++){
if(i!=lzeroa[pnum]costC[i][j]==0)
lzeroa[i]-=1;
}
lzeroa[pnum]=-1;
break;
}
//找到的0元素是否被划去
for(i=0;irzeropi(lzeroa[pnum]!=rzerop[i]j!=rzerop[i+1]);i+=2);
//如果被划去则找该行下一个0元素
if(irzeropi)continue;
rzerop[rzeropi++]=lzeroa[pnum];
rzerop[rzeropi++]=j;
lzerob[lzeroa[pnum]]=true;
for(i=0;ipnum;i++){
if(i!=lzeroa[pnum]costC[i][j]==0)
lzeroa[i]-=1;
}
lzeroa[pnum]=-1;
break;
}
}
return true;
}
}
运筹学|运筹学真题解析|清华大学运筹学
链接:
?pwd=a3dh 提取码: a3dh
运筹学|运筹学真题解析|清华大学运筹学百度网盘
全国2009年4月高等教育自学考试
运筹学基础试题
课程代码:02375
一、单项选择题(本大题共15小题,每小题1分,共15分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.单纯形法作为一种常用解法,适合于求解线性规划( )
A.多变量模型 B.两变量模型
C.最大化模型 D.最小化模型
2.对科学发展趋势的预测属于( )
A.微观经济预测 B.宏观经济预测
C.科技预测 D.社会预测
3.一般而论,1年内的经济预测属于( )
A.长期预测 B.中期预测
C.短期预测 D.定性预测
4.所谓确定条件下的决策,决策者( )
A.不知道将要面对哪些自然状况
B.知道所面对的部分自然状况
C.面对的只有一种自然状况,即关于未来的状态是完全确定的
D.所面对的是,存在一个以上的自然状况,而决策者不了解其它状态,甚至不完全了解如何把概率(可能性)分配给自然状态
5.可用于风险条件下决策类型的是( )
A.最大最大决策标准 B.最大期望收益值标准
C.最大最小决策标准 D.最小最大遗憾值决策标准
6.在库存管理中,“订货提前期”,亦可称为( )
A.再订货点 B.前置时间
C.前置时间内的需求量 D.经济订货量
7.线性规划的图解法适用于( )
A.只含有一个变量的线性规划问题 B.只含有2~3个变量的线性规划问题
C.含有多个变量的线性规划问题 D.任何情况
8.单纯形法求解时,若求得的基础解满足非负要求,则该基础解为( )
A.可行解 B.最优解
C.特解 D.可行基解
9.在线性规划中,设约束方程的个数为m,变量个数为n,m<n时,可以把变量分为基变量和非基变量两部分,基变量的个数为m个,非基变量的个数为( )
A.m个 B.n个
C.n-m个 D.0个
10.网络计划技术是解决哪类管理问题的科学方法?( )
A.组织生产和进行计划管理 B.环境条件不确定问题
C.具有对抗性局势竞争问题 D.订货与库存问题
11.在网络计划技术中,以结点代表活动,以箭线表示活动之间的先后承接关系,这种图称之为( )
A.箭线式网络图 B.结点式网络图
C.最短路线图 D.最大流量图
12.网络图中,完成一项活动可能最短的时间,称为( )
A.作业时间 B.最乐观时间
C.最保守时间 D.最可能时间
13.在一个网络中,如果从一个起点出发到所有的点,找出一条或几条路线,以使在这样一些路线中所采用的全部支线的总长度最小,这种方法称之为( )
A.点的问题 B.线的问题
C.树的问题 D.最小枝叉树问题
14.任意一个方阵,如果其各行都是概率向量,则该方阵称之为( )
A.固定概率矩阵 B.马尔柯夫向量
C.概率向量 D.概率矩阵
15.反映模拟的不足之处的表述是( )
A.模拟是不精确的,它既不是一个最优化过程,也不能得到一个答案
B.实际观察一个系统可能费用过于昂贵
C.不可能有足够的时间来实际广泛地操作该系统
D.由于难于观察到实际环境,模拟可能是惟一可以利用的方法
二、填空题(本大题共10小题,每小题1分,共10分)
请在每小题的空格中填上正确答案。错填、不填均无分。
16.运筹学是一门研究如何有效地组织和管理________的科学。
17.预测就是对未来的不确定的事件进行________或判断。
18.决策就是针对具有明确目标的决策问题,经过调查研究,根据实际与可能,拟定多个________,然后运用统一的标准,选定最佳(或满意)方案的全过程。
19.库存的作用最基本的一个方面,就是保证工业企业的生产能够正常地、________、均衡地进行。
20.线性规划是一种合理利用资源、合理调配资源的应用数学方法,其基本特点是模型中的目标函数和约束方程都是________。
21.运输问题是线性规划问题中一类具有特殊性质的问题,它通过选择________的运输方案,以达到总的运输费用最低或获得的利润最大等目标。
22.最小枝杈树算法是按把最近的未接点连接到那些________上去的办法来进行的。
23.马尔柯夫研究发现:许多事物未来的发展或演变,往往受该事物________所支配或影响。
24.盈亏平衡分析是一种管理决策工具,它用来说明在________水平上总销量与总成本因素之间的关系。
25.模拟又称________,它的基本思想是构造一个试验的模型,通过对这个模型的运行,获得要研究的系统的必要信息和结果。
三、名词解释题(本大题共5小题,每小题3分,共15分)
26.定性预测
27.后悔值
28.线性规划的目标函数
29.阶石法中的改进指数
30.活动的极限费用
四、计算题Ⅰ (本大题共3小题,每小题5分,共15分)
写出下列每小题的计算过程,否则只给结果分。
31.某木材公司销售房架构件,其中一种构件的销售数据如题31表。试计算:3个月的滑动平均预测值(直接填在表中相应空栏)。
题31表 某木材公司房架构件的销售数据
月份 实际销售额(万元) 3个月滑动平均预测值
1 10
2 12
3 13
4 16
5 19
6 23
32.某唱片公司计划录制一位新歌星的唱片。拟定的价格有A1、A2、A3三个方案,预计唱片进入市场后可能的销售状况(自然状态)也有三种,收益值如题32表。试以最大最大决策标准作出唱片价格的决策选择。
题32表 某唱片公司录制新唱片的收益值表 (单位:元)
33.某公司平均每周需求某配件3900台套,每台套存贮一年费用为6元,每次订货费25元,试求该公司年度最优经济订货批量和全年最佳订货次数。
五、计算题 Ⅱ(本大题共3小题,每小题5分,共15分)
写出下列每小题的计算过程,否则只给结果分。
34.若某工序A由i、j两结点顺序相联,i结点的最早时间为60(小时),j结点的最迟时间为120(小时),工序A本身需要40小时才能完成。试画出该工序的箭线式网络图,并在图上填写出i结点的最迟时间、j结点的最早时间,以及工序A的最早开始和最迟开始时间。
35.某公司拟对新产品生产批量作出决策,现有三种备选方案,未来市场对该产品的需求有两种可能的自然状态N1、N2,收益矩阵如题35表。试画出该问题的决策树,并以决策树法作出最优生产决策。
题35表 某公司新产品生产收益矩阵表 (单位:万元)
36.某公司对过去一年中某种配件的交货时间统计如题36表,试在表中填写出累计概率分布和随机数分布。
题36表 公司交货时间(周)的累计概率分布及随机数分布表
交货时间(周) 频率(%) 累计概率分布(%) 随机数分布
1 23
2 45
3 17
4 9
5 6
六、计算题 Ⅲ(本大题共2小题,每小题7分,共14分)
写出下列每小题的计算过程,否则只给结果分。
37.某企业计划期内要安排生产甲、乙两种产品,有关资源消耗及可获利润如题37表。该厂要获得利润最大化,应如何安排二种产品的生产?建立该问题的线性规划数学模型并用图解法求出最优解。
题37表 某企业产品生产的资源消耗与可获利润表
产品 甲 乙 资源限量
设备台时 1台时/件 1台时/件 300台时
原料A 2千克/件 1千克/件 400千克
原料B 0 1千克/件 250千克
预计获利(元/件) 50 100
38.将题37的线性规划问题转换为标准形式,以原点为基础求出基础可行解,并建立初始单纯形表。
七、计算题Ⅳ(本大题共2小题,每小题8分,共16分)
写出下列每小题的计算过程,否则只给结果分。
39.某工程有7道工序,工序衔接与有关时间数据如题39表,试绘制网络图。
题39表 某工程施工工序资料表
工序名称 A B C D E F G
紧前工序 - - AB AB B C DE
工序时间 2 4 5 4 3 2 4
40.在你为题39所绘制的网络图上标出各结点的时间参数,确定关键路线并用双线(或粗黑线)表示。指明总工期以及A、B、C、D四项活动的最早开始时间。
线性规划出现的下面语句,options=optimoptions('linprog','algorithm','simplex')是什么意思?
首先,我们对这个语句中的各内容进行说明:
optimoptions——是优化选项函数,对于不同的优化函数,其控制内容是略有区别的
linprog——线性规划求解函数名;
algorithm——选择优化算法;系统默认'dual-simplex'(对偶单纯形法算法),'interior-point-legacy'(内点传统算法),它是基于Mehrotra 预测-校正算法 的变体。'interior-point'(内点算法)
simplex——选择单纯形法
所以,这个options优化选项的意思是采用对偶单纯形法算法进行线性规划最优化计算。
根据开始时间分类就行了
model:
sets:
time/1..11/:d;
temp/1..8/:n1;
full/1..3/:n2;
endsets
data:
d=9 9 9 3 3 3 6 12 12 7 7;
enddata
min=@sum(temp:n1);
@sum(full:n2)=4;
@for(temp:@gin(n1));
@for(full:@gin(n2));
@for(time(i):@sum(temp(j)|j#gt#(i-4) #and# j#le#i:n1(j))+@sum(full(k)|k#gt#(i-9) #and# k#ne#(i-4) #and# k#le#i:n2(k))=d(i));
end