max-min fairness 最大最小公平算法

我们总会面临这样的问题,需要给一组用户分配一些稀缺资源,站在资源分配者的角度,他们具有等价的权利获取资源,但实际上,一些用户可能获取较少的资源就能够满足需要,这样看来,他们对资源的获取又不是完全等价的,似乎不适合去平分资源,因此就有了最大最小公平算法。

最大最小公平算法定义如下(不带权):

     1、资源按照需求递增的顺序进行分配;

     2、不存在用户获得的资源超过自身的需求;;

     3、对于未满足的用户,等价分享剩余资源;

算法实现逻辑(不带权):

首先假定用户集合有n个用户,1到n,他们对资源的需求已经排序完毕,满足s1<s2< .... <sn,资源总量为S。

1、将资源S/n分配给需求最小的1用户,这很可能已经超出了用户1的需求;

2、将超出的部分回收,再次将(S-s1)/(n-1)的资源分配给用户2,依次次重复上述过程,直到某一次分给该用户的资源不满足该用户的需求;

3、假定当分配到第k个用户时,分配到的资源不能达到该用户的需求,那么就将剩下的资源,平均分配给未获得资源的所有用户,至此,分配任务结束。

【还有一种说法,是先将资源整体平分,再从小到大,将超出的资源平分给资源没有得到满足的用户,这两中做法的结果是一致的】

举个栗子:

有用户组G,该组中有4个用户,资源需求分别为2.4,3.6,4,5,资源总量为10。避免长篇大论,这里直接以图的形式给出。

上面提到的是最基本的分配原则,但实际上往往并不是这么简单,每个用户往往具有不同的权重,因此就有了分配原则的扩展,带权重的最大最小分配原则。


最大最小公平算法定义如下(带权):


      1、通过权重实现分配的标准化;

  2、不存在用户得到的资源超过自己的需求;

  3、未得到满足的用户,按照权重共享资源;

这里直接举例说明:

有用户组G,该组中有4个用户,资源需求分别为2,4,4,10,权重分别为4,2.5,1,0.5资源总量为16。

1、首先对权重进行标准化,将最小权重设置为1,则权重变为8,5,2,1,总和为16。将总资源分为16等分,四个用户分别得到8,5,2,1。

2、用户1多获得了6份资源,用户2多获得了1份资源,用户3、4资源不满足,因此,将多出来的7份资源再按照权重分配给用户3、4,用户3,4分别再获得7*(2/3)、7*(1/3)份资源;

3、目前为止,用户3获得6.666份资源,用户4获得3.333,将用户3多出的资源再分配给用户4,完成分配。

具体过程如下图所示:

--------muhuizz整理

时间: 2024-08-24 10:44:06

max-min fairness 最大最小公平算法的相关文章

[转] max-min fairness 最大最小公平算法

原文:https://www.cnblogs.com/549294286/p/3935408.html 我们经常面临给一组用户划分稀有资源的问题,他们都享有等价的权利来获取资源,但是其中一些用户实际上只需要比其他用户少的资源.那么我们如何来分配资源呢?一种在实际中广泛使用的分享技术称作"最大最小公平分享".直观上,公平分享分配给每个用户想要的可以满足的最小需求,然后将没有使用的资源均匀的分配给需要'大资源'的用户. 最大最小公平分配算法的形式化定义如下: 资源按照需求递增的顺序进行分配

序列最小最优化算法(SMO)-SVM的求解(续)

在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SMO): 首先回顾一下.我们使用广义拉格朗日函数,将目标函数和限制条件写到一起,然后证明了原始问题能够转化成对偶问题来求解.并且使用KKT条件将对偶问题化简,得到下面的问题(以非线性可分SVM的研究问题作为例子,求解): $\max \limits_{a} \ -\frac{1}{2}\sum_{i=

mysql之count,max,min,sum,avg,celing,floor

写在前面 昨天去青龙峡玩了一天,累的跟狗似的.不过还好,最终也算登到山顶了,也算来北京后征服的第三座山了.这里也唠叨一句,做开发这行,没事还是多运动运动,对自己还是很有好处的,废话少说,还是折腾折腾sql语句吧. 系列文章 mysql之创建数据库,创建数据表 mysql之select,insert,delete,update mysql之group by,order by count 计数,经常和group by语句搭配使用,此时,可以这样理解,分组后,该分组的个数.还以之前的数据表tb_stu

POJ 2914 Minimum Cut 最小割算法题解

最标准的最小割算法应用题目. 核心思想就是缩边:先缩小最大的边,然后缩小次大的边,依此缩小 基础算法:Prime最小生成树算法 不过本题测试的数据好像怪怪的,同样的算法时间运行会差别很大,而且一样的代码替换,居然会WA.系统出错的几率很小,难倒测试系统本题会有错误? 懒得继续测试这道题的系统了,反正算法正确,AC. #include <stdio.h> #include <string.h> #include <limits.h> const int MAX_N = 5

聚合函数:sum,avg,max,min,count;模糊查询;排序

----聚合函数 --做计算 做统计 对null过滤:null是指不知道什么值,所以无法做计算--sum(参数):统计和--avg(参数):求平均值--max(参数):最大值--min(参数):最小值--count(参数):获取满足条件的记录数--1.获取学员总人数select COUNT(Email) from Student--2.获取最大的年龄值 年龄值越大,年龄越小 年龄值越小,年龄越大select MAX(BornDate) from Studentselect min(BornDat

Levenshein distance最小编辑距离算法实现

Levenshein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式. 其中d[i-1,j]+1代表字符串s2插入一个字母,d[i,j-1]+1代表字符串s1删除一个字母,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项. 算法实现(Python): 假设两个字符串分别为s1,

Python实现最小均方算法(lms)

lms算法跟Rosenblatt感知器相比,主要区别就是权值修正方法不一样.lms采用的是批量修正算法,Rosenblatt感知器使用的 是单样本修正算法.两种算法都是单层感知器,也只适用于线性可分的情况. 详细代码及说明如下: '''    算法:最小均方算法(lms)    均方误差:样本预测输出值与实际输出值之差平方的期望值,记为MES    设:observed 为样本真值,predicted为样本预测值,则计算公式:    (转换为容易书写的方式,非数学标准写法,因为数学符号在这里不好

6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化

 1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from emp / 截图: 2 组函数和null在一起 案例:求员工的平均奖金 错误sql: select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3 from emp; 截图: 错误原因: select count(comm

day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数

基础篇 本章大纲: 协程函数 递归函数 匿名函数lambda 内置函数map reduce filter  max min zip sorted 匿名函数lambda和内置函数结合使用 面向过程编程与函数编程 模块与包的使用 re模块内置函数 一,协程函数 注意:函数先定义,后使用.这是函数第一原则.函数主要分为定义,调用 1.1,什么是协程函数 协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种 1.2,协