跳至主内容
框架 无框架

IlcBestInstantiate

public 'IlcGoal'IlcBestInstantiate(const 'IlcFloatVar'变异, 'IlcBool'increaseMinFirst=IlcTrue, 'IlcFloat'前兆= '0' )
定义文件: ilcp/cpext.h
包含文件: <ilcp/cpextilcp/cpext.h
为变量赋值的目标。

该函数返回一个目标,它是算法中搜索解决方案的一个基本要素。 该目标用于为受限变量赋值。 该函数与函数 "IlcInstantiate(尝试域中的所有值)不同;"IlcBestInstantiate只尝试一个可能的值。 它的行为略有不同,取决于参数的类别。

如果 "var已经绑定,则 "IlcBestInstantiate什么也不做,成功绑定。 否则,它会设置一个选择点,然后将 "var替换为它的一半。 如果发生故障,则由另一半域代替。

可选参数 "increaseMinFirst必须是布尔值,即 "IlcTrue或 "IlcFalse。 如果是 "IlcTrue,则先尝试域的上半部分;否则,先尝试域的下半部分。

更多信息,请参见概念 "CP 优化器中的选择点

另请参阅:


IlcBestInstantiate

publicIlcGoal IlcBestInstantiate(constIlcIntVar var)
publicIlcGoal IlcBestInstantiate(constIlcIntVar var,IlcIntSelect select)
定义文件: ilcp/cpext.h
包含文件: <ilcp/cpextilcp/cpext.h
为变量赋值的目标。

该函数返回一个目标,它是算法中搜索解决方案的一个基本要素。 该目标用于为受限变量赋值。

如果参数 "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 优化器中的选择点

另请参阅: