CP-SAT 平衡任务分配

Posted

技术标签:

【中文标题】CP-SAT 平衡任务分配【英文标题】:CP-SAT to balance task assignment 【发布时间】:2021-01-29 09:14:04 【问题描述】:

亲爱的, 我想知道 CP-SAT 是否有任何内置功能可以让我平衡分配给用户的任务数量。 现在我正在计算方差,并在目标函数中将其最小化,因此有可能使用内置函数计算方差会很棒,但我想知道我是否有其他选择。

谢谢

【问题讨论】:

【参考方案1】:

别无选择。

如果任务和工人的数量是固定的。您可以计算平均值,并使用 epsilon 添加以下约束:

for all workers:
  model.Add(sum(assigned_tasks) <= average + epsilon)
  model.Add(sum(assigned_tasks) >= average - epsilon)

model.Minimize(epsilon)

这不太精确,但速度更快。

【讨论】:

为了最小化 epslon 我需要找到 epslon 作为每个任务决策的操作员的函数,对吗? 可以是一个全局的 epsilon,每个算子一个,并且最小化 epsilon 的总和 不确定我是否理解。例如,如果我有 3 个工人和 9 个任务,那么 epsilon 函数应该是什么?谢谢 限制每个工人有 3-epsilon 和 3+epsilon 分配给他的任务,并最小化 epsilon。

以上是关于CP-SAT 平衡任务分配的主要内容,如果未能解决你的问题,请参考以下文章

如何在 2 个不同可用区的 2 个 ec2 实例之间分配 2 个任务?

OpenMP 中的线程任务调度

阿里为Linux内核调度器提出一个新的”组平衡器”概念

数学建模的一些软件

2021蓝桥杯C++第二届省赛

并行计算学习之并行程序设计导论