我如何向 Google ortools 添加一组值而不是下限和上限?

Posted

技术标签:

【中文标题】我如何向 Google ortools 添加一组值而不是下限和上限?【英文标题】:How can i add an array of values to Google ortools versus a lower and upper bound? 【发布时间】:2018-06-19 08:32:13 【问题描述】:

在文档和我能找到的所有示例中......至少在护士调度方面,每个人都只是在 1,4 的搜索空间内声明班次值,比如说班次 1,2,3,4。 ...

solver = pywrapcp.Solver("schedule_shifts")

  num_nurses = 4
  num_shifts = 4     # Nurse assigned to shift 0 means not working that day.
  num_days = 7
  # [START]
  # Create shift variables.
  shifts = 

  for j in range(num_nurses):
    for i in range(num_days):
      shifts[(j, i)] = solver.IntVar(0, num_shifts - 1, "shifts(%i,%i)" % (j, i))
  shifts_flat = [shifts[(j, i)] for j in range(num_nurses) for i in range(num_days)]

  # Create nurse variables.
  nurses = 

  for j in range(num_shifts):
    for i in range(num_days):
      nurses[(j, i)] = solver.IntVar(0, num_nurses - 1, "shift%d day%d" % (j,i))

我想在调用solver.IntVar(lowerbound, upperbound, ...)时避免使用值范围

我要IntSolver([available values that you can choose], ...)

我创建了一个包含所有班次的矩阵,作为从第一天到最后一天的列。我的行索引无关紧要,但在每一天/班次列中,我有护士的索引值,按该班次出价最高的降序排列。然后我想创建一个约束,如果我选择一名护士,我会选择通过列中的其他约束允许的最高出价,但是鉴于 python IntVar 的文档或工具有限,我不知道如何做到这一点.

【问题讨论】:

【参考方案1】:

你可以试试

solver.IntVar([values...], 'name')

它应该可以工作。

见https://github.com/google/or-tools/blob/master/examples/python/einav_puzzle2.py

【讨论】:

是的,首先创建具有所有可能值的变量。然后选择最佳解决方案是目标的一部分。

以上是关于我如何向 Google ortools 添加一组值而不是下限和上限?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 应用程序:如何向单个文档应用程序添加一组控件?

MySQL:如何在查询中向日期时间字段添加一天

Google Big Query 标准 SQL,在 SELECT 语句中添加一列

Java如何向容器中添加一组元素详解(附源码)

向熊猫数据框添加一列

向 DataFrame 添加一列,其值为 1,其中预测大于自定义阈值