带约束的调度

我想对任务进行带约束的调度(类似于作业车间调度问题),我考虑使用类似微软求解器基础(Microsoft Solver Foundation)的工具(我需要使用C#)。但据我所知,这种方法只能通过寻找最优的最大值或最小值来解决问题,这需要很长时间。我需要一个近似解,这样调度在总时间上不是最优的(尽可能好),但所有约束都能得到满足。有什么解决这个问题的建议吗?


回答:

我建议你使用Z3求解器。它提供了C#的API。基本上,它是一个SMT求解器,可以在给定约束下寻找“足够好”的解决方案。用SMTLIB语言定义你的问题可能会相当困难。

如果你觉得太难,可以看看MinizincClingo求解器——只需将问题表述生成成文本文件,从你的C#代码中作为一个独立进程运行求解器,然后从输出文本文件中解析解决方案。

编辑

如果你想最小化调度长度,可以尝试以下方法。假设存在长度为K的调度。在这个假设下,你的计划问题是否可满足?让我们调用求解器来找出答案!生成几个不同K值的问题,并迭代运行求解器。使用二分查找来减少尝试次数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注