| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
该函数返回一个目标,它是算法中搜索解决方案的一个基本要素。 该目标用于为受限变量赋值。 该函数与函数 "IlcInstantiate(尝试域中的所有值)不同;"IlcBestInstantiate只尝试一个可能的值。 它的行为略有不同,取决于参数的类别。
如果 "var已经绑定,则 "IlcBestInstantiate什么也不做,成功绑定。 否则,它会设置一个选择点,然后将 "var的域替换为它的一半。 如果发生故障,则由另一半域代替。
可选参数 "increaseMinFirst必须是布尔值,即 "IlcTrue或 "IlcFalse。 如果是 "IlcTrue,则先尝试域的上半部分;否则,先尝试域的下半部分。
更多信息,请参见概念 "CP 优化器中的选择点。
另请参阅:
IlcBestGenerate,IlcDichotomize,IlcGoal,IlcInstantiate
该函数返回一个目标,它是算法中搜索解决方案的一个基本要素。 该目标用于为受限变量赋值。
如果参数 "var已经修复,则 "IlcBestInstantiate什么也不做,并成功修复。 否则,它会设置一个选择点,并将调用的受限变量与其域中的值绑定。 如果提供了可选参数 "select,则该值将由 "select选择;否则,当值为整数时,将按升序排列。 如果失败,则从域中删除尝试失败值,"IlcBestInstantiate成功。
在这一点上,该函数与函数 "IlcInstantiate有所不同。 IlcBestInstantiate只尝试一个值,而当 "IlcInstantiate出现故障时,CP 优化器会继续尝试其他值,直到该变量域中的所有值都被尝试过之后,才转到另一个变量。
实现
对于 "IlcIntVar,这个目标可以这样定义:
static
ILCGOAL2(IlcIntBestInstantiate,
IlcIntVar,var、
IlcIntSelectI*,select) {
if (var.isFixed()) return 0;
IlcIntval = (select)? select->select(var) :var.getMin();
returnIlcOr(var== val、
var != val);
}
IlcGoal IlcBestInstantiate(IlcIntVarvar){
返回IlcIntBestInstantiate(var,0);
}
IlcGoal IlcBestInstantiate(IlcIntVarvar,IlcIntSelectsel){
返回IlcIntBestInstantiate(var, sel.getImpl());
}更多信息,请参见概念 "CP 优化器中的选择点。
另请参阅:
IlcBestGenerate,IlcDichotomize,IlcGoal,IlcInstantiate