杉数求解器

news2024/11/18 6:36:18

目录

  • 前言
  • 一、简介以及安装
  • 二、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.


总结

过年后要上一周班,好累!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Jetson安装Nomachine】

0. 介绍 Nomachine是一款免费的远程桌面访问应用程序。支持用户从任何地方访问连接到Internet的计算机。该应用程序允许多个用户访问单个PC&#xff0c;且支持使用不同的操作系统。 官网链接&#xff1a;NoMachine - Free Remote Desktop for Everybody 1. 下载Nomachine 软…

【C++】简单理解内联函数

内联函数1.内联函数的概念2.C为什么要有内联函数&#xff1f;3.内联函数展示3.1查看方式3.2 观察汇编代码4.使用内联函数的注意事项5.内联函数缺点和优点1.内联函数的概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有…

九龙证券|沪指收获2010年以来最强1月 北向资金净买入额刷新历史纪录

昨日&#xff0c;A股小幅调整&#xff0c;2023年1月行情随之收官。全体来看&#xff0c;1月A股商场拾级而上&#xff0c;盘面出现普涨格局&#xff0c;价值与生长风格均有亮眼体现。三大股指中&#xff0c;上证指数1月上涨5.39%&#xff0c;创2010年以来最佳局面。深证成指、创…

zookeeper 源码分享二 ----启动加载数据

单机zookeeper 启动加载数据 读取磁盘中快照文件&#xff0c;选择其中第一个能正确加载的文件&#xff0c;最多加载100个快照文件。反序列化快照文件&#xff0c;进行内存DataTree数据加载根据最新事物日志&#xff0c;加载事物日志快照并进行反序列化重新执行事物日志中的操作…

OAuth2流程演示示例

目录一、OAuth2流程演示示例1、创建项目结构①客户②认证服务器③资源拥有者④资源服务器2、流程①资源所有者②客户③客户④认证服务器⑤客户⑥资源服务器一、OAuth2流程演示示例 client 客户 authorization-server 认证服务 resource-owner 资源所有者 resource-server 资源服…

anaconda下载安装,镜像源配置修改及虚拟环境的创建

anaconda安装Anaconda 简介Anaconda 安装1.安装流程2.anaconda 配置修改3. 创建虚拟环境4.常用命令Anaconda 简介 Anaconda&#xff08;官方网站&#xff09;就是可以便捷获取包且对包能够进行管理&#xff0c;同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python…

Cocos Creator游戏项目环境搭建和启动

背景获得了一套cocos creator2.4.2编写的游戏源码&#xff0c;需要在本地启动&#xff0c;查看一下是否符合预期要求。所以需要在本地搭建Cocos Creator环境&#xff0c;因为以前没有接触过&#xff0c;经过一番搜索&#xff0c;终于将环境搭建完成&#xff0c;为了备忘&#x…

【Sciter】Sciter 结合 Preact 封装 图片查看器总结

使用 react 结合 sciter 封装 图片查看器 组件 # 效果图 1、图片:宽度大于高度 2、图片:宽度小于高度 # 如何使用 <div class="container"></div

录音软件哪个好?分享两款免费实用的录音软件

有时候我们需要一款录音软件&#xff0c;来录制电脑内部的声音或者电脑外部的声音。比如录制网上无法下载的音乐、录制自己唱歌的声音、录制音频会议等等。那有没有既实用并且试用版就能录音软件呢&#xff1f;当然有&#xff01;小编今天就给大家介绍两款高性价比的录音软件&a…

Nhanes临床数据库挖掘教程2—非正态数据的基线表绘制(2)

美国国家健康与营养调查&#xff08; NHANES, National Health and Nutrition Examination Survey&#xff09;是一项基于人群的横断面调查&#xff0c;旨在收集有关美国家庭人口健康和营养的信息。 地址为&#xff1a;https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 既往我们…

VUE + .NET CORE (.net6)基于asp.net 智能仓储快递物流系统源码

