RuntimeError: Cannot write legal LP file. Objective 'Maximum_profit' has nonlinear terms that are not quadratic
RuntimeError: Cannot write legal LP file. Objective 'Maximum_profit' has nonlinear terms that are not quadratic
我使用 pyomo 和 gurobi 来解决非线性优化问题。
但是当我 运行 我的代码时,我得到这个错误:
RuntimeError: Cannot write legal LP file. Objective 'Maximum_profit' has nonlinear terms that are not quadratic.
(我在线性优化问题中使用gurobi作为求解器时没有任何问题。)
我的 objective 函数是:
Maximum_profit=pyo.Objective(doc="Profit Maximization", rule=lambda model: sum(pyo.log10(1+sum(pyo.log10(1.0 + model.t[i,k]) for i in model.N)) for k in model.J) - sum(sum(model.t[i,k] * model.p[i,k] for k in model.J) for i in model.N),sense=-1)
我该如何解决?
Gurobi 无法求解非线性优化模型(某些二次模型实例除外)。对于 objective 中的对数项,您需要一个可以处理它们的求解器,例如 BARON 或 IPOPT。
免责声明:我为 Gurobi 工作。
这里的问题是 pyomo,因为 Gurobi 能够解决非凸混合整数二次约束二次规划问题。特别是,问题出现在文件 cpxlp.py
中,该文件最初只处理写入 CPLEX LP 文件,但现在还处理 Gurobi 的 LP 文件。在那里,在第 500-650 行,您可以看到所有适用的限制,这就是抛出异常的地方。
我将 post 一个 github 问题(如果尚不存在的话),希望能澄清这一点。
我使用 pyomo 和 gurobi 来解决非线性优化问题。 但是当我 运行 我的代码时,我得到这个错误:
RuntimeError: Cannot write legal LP file. Objective 'Maximum_profit' has nonlinear terms that are not quadratic.
(我在线性优化问题中使用gurobi作为求解器时没有任何问题。) 我的 objective 函数是:
Maximum_profit=pyo.Objective(doc="Profit Maximization", rule=lambda model: sum(pyo.log10(1+sum(pyo.log10(1.0 + model.t[i,k]) for i in model.N)) for k in model.J) - sum(sum(model.t[i,k] * model.p[i,k] for k in model.J) for i in model.N),sense=-1)
我该如何解决?
Gurobi 无法求解非线性优化模型(某些二次模型实例除外)。对于 objective 中的对数项,您需要一个可以处理它们的求解器,例如 BARON 或 IPOPT。
免责声明:我为 Gurobi 工作。
这里的问题是 pyomo,因为 Gurobi 能够解决非凸混合整数二次约束二次规划问题。特别是,问题出现在文件 cpxlp.py
中,该文件最初只处理写入 CPLEX LP 文件,但现在还处理 Gurobi 的 LP 文件。在那里,在第 500-650 行,您可以看到所有适用的限制,这就是抛出异常的地方。
我将 post 一个 github 问题(如果尚不存在的话),希望能澄清这一点。