Google OR Tools -创建访问域值的约束



尝试使用Google OR工具创建产品配置器。我有几个例子工作,但不能弄清楚如何创建字符串域和访问他们的值。

var colorValues = new string[] { "Red", "Green", "Blue" };
var sizeValues = new string[] { "Small", "Medium", "Large" };
IntVar color = model.NewIntVar(0, colorValues.Length - 1, "color");
IntVar size = model.NewIntVar(0, sizeValues.Length - 1, "size");
我需要创建一个约束,比如
  • 如果颜色为红色则尺寸为小
  • 如果颜色是蓝色,则尺寸不是大

如何使用

model.add(....)

或其他方法使用谷歌或工具。

我偶然发现了同样的问题,有一个关于这个的文档。你正在寻找的方法是通灵:https://developers.google.com/optimization/cp/channeling

它归结为这一点(如注释所说,使用bool):

// Declare our two primary variables.
IntVar x = model.NewIntVar(0, 10, "x");
IntVar y = model.NewIntVar(0, 10, "y");
// Declare our intermediate boolean variable.
BoolVar b = model.NewBoolVar("b");
// Implement b == (x >= 5).
model.Add(x >= 5).OnlyEnforceIf(b);
model.Add(x < 5).OnlyEnforceIf(b.Not());
// Create our two half-reified constraints.
// First, b implies (y == 10 - x).
model.Add(y == 10 - x).OnlyEnforceIf(b);
// Second, not(b) implies y == 0.
model.Add(y == 0).OnlyEnforceIf(b.Not());

最新更新