微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何开始创建自动循环匹配系统

如何解决如何开始创建自动循环匹配系统

我尝试研究并创建一个自动循环匹配算法。该系统的目的是匹配几个想要从当前部门搬到其他部门的员工的目的地(有几个原因,例如他们想搬到他们的家乡或照顾他们的家人)。不幸的是,公司协议允许他们在可以找到其他部门的想要担任其职位的人时搬家。在实践中,在过去的案例中,员工必须通过在 Facebook 群组上发布他们的目的地来找到他们的合作伙伴,然后与两个或更多人切换以自己创建循环轮换,如下所示:

A 先生在 X 部门工作,他想转到 Y 部门。

B 先生在 Y 部门工作,他想搬到 Z 部门。

C 先生在 Z 部门工作,他想转到 X 部门。

在用例中,其中一个(假设 Mr.A)必须联系 Mr.B 和 Mr.C 以循环移动以实现他们的目标。我公司有 2000 多名员工面临这个问题(我公司有大约 3 万名员工)。

因此,请任何人建议我如何学习并开始创建能够帮助我的朋友轻松完成其目的的 AI 系统或其他算法。

附言。我有经验,熟悉python

提前致谢。

解决方法

在现实生活中,我假设您将通过数据库查询获取数据,因为您谈论了数千条记录。但是对于一个小样本,让我们将我们的请求放在一个列表中。这个想法是,从一个请求开始,看看我们是否还有其他一些人的目标位置是我们请求的源位置,然后探索每个人,看看我们是否还有更多人,直到找到一个循环。

由于您想要最长的周期,并且可能还需要其他标准,因此我们需要计算所有可能性。然后另一个函数将选择最佳选择。

这将找到给定请求的所有可能周期:

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','Z',5),Request(3,'C',2),Request(4,'D',Request(5,'E','W',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,cycle + [otherreq.code])

>>> find_cycles(requests[0])
[[1,3,2],[1,4]]
>>> find_cycles(requests[1])
[[2,1,3]]
>>> find_cycles(requests[4])
[]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。