跳至主内容
框架 无框架

类IloCplex::ControlCallbackI

定义文件: ilcplex/ilocplexi.h
IloCplex::ControlCallbackI的映射IloCplex::ControlCallbackIIloCplex::BranchCallbackIIloCplex::HeuristicCallbackIIloCplex::LazyConstraintCallbackIIloCplex::SolveCallbackIIloCplex::UserCutCallbackIIloCplex::ControlCallbackIIloCplex::MIPCallbackIIloCplex::MIPInfoCallbackIIloCplex::OptimizationCallbackIIloCplex::CallbackI

这是一个高级班。 高级课程通常要求对 CPLEX 使用的算法有深刻的理解。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 因此,团队鼓励您仔细考虑是否可以用其他类来完成同样的任务。

该类为以下类定义了通用应用程序编程接口 (API),这些类允许您控制 MIP 搜索:

在使用 "IloCplex实例求解混合整数程序(MIP)的应用程序中,这些类中的一个实例代表用户编写的回调,该回调会在给定节点上干预解的搜索。 控制回调与节点绑定。 在 "IloCplex分支-切割搜索过程中,每个节点都会调用它们。 用户从不直接子类化 "IloCplex::ControlCallbackI类,它只定义了列出的回调的通用接口。

其中,"SolveCallbackI在求解节点松弛之前被调用,并可选择替换其解法。 默认情况下,IloCplex会这样做。 然后通过 "SolveCallbackI或 "IloCplex的实例来解决节点松弛问题。 如果解是整数可行的,或者松弛是无约束的,则调用 "IloCplex::LazyConstraintCallbackI;否则,按以下顺序调用其他控制回调:

  1. IloCplex::UserCutCallbackI
  2. IloCplex::HeuristicCallbackI
  3. IloCplex::BranchCallbackI

如果切割回调为节点松弛添加了新的切割,节点松弛将使用求解回调(如果使用)再次求解。 如果 "IloCplex生成了自己的剪切,情况也是一样。

该类的方法是受保护的,其构造函数是私有的;不能直接子类化该类,必须派生其子类。

如果试图访问本类实例无法访问的信息,则会出现异常。

无界射线

如果节点 LP 是无界的,"getValue方法会返回一个与无界方向相对应的向量。 该向量将按以下方式进行缩放:其某个元素的最大绝对值是 CPX_INFBOUND。 因此,通常可直接使用该向量,例如,用于分隔惰性约束。 但是,因为值较大,所以必须小心处理可能的数字误差。 如果有疑问,可以调整矢量的比例,将其用作无界射线而不是原始矢量。

另请参阅:

方法概要
public IloNumgetDownPseudoCost(const IloIntVar var) const
public IloNumgetDownPseudoCost(const IloNumVar var) const
public voidgetFeasibilities(ControlCallbackI::IntegerFeasibilityArray stat, const IloIntVarArray var) const
public voidgetFeasibilities(ControlCallbackI::IntegerFeasibilityArray stat, const IloNumVarArray var) const
public ControlCallbackI::IntegerFeasibilitygetFeasibility(const IloIntVar var) const
public ControlCallbackI::IntegerFeasibilitygetFeasibility(const IloNumVar var) const
public ControlCallbackI::IntegerFeasibilitygetFeasibility(const IloSOS2 sos) const
public ControlCallbackI::IntegerFeasibilitygetFeasibility(const IloSOS1 sos) const
public IloNumgetLB(const IloIntVar var) const
public IloNumgetLB(const IloNumVar var) const
public voidgetLBs(IloNumArray val, const IloIntVarArray vars) const
public voidgetLBs(IloNumArray val, const IloNumVarArray vars) const
public NodeData *getNodeData() const
public NodeIdgetNodeId() const
public IloNumgetObjValue() const
public IloNumgetSlack(const IloRange rng) const
public voidgetSlacks(IloNumArray val, const IloRangeArray con) const
public IloNumgetUB(const IloIntVar var) const
public IloNumgetUB(const IloNumVar var) const
public voidgetUBs(IloNumArray val, const IloIntVarArray vars) const
public voidgetUBs(IloNumArray val, const IloNumVarArray vars) const
public IloNumgetUpPseudoCost(const IloIntVar var) const
public IloNumgetUpPseudoCost(const IloNumVar var) const
public IloNumgetValue(const IloIntVar var) const
public IloNumgetValue(const IloNumVar var) const
public IloNumgetValue(const IloExprArg expr) const
public voidgetValues(IloNumArray val, const IloIntVarArray vars) const
public voidgetValues(IloNumArray val, const IloNumVarArray vars) const
public IloBoolisSOSFeasible(const IloSOS2 sos2) const
public IloBoolisSOSFeasible(const IloSOS1 sos1) const
public NodeData *setNodeData(NodeData * data)
从 "MIPCallbackI继承的方法
getCurrentNodeDepth, getObjCoef, getObjCoef, getObjCoefs, getObjCoefs, getType, getUserThreads, MIPCallbackI
从 "MIPInfoCallbackI继承的方法
getBestObjValue, getCutoff, getDirection, getDirection, getIncumbentObjValue, getIncumbentSlack, getIncumbentSlacks, getIncumbentValue, getIncumbentValue, getIncumbentValue, getIncumbentValues, getIncumbentValues, getMIPRelativeGap, getMyThreadNum, getNcuts, getNiterations, getNiterations64, getNnodes, getNnodes64, getNremainingNodes, getNremainingNodes64, getPriority, getPriority, getQuality, getType, hasIncumbent, MIPInfoCallbackI
从 "OptimizationCallbackI继承的方法
getModel, getNcols, getNQCs, getNrows
从 "CallbackI继承的方法
abort, duplicateCallback, getCplexTime, getDetTime, getEndDetTime, getEndTime, getEnv, getStartDetTime, getStartTime, getType, main
内部枚举
ControlCallbackI::IntegerFeasibility
内部类型定义
ControlCallbackI::IntegerFeasibilityArray
内部班级
ControlCallbackI::PresolvedVariableException
方法详细信息

