
数学建模公平合理的获奖名额分配
近年来,各高校数学建模活动蓬勃发展。某综合性大学数学建模竞赛参赛人数近两年连年翻番。现行的评奖办法是对所有参赛队伍一视同仁,按两轮评阅成绩由高到低确定前20%的队伍获一等...
近年来,各高校数学建模活动蓬勃发展。某综合性大学数学建模竞赛参赛人数近两年连年翻番。现行的评奖办法是对所有参赛队伍一视同仁,按两轮评阅成绩由高到低确定前20%的队伍获一等奖,处于20%到前45%之间的队伍获二等奖。现行评奖办法的主要问题是可能会挫伤一年级同学和经济、医学、管理类同学的参赛积极性。为了进一步促进数学建模发展,数学建模俱乐部竞赛培训管理中心研究决定从2009年该大学数学建模竞赛开始,采用兼顾学院均衡、兼顾年级均衡的评奖办法。
因此,向大家提出了以下的问题:如果总获奖队伍为100队,如何分配获奖名额?对获奖名额的分配需要兼顾学院均衡,同时也要保护主力学院同学的参赛热情。对获奖名额的分配需要兼顾年级均衡,同时也要保护主力年级同学的参赛热情。通过这样的分配,2009年该大学数学建模竞赛将可能有多少队伍报名参加?您可以从某综合性大学BBS数学工具版、教务处网站等处查阅往年的校内竞赛的相关资料,确定一个公平合理的获奖名额分配方案。当然,这里的公平合理需要大家合理的设定。 展开
因此,向大家提出了以下的问题:如果总获奖队伍为100队,如何分配获奖名额?对获奖名额的分配需要兼顾学院均衡,同时也要保护主力学院同学的参赛热情。对获奖名额的分配需要兼顾年级均衡,同时也要保护主力年级同学的参赛热情。通过这样的分配,2009年该大学数学建模竞赛将可能有多少队伍报名参加?您可以从某综合性大学BBS数学工具版、教务处网站等处查阅往年的校内竞赛的相关资料,确定一个公平合理的获奖名额分配方案。当然,这里的公平合理需要大家合理的设定。 展开
5个回答
2010-12-12
展开全部
一、 问题的提出
我们曾遇到下面一件事,在校学生200名,其中初一年级103名,初二年级63名,初三年级34名,若选20名发放奖学金,按人数比例分配,三个年级分别为10.3,6.3,3.4,将分配名额取整数分配完19人,剩下一个名额按常规分配给余数大的初三年级。于是三个年级分别占有10,7,4个名额。若选21名发放奖学金,按上述方法计算得三个年级分别占有11,7,3个名额,初三年级反而减少1个名额。故初三年级的学生认为不合理。为解决此矛盾,我们提出研究一种更“公平合理”的名额分配模型,再用计算机高级语言编程实现。
二、建立数学模型
设甲,乙双方人数分别为 ,并分别占有 个名额,则双方每个名额所代表的人数分别为 ,显然当
时,名额分配才是合理。但在一般情况下,此二数并不相等。为相对公平,引入“相对误差”。xi ,△= ,x1,x2分别为甲乙的相对误差。则有 当甲、乙各占n1和n2个名额时,总名额增加1个,应分配给甲方还是乙方呢? 不失一般性,设p1>p2,即对甲方不公平,x1(n1,n2)有意义,再分配1个名额时,可能有三种情况:
,说明甲方增加一个名额后,仍对甲不公平,显然新增的1个名额要归甲。
说明甲方增加1个名额后对乙方不公平,这时应有
说明乙方增加1个名额后对甲方不公平,这时应有
(注:在p1>p2的假设下,不可能出现 情形,即在对甲方不公平的情况下,给乙增加1个名额后,仍对乙不公平。)
若x1(n1 ,n2+1)>x2(n1+1 ,n2),则新增的1个名额应分配给甲方,反之分给乙方。由此结合(1)、(2)、(3)式得
即当(4)式成立时,增加1个名额应分配给甲方,反之分给乙方。设 ,则新增的1个名额应分配给P=max{P1 ,P2}的一方。
我们可将问题推广到更一般:Di方的人数为mi,已占有ni≥1(i=1,2,…,k)个名额,当总名额增加1个时,计算 ,则新增的1个名额分配给Pi值中最大的一方。
三、程序设计
用数组存放各方的人数、各方分配到的名额,各方的P值。为使整个分配公平合理,每方至少有一个名额,故先给各方分1个名额。从第k+1个名额起,每1个名额都为新增的名额,通过计算P值后,将这个名额分配给这k个P值中最大的一个,同时修改这个最大的P值,再分配第k+2个名额,直到名额分完为止,此重复工作用循环语句来实现。为判断名额是否分完,用yfrs记已分配的名额数,q为总名额数,当yfrs<q时继续循环。其Authorware主要程序如下:
主程序如上图。
在祝贺词中有一电影图标,播放一舞蹈,表祝贺。选择交互中,有参研人员,课题内容,研究过程,课题软件和结束子程序。
在参研人员子程序中,显示参研人员的相片,当鼠标指向人名时,显示该同志的相片。
在研究过程子程序中,记录了研究过程的时间段的研究内容,同时显示相关资料图片。
在课题软件子程序中,按我们设计的算法,编写了计算程序。为让计算机能接受输入的数据,利用文本交互方式设计了子程序“输入段”如右图:
在“输入各方人数”中有一计算图标,它是计算分配名额的主要程序,其主要内容如下:
zc:=EntryText
len:=CharCount(zc)
zc1:=""
zc2:=""
ii:=1
weizi:=0
repeat while ii<=len
zc1:=SubStr(zc, ii,ii)
if zc1="," then
sz:=Real(zc2)
weizi:=weizi+1
ArraySet(weizi,sz)
zc2:=""
else
zc2:=zc2^zc1
end if
ii:=ii+1
end repeat
fangshu:=weizi
ii:=1
repeat while ii<=fangshu
ArraySet(ii+fangshu,1)
a:=ArrayGet(ii)
b:=1
c:=a*a/(b*(b+1))
ArraySet(2*fangshu+ii,c)
ii:=ii+1
end repeat
yfrs:=fangshu
repeat while yfrs<q
maxp:=0
kl:=1
l:=fangshu+1
repeat with i:=1 to fangshu
if ArrayGet(2*fangshu+i)>maxp then
maxp:=ArrayGet(2*fangshu+i)
l:=fangshu+i
kl:=i
end if
end repeat
b:=ArrayGet(l)+1
ArraySet(l,b)
a:=ArrayGet(kl)
c:=a*a/(b*(b+1))
ArraySet(2*fangshu+kl,c)
yfrs:=yfrs+1
end repeat
nn:=DeleteFile("aa.txt")
repeat with l:=fangshu+1 to 2*fangshu
ss:=ArrayGet(l)
AppendExtFile("aa.txt",ss)
AppendExtFile("aa.txt"," , ")
end repeat
jieguo:=ReadExtFile ("aa.txt")
通过运行程序可得前面的发放奖学金名额分配方案为一、二,三年级分别分配11,6,4个才合理
这是一个模板。你自己看一下。很容易的哦
我们曾遇到下面一件事,在校学生200名,其中初一年级103名,初二年级63名,初三年级34名,若选20名发放奖学金,按人数比例分配,三个年级分别为10.3,6.3,3.4,将分配名额取整数分配完19人,剩下一个名额按常规分配给余数大的初三年级。于是三个年级分别占有10,7,4个名额。若选21名发放奖学金,按上述方法计算得三个年级分别占有11,7,3个名额,初三年级反而减少1个名额。故初三年级的学生认为不合理。为解决此矛盾,我们提出研究一种更“公平合理”的名额分配模型,再用计算机高级语言编程实现。
二、建立数学模型
设甲,乙双方人数分别为 ,并分别占有 个名额,则双方每个名额所代表的人数分别为 ,显然当
时,名额分配才是合理。但在一般情况下,此二数并不相等。为相对公平,引入“相对误差”。xi ,△= ,x1,x2分别为甲乙的相对误差。则有 当甲、乙各占n1和n2个名额时,总名额增加1个,应分配给甲方还是乙方呢? 不失一般性,设p1>p2,即对甲方不公平,x1(n1,n2)有意义,再分配1个名额时,可能有三种情况:
,说明甲方增加一个名额后,仍对甲不公平,显然新增的1个名额要归甲。
说明甲方增加1个名额后对乙方不公平,这时应有
说明乙方增加1个名额后对甲方不公平,这时应有
(注:在p1>p2的假设下,不可能出现 情形,即在对甲方不公平的情况下,给乙增加1个名额后,仍对乙不公平。)
若x1(n1 ,n2+1)>x2(n1+1 ,n2),则新增的1个名额应分配给甲方,反之分给乙方。由此结合(1)、(2)、(3)式得
即当(4)式成立时,增加1个名额应分配给甲方,反之分给乙方。设 ,则新增的1个名额应分配给P=max{P1 ,P2}的一方。
我们可将问题推广到更一般:Di方的人数为mi,已占有ni≥1(i=1,2,…,k)个名额,当总名额增加1个时,计算 ,则新增的1个名额分配给Pi值中最大的一方。
三、程序设计
用数组存放各方的人数、各方分配到的名额,各方的P值。为使整个分配公平合理,每方至少有一个名额,故先给各方分1个名额。从第k+1个名额起,每1个名额都为新增的名额,通过计算P值后,将这个名额分配给这k个P值中最大的一个,同时修改这个最大的P值,再分配第k+2个名额,直到名额分完为止,此重复工作用循环语句来实现。为判断名额是否分完,用yfrs记已分配的名额数,q为总名额数,当yfrs<q时继续循环。其Authorware主要程序如下:
主程序如上图。
在祝贺词中有一电影图标,播放一舞蹈,表祝贺。选择交互中,有参研人员,课题内容,研究过程,课题软件和结束子程序。
在参研人员子程序中,显示参研人员的相片,当鼠标指向人名时,显示该同志的相片。
在研究过程子程序中,记录了研究过程的时间段的研究内容,同时显示相关资料图片。
在课题软件子程序中,按我们设计的算法,编写了计算程序。为让计算机能接受输入的数据,利用文本交互方式设计了子程序“输入段”如右图:
在“输入各方人数”中有一计算图标,它是计算分配名额的主要程序,其主要内容如下:
zc:=EntryText
len:=CharCount(zc)
zc1:=""
zc2:=""
ii:=1
weizi:=0
repeat while ii<=len
zc1:=SubStr(zc, ii,ii)
if zc1="," then
sz:=Real(zc2)
weizi:=weizi+1
ArraySet(weizi,sz)
zc2:=""
else
zc2:=zc2^zc1
end if
ii:=ii+1
end repeat
fangshu:=weizi
ii:=1
repeat while ii<=fangshu
ArraySet(ii+fangshu,1)
a:=ArrayGet(ii)
b:=1
c:=a*a/(b*(b+1))
ArraySet(2*fangshu+ii,c)
ii:=ii+1
end repeat
yfrs:=fangshu
repeat while yfrs<q
maxp:=0
kl:=1
l:=fangshu+1
repeat with i:=1 to fangshu
if ArrayGet(2*fangshu+i)>maxp then
maxp:=ArrayGet(2*fangshu+i)
l:=fangshu+i
kl:=i
end if
end repeat
b:=ArrayGet(l)+1
ArraySet(l,b)
a:=ArrayGet(kl)
c:=a*a/(b*(b+1))
ArraySet(2*fangshu+kl,c)
yfrs:=yfrs+1
end repeat
nn:=DeleteFile("aa.txt")
repeat with l:=fangshu+1 to 2*fangshu
ss:=ArrayGet(l)
AppendExtFile("aa.txt",ss)
AppendExtFile("aa.txt"," , ")
end repeat
jieguo:=ReadExtFile ("aa.txt")
通过运行程序可得前面的发放奖学金名额分配方案为一、二,三年级分别分配11,6,4个才合理
这是一个模板。你自己看一下。很容易的哦
展开全部
不是太难....你好好想下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询