公共抽象类IloCustomConstraint 扩展java.lang.Object 实现IloPropagator
这是自定义约束的基类。 您需要对其进行子类化,以实现自己的约束。
IloCustomConstraint类的接口非常简单,只需定义一个抽象方法 "execute即可执行所需的传播。 此外,您还必须明确说明约束涉及哪些变量。 每当您声明的某个变量改变其域时,传播器就会被调用。
| 修饰符 | 构造函数和说明 |
|---|---|
protected |
IloCustomConstraint(IloCP cp)该构造函数在子类的构造函数中使用,如下所示:
super(cp) |
| 修饰符和类型 | 方法和说明 |
|---|---|
void |
addVar(IloNumVar var)该函数应在子类的构造函数中为您定义的自定义约束中涉及的每个变量调用。
|
abstract void |
execute()在子类化 "
IloCustomConstraint类以创建自己的自定义约束时,您需要定义执行函数。 |
protected IloCP |
getCP()返回嵌入的 "
IloCP。 |
int |
getDomainSize(IloNumVar var)成员函数返回变量 "
var的域元素个数。 |
double |
getMax(IloNumVar var)成员函数返回变量 "
var域的最大值。 |
double |
getMin(IloNumVar var)成员函数返回变量 "
var域的最小值。 |
java.lang.String |
getName()访问分配给调用建模对象的名称。
|
double |
getValue(IloNumVar var)成员函数返回变量 "
var的值。 |
boolean |
isFixed(IloNumVar var)该成员函数用于确定变量 "
var是否固定为某一数值。 |
boolean |
isInDomain(IloNumVar var,
int value)该成员函数用于判断值 "
value是否在变量 "var的当前域中。 |
ilog.cp.IloCPEngine.IntVarIterator |
iterator(IloIntVar var)该成员函数创建了一个迭代器,用于遍历 "
var域中的元素。 |
void |
removeValue(IloIntVar var,
int value)该函数可以从子类的 "
execute成员函数中调用。 |
void |
setMax(IloNumVar var,
double max)该函数可以从子类的 "
execute成员函数中调用。 |
void |
setMin(IloNumVar var,
double min)该函数可以从子类的 "
execute成员函数中调用。 |
void |
setName(java.lang.String name)设置调用 addable 对象的名称。
|
void |
setRange(IloNumVar var,
double min,
double max)该函数可以从子类的 "
execute成员函数中调用。 |
void |
setValue(IloNumVar var,
double value)该函数可以从子类的 "
execute成员函数中调用。 |
void |
violate()该函数可以从子类的 "
execute成员函数中调用。 |
protected IloCustomConstraint(IloCPcp) 抛出IloException
super(cp)IloExceptionprotectedIloCP getCP()
IloCP。public void addVar(IloNumVarvar)
该函数应在子类的构造函数中为您定义的自定义约束中涉及的每个变量调用。
公共 void violate()
该函数可以从子类的 "execute成员函数中调用。 它表示违反了约束条件。
public void setMax(IloNumVarvar、 双倍最大值)
该函数可以从子类的 "execute成员函数中调用。 它将 "var的最大值设置为 "max。 请注意,这种修改是缓冲的。 有关解释,请参阅接口文档。
public void setMin(IloNumVarvar、 双倍最小值)
该函数可以从子类的 "execute成员函数中调用。 它将 "var的最小值设置为 "min。 请注意,这种修改是缓冲的。 有关解释,请参阅接口文档。
public void setRange(IloNumVarvar、 两分钟 双倍最大值)
该函数可以从子类的 "execute成员函数中调用。 它将 "var的最小值设为 "min,最大值设为 "max。 请注意,这种修改是缓存的。 有关解释,请参阅接口文档。
public void setValue(IloNumVarvar、 双倍值)
该函数可以从子类的 "execute成员函数中调用。 它将 "var的值设置为 "value。 请注意,这种修改是缓存的。 有关解释,请参阅接口文档。
public void removeValue(IloIntVarvar、 int value)
该函数可以从子类的 "execute成员函数中调用。 It removes value value from the domain of variable var. 请注意,这种修改是缓存的。 有关解释,请参阅接口文档。
public double getMin(IloNumVarvar)
var域的最小值。 请注意,由于域修改是在传播器内缓冲的,因此该值不包括自输入传播器的 "execute方法后所做的域修改。public double getMax(IloNumVarvar)
var域的最大值。 请注意,由于域修改是在传播器内缓冲的,因此该值不包括自输入传播器的 "execute方法后所做的域修改。public double getValue(IloNumVarvar)
var的值。 如果 "var在进入 "execute函数时没有固定,则会出现异常。public int getDomainSize(IloNumVarvar)
var的域元素个数。 请注意,由于域修改是在传播器内缓冲的,因此该值不包括自输入传播器的 "execute方法后所做的域修改。public boolean isInDomain(IloNumVarvar、 int value)
value是否在变量 "var的当前域中。 Note that as domain modifications are buffered inside propagators, this function will return true if var had value in its domain on entry to the execute method of the propagator. This is the case even if that value has subsequently been removed from var during the current execution of execute.public boolean isFixed(IloNumVarvar)
var是否固定为某一数值。 需要注意的是,由于域修改在传播器内部被缓冲,因此只有当 "var在进入传播器的 "execute方法时被固定时,该函数才会返回 true。public ilogilog.cp.IloCPEngine.IntVarIteratoriteratorIloIntVarvar)
该成员函数创建了一个迭代器,用于遍历 "var域中的元素。 请注意,由于修改是在传播器内缓冲的,因此这次迭代将扫描 "var域中的所有值,正如输入 "execute成员函数时的值一样。
publicjava.lang.String getName()
IloAddablenull。getName在接口中IloAddablepublic voidsetName(javalang.Stringname)
IloAddablenull作为参数传递。setName在接口中IloAddablename-分配给调用建模对象的名称。 可以将null作为参数传递,以从调用建模对象中移除分配的名称。公共抽象 void execute()
IloCustomConstraint类以创建自己的自定义约束时,您需要定义执行函数。 在子类中重载该函数时,该函数应更新约束变量的域,使其保持一致。execute在接口中IloPropagator