Skip to content

多物品拍卖(最优分配算法)An auction solution to assign multiple items for people

Notifications You must be signed in to change notification settings

jokerkeny/MultiItem-Auction-Assignment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

合租一个月租6000元的三室公寓,谁住主卧谁住次卧谁住客房?每人该付多少钱?
一份价格100元的寿司套餐里,有一个金枪鱼海胆手卷和一个蟹棒手卷,两人各选一个该如何分?
double date住酒店,都想住标间,但酒店只剩一套$200的标间和一套$600豪华双人间,这两对情侣都不愿意住这么贵的豪华双人间,但愿意给标间多付点钱,能否协商入住呢?
……
这些问题经过抽象变成下文的模型,还可以泛化,比如竞拍者可以是两个国家,形成基于比较优势的贸易模式,报价可以是生产率,也可以是负的生产时间。
可以用负的报价表示损失,比如在任务分配问题中,负数报价可以是时间消耗,也可以是要求分得的奖金。

若是对理论不感兴趣,可以直接跳到文末一个简单的在线实现方法

多物品拍卖(最优分配算法)

该算法的目的是把总价为的n个物品更有效的分配给n个人,实现效用最大化以及相对公平的分价。

理论步骤

封闭报价

n个竞拍者封闭报价,给出自己对n个物品的报价,反映n个物品对自己的效用(并不是“认为他人应为该物品付多少钱”,而是自己愿意为单独购买此物品所付的价格,与他人无关),形成报价矩阵

其中第1行即第1个人对n个物品的报价。
...以此类推

因此每行之和,即每个人的对所有物品的报价和,都等于原始n个物品的总价

物品分配

(虚拟)卖家将挑选出最优报价组合,使报价组合的总价格最高
其中代表矩阵中互不相同的n行,即n个不一样的人
物品1将分配给第个人
物品2将分配给第个人
......以此类推

实际支出

n个物品原本的总价是固定的(比方说一个包含可乐、鸡翅、薯条、汉堡的套餐总价为30元)
显然,拍卖后卖家挑选的最优报价组合的总价格 (仅在所有人报价完全一致时取等)

由于本方案的目的是更好的分配物品,拍卖的卖家是虚拟的,无须盈利。所以我们要调整实际支出,使得所有人的实际支出和等于物品的原始总价。

此处给出两种方法,第一种熟悉的Normalize正则化基于效用的比例差异,第二种均匀返现基于效用的绝对值差异,绝对值差异在数学上会更严谨。但严谨程度都取决于竞拍人在报价反映自身效用时的想法。

Normalize正则化

已知为最优报价组合的总价格,为n个物品原始价格总额。则设正则项

设第i个人在最优组合中被分配到了物品j, 则每个人调整后的实际支出为

均匀返现

虚拟卖家把超额利润均分给所有n个竞拍者,即

最终效果

显然,每个人的实际支出都将小于他对该物品的原报价。因此,经过组合团购&拍卖交易后,每个人获得的效用增加了。

数学证明

假设效用可以用货币来衡量。 设第j个物品给第i个人带来的效用(Utility)为,报价为,那么假如报价即为此人购买该物品的支出,则购买物品j给第i个人带来的收益为

假设任何一个竞拍者,对所有物品的报价都真实反映了该物品对自己的效用,则所有物品给该竞拍者带来的收益都相等。即

记为

因竞拍者对n个物品报价之和为原本的总价是固定的,易得

又由式(1)可得

此式说明,由于

对第i个人是固定的常数,那么他对不同物品的**报价**的**绝对值差异**,和不同物品给他带来的**效用**的**绝对值差异**,是相等的。 ### 总效用最大化 以下给出两种思路,证明该分配方案能使所有人得到的总效用最大化。(自然也是帕累托最优)

证明1:

已知报价组合的总价格为

其中是1到n的一个排列,表示第个物品分配给

又由式(2)可得

又由式(3)可知,在分配前已经是固定的了,是一个常数,而就是所有物品分配后给所有人带来的总效用。所以

因此最优报价组合在最大化报价组合的总额的同时,也使得总效用最大化。

证明2:

还有另外一种证明思路,总共有可行报价组合,倘若每个人的支出和报价一致,那么无论怎样组合,第i个人获得的收益始终是
最优报价组合能使报价之和最大,则虚拟卖家获得的“超额收益”能达到最大,虚拟卖家的这部分收益是会全额返还给竞拍者的。
假如把超额收益均匀返现,则第i个人最终获得的实际收益为。所有物品原始价格不变,则报价组合的总额越大,每个人得到的收益越大。

其实除了效用最大化,还有两点需要证明,一是竞拍者为什么会严格根据物品带来的效用差异来报价,即从博弈论的角度证明这是竞拍者的最优策略。二是如何调整实际支出,即怎样把“超额收益”返还给竞拍者最合理(我个人是觉得normalize在物品价差较大时更合理)。

Reference

起初就如引子里所提,由于存在物品分配/分价上的不一致,我基于对拍卖的一些初浅认识,尝试琢磨出这么一套方案,随后意外发现可以数学上证明它能使效用最大化。

不过在我试图提交到github时,搜了搜现有的repo,发现该问题经过假设抽象后,就成了Assignment Problem,并有成熟的算法如Hungarian algorithm来求解该模型的最优化问题。

一个简单的在线实现方法

step 1:每个人准备好自己的报价写进自己私人的google sheet

step 2:过3分钟,大家一起公开自己的报价sheet的只读sharelink。(由于google sheet的修改记录是可见的,可验证3分钟内不存在报价变动。)

step 3:在google colab里打开本repo的auction.ipynb(也可直接点击https://colab.research.google.com/github/jokerkeny/MultiItem-Auction-Assignment/blob/master/auction.ipynb),输入报价并运行。当然也可以直接下载auction.py或auction.ipynb在本地运行。

其中step1 & 2是用于可靠的封闭报价的,sharelink得一起公开,否则存在事先准备好多个googlesheet的作弊漏洞。
如果没法使用google服务,可用加密的excel代替,随后公开密码。 如果在现实中当面报价,Step 1 & 2可直接用纸笔封闭报价代替。

Written with StackEdit.
Convert to github markdown by readme2tex

About

多物品拍卖(最优分配算法)An auction solution to assign multiple items for people

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published