KDD2019空间众包平台的三维稳定匹配问题-Three-Dimensional Stable Matching Problem for Spatial Crowdsourcing Platforms

KDD2019论文简析:空间众包平台的三维稳定匹配问题-Three-Dimensional Stable Matching Problem for Spatial Crowdsourcing Platforms

研究现状

  • 大多众包平台现有方法通常着重于两种对象worker和user的匹配,让worker前往user所在的位置提供服务,这是二维匹配的问题。然而一些新平台提供的最新服务,例如个性化理发服务(南瓜车app)和乘车共享(滴滴app),需要userworker一起前往第三工作场所workplace完成服务,这是三维匹配的问题,现有众包平台无法很好解决此类匹配问题。
  • Song 等人在论文“Trichromatic Online Matching in Real-Time Spatial Crowdsourcing”中提出了三维匹配策略,即平台通过最大化用户和工作人员的总效用得分来制定计划。这个策略只是最大限度地提高了平台的满意度,但未能全面考虑用户和工作人员的要求
    例如:如下图所示,平台中存在三种类型的点,即user(例如 u1,u2,u3)worker(例如 w1,w2, w3)和workplace(例如 p1,p2,p3),我们将距离的倒数视为效用分数。使用song论文中的策略,我们可以获得以红色显示的全局计划线。在此计划中,将 u3 和 w1 匹配在一起,并分配给放置 p2。但是,显然存在另一个地方 p3 与 u3 和 w1 都更近。那么 u3 和 w1 都不高兴:“显然,我们附近有一个工作场所,为什么平台让我们去更远的地方?!”
    在这里插入图片描述

作者贡献

  • 提出了一个新的稳定匹配问题,称为三维稳定空间匹配(3D-SSM).;
  • 证明了3D-SSM问题是 NP-hard 问题;
  • 提出了基于最大加权独立集基于MWIS 算法、贪婪稳定匹配GSM 算法、有界近似度的动态稳定匹配DSM 算法和路径交换Path Swap 算法,以有效地近似求解 3D-SSM 问题;
  • 通过对真实数据集和合成数据集的广泛实验,验证了所提出的方法的有效性和效率。

概念定义

首先,下表所示为作者在论文中用到的符号定义:

给定 m 个用户,n 个工人和 t 个工作场所,我们将 U 表示为用户集,W 是工人集,P 是工作场所集。每个用户 u∈U 或工作场所 p∈P 由 二维空间位置 lu描述或 lp。每个工人 用三元组 w <lw,cw>描述. 这里 lw 是 二维空间位置,cw 是可以匹配的用户数量。为了方便起见,每个工人 w∈W(或者用户u∈U),我们使用一组 DWw(或者DWu)升序存储所有工作场所 p∈P中p 与 w 之间的距离(或者u与w距离)。同时,对于每个位置 p 使用一组 DLWp(或者 DLUp)来升序存储所有工人 w∈W(或者用户u∈U)从 w或u到 p 之间的距离。

请注意,一位user只能与一位worker匹配workplace。 一个worker在其能力范围内可以匹配多个user,也可以在一个workplace匹配它们。 匹配项(w,u,p)是三元组,这意味着需要工人 w 和用户 u 去工作场所 p 完成服务。

  • 定义 1稳定三元组):
    对于工人 w,用户 u 和工作地点 p,(w,u,p)是稳定三元组的条件是没有其他位置 p’∈P 比 p 离w更近,也没有 p’离 u 比 p 更近,不管 p’是否与其他worker/user匹配。

示例 1:如下表2(a)、(b)、©所示工人,用户和工作场所的信息,例如匹配项(w

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个可能的实现,将NSL-KDD数据集处理成二维方阵: ```python import torch from sklearn.preprocessing import OneHotEncoder # 加载数据集 train_data = torch.load('train_data.pt') test_data = torch.load('test_data.pt') train_labels = torch.load('train_labels.pt') test_labels = torch.load('test_labels.pt') # 将标签转为one-hot编码 enc = OneHotEncoder(categories='auto') train_labels = enc.fit_transform(train_labels.reshape(-1,1)).toarray() test_labels = enc.transform(test_labels.reshape(-1,1)).toarray() # 将训练集和测试集处理为二维方阵 train_data_matrix = train_data.view(-1, 122) test_data_matrix = test_data.view(-1, 122) # 将训练集和测试集的标签从numpy数组转为torch张量 train_labels_tensor = torch.from_numpy(train_labels).float() test_labels_tensor = torch.from_numpy(test_labels).float() ``` 首先,需要将NSL-KDD数据集加载进来。在本示例中,我们假设已经使用了其他方法将数据集转为了torch张量,并将其保存至`train_data.pt`、`test_data.pt`、`train_labels.pt`、`test_labels.pt`四个文件中。 然后,使用sklearn库的OneHotEncoder类将分类标签转为one-hot编码。接下来,使用view方法将训练集和测试集数据变换为二维方阵。在NSL-KDD数据集中,每个样本有122个特征,因此每个样本可以看作一个大小为1x122的矩阵,将其变换为大小为N x 122的矩阵之后,可以将整个数据集看作是一个大小为N x 122的二维方阵。 最后,将训练集和测试集的标签从numpy数组转为torch张量,并使用float()方法将标签数据类型转为浮点数型。这样就完成了NSL-KDD数据集处理成二维方阵的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值