微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您如何在 OrTools 中定义 At-Most-K SAT 约束

如何解决您如何在 OrTools 中定义 At-Most-K SAT 约束

最多k个约束,给定多个任务和用户,其中给定数量的任务必须由最多k个用户完成,每个任务只分配给一个用户一个用户可以有多个任务。目标是找出哪些任务分配给了哪些用户

一个示例实例是,给定 4 个用户和 4 个任务,对最多 2 个用户、task1、task2、task3 的约束进行编码。

我正在使用 OrTools python 库对此进行编码,但任何解释都会有所帮助

解决方法

只需为每个 (user,taskgroup_id) 对创建一个 boolvar 并将其限制为:

for t in taskgroup:
    # t1 v t2 v t3 => user_in_group
    model.AddImplication(assigment[u,t],user_in_taskgroup[u,taskgroup_id])

# user_in_group => t1 v t2 v t3
model.AddBoolOr([user_in_taskgroup[u,taskgroup_id].Not()] + [assigment[u,t] for t in tasks])

model.Add(sum(user_in_taskgroup[u,taskgroup_id] for u in users) <= k)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。