一:上代码

#比例法

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)

while k!=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)

#d'Hondt 方法

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)

if __name__ =='__main__':

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 为席位数)

python分配问题_1.1python解决数学建模之席位分配问题相关推荐

  1. python解决数学建模发电商机组调度问题

    刚开时数学建模,遇到这个题,这个算法是真的难到我了, 首先,我们的模型(模型不知对否哈!主要是展示代码)是 经过思考很久后,针对该问题写了如下代码 import numpy import random ...

  2. python解决数学建模问题_荐面试问题:2018年全国大学生数学建模竞赛项目

    1. 赛题背景 2. RGV流程图 3. 面试问题 3.1 RGV和CNC是什么? RGV是轨道式自动引导车(Rail Guide Vehicle). CNC是计算机数控机床(Computer Num ...

  3. 【Python爬虫】2022年数学建模美赛B题数据爬取

    2022年数学建模美赛B题数据爬取 背景 2022年的美赛刚刚落下帷幕,该题的一个主要难点在于数据的获取.很多人无法找到有效的数据,或者是无法获取数据. 比如找到了如下米德湖的水文数据,但是发现并没有 ...

  4. 用python和sympy库解决方程组问题_使用Python的SymPy库解决数学运算问题的方法

    摘要:在学习与科研中,经常会遇到一些数学运算问题,使用计算机完成运算具有速度快和准确性高的优势.Python的Numpy包具有强大的科学运算功能,且具有其他许多主流科学计算语言不具备的免费.开源.轻量 ...

  5. 使用 Matlab 解决数学建模问题

    前言 如果你在使用 Matlab 来处理一些数学问题,希望这篇博客可以帮到你.你可以根据所需要的内容查看对应的标题的内容,可以知道在 Matlab 中使用什么函数来解决问题. Matlab 数学建模 ...

  6. Python解决数学建模问题:赛程安排

    五支足球队在同一场地上进行足球赛.进行单循环比赛,也就是说这五支球队的每两支球队在这次比赛中都要结对比赛一次.共进行十场比赛,在连续的十天中每天比赛一场.问:如何安排这次比赛的赛程对各队来说都是公平的 ...

  7. python灰色预测_【数学建模】灰色预测及Python实现

    关键词:灰色预测.Python.pandas.numpy 一.前言 本文的目的是用Python和类对灰色预测进行封装 二.原理简述 1.灰色预测概述 灰色预测是用灰色模型GM(1,1)来进行定量分析的 ...

  8. 数学建模用python分析月消费_数学建模在实际中的应用——以百货商场会员消费为例...

    案  例  AN  LI 摘要: 本文主要研究大型百货商场中会员与非会员的消费特征.为提高商场管理效率,制定科学合理的管理 模型,通过网络数据(附件1)划分出会员在生命周期的各种状态(普通会员.活跃会 ...

  9. Python数学建模—线性规划

    我是猿童学,本文是根据司守奎老师<数学建模算法与程序>的书本内容编写,使用其书中案例,书中的编程语言是MATLAB.Lingo,我将使用Python来解决问题.接下来的一个月我将学习使用P ...

最新文章

  1. 如何成为技术大牛?难也不难
  2. Hibernate(九)HQL查询
  3. Python OOP总结
  4. 求助:国际化中资源文件不在classpath中的问题
  5. 32位x86处理器架构
  6. 【物理女神】谁是中国第一位物理学女博士?
  7. linux tar进行归档压缩和解压
  8. 【读书笔记】非暴力沟通
  9. 青蛙换位置excel_吃青蛙:如何在Excel中创建每日交付的sprint消耗图
  10. java简单数据类型的知识点
  11. 发现两个有趣的CSS3效果
  12. mysql排序检索数据
  13. linux ssh freeradius,配置FreeRADIUS提供AAA服务
  14. 如何用来客商城改造成种草商城
  15. 重复测量资料纵向研究的数据分析-1
  16. 交换机组播风暴_「广播风暴」CISCO交换机如何防止广播风暴 - seo实验室
  17. 说说C/C++编译的那些事儿
  18. ThinkPad E40取消FN功能键设置
  19. 如何治理谐波问题?——有源滤波器
  20. CCIE知识点总结——组播

热门文章

  1. 仿土豆网显示隐藏遮罩案例(HTML、CSS)
  2. 原来awt是可以设置多个frame
  3. python卸载错误_卸载python后导致yum无法使用的解决办法 - Python - 服务器之家
  4. 上传图片并显示缩略图的最简单方法(c#)
  5. 帕雷诺的个展“共此时”在沪开幕 体验真实与虚妄的交错人生
  6. hive实战读书笔记(第9章)Hive性能优化
  7. 又被分治题卡住好几个小时!用最笨的方法搞懂分治法边界,告别死循环!
  8. 【李宏毅2020 ML/DL】P75 Generative Adversarial Network | Conditional GAN
  9. 例29:哥德巴赫猜想
  10. Android自动化测试01-环境安装连接问题及解决