首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何开始创建自动周期匹配系统

如何开始创建自动周期匹配系统
EN

Stack Overflow用户
提问于 2021-07-04 23:18:14
回答 1查看 38关注 0票数 0

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

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

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

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

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

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

Ps。我有使用python的经验和熟悉。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-05 15:18:38

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

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

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

代码语言:javascript
复制
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])
[]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68246144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档