使用 Pyomo 调用时显示 HiGHS 解算器输出

问题描述 投票:0回答:1

我想显示有关使用 HiGHS 求解器与 Pyomo 时的求解过程的信息。

通常,对于其他求解器,例如

gurobi
cbc
,当设置标志
tee=True
时,会显示有关问题、求解器状态等的更多信息。但对于
highs
来说,该标志似乎不起作用,而且我也无法在 HiGHS 文档 中找到正确的选项。

这是一个改编自Pyomo论坛的小例子

from pyomo.environ import *


# Create model object
model = ConcreteModel()

# Declare decision variables
model.l = Var(within=NonNegativeReals)
model.g = Var(within=NonNegativeReals)

# Declare objective function
model.maximizeProfit = Objective(expr=200 * model.l + 300 * model.g,
sense=maximize)

# Declare constraints
# Farmer Brown has only 100 hours
model.LaborConstraint = Constraint(expr=3 * model.l + 2 * model.g <= 100)
# He only has $120 for medical
model.MedicalConstraint = Constraint(expr=2 * model.l + 4 * model.g <= 120)
# He only has 45 acres
model.LandConstraint = Constraint(expr=model.l + model.g <= 45)

# Show all available solvers
print(SolverFactory.__dict__["_cls"].keys())
print("")

# Test for availability of solver
my_solver = "highs"
if SolverFactory(my_solver).available():
    print("Solver " + my_solver + " is available.")
else:
    print("Solver " + my_solver + " is not available.")

optimizer = SolverFactory(my_solver)
optimizer.solve(model, options={"threads": 4}, tee=True)

model.display()

分别

requirements.txt
:

pyomo==6.7.1
highspy==1.5.3

有关如何获取求解器输出的任何提示?

提前致谢!

pyomo highs
1个回答
0
投票

当前

highspy
Python 绑定存在一些限制,阻碍了 Pyomo
tee
功能的正常运行。 Pyomo 的
tee
选项使用多重处理来监视和重定向求解器输出(到屏幕和日志文件)。不幸的是,当前的
highspy
接口在求解过程中不会释放 Python GIL。这意味着通常处理输出流并传递输出的线程在求解过程中实际上处于死锁状态。目前还没有很好的解决方法。

许多 Pyomo 问题(#3031#3084)正在对此进行跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.