Page 175 - 《软件学报》2020年第12期
P. 175

李博扬  等:新型时空众包平台中的在线三维稳定匹配问题                                                      3841


         是永远存在的      [22] ,但是这个算法的解是不公平的.文献[23−25]提出了多种稳定婚姻的衡量指标,以此来求得更
         公平的解.文献[26]提出算法来研究如何求出稳定婚姻的个数.稳定婚姻问题具有多种扩展版本,在其中一类扩
         展中,男人和女人之间的偏序可以是不完整的                [27] 、或者偏序中存在并列      [28] 、或者既不完整又存在并列       [29] .虽然
         这些研究都可以获得稳定匹配的结果,但这些问题都关注与二维的稳定匹配,不能推广到三维匹配问题,且不具
         备处理在线场景的能力.

         3    基础算法

             本节中,我们提出一个基于贪心的基础算法.由于不能准确获知工人和用户的到达顺序和地理位置,我们采
         用延迟匹配的思想,当用户提出的任务到达最长等待时间时,开始对任务进行处理.对于用户来讲,合适的工人
         可能出现在任务发布之后的某一时刻,所以当任务过期之前的所有时刻,都可能出现合适的工人.因此在延迟匹
         配的过程中,尽可能为用户扩大候选的工人集合,从而提高匹配的效果.在匹配过程中,根据用户到工作点的距
         离由近及远地遍历每个闲置的工作点;对于每个工作点,再根据距离遍历每个未匹配的工人.一旦找到满足稳定
         的元组,那么将该元组作为用户的匹配结果.
             延迟匹配算法的伪代码如算法 1 所示.算法的输入是动态到达的用户集 U 和工人集 W 以及静态的工作点
         集 P,算法的输出是任务的匹配结果集 M,其中的每一个元素都是稳点元组.在初始状态,匹配结果 M 为空(第 1
         行),将所有工作点设置为闲置状态(第 2 行).对于时刻 t,取出已经到达最长等待时间的用户集 U t 和已经到达且
         未被分配任务的工人集 W t (第 3 行、第 4 行).对于 U t 中的每个用户 u,根据 D u 由近及远地查找每个闲置工作点
         p,再根据 DW p 由近及远地查找 W t 中的工人 w,一旦(w,u,p)构成一个稳定元组,那么将(w,u,p)作为一个分配结果
         加入到 M 中,将 w 从 W t 和 W 中移除,并将 p 被更新为占用状态,也将从 P t 中移除(第 5 行~第 19 行).每个被处理
         过的用户,不论是否被匹配,都将从 U 中移除(第 19 行).因为如果这个用户没有被匹配,也到达了最长等待时间,
         用户的任务也会过期.当循环结束时,当前时刻需要被匹配的用户都已被处理,算法将为下一时刻的用户进行匹
         配(第 21 行).
             算法 1.  延迟匹配算法.
             输入:用户集 U,工人集 W,工作点集 P;
             输出:全局任务匹配结果集 M.
             1.   M=∅;
             2.   所有工作点处于闲置状态
             3.   For (当前时刻 t)
             4.      取出到达最长等待时间的用户集 U t 、当前未分配任务的工人集 W t 、当前闲置的工作点集 P t
             5.      For (每一个在 U t 的用户 u)
             6.         For (每一个工作点 p∈D u 并且 p∈P t )
             7.            For (每一个工人 w∈DW p 并且 w∈W t )
             8.               If ((w,u,p)是稳定的)
             9.                  将(w,u,p)加入到 M
             10.                将 w 从 W t 和 W 中移除
             11.                 更新 p 为占用状态
             12.                break;
             13.              End if
             14.           End for
             15.           If (p 被更新为占用状态)
             16.              将 p 从 P t 中移除
             17.              break;
   170   171   172   173   174   175   176   177   178   179   180