getDownPseudoCost

publicIloNum getDownPseudoCost(constIloIntVar var) const

本方法返回变量 "var向下分支的当前伪代价。


getDownPseudoCost

publicIloNum getDownPseudoCost(constIloNumVar var) const

本方法返回变量 "var向下分支的当前伪代价。


getFeasibilities

public voidgetFeasibilities(ControlCallbackI::IntegerFeasibilityArray stat, constIloIntVarArray var) const

This method specifies whether each of the variables in the array vars is integer feasible, integer infeasible, or implied integer feasible by putting the status in the corresponding element of the array stats.

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibilities是否生成了解决方案。


getFeasibilities

public voidgetFeasibilities(ControlCallbackI::IntegerFeasibilityArray stat, constIloNumVarArray var) const

This method specifies whether each of the variables in the array vars is integer feasible, integer infeasible, or implied integer feasible by putting the status in the corresponding element of the array stats.

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibilities是否生成了解决方案。


getFeasibility

publicControlCallbackI::IntegerFeasibility getFeasibility(constIloIntVar var) const

该方法指定变量 "var在当前节点解中是整数可行、整数不可行还是隐含整数可行。

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。


getFeasibility

publicControlCallbackI::IntegerFeasibility getFeasibility(constIloNumVar var) const

该方法指定变量 "var在当前节点解中是整数可行、整数不可行还是隐含整数可行。

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。


getFeasibility

publicControlCallbackI::IntegerFeasibility getFeasibility(constIloSOS2 sos) const

该方法指定特殊有序集合 "sos在当前节点解中是整数可行、整数不可行还是隐含整数可行。

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。


getFeasibility

publicControlCallbackI::IntegerFeasibility getFeasibility(constIloSOS1 sos) const

该方法指定特殊有序集合 "sos在当前节点解中是整数可行、整数不可行还是隐含整数可行。

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。


getLB

publicIloNum getLB(constIloIntVar var) const

此方法返回当前节点处 "var的下限。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。

无界限的变量

如果变量没有下限值,则 "getLB返回 "-IloInfinity(即系统特定的最小值)。


getLB

publicIloNum getLB(constIloNumVar var) const

此方法返回当前节点处 "var的下限。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。

无界限的变量

如果变量没有下限值,则 "getLB返回 "-IloInfinity(即系统特定的最小值)。


getLBs

public voidgetLBs(IloNumArray val, constIloIntVarArray vars) const

对于数组 "vars中的每个元素,该方法都会将当前节点的下限放入数组 "vals的相应元素中。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。

无界限的变量

如果变量没有下限值,则 "getLBs返回 "-IloInfinity(即系统特定的最小值)。


getLBs

public voidgetLBs(IloNumArray val, constIloNumVarArray vars) const

该方法将数组 "vars中每个元素当前节点的下限放入数组 "vals的相应元素中。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。

无界限的变量

如果变量没有下限值,则 "getLBs返回 "-IloInfinity(即系统特定的最小值)。


getNodeData

公共NodeData*getNodeData() 常量

This method retrieves the NodeData object that may have previously been assigned to the current node by the user with the method IloCplex::BranchCallbackI::makeBranch. 如果当前节点未分配任何数据对象,该方法将返回 0(零)。


getNodeId

publicNodeId getNodeId() const

返回当前节点的 "NodeId

请参阅 MIPCallbackI::NodeId


getObjValue

publicIloNum getObjValue() const

此方法返回当前节点上解决方案的目标值。

如果您需要代表目标本身的对象,请考虑使用 "IloCplex::getObjective方法。


getSlack

publicIloNum getSlack(constIloRange rng) const

此方法返回当前节点松弛解中 "rng指定约束的松弛值。


getSlacks

public voidgetSlacks(IloNumArray val, constIloRangeArray con) const

