我对标准的CPLEX Python界面特别感兴趣。一种显而易见的方法是使用try: ... except: ...
块并在程序中使用超过1000个变量。但我希望采用更清洁的方法,更直接的方法。
答案 0 :(得分:1)
从CPLEX的最新版本(目前为12.8)开始,没有方法可以告诉您是否使用了社区版(CE)。
正如您所建议的那样,您可以使用try-except块来捕获您在尝试解决对CE来说太大的模型时可能遇到的错误。错误代码为CPXERR_RESTRICTED_VERSION。但是,听起来您正在尝试主动确定用户是否正在运行CE。相反,你应该懒洋洋地检查一下。也就是说,如果用户具有CE,则不要创建一个创建具有超过1000个变量的虚拟模型的方法,以便提前找出。如果出现异常,只需处理。这符合Python中的EAFP原则。例如,您可以执行以下操作:
import cplex
from cplex.exceptions import CplexSolverError, error_codes
# Build the model
model = cplex.Cplex()
# Add variables, constraints, etc.
try:
model.solve()
except CplexSolverError as cse:
# Check whether the model exceeds problem size limits (i.e.,
# the user has Community Edition). The following demonstrates
# how to handle a specific error code.
if cse.args[2] == error_codes.CPXERR_RESTRICTED_VERSION:
print("The current problem is too large for your version of "
"CPLEX. Reduce the size of the problem.")
else:
raise
另一个想法是在解决之前计算变量并发出警告。类似的东西:
if model.variables.get_num() > 1000:
print("Warning: this model may be too large for your version of CPLEX.")