目录
1.到杉树科技官网申请下载COPT
2.安装COPT&配置许可文件
3.在jupyter中使用COPT的python接口
最近看到一本和数学建模有关的新书:《数学建模与数学规划:方法、案例及编程实战》,作为数学建模老手,肯定要学习一下,这本书是国内为数不多的针对优化、规划类数学建模问题的实战教材,使用python语言,COPT和GUROBI求解器。
之前一直使用gurobi求解规划问题,这次正好是一个学习国产求解器杉树COPT的好机会,遂安装试用。以下是自己快速下载、安装的过程,从下载到安装到Anaconda自定义的环境中总花费时间不超过20分钟。
1.到杉树科技官网申请下载COPT
试用杉数求解器COPT-杉数科技
学生可以凭借学校邮箱申请学术用户,365天免费试用。
按照指示填写信息即可:
注意填写用户账号的时候,windows直接打开cmd窗口,可以得到计算机用户名,杉树官网下面也给出了具体获取的步骤,很贴心,这一步是因为软件的license试用许可仅在一台机器使用,并且会绑定计算机的用户名。
echo %USERNAME%
2.安装COPT&配置许可文件
点击提交申请之后,就可以在自己的学生邮箱中查看邮件了,邮记得下载软件许可文件和安装包。邮件里面有两个下载链接,直接下载这个-installer的压缩包就行,解压之后运行安装程序,可以自动完成一些安装工作(在邮件里面没有解释,在用户手册里面有解释,邮件里面有两个下载链接,-installer可以自动给配置环境变量。用户册在安装的位置下的docs/copt-userguide_cn.pdf)
解压-installer文件夹,双击下面的安装程序,进行安装
安装程序安装过程简单,只需注意安装位置的选择即可,可以默认C盘,也可自定义安装位置。注意,安装之后要重启计算机,注意保存其它文件。
到这还没完,还要配置许可文件,在用户目录下(用户目录C:\Users\用户名)新建一个名为copt的文件夹,将邮件中的license.dat和license.key移动到这个文件夹下(这个步骤在用户手册的第16页,直接看16页就行)
注:用户手册14页应该是有个问题,邮件里面有许可文件了,应该不需要获取许可了,应该是少打了一个“无”字,杉树老师们可以看过来,是不是可以给用户手册勘误一下。
最后验证一下安装配置是否完成(用户手册20页),打开cmd,输入copt_cmd,显示以下界面,即可。
3.在jupyter中使用COPT的python接口
这里由于我只想安装到我自己已有的anaconda环境中,步骤如下:
打开Anaconda powershell Prompt
conda activate 环境名称
cd E:/copt72/lib/python
python setup.py install
就是先激活自己的环境,然后进入自己的copt安装文件位置下的python文件夹,运行里面的setup.py文件,即可安装coptpy和相关依赖包。
最后,验证是否能使用,cd进入安装文件夹下的examples/python文件夹,运行lp_ex1.py文件,显示如下的计算结果,证明安装coptpy包安装成功
最后可以打开jupyter,写一下示例代码,没有报错,执行成功!可以继续按照书进行学习啦!
import coptpy as cp
from coptpy import COPT
# Create COPT environment
env = cp.Envr()
# Create COPT model
model = env.createModel("lp_ex1")
# Add variables: x, y, z
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
model.setObjective(1.2*x + 1.8*y + 2.1*z, sense=COPT.MAXIMIZE)
# Set parameter
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))
# 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")