我正在开发一个交互式作业调度应用程序。给定一组具有相应容量/可用性配置文件的资源,一组要在这些资源上执行的作业,以及一组确定作业顺序和作业的最早/最晚开始/结束时间的约束,我想让用户手动移动周围的工作。本质上,我希望用户能够“抓住”工作网络的一个节点并及时向前/向后拖动而不违反任何约束。
该图显示了一个简单的示例配置。最后的三角形作业表示所有作业的最晚完成时间,作业之间的连接线对作业施加顺序,灰色/绿色条表示资源可用性和负载。
您可以拖动任何作业来压缩计划。请注意,由于容量配置文件不同,作业的长度会发生变化。
我已经实现了一个有点工作的临时算法。但是,仍然存在失败并违反某些约束的情况。然而,由于工作车间调度是一个研究得很好的领域,有很多算法和启发式方法可以找到一般 NP-hard 问题的最佳(或相当好的)解决方案 - 我认为解决方案应该存在于我更容易的子集。我研究了约束编程主题,甚至研究了基于物理的解决方案(通过静态关节连接的刚体),但到目前为止找不到任何合适的东西。对我有任何指示/提示/提示/搜索关键字吗?