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

这是一个高级班。 高级课程通常要求对 CPLEX 使用的算法有深刻的理解。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 因此,团队鼓励您仔细考虑是否可以用其他类来完成同样的任务。
在分支切割搜索过程中,"IloCplex::SolveCallbackI类的实例可用于解决子问题(例如节点和启发式子问题)。 它允许你设置求解的起点或按节点选择算法。
该类的方法受保护,用于派生用户编写的回调类和实现其中的 "main方法。
如果试图访问本类实例无法访问的信息,则会出现异常。
另请参阅:
IloCplex,IloCplex::Callback,IloCplex::CallbackI,IloCplex::ControlCallbackI,IloCplex::OptimizationCallbackI,ILOSOLVECALLBACK0
| 方法概要 | |
|---|---|
public IloCplex::CplexStatus | getCplexStatus() const |
public IloAlgorithm::Status | getStatus() const |
protected Callback::Type | getType() const |
public IloBool | isDualFeasible() const |
public IloBool | isPrimalFeasible() const |
public void | setStart(const IloNumArray x, const IloIntVarArray var, const IloNumArray pi, const IloRangeArray rng) |
public void | setStart(const IloNumArray x, const IloNumVarArray var, const IloNumArray pi, const IloRangeArray rng) |
public IloBool | solve(IloCplex::Algorithm alg=Dual) |
protected | SolveCallbackI(IloEnv env) |
public void | useSolution() |
从 "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 |
| 方法详细信息 |
|---|
该构造函数创建了一个回调函数,用于在分支切割搜索过程中求解节点 LP 的应用程序。
该方法返回最后一次调用 "SolveCallbackI::solve(可能在回调中直接调用,也可能在处理节点时由 "IloCplex调用)时,当前节点上 "IloCplex实例的 CPLEX 状态(即节点上优化器的状态)。
枚举 "IloCplex::CplexStatus列出了可能的状态值。
该方法返回当前节点上的 "IloCplex实例在最后一次调用 "SolveCallbackI::solve(可能在回调中直接调用,也可能在处理节点时由 "IloCplex调用)时找到的解决方案的状态。
枚举 "IloAlgorithm::Status 列出了可能的状态值。
如果最后一次调用 "solve提供的解决方案是双可行的,则此方法返回 "IloTrue。 请注意,返回值为 "IloFalse并不一定意味着解决方案不具有对偶可行性。 这仅仅意味着,相关算法在终止时无法得出双重可行的结论。
如果最后一次调用 "solve提供的解是原始可行的,则此方法返回 "IloTrue。 请注意,返回值为 "IloFalse并不一定意味着解的初等可行。 这仅仅意味着,相关算法在终止时无法得出其原始可行的结论。
该方法允许用户在解回调中指定 "solve方法后续调用的起点。 任何参数都可以为零。 但是,如果 "x不为零,那么 "var也一定不为零。 同样,如果 "pi不为零,那么 "rng也一定不为零。
如果 CPLEX 正在求解 MIP,且参数 "pi不为零,则必须禁用预溶解。 如果不在这些条件下禁用预分解,那么当 "set方法无法将原始模型的 pi 向量转换成预分解模型的适当值时,就会失败。
对于 "var中的所有变量,"x[i]指定变量 "var[i]的起始值。 同样,对于 "rng中指定的所有范围约束,"pi[i]指定了 "rng[i]的起始对偶值。
CPLEX 在下一次调用 "solve时会使用这些信息来构建算法的起点。
该方法允许用户在解回调中指定 "solve方法后续调用的起点。 任何参数都可以为零。 但是,如果 "x不为零,那么 "var也一定不为零。 同样,如果 "pi不为零,那么 "rng也一定不为零。
如果 CPLEX 正在求解 MIP,且参数 "pi不为零,则必须禁用预溶解。 如果不在这些条件下禁用预分解,那么当 "setStart方法无法将原始模型的 pi 向量转换成预分解模型的适当值时,就会失败。
对于 "var中的所有变量,"x[i]指定变量 "var[i]的起始值。 同样,对于 "rng中指定的所有范围约束,"pi[i]指定了 "rng[i]的起始对偶值。
CPLEX 在下一次调用 "solve时会使用这些信息来构建算法的起点。
该方法使用 "alg算法求解当前节点 LP。 请参阅 "IloCplex::Algorithm,选择使用的算法。
调用此方法将指示 "IloCplex使用通过回调生成的解决方案。
如果未调用 "useSolution,"IloCplex将使用参数 "IloCplex::RootAlg选择的算法求解根节点,或使用参数 "IloCplex::NodeAlg求解节点。
此方法返回调用回调对象的回调类型。