目录
- 前言
- 一、简介以及安装
- 二、COPT交互式命令行工具
- 2-1、普通工具命令
- 2-2、COPT工具命令
- 三、使用示例
- 3-1、交互模式
- 3-2、Windows下终端窗口直接加载
- 四、Python接口
- 4-1、安装
- 4-2、案例分析
- 五、COPT调优工具
- 5-1、介绍
- 5-2、调优工具相关参数
- 六、Python API参考
- 6-1、COPT常数类
- 总结
前言
杉数求解器是一款针对大规模优化问题的高效数学规划求解器。(主要是因为有详尽的文档!)
一、简介以及安装
简介:杉数求解器目前支持求解线性规划 (LP) 问题、二阶锥规划 (SOCP) 问题、凸二次规划(QP)问题、凸二次约束规划(QCP)问题、半定规划(SDP)问题、混合整数线性规划(MILP)、混合整数二阶锥规划(MISOCP)、混合整数凸二次规划 (MIQP)、混合整数凸二次约束规划(MIQCP)问题,并且支持各类主流语言、支持所有主流的操作系统。
下载安装:使用杉数求解器之前,用户需要下载并安装杉数求解器到计算机中。如果还未下载软件,请用户访问软件官方申请页面. 按照说明进行申请。(链接在文章结尾),申请通过后,会得到一份邮件。目前,杉树求解器提供了四种许可类型,以下以个人许可、在Windows上的安装为例,其他许可请查看官方说明文档。
- 邮件中会提供杉数求解器安装包的下载链接及授权通过的密钥信息,该密钥信息与用户申请信息一一对应。推荐直接下载第一个可执行程序,傻瓜式安装即可。
- 申请者需要根据本章内容安装杉数求解器并配置许可文件,以下以在Windows配置许可为例子,打开cmd终端,到杉树求解器的bin目录下,我的在D:\ShanShuQiujieqi\copt60\bin,使用命令获取到许可文件。
copt_licgen -key 这里填写密钥信息
- 许可通过后,生成 license.dat 和 license.key 授权文档并下载到用户计算机,默认下载目录为当前工作目录。输入如下命令检验许可文件是否安装成功。
copt_licgen -v
- 最后一步,将license.dat 和 license.key 授权文档复制,粘贴到copt60目录下。
二、COPT交互式命令行工具
简介:COPT 交互式命令行工具 copt_cmd 是一个由杉数求解器提供的,与 Windows、Linux 和 MacOS 下终端无缝连接的、可以直接调用杉数求解器编程接口进行模型求解与分析的工具。使用该工具前,请用户确保已正确安装杉数求解器,并成功配置授权文档。简单来说,COPT 交互式命令行工具是一个对从终端输入或脚本读入的命令行进行解释并执行的程序。它调用相应的杉数求解器编程接口进行求解与分析,并提供了以下启动参数:
- -c: 该选项读取并执行指定的内联脚本内容。注意,内联脚本需要带双引号。
- -i: 该选项读取并执行指定的脚本文件。(在外部可以使用copt_cmd -i diet.in来执行diet.in命令脚本。)
- -o: 该选项提供了脚本录制功能。任何在“交互模式”下“执行正确”的命令都会输出到指定的脚本文件中,文件后缀无特殊要求。
2-1、普通工具命令
cd: 类似 DOS 命令 'cd' ,该命令改变 '当前工作目录' 。
dir/ls: 类似 DOS 命令 dir 和 Bash 命令 ls ,该命令列出给定的相对或绝对路径下的所有文件和文件夹。
exit/quit: 退出 COPT 命令行模式。
help: 提供 COPT 命令的使用说明。查阅单个命令的详细使用说明,
load: 读入给定路径下的脚本文件或者带引号的内联脚本,执行直到文件结尾或暂停字符 '?' 。暂停后,如果继续输入 load 命令,无论是否带参数(实际上任何参数都会被忽略),均继续执行被暂停的脚本。之前加载的脚本执行完成后,才可以加载其它脚本。
pwd: 类似 Bash 命令 'pwd' ,该命令显示当前工作目录,可以让用户查看目前在什么位置。
2-2、COPT工具命令
display/get: 获取给定的参数或属性的当前值。特别地,对于不带参数名的调用,会列出目前所有支持的参数和属性名称,方便不熟悉 COPT 参数和属性名的用户查看其所需的信息,
opt/optimize: 求解已读入的模型,并将工具状态置为 'Optimize'。
read: 读取给定的相对或绝对路径下的模型文件、结果文件、基文件、初始解文件和参数设置文件。目前支持 '.mps' 、'.mps.gz' 、'.lp' 和 '.lp.gz' 、'.dat-s' 和 '.dat-s.gz' 、'.cbf' 和'.cbf.gz' 、'.bin' 和 '.bin.gz' 模型文件格式;以 '.sol' 为后缀的结果文件;以 '.bas' 为后缀的基解文件;以 '.mst' 为后缀的初始解文件;以 '.par' 为后缀的参数设置文件;以 '.tune'为后缀的调参文件。
readmps: 读取给定的相对或绝对路径下的模型文件。该命令不要求待读取的文件后缀为 '.mps' 或'.mps.gz' ,只要文件本身符合 MPS 格式即可。命令调用完成后将工具状态置为 'Read' 。
set: 设置给定的 COPT 参数的当前值。该命令的完整语法形如:'set TimeLimit 100' 。特别地,对于不带参数名的调用,将列出目前所有参数的名称和简介。
(后续补充)
三、使用示例
3-1、交互模式
- Windows下终端窗口输入copt_cmd加载copt终端
- 输入read diet.mps读取待求解模型。
- 输入set timelimit 10设置COPT的求解参数。
- 输入opt工具命令来求解当前优化模型。
- 使用get命令获取到相关参数
- 输入writesol diet把求解结果输出到指定文件
- 输出quit退出交互界面
3-2、Windows下终端窗口直接加载
直接在终端窗口使用copt_cmd -i diet.in来加载脚本。(diet.in脚本包含了上述命令)
四、Python接口
4-1、安装
pip install coptpy
4-2、案例分析
案例如下:
源码:
# This file is part of the Cardinal Optimizer, all rights reserved.
# 导入python接口库
from coptpy import *
# Create COPT environment
# 创建环境
env = Envr()
# Create COPT model
# 创建问题
model = env.createModel("lp_ex1")
# Add variables: x, y, z
# 添加变量,创建变量时允许同时指定变量在目标函数中的系数、变量上下界等信息。本示例中创建变量时仅指定上下界和名称信息。其他为默认值。
# lb——下限
# ub——上限
x = model.addVar(lb=0.1, ub=0.6, name="x")
y = model.addVar(lb=0.2, ub=1.5, name="y")
z = model.addVar(lb=0.3, ub=2.8, name="z")
# Add constraints
# 添加约束,添加变量成功后,进一步添加作用于变量的约束条件。
model.addConstr(1.5*x + 1.2*y + 1.8*z <= 2.6)
model.addConstr(0.8*x + 0.6*y + 0.9*z >= 1.2)
# Set objective function
# 设置目标函数
# sense 目标函数模式,COPT.MAXIMIZE这里代指最大化。
model.setObjective(1.2*x + 1.8*y + 2.1*z, sense=COPT.MAXIMIZE)
# Set paramete
# 设置求解参数
# COPT.Param.TimeLimit: 时间限制,这里设置为10秒
model.setParam(COPT.Param.TimeLimit, 10.0)
# Solve the model
# 求解模型
model.solve()
# Analyze solution
# 分析结果
# 首先获取模型的求解状态,若状态为找到了最优解
if model.status == COPT.OPTIMAL:
# 则输出目标值
print("Objective value: {}".format(model.objval))
#
allvars = model.getVars()
print("Variable solution:")
# 输出各个变量的值
for var in allvars:
print(" x[{0}]: {1}".format(var.index, var.x))
print("Variable basis status:")
# 输出变量的基本状态信息。
for var in allvars:
print(" x[{0}]: {1}".format(var.index, var.basis))
# 用户可以将当前求解的模型保存为标准的MPS模型文件,以及输出变量结果文件、基状态信息文件和修改过的参数文件。
# Write model, solution and modified parameters to file
model.write("lp_ex1.mps")
model.write("lp_ex1.bas")
model.write("lp_ex1.sol")
model.write("lp_ex1.par")
输出:
五、COPT调优工具
5-1、介绍
对于支持的优化问题类型,杉数求解器 COPT 调优工具可以进行求解性能的自动调优。
5-2、调优工具相关参数
TuneTimeLimit: 参数调优的时间限制
TuneTargetTime:参数调优的时间目标
TuneMethod: 参数调优的方法
TuneMode: 参数调优的模式
TuneMeasure: 参数调优的计算方式
六、Python API参考
6-1、COPT常数类
简介:一般常数定义了建模常用的常数,包括优化方向、变量类型和求解状态等。用户通过 COPT 前缀访问一般常数。,如 COPT.VERSION_MAJOR 表示软件大版本号信息。
MAXIMIZE: 最大化目标函数
MINIMIZE:最小化目标函数
INFINITY:代表无边界的量的默认值 (1e30),即代表的是最大常数
# 变量类型
CONTINUOUS: 连续变量
BINARY:二进制变量
INTEGER:整数变量
参考文章:
杉树求解器官网——https://www.shanshu.ai/copt.
总结
过年后要上一周班,好累!