PuLP接口
PuLP 是基于Python编程语言的开源优化建模语言, 主要用于对整数线性规划问题进行建模求解。本章介绍了如何在PuLP中使用杉数求解器。
安装说明
在PuLP中调用杉数求解器进行求解之前,用户需要正确安装与配置PuLP和杉数求解器。PuLP目前支持 Python 2.7及之后的Python版本。用户可以从 Anaconda发行版 或者 Python官方发行版 下载并安装Python。我们推荐用户 安装Anaconda发行版,因为它对Python新手使用更加友好与方便。
使用conda安装
我们推荐安装了Anaconda发行版Python的用户使用它自带的 conda
工具安装PuLP,
在Windows的命令行或者Linux和MacOS上的终端中执行下述命令即可:
conda install -c conda-forge pulp
使用pip安装
用户也可以通过标准的 pip
工具安装PuLP,在Windows的命令行或者Linux和MacOS的终端中
执行下述命令即可:
pip install pulp
配置PuLP接口
PuLP 最新版本 V2.8.0 及以上版本支持直接调用COPT。用户需提前安装并配置好杉数求解器后,接着:
from pulp import *
在PuLP中,指定 solver = COPT()
,即可调用杉数求解器进行求解:
solver = COPT()
result = prob.solve(solver)
注意:
通过
solver = COPT()
这种方式在PuLP中调用COPT,依赖于COPT的Python接口,需要安装coptpy
;通过指定:
solver = COPT_DLL(), solver = COPT_CMD()
也可以调用COPT进行求解,依赖于COPT的安装包。
功能介绍
杉数求解器的PuLP接口提供了命令行调用和动态库调用两种方式,分别介绍如下:
命令行调用方式
PuLP接口的命令行调用方式实际上调用了杉数求解器的交互式命令行工具 copt_cmd
进行求解,
该方式下PuLP生成模型对应的MPS格式文件,结合用户传入的参数设置,生成命令行调用命令。
求解完成后,输出结果文件并读取结果,赋值给相应的变量并传回PuLP。
命令行调用方式相关功能封装为Python类 COPT_CMD
,用户可在创建类的对象时设置参数控制
求解过程,目前主要提供了以下参数:
keepFiles
该选项控制是否保留生成的临时文件。默认值为
0
,即不保留临时文件。mip
该选项控制是否支持求解整数规划模型。默认值为
True
,即支持求解整数规划。msg
该选项控制是否在屏幕打印日志信息。默认值为
True
,即打印日志信息。mip_start
该选项控制是否使用整数规划初始解信息。默认值为
False
,即不使用初始解信息。logfile
该选项指定求解器日志。默认值为
None
,即不生成求解器日志。params
该选项以
key=value
形式设置优化参数。请用户查看 参数 章节查看 目前支持的优化参数。
动态库调用方式
PuLP接口的动态库调用方式直接调用杉数求解器算法动态库进行求解,该方式下将获取PuLP生成的 模型信息并调用相应的接口函数加载模型到杉数求解器,结合用户传入的参数设置,进行优化求解。 求解完成后,通过调用接口函数获取求解结果,赋值给相应的变量和约束并传回PuLP。
动态库调用方式相关功能封装为Python类 COPT_DLL
,用户可在创建类的对象时设置参数控制
求解过程,目前主要提供了以下参数:
mip
该选项控制是否支持求解整数规划模型。默认值为
True
,即支持求解整数规划。msg
该选项控制是否在屏幕打印日志信息。默认值为
True
,即打印日志信息。mip_start
该选项控制是否使用整数规划初始解信息。默认值为
False
,即不使用初始解信息。logfile
该选项指定求解器日志。默认值为
None
,即不生成求解器日志。params
该选项以
key=value
形式设置优化参数。请用户查看 参数 章节查看 目前支持的优化参数。
此外,还提供了以下类方法:
setParam(self, name, val)
设置优化求解参数。
getParam(self, name)
获取优化求解参数。
getAttr(self, name)
获取模型的属性信息。
write(self, filename)
输出MPS/LP格式模型文件、COPT二进制格式文件、结果文件、基解文件、初始解文件和参数设置文件。