安排约束

时间:2017-06-09 08:08:49

标签: c# algorithm constraints artificial-intelligence scheduling

我想安排带约束的任务(类似于作业车间调度问题),并认为我可以使用像Microsoft Solver Foundation这样的东西(我需要使用C#)。但据我所知,你只能通过找到最长的最大值或最小值来解决问题。我需要一个近似值,因此关于总时间的调度不是最佳的(尽可能好),但是所有的约束都得到了满足。 任何想法如何处理这个问题?

1 个答案:

答案 0 :(得分:1)

我建议你使用Z3求解器。它为您提供C#API。基本上,它是一个SMT求解器,它针对给定的约束搜索“足够好”的解决方案。用SMTLIB语言定义问题可能相当困难。

如果对你来说太难了,请查看MinizincClingo求解器 - 只需将问题公式生成为文本文件,将解算器作为与C#代码分开的进程运行,解析解决方案输出文本文件。

修改

如果要最小化计划的长度,可以尝试以下方法。我们假设长度 K 的计划。在这个假设下,您的规划问题是否可以满足?我们打电话给一个求解器来找出它!用不同的K生成几个问题并迭代运行求解器。使用二进制搜索来减少试验次数。