1.1python解决数学建模之席位分配问题
def rate_method(p,n):
lst =[] #保存各组席位数
sum_ =sum(p) #人数和
k =0#临时变量
for i in p:
lst.append(i/sum_*n)
k += int(i/sum_*n)
max_ =0
for i in lst:
max_ =i if (i -int(i)) > max_- int(max_)else max_ #小鼠的比较
lst[lst.index(max_)] =int(max_) +1
k +=1
for i in lst:
lst[lst.index(i)] =int(i)
print(lst)
#Q值法:
def q_value(p,n): #p:保存各组人数的列表,n:席位数
lst =[] #保存各组席位数
for i in p:
lst.append(1) #初始席位数都为1
lst_ =lst[:] #临时列表,保存各组Q值
for i in range(n-len(p)):
for i in range(len(p)):
lst_[i] =p[i]*p[i]/(lst[i]+1)/lst[i]
max_index=lst_.index(max(lst_))
lst[max_index] +=1
print(lst)
def d_Hondt(p,n): #p必须以大到小顺序排序
lst =[] #保存各组席位数
a,b=0,0 #保存比值,下一项比值
for i in p:
lst.append(0) #初始席位数都为0
for i in range(n):
for j in range(len(p)):
a =p[j]/(i+1)
if b>a:
break
b =p[j]/(i+2)
lst[j] += 1
if sum(lst) ==n: #放在第一个循环内,是考虑到不太可能只除了1就分配好了
break
print(lst)
p =[432,333,235] #从大到小比较好,为了一次性使用所有方法
n =10
rate_method(p,n)
q_value(p,n)
d_Hondt(p,n)
二:席位分配常用的三种方法:
1.比例分配 :公平而又简单
2.Q值法:(摘自:数学模型-姜启源-)
设两方人数分别 p1 和 p2 ,占有席位分别是 n1 和 n2 ,则两方每个席位代表的人数分别为 p1/n1 和 p2/n2 .显然仅当 p1/n1 = p2/n2 时席位的分配才是公平的.但是因为人数和席 位都是整数,所以通常 p1/n1 ≠ p2/n2 ,这时席位分配不公平,并且 pi ni (i= 1, 2)数值较大的一方吃亏,或者说对这一方不公平.
不妨假设 p1/n1 > p2/n2 ,不公平程度可用数值 p1/n1 - p2/n2 衡量.如设 p1 = 120, p2 = 100, n1 = n2 = 10,则 p1/n1 - p2/n2 = 12 - 10 = 2,它衡量的是不 公平的绝对程度,常常无法区分两种程度明显不同的不公平情况.例如上述双方 人数增加为 p1 = 1 020 和 p2 = 1 000,而席位 n1 , n2 不变时, p1/n1 - p2/n2 = 102 - 100 = 2,即绝对不公平程度不变.但是常识告诉我们,后面这种情况的不公 平程度比起前面来已经大为改善了.
为了改进上述绝对标准,自然想到用相对标准.仍记 p1 , p2 为 A, B 两方的 固定人数, n1 , n2 为两方分配的席位(可变),若 p1/n1 > p2/n2 ,则定义
rA ( n1 , n2 ) =(p1 /n1 - p2 /n2)/( p2 /n2) (1) 为对 A 的相对不公平度.
若 p2 n2 > p1 n1 ,则定义
rB ( n1 , n2 ) =(p2 /n2 - p1/ n1 )/(p1 n1) (2) 为对 B 的相对不公平度
建立了衡量分配不公平程度的数量指标 rA ,rB 后,制定席位分配方案的原 则是使它们尽可能小. 确定分配方案 假设 A, B 两方已分别占有 n1 和 n2 席,利用相对不公平 度 rA 和 rB 讨论,当总席位增加 1 席时,应该分配给 A 还是 B. 不失一般性可设 p1 /n1 > p2 /n2 ,即对 A 不公平.当再分配 1 个席位时,关 于 pi ni (i= 1,2)的不等式可能有以下 3 种情况: 1 . p1/ ( n1 + 1) > p2 /n2 ,这说明即使 A 方增加 1 席,仍然对 A 不公平,所以 这一席显然应分给 A 方. 2 . p1 /(n1 + 1) < p2 /n2 ,说明当 A 方增加 1 席时将变为对 B 不公平,参照 (2)式可计算出对 B 的相对不公平度为 rB ( n1 + 1, n2 ) =p2 /(n1 + 1) /(p1 /n2)- 1 (3)3 . p1 /n1 > p2/ ( n2 + 1),即当 B 方增加 1 席时将对 A 不公平,参照(1)式可 计算出对 A 的相对不公平度为
rA ( n1 , n2 + 1) =p1 (/ n2 + 1) (p2/ n1) - 1 (4)
(不可能出现 p1 /n1 < p2 /( n2 + 1)的情况.为什么 ?) 因为公平分配席位的原则是使得相对不公平度尽可能地小,所以如果 rB ( n1 + 1, n2 ) < rA ( n1 , n2 + 1) (5) 则这 1 席应分给 A 方;反之则分给 B 方.根据(3),(4)两式,(5)式等价于 (p2 ^2) /(n2 (n2 + 1) )< (p1^2 )/ n1 ( n1 + 1) (6) 还不难证明,上述第 1 种情况的 p1 /( n1 + 1) > p2 /n2 也会导致(6)式.于是我们 的结论是:当(6)式成立时增加的 1 席应分给 A 方,反之则分给 B 方.或者,若记 Qi =( p i^2)/ (ni( ni + 1)),i= 1,2,则增加的 1 席应分给 Q 值较大的一方. 上述方法可以推广到有 m 方分配席位的情况.设第 i 方人数为 pi,已占有 ni 个席位,i= 1,2,⋯, m.当总席位增加 1 席时,计算
Qi =(pi^2)/(ni( ni + 1)), i= 1,2,⋯, m (7)
应将这一席分给 Q 值最大的一方.这种席位分配方法称 Q 值法.
3.d’ Hondt 方法:
将各组人数用正整数 n = 1, 2, 3,⋯相除,将所得商数从大到小取前 n个(n 为席位数)
1.1python解决数学建模之席位分配问题的更多相关文章
- Python数学建模-01.新手必读
Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...
- 席位分配问题——惯例Q值法和d'hondt法的MATLAB程序
本篇博文为追忆以前写过的算法系列第四篇 温故知新 本篇于2009年发表于百度博客,当时还没接触CSDN.所以是文学和技术博客混淆,只是这个程序博文訪问量突破2000,有不少网友评论互动.应该 ...
- 余胜威《MATLAB数学建模经典案例实战》2015年版
内容介绍 本书全面.系统地讲解了数学建模的知识.书中结合历年全国大学生数学建模竞赛试题,采用案例与算法程序相结合的方法,循序渐进,逐步引导读者深入挖掘实际问题背后的数学问题及求解方法.在本书案例的分析 ...
- Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨
Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...
- 在数学建模中学MATLAB
为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...
- BITED数学建模七日谈之六:组队建议和比赛流程建议
今天进入数学建模经验谈第六天:组队建议和比赛流程建议 数学模型的组队非常重要,三个人的团队一定要有分工明确而且互有合作,三个人都有其各自的特长,这样在某方面的问题的处理上才会保持高效率. 三个人的分工 ...
- BITED数学建模七日谈之五:怎样问数学模型问题
下面进入数学建模经验谈第五天:怎样问数学模型问题 写这一篇的目的主要在于帮助大家能更快地发现问题和解决问题,让自己的模型思路有一个比较好的形成过程. 在我们学习数学模型.准备比赛的时候,经常会遇到各种 ...
- BITED数学建模七日谈之四:数学模型分类浅谈
本文进入到数学建模七日谈第四天:数学模型分类浅谈 大家常常问道,数学模型到底有哪些,分别该怎么学习,这样能让我们的学习有的放矢,而不至于没了方向.我想告诉大家,现实生活中的问题有哪些类,数学模型就有哪 ...
- BITED数学建模七日谈之三:怎样进行论文阅读
前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...
随机推荐
- 双十一LoanMarket压力测试报告
测试背景 评估服务器资源及几个重要接口的并发性能. 测试需求 由开发提供的5个重要接口: 业务场景 URL 访问量(万) TPS 请求比例(%) 随手借点-首页产品接口 /suishoujiedian ...
- UGUI之用ScrollRect做下拉刷新
在ScrollView下有中层次是scorllview->viewport->content scorllView对象下的ScrollRect组件是关键 ,scorllRect中指定其对 ...
- 自学java_Struts2框架
一.Struts2基础 1.Struts2是有Apache在Struts1和Webwork的基础上研发出的新一代MVC框架. 2.Struts2开发环境的搭建: 打开https://struts.ap ...
- 前端自动化构建工具 gulp 学习笔记 一、
一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...
- JavaScript自定义事件 - createEvent()、initEvent()和dispachEvent()
在学习目标事件的方法的时候,接触到了dispatchEvent()方法.度娘查一查,这是一个事件触发器,事件触发器其实就是触发事件的东西. 通常情况下,我们触发事件都是在交互中触发的事件,例如点击按钮 ...
- vue2-通过axios实现数据请求
1.通过axios实现数据请求 vue.js默认没有提供ajax功能 所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互. 注意,axios本质上就是javascr ...
- C goto
http://c.biancheng.net/view/266.html 当程序遇到 goto 后, 会无条件跳转到标签后出,然后程序按照顺序执行 例子: #include <stdio.h&g ...
- [转]vnpy乱乱谈 02架构
vnpy乱乱谈 02架构 转自:http://101.132.65.227/?p=51 听到架构这个词先不要害怕. 其实这部分内容还是挺简单的. 一般而言, 一个交易系统我们可以简单的分成输入, (系 ...
- docker容器以ROOT账号登录(获取ROOT权限/ROOT密码)
第一步:查看容器的CONTAINER ID docker ps 第二步:获取root权限,例如需要进入的CONTAINER ID为4650e8d1bcca docker exec -ti -u roo ...
- mac mongodb安装
1.前往官网下载.tgz文件 2.解压 tar zxf mongo压缩文件 3.配置环境变量:MAVEN_HOME & bin路径 4.创建data & log文件夹 5.执行安装命令 ...