对于范围数组 "rngs中的每个约束条件,该方法会将当前节点松弛解中的松弛值放入数组 "vals的相应元素中。


getUB

publicIloNum getUB(constIloIntVar var) const

此方法返回当前节点上变量 "var的上界。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。

无界限的变量

如果变量没有上限,则 "getUB返回 "IloInfinity(即系统特定的最大值)。


getUB

publicIloNum getUB(constIloNumVar var) const

此方法返回当前节点上变量 "var的上界。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。

无界限的变量

如果变量没有上限,则 "getUB返回 "IloInfinity(即系统特定的最大值)。


getUBs

public voidgetUBs(IloNumArray val, constIloIntVarArray vars) const

对于数组 "vars中的每个元素,该方法会将当前节点的上界放入数组 "vals的相应元素中。 界限是当前节点的松弛界限。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。

无界限的变量

如果变量没有上限,则 "getUBs返回 "IloInfinity(即系统特定的最大值)。


getUBs

public voidgetUBs(IloNumArray val, constIloNumVarArray vars) const

对于数组 "vars中的每个元素,该方法会将当前节点的上界放入数组 "vals的相应元素中。 界限是当前节点的松弛界限。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。

无界限的变量

如果变量没有上限,则 "getUBs返回 "IloInfinity(即系统特定的最大值)。


getUpPseudoCost

publicIloNum getUpPseudoCost(constIloIntVar var) const

此方法返回变量 "var向上分支的当前伪代价。


getUpPseudoCost

publicIloNum getUpPseudoCost(constIloNumVar var) const

此方法返回变量 "var向上分支的当前伪代价。


getValue

publicIloNum getValue(constIloIntVar var) const

此方法返回当前节点松弛解中变量 "var的值。

有关适用于该方法的整数、截断和舍入的特殊考虑因素,请参阅CPLEX 优化器中的整数值、整数公差和舍入概念。


getValue

publicIloNum getValue(constIloNumVar var) const

此方法返回当前节点松弛解中变量 "var的值。


getValue

publicIloNum getValue(constIloExprArg expr) const

此方法返回当前节点松弛解中表达式 "expr的值。


getValues

public voidgetValues(IloNumArray val, constIloIntVarArray vars) const

对于数组 "vars中的每个变量,该方法会将当前节点的松弛解中的值放入数组 "vals的相应元素中。

有关适用于该方法的整数、截断和舍入的特殊考虑因素,请参阅CPLEX 优化器中的整数值、整数公差和舍入概念。


getValues

public voidgetValues(IloNumArray val, constIloNumVarArray vars) const

对于数组 "vars中的每个变量,该方法会将当前节点的松弛解中的值放入数组 "vals的相应元素中。


isSOSFeasible

publicIloBool isSOSFeasible(constIloSOS2 sos2) const

如果对于参数中指定的特殊有序集,当前节点的 LP 解是 SOS 可行的,则此方法返回 "IloTrue。 作为参数传递给此方法的 SOS 集可能属于 2 类。 有关特殊有序集合类型的更多解释,请参阅《CPLEX 用户手册》

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "isSOSFeasible是否生成了解决方案。


isSOSFeasible

publicIloBool isSOSFeasible(constIloSOS1 sos1) const

如果对于参数中指定的特殊有序集,当前节点的 LP 解是 SOS 可行的,则此方法返回 "IloTrue。 作为参数传递给此方法的 SOS 集的类型可以是 1。 有关这类特殊有序集合的更多解释,请参阅《CPLEX 用户手册》

在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "isSOSFeasible是否生成了解决方案。


setNodeData

publicNodeData*setNodeData(NodeData *data)

此方法设置分配给当前节点的 "NodeData对象。 如果已为当前节点设置了 "NodeData对象,则该方法将替换该对象并返回旧对象。 否则,该方法返回 0(零)。


内部枚举详细信息

枚举IntegerFeasibility

定义文件: ilcplex/ilocplexi.h

枚举'IloCplex::ControlCallbackI::IntegerFeasibility的范围仅限于'IloCplex::ControlCallbackI类。 This enumeration is used by IloCplex::ControlCallbackI::getFeasibility to represent the integer feasibility of a variable or SOS in the current node solution:

另请参阅:

字段

ImpliedInfeasible = -1 
Feasible = CPX_INTEGER_FEASIBLE 
Infeasible = CPX_INTEGER_INFEASIBLE 
ImpliedFeasible = CPX_IMPLIED_INTEGER_FEASIBLE 

内部类型定义细节

类型定义IntegerFeasibilityArray

定义文件: ilcplex/ilocplexi.h

IloArray< IntegerFeasibility > IntegerFeasibilityArray

该类型为 "IloCplex::ControlCallbackI::IntegerFeasibility定义了一个数组类型。 整数可行性数组的完整限定名称是 "IloCplex::ControlCallbackI::IntegerFeasibility::Array

另请参阅: