且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

其中算法(S)可以解决这个约束规划问题?

更新时间:2023-11-25 23:31:10

您的问题是足够复杂,一个通用的解决方案可能需要制定为的线性整数的问题。如果在另一方面,你可以放松有一定的要求,你可以用一个简单的方法。例如,双边匹配将允许您安排多个工人多工作,甚至可以处理preferences,但将无法执行一般的公平的约束。例如参见该related SO质疑。 顶点着色具有有效的算法执行工作分离制约。

Your problem is complex enough that a general solution will probably require formulating as a linear-integer problem. If on the other hand you are able to relax certain requirements, you may be able to use a simpler approach. For example, bipartite matching would allow you to schedule multiple workers to multiple jobs, and can even handle preferences, but would not be able to enforce general 'fairness' constraints. See e.g. this related SO question. Vertex colouring has efficient algorithms for enforcing job separation constraints.

其他海报也提到单纯和的车间作业调度。单是一个优化算法 - 它遍历解空间寻求最大化某些目标函数。制定目标函数当然可以做到,但就是不平凡。古典作业车间调度,如二分匹配,可以模拟你的问题的某些方面,但不是全部。有没有precedence约束,例如。有扩展版本,可以处理一些约束,例如放置时间界限的任务。

Other posters have mentioned simplex and job shop scheduling. Simplex is an optimisation algorithm - it traverses a solution space seeking to maximise some objective function. Formulating the objective function can certainly be done, but is non-trivial. Classical job shop scheduling, like bipartite matching, can model some aspects of your problem, but not all. There are no precedence constraints, for example. There are extended versions that can handle some constraints, for example placing time bounds on tasks.

如果你有兴趣在现有实现,Python的 networkx 库拥有的这个匹配算法。一个开放源码的时间表计划可能会感兴趣的一个例子是的Tablix

If you're interested in existing implementations, the Python networkx library has an implementation of this matching algorithm. An example of an open source timetabling program that might be of interest is Tablix.