一、源码描述 这是一款简洁十分美观的ASP.NETsqlserver源码&#xff0c;前端vue,框架.netcore,mvc三层架构界面十分美观&#xff0c;功能也比较全面 二、功能介绍 该源码功能十分的全面&#xff0c;具体介绍如下&#xff1a; 用户待取包裹信息可以由快递网点员直接在选择用户…

学习记录 2023/02/01

一、学习内容&#xff1a; 1、OSEK网络管理规范基础&#xff08;CAN_NM报文格式、节点跳过判断机制、网络管理策&#xff09;; 2、UDS诊断服务回顾&#xff08;功能寻址与PHY&#xff0c;CAN升级工具的使用&#xff09;&#xff1b; 二、回顾提升 1、CAN程序升级工具使用(适用…

Linux内核panic核心执行逻辑

什么是OOPSOops是美国人比较常有的口语。就是有点意外&#xff0c;吃惊&#xff0c;或突然的意思。“oops”并不是很严重.对于linux内核来说&#xff0c;Oops就意外着内核出了异常&#xff0c;此时会将产生异常时出错原因&#xff0c;CPU的状态&#xff0c;出错的指令地址、数据…

实训六:启动过程和运行级别

实训六&#xff1a;启动过程和运行级别 2017 年 4 月 16 日 今日公布 实训目标 完成本次实训&#xff0c;将能够&#xff1a; 运用Shell命令管理进程。 在图形界面下管理进程。 配置cron调度。 实训准备 一台安装RHEL6系统的计算机&#xff0c;该系统除了root账户外&…

一文读懂:下一代微服务技术Service Mesh

相信提到微服务大家一定不会陌生&#xff0c;但是说起服务网格&#xff0c;即Service Mesh&#xff0c;很多同学可能就会画大大的问号了&#xff01;话不多说先给结论&#xff1a;我们可以简单的把Service Mesh理解为网络代理&#xff0c;它可以解决传统微服务中的痛点&#xf…

进程状态与优先级

目录 进程状态&#xff1a; tracing stop&#xff1a;追踪暂停状态 Z&#xff1a;僵尸状态&#xff1a; 为什么要有僵尸进程呢&#xff1f; 孤儿进程 进程优先级&#xff1a; 其他概念&#xff1a; 进程切换&#xff1a; pc/eip 环境变量&#xff1a; PATH&#xff1a;全…

nestjs初始化项目

安装nestjs脚手架 npm i -g nestjs/cli初始化项目 nest new <project-name>说明初始化项目成功 结构说明 node_modules:项目所有的依赖src: 项目的主题test: 项目测试目录.eslintrc.js: eslint约束.gitignore: git上传忽略文件nest-cli.json: nest项目配置文件package…

《C++程序设计原理与实践》笔记 第12章 一个显示模型

本章介绍了一个显示模型(display model)&#xff08;GUI的输出部分&#xff09;&#xff0c;并给出了使用示例和基本概念&#xff0c;例如屏幕坐标、线和颜色等。 12.1 为什么需要图形&#xff1f; 我们为什么用四章的篇幅介绍图形以及一章介绍GUI&#xff1f; 图形很有用。…

通信原理笔记—基带信号的波形设计与编码

目录 引言&#xff1a; 基带传输系统的基本模型&#xff1a; 基带信号的波形设计与编码&#xff1a; 数字信号的波形设计原则&#xff1a; 基带信号的基本波形&#xff1a; 常用的二进制码型&#xff1a; 单极性不归零码&#xff1a; 双极性不归零码&#xff1a; ​编辑…

RTI Connext DDS代码生成器

0 简介RTI代码生成器Code Generator,创建用RTI ConnextDDS定义define和注册register用户数据类型所需的代码。在以下情况下&#xff0c;使用代码生成器是可选的&#xff1a;您正在使用动态类型&#xff08;请参阅RTI Connext DDS核心库用户手册[RTI ConnextDDS Core Libraries …