最近看 cplex 在 java 的 callback,发现它给的 callback 例子中,都是用 IloLPMatrix 这个类放约束条件,在 IloLPMatrix 中, 每个约束条件存储在 IloRange 中。
使用 IloLPMatrix 的好处是,这个类可以方便查看模型中的求解变量,约束条件。这种形式下,约束条件必须以 IloRange 形式添加。虽然 cplex 可以直接通过 addLe, addEq, addGe 添加约束条件,但这种方式没有 IloLPMatrix 功能多。
虽然 java 可以把 mps 或者 lp 格式的文件转化成 IloLPMatrix,但若在同一个 java 文件中先输出 mps 文件,再转化成 IloLPMatrix 总是会转化错误。除非在运行 java 时,通过在 run configuration 中把输入参数给为 mps 文件名,才能正确转换。非常奇怪,这难道是一个小bug?我见 python 或 c++ 不存在这个问题。