| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |

这是一个高级班。 高级课程通常要求对 CPLEX 使用的算法有深刻的理解。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 因此,团队鼓励您仔细考虑是否可以用其他类来完成同样的任务。
该类为以下类定义了通用应用程序编程接口 (API),这些类允许您控制 MIP 搜索:
IloCplex::SolveCallbackIIloCplex::UserCutCallbackIIloCplex::LazyConstraintCallbackIIloCplex::HeuristicCallbackIIloCplex::BranchCallbackI在使用 "IloCplex实例求解混合整数程序(MIP)的应用程序中,这些类中的一个实例代表用户编写的回调,该回调会在给定节点上干预解的搜索。 控制回调与节点绑定。 在 "IloCplex分支-切割搜索过程中,每个节点都会调用它们。 用户从不直接子类化 "IloCplex::ControlCallbackI类,它只定义了列出的回调的通用接口。
其中,"SolveCallbackI在求解节点松弛之前被调用,并可选择替换其解法。 默认情况下,IloCplex会这样做。 然后通过 "SolveCallbackI或 "IloCplex的实例来解决节点松弛问题。 如果解是整数可行的,或者松弛是无约束的,则调用 "IloCplex::LazyConstraintCallbackI;否则,按以下顺序调用其他控制回调:
如果切割回调为节点松弛添加了新的切割,节点松弛将使用求解回调(如果使用)再次求解。 如果 "IloCplex生成了自己的剪切,情况也是一样。
该类的方法是受保护的,其构造函数是私有的;不能直接子类化该类,必须派生其子类。
如果试图访问本类实例无法访问的信息,则会出现异常。
无界射线如果节点 LP 是无界的,"getValue方法会返回一个与无界方向相对应的向量。 该向量将按以下方式进行缩放:其某个元素的最大绝对值是
CPX_INFBOUND。 因此,通常可直接使用该向量,例如,用于分隔惰性约束。 但是,因为值较大,所以必须小心处理可能的数字误差。 如果有疑问,可以调整矢量的比例,将其用作无界射线而不是原始矢量。
另请参阅:
IloCplex,IloCplex::Callback,IloCplex::CallbackI,ControlCallbackI::IntegerFeasibility,ControlCallbackI::IntegerFeasibilityArray,IloCplex::MIPCallbackI,IloCplex::OptimizationCallbackI
从 "MIPCallbackI继承的方法 |
|---|
getCurrentNodeDepth, getObjCoef, getObjCoef, getObjCoefs, getObjCoefs, getType, getUserThreads, MIPCallbackI |
从 "OptimizationCallbackI继承的方法 |
|---|
getModel, getNcols, getNQCs, getNrows |
从 "CallbackI继承的方法 |
|---|
abort, duplicateCallback, getCplexTime, getDetTime, getEndDetTime, getEndTime, getEnv, getStartDetTime, getStartTime, getType, main |
| 内部枚举 |
|---|
| ControlCallbackI::IntegerFeasibility |
| 内部类型定义 |
|---|
| ControlCallbackI::IntegerFeasibilityArray |
| 内部班级 |
|---|
| ControlCallbackI::PresolvedVariableException |
| 方法详细信息 |
|---|
本方法返回变量 "var向下分支的当前伪代价。
本方法返回变量 "var向下分支的当前伪代价。
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是否生成了解决方案。
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是否生成了解决方案。
该方法指定变量 "var在当前节点解中是整数可行、整数不可行还是隐含整数可行。
在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。
该方法指定变量 "var在当前节点解中是整数可行、整数不可行还是隐含整数可行。
在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。
该方法指定特殊有序集合 "sos在当前节点解中是整数可行、整数不可行还是隐含整数可行。
在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。
该方法指定特殊有序集合 "sos在当前节点解中是整数可行、整数不可行还是隐含整数可行。
在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "getFeasibility是否生成了解决方案。
此方法返回当前节点处 "var的下限。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。
无界限的变量
如果变量没有下限值,则 "getLB返回 "-IloInfinity(即系统特定的最小值)。
此方法返回当前节点处 "var的下限。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。
无界限的变量
如果变量没有下限值,则 "getLB返回 "-IloInfinity(即系统特定的最小值)。
对于数组 "vars中的每个元素,该方法都会将当前节点的下限放入数组 "vals的相应元素中。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。
无界限的变量
如果变量没有下限值,则 "getLBs返回 "-IloInfinity(即系统特定的最小值)。
该方法将数组 "vars中每个元素当前节点的下限放入数组 "vals的相应元素中。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。
无界限的变量
如果变量没有下限值,则 "getLBs返回 "-IloInfinity(即系统特定的最小值)。
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(零)。
返回当前节点的 "NodeId。
请参阅 MIPCallbackI::NodeId。
此方法返回当前节点上解决方案的目标值。
如果您需要代表目标本身的对象,请考虑使用 "IloCplex::getObjective方法。
此方法返回当前节点松弛解中 "rng指定约束的松弛值。
对于范围数组 "rngs中的每个约束条件,该方法会将当前节点松弛解中的松弛值放入数组 "vals的相应元素中。
此方法返回当前节点上变量 "var的上界。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。
无界限的变量
如果变量没有上限,则 "getUB返回 "IloInfinity(即系统特定的最大值)。
此方法返回当前节点上变量 "var的上界。 这个界限很可能与原始模型中的界限不同,因为 "IloCplex实例在从节点分支到子节点时会收紧界限。 getValue的相应解值可能会在发现新现任者的节点上违反这一约束,因为当发现现任者时,约束会被收紧。
无界限的变量
如果变量没有上限,则 "getUB返回 "IloInfinity(即系统特定的最大值)。
对于数组 "vars中的每个元素,该方法会将当前节点的上界放入数组 "vals的相应元素中。 界限是当前节点的松弛界限。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。
无界限的变量
如果变量没有上限,则 "getUBs返回 "IloInfinity(即系统特定的最大值)。
对于数组 "vars中的每个元素,该方法会将当前节点的上界放入数组 "vals的相应元素中。 界限是当前节点的松弛界限。 这些边界可能与原始模型中的边界不同,因为 "IloCplex实例在从节点分支到子节点时会收紧边界。 getValues的相应解值可能会在发现新任职者的节点上违反这些界限,因为当发现任职者时,界限会被收紧。
无界限的变量
如果变量没有上限,则 "getUBs返回 "IloInfinity(即系统特定的最大值)。
此方法返回变量 "var向上分支的当前伪代价。
此方法返回变量 "var向上分支的当前伪代价。
此方法返回当前节点松弛解中变量 "var的值。
有关适用于该方法的整数、截断和舍入的特殊考虑因素,请参阅CPLEX 优化器中的整数值、整数公差和舍入概念。
此方法返回当前节点松弛解中变量 "var的值。
此方法返回当前节点松弛解中表达式 "expr的值。
对于数组 "vars中的每个变量,该方法会将当前节点的松弛解中的值放入数组 "vals的相应元素中。
有关适用于该方法的整数、截断和舍入的特殊考虑因素,请参阅CPLEX 优化器中的整数值、整数公差和舍入概念。
对于数组 "vars中的每个变量,该方法会将当前节点的松弛解中的值放入数组 "vals的相应元素中。
如果对于参数中指定的特殊有序集,当前节点的 LP 解是 SOS 可行的,则此方法返回 "IloTrue。 作为参数传递给此方法的 SOS 集可能属于 2 类。 有关特殊有序集合类型的更多解释,请参阅《CPLEX 用户手册》。
在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "isSOSFeasible是否生成了解决方案。
如果对于参数中指定的特殊有序集,当前节点的 LP 解是 SOS 可行的,则此方法返回 "IloTrue。 作为参数传递给此方法的 SOS 集的类型可以是 1。 有关这类特殊有序集合的更多解释,请参阅《CPLEX 用户手册》。
在通过求解回调查询解决方案的可行性之前,解决方案必须存在。 也就是说,您必须首先通过调用 CPLEX 优化方法 "solve来创建解决方案,然后必须通过检查方法 "solve的返回值 "之前来验证方法 "isSOSFeasible是否生成了解决方案。
此方法设置分配给当前节点的 "NodeData对象。 如果已为当前节点设置了 "NodeData对象,则该方法将替换该对象并返回旧对象。 否则,该方法返回 0(零)。
| 内部枚举详细信息 |
|---|
枚举'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:
Feasible指定变量或 SOS 为整数可行。ImpliedFeasible表示变量或 SOS 已被预分解。 当所有其他整数变量或 SOS 都是整数可行时,它才是可行的。Infeasible表示变量或 SOS 的整数不可行。另请参阅:
IloCplex,ControlCallbackI::IntegerFeasibilityArray
| 字段 |
|---|
ImpliedInfeasible = -1 | |
Feasible = CPX_INTEGER_FEASIBLE | |
Infeasible = CPX_INTEGER_INFEASIBLE | |
ImpliedFeasible = CPX_IMPLIED_INTEGER_FEASIBLE |
| 内部类型定义细节 |
|---|
IloArray< IntegerFeasibility > IntegerFeasibilityArray
该类型为 "IloCplex::ControlCallbackI::IntegerFeasibility定义了一个数组类型。 整数可行性数组的完整限定名称是 "IloCplex::ControlCallbackI::IntegerFeasibility::Array。
另请参阅:
IloCplex,IloCplex::ControlCallbackI,ControlCallbackI::IntegerFeasibility