我想使用约束来调度任务(类似于作业车间调度问题(,并认为我可以使用类似Microsoft求解器基金会的东西(我需要使用 C#(。但据我所知,你只能通过找到需要多头的最佳最大值或最小值来解决问题。我需要一个近似值,因此调度在总时间方面不是最佳的(尽可能好(,但所有约束都得到了满足。有什么想法可以解决这个问题吗?
我建议你使用Z3求解器。它为您提供了 C# API。基本上,它是一个 SMT 求解器,它根据给定的约束搜索"足够好"的解决方案。用 SMTLIB 语言定义您的问题可能相当困难。
如果这对您来说太难了,请查看 Minizinc 或 Clingo 求解器 - 只需将问题公式生成为文本文件,将求解器作为独立于 C# 代码的进程运行,从输出文本文件中解析解回。
编辑
如果要最小化计划的长度,可以尝试以下方法。假设有一个长度为 K 的时间表。在此假设下,您的规划问题是否得到满足?让我们打电话给求解器来找出答案!生成几个具有不同 K 的问题,并迭代运行求解器。使用二叉搜索来减少试验次数。