回调 - 访问约束矩阵系数
Callback - Access constraints matrix coefficients
我正在使用 JuMP 0.21.1 和 CPLEX 求解整数线性规划。我正在使用回调来添加用户削减。在此回调中,我想访问以下信息:
- 约束数量(随着我添加用户削减而变化);
- 变量个数;
- 约束矩阵的系数值;
- 右侧约束的系数值。
我可以使用全局变量来获取这些信息,但它会降低性能,因为这些值不是恒定的(当我添加用户削减时,约束的数量会增加)。
在 JuMP 文档中指定我可以获得的唯一信息是变量的当前值,如果我需要任何其他信息,我必须创建一个依赖于求解器的回调。
我在 CPLEX.jl github 存储库的 the documentation but it does not really help me. I also found the cplex_callback.jl 中看到了 GLPK 回调,这看起来很有前途,因为有一个函数 "setcallbackcut" 其中包含一个参数 rhs 等.但是,我不知道怎么用...
你能告诉我我该怎么做吗?或者我在哪里可以找到示例?
这里是使用 CPLEX 的求解器相关回调和用户切割的示例。
请注意,CPLEX.jl 只是包装了 CPLEX 的 C API,因此您只能使用它的功能。这是文档:
https://www.ibm.com/support/knowledgecenter/SSSA5P_12.10.0/ilog.odms.cplex.help/refcallablelibrary/mipapi/hpMIPcallbacks.html
特别是
number of constraints (which varies as I add user cuts)
因为不能保证 CPLEX 会添加您提供的剪辑。为什么回调中需要系数和 RHS 项?
请注意,为避免使用全局变量,只需将所有内容包装在一个函数中以创建一个闭包。例如,在下面可以在回调中访问和修改变量 calls
。
function build_and_run_model()
# ...
calls = 0
function my_callback(cb_data, cb_where)
calls += 1
# ...
end
# ...
end
我正在使用 JuMP 0.21.1 和 CPLEX 求解整数线性规划。我正在使用回调来添加用户削减。在此回调中,我想访问以下信息:
- 约束数量(随着我添加用户削减而变化);
- 变量个数;
- 约束矩阵的系数值;
- 右侧约束的系数值。
我可以使用全局变量来获取这些信息,但它会降低性能,因为这些值不是恒定的(当我添加用户削减时,约束的数量会增加)。
在 JuMP 文档中指定我可以获得的唯一信息是变量的当前值,如果我需要任何其他信息,我必须创建一个依赖于求解器的回调。
我在 CPLEX.jl github 存储库的 the documentation but it does not really help me. I also found the cplex_callback.jl 中看到了 GLPK 回调,这看起来很有前途,因为有一个函数 "setcallbackcut" 其中包含一个参数 rhs 等.但是,我不知道怎么用...
你能告诉我我该怎么做吗?或者我在哪里可以找到示例?
这里是使用 CPLEX 的求解器相关回调和用户切割的示例。
请注意,CPLEX.jl 只是包装了 CPLEX 的 C API,因此您只能使用它的功能。这是文档: https://www.ibm.com/support/knowledgecenter/SSSA5P_12.10.0/ilog.odms.cplex.help/refcallablelibrary/mipapi/hpMIPcallbacks.html
特别是
number of constraints (which varies as I add user cuts)
因为不能保证 CPLEX 会添加您提供的剪辑。为什么回调中需要系数和 RHS 项?
请注意,为避免使用全局变量,只需将所有内容包装在一个函数中以创建一个闭包。例如,在下面可以在回调中访问和修改变量 calls
。
function build_and_run_model()
# ...
calls = 0
function my_callback(cb_data, cb_where)
calls += 1
# ...
end
# ...
end