python - CP求解器可以在特定点初始化吗?
问题描述
我正在使用 CP-Sat 求解器来优化我正在制定的时间表。然而,这现在需要很长时间才能解决。是否可以使用旧结果作为求解器的种子,作为起点,以减少找到最佳结果所需的时间?
解决方案
看看这个解决方案提示示例:
num_vals = 3
x = model.NewIntVar(0, num_vals - 1, 'x')
y = model.NewIntVar(0, num_vals - 1, 'y')
z = model.NewIntVar(0, num_vals - 1, 'z')
model.Add(x != y)
model.Maximize(x + 2 * y + 3 * z)
# Solution hinting: x <- 1, y <- 2
model.AddHint(x, 1)
model.AddHint(y, 2)
编辑:你也应该尝试
- 减少变量的数量。
- 减少整数变量的域。
- 使用多个线程运行求解器
solver.parameters.num_search_workers = 8
。 - 比整数变量/约束更喜欢布尔值。
- 设置冗余约束和/或对称破坏约束。
- 分离您的问题并合并结果。
推荐阅读
- swift - 如何使用 AWS Amplify SDK 记住设备?
- macos - 如何从连接到同一网络的 iPhone 访问 http://localhost/~username/Sites 文件夹
- javascript - 带有正文的 axios DELETE 请求
- python-3.x - 外星人未定义
- javascript - 如何将用户名从 HTML 表单获取到 JavaScript?
- .net - .NET XML 查找和替换节点
- android - 如何在 android studio 中根 AVD Android 模拟器?
- r - 使用 rmapshaper::ms_simplify 简化我的美国状态 shapefile 给出错误
- asp.net-core - 对于 CLR 类型为“Nullable”的属性“Identity.User.LockoutEnd”,找不到到关系类型的映射
' - javascript - try catch 中的多个等待未捕获错误