尝试使用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());