CPLEX:如何以编程方式检查用户是在运行Community Edition还是完整版?

时间:2018-01-25 15:30:21

标签: python cplex

我对标准的CPLEX Python界面特别感兴趣。一种显而易见的方法是使用try: ... except: ...块并在程序中使用超过1000个变量。但我希望采用更清洁的方法,更直接的方法。

1 个答案:

答案 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.")