优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

这篇具有很好参考价值的文章主要介绍了优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者: 刘兴禄,清华大学,清华伯克利深圳学院博士在读

欢迎关注我们的微信公众号 运小筹

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

前言

最近杉数求解器发布了4.0.2版本。著名的优化求解器benchmark测评的官网也更新了最近的榜单。

网址如下:
Benchmarks for Optimization Software - Hans Mittelmann
http://plato.asu.edu/bench.html

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

线性规划(LP)测试榜单–单纯形法: Benchmark of Simplex LP solvers

单纯形法目前COPT排名第一,阿里的MindOpt紧随其后,Gurobi排名第三。COPT略微领先于MindOpt。COPT、MindOpt、Gurobi是榜上唯三的解决了所有的40个问题的3个求解器。

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

线性规划(LP)测试榜单–内点法: Benchmark of Simplex LP solvers

内点法目前COPT也是在榜单中排名第一,Gurobi紧跟其后,差距非常小。优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

混合整数规划(MIP)测试榜单

MIP的benchmark数据集有3个,如下图所示。
优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
我们只看第一个,也就是MILP Benchmark - MIPLIB2017 (2-5-2022)

根据结果可知,在MILP Benchmark - MIPLIB2017 (2-5-2022)测试榜单中,Gurobi稳居第一,以较大优势领先其他求解器。 COPT排名第二,跟Gurobi任然有一些差距。运行速度方面

  • 在单线程(1 thread):Gurobi:COPT = 1: 4.19;
  • 在8线程(8 threads):Gurobi:COPT = 1: 3.50。

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
可见COPT目前速度也已经慢慢具有较强的竞争力,大家可以去愉快地尝试使用了。小编也是期待了很久,最近也决定尝试学习和使用COPT了。

看完了这些,我们来进入主题,开始COPT的安装、配置和测试。

COPT的申请、安装、配置和测试

COPT的许可(license)以及安包申请

同学们可以在下面的网址填写信息申请License和安装包,目前网址不支持直接下载安装包。COPT会通过邮件的方式将安装包和license发送给你。

  • 申请网址: https://www.shanshu.ai/copt

申请界面如下:

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

注意事项:
申请界面的用户账号, 需要通过上图中如何获取用户账号名称里面的方法获得,不要想当然的乱写,否则申请测license是不匹配的。

  1. 如果用学校的邮箱申请。license是365天。
  2. 如果是用自己的163,qq, gmail等邮箱申请,License的有效期是6个月。
    这是之前用163邮箱申请的情况
    优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
    这是用学校邮箱申请的情况
    优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

COPT的安装

上图提供了两个链接,分别是

  • https://pub.shanshu.ai/download/copt/4.0.2/win64/CardinalOptimizer-4.0.2-win64-installer.zip
  • https://pub.shanshu.ai/download/copt/4.0.2/win64/CardinalOptimizer-4.0.2-win64.zip
    建议下载第二个,这个比较方便。原因是:第二个不用自己配置环境变量,COPT在安装的过程种会自动地配置环境变量。

下载之后,我们解压安装即可。

安装界面就是一直next就好,这里不再赘述。

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

COPT许可配置

COPT必须要配置相应的许可文件才能正常使用。license就在回复你的邮件中,如下图所示
优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
配置许可的方法就是

  1. 以管理员身份打开命令行win+R + cmd
  2. 切换到COPT的安装目录下,如果你没有修改目录的话,默认目录是C:\Program Files\COPT",我们执行命令cd C:\Program Files\COPT
  3. 执行命令:copt_licgen -key 你的license,例如
    copt_licgen -key copt_licgen -key 19200817f147gd9f60abc791def047fb
    注意中间的空格。
  4. 执行完毕后,你的用户根目录下会自动生成两个授权文件:license.datlicense.key
    这两个文件你可以通过搜索找到,也可以直接到相应目录下去找。我的电脑是在这里
    优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
  5. 完成这一步,别忘了最后一步。将license.datlicense.key拷贝到COPT的安装目录下,也就是拷贝到C:\Program Files\COPT"下。如下图。大功告成!可以开始写代码了。
    优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

COPT求解优化模型的测试: python接口

我们用一个非常简单的线性规划模型来测试一下。

例子如下:
max ⁡ 8 x 1 + 5 x 2 s . t . x 1 + x 2 ⩽ 6 9 x 1 + 5 x 2 ⩽ 45 x 1 , x 2 ⩾ 0 \begin{aligned} \max \quad & 8x_1 + 5x_2 \\ s.t. \quad & x_1 + x_2 \leqslant 6 \\ & 9x_1 + 5x_2 \leqslant 45 \\ & x_1, x_2 \geqslant 0 \end{aligned} maxs.t.8x1+5x2x1+x269x1+5x245x1,x20

Python调用COPT建模的程序跟其他求解器基本一致,但是不同于Gurobi,COPT需要首先创建一个环境(也就是创建一个Envr 类的实例),然后用这个Envr实例,调用函数createModel来建立模型。下面是一个例子:

from coptpy import * 

# Create COPT environment 
env = Envr()

# create model
model = env.createModel("LP example") 

建模过程主要用到的函数如下:

  • 创建环境+创建模型: Envr()Envr.createModel(name)
  • 创建决策变量: Model.addVar(lb=0.0, ub=COPT.INFINITY, obj=0.0, vtype=COPT.CONTINUOUS, name="", column=None)
  • 设置目标函数:Model.setObjective(expr, sense=None)
  • 添加约束:Model.addConstr(lhs, sense=None, rhs=None, name="")
  • 创建线性表达式: LinExpr(arg1=0.0, arg2=None)
    – 注意,COPT中,LinExpr对象的addTerm()函数,第一个位置是系数(coef),第二个位置是变量(var),比如
    expr = LinExpr();
    expr.addTerm(1, x_1);
  • 求解模型:Model.solve()注意,目前4.0.2版本及更早的版本,暂时还不支持callback。
  • 设置求解参数(求解时间,Gap等): Model.setParam(paramname, newval)
    – 设置求解时间:m.setParam(COPT.Param.TimeLimit, 3600)
    – 设置求解MIP的求解Gap:model.setParam(COPT.Param.RelGap, 0.1)
  • 输出目标值:model.objval
  • 输出解的值和变量名
    Model.getVars():获得模型的所有变量;
    var.index:获得变量的index,这个不同于变量名,只是一个序号;
    var.x: 获得变量在最优解中的取值;
    var.getName(): 获得变量名。

下面我们来完整地写出上面的例子并求解,输出解的信息。完整代码如下:

from coptpy import * 

# Create COPT environment 
env = Envr()

# create model
model = env.createModel("LP example") 

# create variables 
x1 = model.addVar(lb=0, ub=COPT.INFINITY, vtype = COPT.CONTINUOUS, name="x1")
x2 = model.addVar(lb=0, ub=COPT.INFINITY, vtype = COPT.CONTINUOUS, name="x2")

# create objective
model.setObjective(8*x1 + 5*x2, sense=COPT.MAXIMIZE)

# create constraints
model.addConstr(x1 + x2 <= 6)
model.addConstr(9*x1 + 5*x2 <= 45)

# solve and output the optimal solution
model.solve()

print("Objective value: {}".format(model.objval))
print("Variable solution:")

for var in model.getVars():
    print(" x[{0}]: {1}".format(var.index, var.x))

求解结果如下

Hardware has 8 cores and 16 threads. Using instruction set X86_NATIVE (1)
Maximizing an LP problem

The original problem has:
    2 rows, 2 columns and 4 non-zero elements
The presolved problem has:
    2 rows, 2 columns and 4 non-zero elements

Starting the simplex solver using up to 8 threads

Method   Iteration           Objective  Primal.NInf   Dual.NInf        Time
Dual             0    7.0451048183e+01            2           0       0.01s
Dual             2    4.1250756485e+01            0           0       0.01s
Postsolving
Dual             2    4.1250000000e+01            0           0       0.01s

Solving finished
Status: Optimal  Objective: 4.1250000000e+01  Iterations: 2  Time: 0.01s
Objective value: 41.25
Variable solution:
 x[0]: 3.75
 x[1]: 2.25

从上述求解日志和求解结果来看,COPT使用了对偶单纯形法(dual simplex)求解该问题,迭代了2步。

COPT的建模语法、求解日志信息与其他求解器(例如Gurobi)也是类似的风格,用户学习成本极低。

开心,接下就可以进一步研究更多的用法了。之后有空我会陆续推出基于COPT的推文。希望对大家有帮助。

参考资料

[1]: 杉数科技官网: https://www.shanshu.ai/copt
[2]: 杉数求解器用户手册4.0.2.


欢迎关注我们的微信公众号 运小筹

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

公众号往期推文如下

优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试文章来源地址https://www.toymoban.com/news/detail-412124.html

