数学建模会议分组问题Word格式文档下载.docx
《数学建模会议分组问题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数学建模会议分组问题Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
第五组
第一次
2、8
7
4、5
1
3、6
第二次
5
4、6
3、8
2、7
第三次
3、7
4
1、8
2、6
第四次
4、8
3
1、5
第五次
1、6
2
关键词:
会议分组;
矩阵分析;
迭代运算;
整数规划;
约束条件
1、问题的重述
会议分组是一个很实际的问题,目前国内外许多重要会议都是以分组形式进行研讨,以便充分交流、沟通。
本文是将相应的参数进行了设置,参会代表N名,M个场次,每场会议L个小组,并且要求每个小组的人数基本均衡。
本文要以使得尽可能让任意两个来自不同地区的代表之间都有见面交流的机会为目的,建立数学模型,并设计求解上述分组模型的有效算法。
同时,设置一些具体数值对已经建立的模型以及算法进行验算,即、、分别取做37、5、5,根据问题1所建立的模型以及问题2设计的算法,给出5场会议的每一场各个组中具体有哪些代表参加的安排方案。
二、问题假设
1、每场次,每个专家都会参加,没有人缺席。
2、每次会议对于专家的吸引力相同。
3、每个会议每个代表有且只能在一个小组内。
三、符号说明
表一符号说明
在第次会议中的第组中
第次会议分组矩阵
和是否在第次会议分在同一组
第次会议开会矩阵
相遇矩阵
所有会议中和是否相遇
异地矩阵
和是否来自同一地区
会议的场次数
代表总数
分组总数
异地代表会面总数
异地代表是否见面
四、模型建立及求解
模型建立
第次会议的分组矩阵为
其中的取值为0或1,表示代表在第次会议中的第组中,表示表示代表不在第次会议中的第组中,由于在每次会议中每个人只能被分到一个组内,则满足如下关系:
又由于要求每组代表的人数尽量均匀,满足如下关系:
构造第次会议开会矩阵
在第次会议中,代表和代表分在同一组时,,否则,为的单位阵。
次会议中代表的会面情况可表示为
其中的元素为
表示代表和代表分在同一组的次数。
构造相遇矩阵
其中,表示代表和代表曾被分到一个组内,否则
根据已知条件构造异地矩阵,其中表示代表和代表来自不同地区,否则。
构造异地代表是否见面函数
其中,表示不同地区的代表和曾被分到一个组内,否则。
使得尽可能让任意两个来自不同地区的代表之间都有见面交流的机会,综上建立的非线性整数变量规划模型为
模型求解
考虑到模型中有变量相乘的形式,用计算运行时间比较长,因此可以采用分部计算来求解模型。
即就是一共有次会议,可以迭代次来计算,每次迭代只计算一次会议的会面情况,每次迭代时更新异地矩阵,将已经会面的代表和设为同一地区,,只计算未见面的代表会面次数的最大值,迭代完毕之后将次结果综合考虑,便得到模型的最优方案。
其计算过程如下:
步骤1:
设置初值
步骤2:
第一次迭代,计算第一次会议代表的会面情况,使得:
且满足如下约束:
步骤3:
重复步骤2,计算第二次会议代表的会面情况,以此类推,第次迭代为
由步骤3求得第次会议代表的会面情况
步骤4:
得出第个代表和第个代表的会面情况
模型检验
将、、分别取做8、5、5,采运行程序下面以表格中前8个代表分为5个小组5次会议来说明模型的正确性。
5、结论
本文综合考虑三个问题以及其内部数学关系,逐步深入地通过建立分组矩阵、开会矩阵,制定约束条件,构造相遇矩阵以及构造异地代表是否见面函数,逐步建立最终的数学模型。
但是用lingo计算大量数据的非线性模型运行时间太长,无法获得运算结果,因此采用分部计算的形式,逐步迭代来进行模型求解(程序均为自行编写,迭代的输出结果详见附录),故将问题1中的、、(分别取做37、5、5)取为8、5、5,从而验证了算法的正确性,并得到最终的会议安排方案。
参考文献
[1]王沫然,《matlab与科学计算》,电子工业出版社,第三版
[2]同济大学数学系,《线性代数》,高等教育出版社,第五版
[3]
附录
Lingo代码
model:
sets:
peo/r1..r8/;
meet/m1/;
group/g1..g5/;
link(peo,peo):
y,s;
encount(meet,peo,group):
x;
endsets
max=@sum(link(I,J):
s(I,J)*y(I,J));
@for(link(I,J):
@bin(y(I,J)));
@for(encount(I,J,K):
@bin(x(I,J,K)));
@for(meet(I):
@for(peo(J):
@sum(group(K):
x(I,J,K))=1));
@for(group(K):
@sum(peo(J):
x(I,J,K))>
=1));
x(I,J,K))<
=2));
@for(peo(I):
y(I,J)<
=@sum(meet(K):
@sum(group(L):
x(K,I,L)*x(K,J,L)))));
data:
s=00001111
00001111
11110001
11111111;
enddata
End
meet/m2/;
00001110
00001011
00000111
11100001
11010001
10111111;
meet/m3/;
00001100
00001010
00000011
11000001
10110001
10011111;
meet/m4/;
@for(me