【问题标题】:Algorithmic staff scheduling solutions算法人员调度解决方案
【发布时间】:2011-07-08 02:20:34
【问题描述】:

总体而言,问题很简单:安排一支员工队伍进行每天一人的报道,在任何一天,员工被分成 3 个池,每个员工都有休假要求,每个员工都有每周最多 2 个班次等。

我不想手动执行此操作,因为我的组织已经这样做了几个世纪。我想做一些很酷的事情,比如遗传算法(例如 [1] http://www.sersc.org/journals/IJAST/vol14/1.pdf)。

是否有任何可靠的开源/免费替代品?这听起来也像是一个优化问题,我可以启动 C++、R 等来为此插入一些优化库吗?

谢谢

【问题讨论】:

    标签: algorithm optimization scheduling


    【解决方案1】:

    这是一个优化问题。奇怪的是,这被称为调度问题。 :-D 根据数据的大小,您可能必须使用元启发式算法,例如遗传算法、蚁群优化等,但我将从推出您自己的基于规则的启发式算法开始。

    基本上,将规则定义为事物之间的关联(A 人不能同时在度假和工作),或日程安排条件(在任何给定时间只有三个人)。然后制定一个时间表,将所有员工一个一个插入。如果在插入时违反了规则,则不要插入并选择其他五线谱。

    如果你做对了,这应该会提出一个有效但不是最佳的时间表,然后你可以做一些很酷的事情,比如定义运算符(交换、移动、3-交换),这会给你一个社区(通过运营商的申请可以到达的所有有效时间表)。然后,您可以选择附近最好的时间表,然后重复。这是邻里血统。但是有很多基于邻域的方法可供选择。我相信模拟退火在应用于调度问题时很好。

    【讨论】:

    • 看看 Drools Planner,就在几个月前,他们似乎已将模拟退火算法从测试版移开。
    【解决方案2】:

    你可以试试OptaPlanner(以前叫Drools Planner),它是基于Java和开源的。

    【讨论】:

    • Drools Planner 看起来是个完美的工具,谢谢!然而,安装似乎非常复杂。目前尝试将其组合起来有些困难,但是天哪,这里有很多我不知道的组件。
    • @Ming 你遇到了什么问题?我想知道,所以我们可以改善体验。尝试它的最简单方法是下载规划器 zip 并运行 runExamples.bat/.sh。看看参考手册如何从 maven 等中使用它。
    【解决方案3】:

    您可能还对约束编程框架感兴趣,其中许多是开源的,例如 Choco (Java)、Gecode (C++) 和其他已用于解决这些类型问题的框架,尽管我同意疯狂地认为,检查他提到的风格的算法是否可以解决您描述的问题可能是值得的。

    【讨论】:

      【解决方案4】:

      由于每天只有一个人,这似乎可以设置为整数/二进制编程问题。有许多包可以进行整数编程。无论您决定使用哪种方法来解决这些问题,这些问题的棘手部分是找到一种指定问题约束的简洁方法。在这种情况下,假期要求是什么等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        相关资源
        最近更新 更多