到了这里,关于优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你如何免费Midjourney Adobe FireFly AI绘图—Window本地快速部署stable diffusion AI绘图及使用指南(小白也能学会)

    最近看到朋友圈最近各种文字生图、图生图,眼花缭乱的图片AI生成,我也心动了,于是赶紧研究了下目前业内认为最强大的 Midjourney、Adobe FireFly ,本来想试用下,奈何全球人民太热情了, Midjourney 被薅羊毛薅的不行了,原本 Midjourney 刚注册可以免费玩25次,现在也被Midjour

    2024年02月04日
    浏览(45)
  • 前端项目规范化:手把手教你使用prettier和pre-commit(git hook或者husky)优化规范项目代码

    最简单的两种方式: 使用 prettier + git pre-commit 使用 prettier + husky(原理和第一种一模一样哦) git hooks 下图为git hooks的官方示例,以.sample结尾。注意这些以.sample结尾的示例脚本是不会执行的,重命名后会生效 是一些自定义的脚本,用于控制git工作的流程,分为客户端钩子和服务

    2024年02月04日
    浏览(55)
  • 【算法】手把手学会前缀和

    目录 前缀和 前缀和的好处 公式的推导 例题:前缀和 二维前缀和 推导公式  例题: 子矩阵的和 🎵前缀和算法可以理解为是一种 以空间换时间的方式 ,通过建立一个新的数组来 存储从头到当前位置的数据的总和 。 初始化数组  🎵前缀和数组的初始化就是将前  i  个数存

    2024年01月17日
    浏览(29)
  • 【算法】手把手学会二分查找

    目录 简介 基本步骤 第一种二分 第二种二分  例题 搜索插入位置 数的范围 总结  🥥二分查找,又叫折半查找,通过找到数据二段性每次都能将原来的数据筛选掉一半,通过这个算法我们能够将一个一个查找的  O(n)  的时间复杂度优化到  O(logn)  ,极大地提升了查找的效率

    2023年04月08日
    浏览(31)
  • 【算法】手把手学会BFS

    目录 简介 层序遍历 例题 献给阿尔吉侬的花束 全球变暖 🍦宽度优先搜索算法(又称广度优先搜索)是 最简便的图的搜索算法之一 ,之前我们在实现对树的层序遍历时就使用过它。不仅如此它还在求最短路径,找连通块时具有奇效。 🍦层序遍历基本上借助于队列,将队头

    2023年04月09日
    浏览(85)
  • 手把手教你暴力破解

    暴力破解是一种攻击手段,使用大量的认证信息在认证接口尝试登录,直到得到正确的结果。 2.1标题基于表单的暴力破解 2.1.1 第一步:打开burpsuite拦截 2.1.2 第二步:将拦截到的包右击发送到intruder模块 (其中简单介绍一下intruder模块) Target主要是设置暴力破解访问的host地址

    2024年02月07日
    浏览(38)
  • 手把手教你SHA-256

    SHA-256是SHA-2协议簇的一部分,也是当前最流行的协议算法之一。在本篇文章中,我们会了解这个密码学算法的每一个步骤,并且通过实例演示。SHA-2因它的安全性(比SHA-1强很多)和速度为人所知。在没有键(keys)生成的情况下,例如挖掘比特币,像SHA-2这样的快速哈希算法很

    2024年02月13日
    浏览(58)
  • 手把手教你做主成分分析

    主成分分析是一种降维处理的统计方法,实践中有三个应用场景: 信息浓缩:将多个分析项浓缩成几个关键概括性指标; 权重计算:利用方差解释率值计算各概括性指标的权重; 综合评价:基于主成分得分构造综合得分数据,用于综合评价。 接下来,以一个具体案例来学习

    2024年02月01日
    浏览(40)
  • 手把手教你落地DDD

    一、前言 常见的DDD实现架构有很多种,如经典四层架构、六边形(适配器端口)架构、整洁架构(Clean Architecture)、CQRS架构等。架构无优劣高下之分,只要熟练掌握就都是合适的架构。本文不会逐个去讲解这些架构,感兴趣的读者可以自行去了解。 本文将带领大家从日常的

    2024年02月16日
    浏览(35)
  • 手把手教你实战TDD

    领域驱动设计,测试驱动开发。 我们在《手把手教你落地DDD》一文中介绍了领域驱动设计(DDD)的落地实战,本文将对测试驱动开发(TDD)进行探讨,主要内容有:TDD基本理解、TDD常见误区、TDD技术选型,以及案例实战。希望通过本文,读者能够理解掌握TDD并将其应用于实际

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包