如何开始创建自动周期匹配系统
How to start create an automatic cyclical matching system
我尝试研究并创建一个自动循环匹配算法。该系统的目的是匹配几个想要从当前部门跳槽到其他部门的员工的目的地(有多种原因,例如他们想搬到他们的家乡或照顾他们的家人)。不幸的是,公司协议允许他们在可以从其他部门找到想要接替他们职位的人时调动。在实践中,过去的案例中,员工必须通过在 Facebook 群组上发布他们的目的地来找到他们的合作伙伴,并与两个或更多人切换以自己创建他们的循环轮换,如下所示:
Mr.A 在 X 部门工作,他想转到 Y 部门。
Mr.B 在 Y 部门工作,他想转到 Z 部门。
Mr.C 在 Z 部门工作,他想转到 X 部门。
在用例中,其中一个(假设 Mr.A)必须联系 Mr.B 和 Mr.C 以进行循环移动以实现其目标。我公司有超过 2,000 名员工面临这个问题(我公司大约有 3 万名员工)。
因此,请任何人建议我如何学习并开始创建能够帮助我的朋友轻松完成其目的的 AI 系统或其他算法。
Ps。我有经验和熟悉 python
提前致谢。
在现实生活中,我假设您将通过数据库查询获取数据,因为您谈论的是数千条记录。但是对于一个小样本,让我们把我们的请求放在一个列表中。这个想法是,从一个请求开始,看看我们是否有其他一些人,其目标位置是我们请求的源位置,然后探索每个人,看看我们是否还有更多人,直到找到一个循环。
既然你想要最长的周期,可能还需要其他条件,我们需要计算所有的可能性。然后另一个函数将select最佳选择。
这将找到给定请求的所有可能周期:
from dataclasses import dataclass
@dataclass
class Request():
code : int
who : str
source : str
target : str
days : int
requests = [Request(1,'A','X','Y',3),
Request(2,'B','Y','Z',5),
Request(3,'C','Z','X',2),
Request(4,'D','Y','X',3),
Request(5,'E','W','Y',3)]
cycles = []
def find_cycles(basereq):
global cycles
cycles = []
find_cycles2(basereq, basereq.target, [basereq.code])
print(cycles)
def find_cycles2(basereq, pivot, cycle):
global cycles
for otherreq in [r for r in requests if r.target == basereq.source and r.code not in cycle]:
if otherreq.source == pivot:
cycles.append(cycle + [otherreq.code])
else:
find_cycles2(otherreq, pivot, cycle + [otherreq.code])
>>> find_cycles(requests[0])
[[1, 3, 2], [1, 4]]
>>> find_cycles(requests[1])
[[2, 1, 3]]
>>> find_cycles(requests[4])
[]
我尝试研究并创建一个自动循环匹配算法。该系统的目的是匹配几个想要从当前部门跳槽到其他部门的员工的目的地(有多种原因,例如他们想搬到他们的家乡或照顾他们的家人)。不幸的是,公司协议允许他们在可以从其他部门找到想要接替他们职位的人时调动。在实践中,过去的案例中,员工必须通过在 Facebook 群组上发布他们的目的地来找到他们的合作伙伴,并与两个或更多人切换以自己创建他们的循环轮换,如下所示:
Mr.A 在 X 部门工作,他想转到 Y 部门。
Mr.B 在 Y 部门工作,他想转到 Z 部门。
Mr.C 在 Z 部门工作,他想转到 X 部门。
在用例中,其中一个(假设 Mr.A)必须联系 Mr.B 和 Mr.C 以进行循环移动以实现其目标。我公司有超过 2,000 名员工面临这个问题(我公司大约有 3 万名员工)。
因此,请任何人建议我如何学习并开始创建能够帮助我的朋友轻松完成其目的的 AI 系统或其他算法。
Ps。我有经验和熟悉 python
提前致谢。
在现实生活中,我假设您将通过数据库查询获取数据,因为您谈论的是数千条记录。但是对于一个小样本,让我们把我们的请求放在一个列表中。这个想法是,从一个请求开始,看看我们是否有其他一些人,其目标位置是我们请求的源位置,然后探索每个人,看看我们是否还有更多人,直到找到一个循环。
既然你想要最长的周期,可能还需要其他条件,我们需要计算所有的可能性。然后另一个函数将select最佳选择。
这将找到给定请求的所有可能周期:
from dataclasses import dataclass
@dataclass
class Request():
code : int
who : str
source : str
target : str
days : int
requests = [Request(1,'A','X','Y',3),
Request(2,'B','Y','Z',5),
Request(3,'C','Z','X',2),
Request(4,'D','Y','X',3),
Request(5,'E','W','Y',3)]
cycles = []
def find_cycles(basereq):
global cycles
cycles = []
find_cycles2(basereq, basereq.target, [basereq.code])
print(cycles)
def find_cycles2(basereq, pivot, cycle):
global cycles
for otherreq in [r for r in requests if r.target == basereq.source and r.code not in cycle]:
if otherreq.source == pivot:
cycles.append(cycle + [otherreq.code])
else:
find_cycles2(otherreq, pivot, cycle + [otherreq.code])
>>> find_cycles(requests[0])
[[1, 3, 2], [1, 4]]
>>> find_cycles(requests[1])
[[2, 1, 3]]
>>> find_cycles(requests[4])
[]