python cplex优化包工具箱教程

2023-10-31

python cplex优化包教程

    在做优化课题时,常常需要用到优化算法。
个人优化算法专栏链接如下:
最优化实战例子
     需要掌握一些优化算法,但是一些比较出名的优化工具箱还是要会用。今天讲解下cplex工具箱
CPLEX Optimizer 是一种用于对以下形式的线性优化问题(通常称为线性规划 (LP) 问题)求解的工具



提示:以下是本篇文章正文内容,下面案例可供参考

一、安装

pip install cplex

二、使用步骤

1.算例

通过下面的一个算例感受下cplex如何求解优化问题

 Maximize  x1 + 2 x2 + 3 x3 + x4
#   Subject to
#      - x1 +   x2 + x3 + 10 x4 <= 20
#        x1 - 3 x2 + x3         <= 30
#               x2      - 3.5x4  = 0
#   Bounds
#        0 <= x1 <= 40
#        0 <= x2
#        0 <= x3
#        2 <= x4 <= 3
#   Integers
#       x4


2.求解

第一步:导入CPLEX的包

import cplex

第二步:初始化一个优化模型

prob = cplex.Cplex() # 此处的prob可以是任意变量名

第三步:设置目标方程的取值方向:求最大值/最小值

prob.objective.set_sense(prob.objective.sense.minimize) 
##prob.objective.sense.minimize最小值;
#prob.objective.sense.maximize最大值

第四步:添加变量

#4.添加变量
my_obj = [1.0, 2.0, 3.0, 1.0] #目标函数(未知量)系数
my_ub = [40.0, cplex.infinity, cplex.infinity, 3.0] #未知量上限
my_lb = [0.0, 0.0, 0.0, 2.0]#未知量下限
my_ctype = "CCCI"#前面三个实数,x4为整数
my_colnames = ["x1", "x2", "x3", "x4"] #未知量 名称
prob.variables.add(obj=my_obj,lb=my_lb,ub=my_ub,types=my_ctype,names=my_colnames) #

第五步:添加线性约束

lin_expr可以是SparsePair实例的列表,也可以是列表格式的矩阵。lin_expr的表项不能包含重复的索引。如果lin_expr的一个条目通过索引、名称或索引和名称的组合多次引用一个变量,将引发异常。

senses包含线性约束意义的字符串。每个条目必须是’G’、‘L’、'E’和’R’中的一个,分别表示大于或等于(>=)、小于或等于(<=)、相等(=)和排列约束。

RHS是一个浮点数列表,指定每个线性约束的右侧。

Range_values是一个浮点数列表,指定每个线性约束的左侧和右侧之间的差异。如果range_values[i] > 0(0),则约束i被定义为rhs[i] <= rhs[i] + range_values[i]。如果range_values[i] < 0(0),那么约束i被定义为rhs[i] + range_value[i] <= a*x <= rhs[i]。

Names是字符串列表。

#第五步:添加线性约束
my_rhs = [20.0, 30.0, 0.0]
my_rownames = ["r1", "r2", "r3"]
my_sense = "LLE"

rows = [[["x1", "x2", "x3", "x4"], [-1.0, 1.0, 1.0, 10.0]],
            [["x1", "x2", "x3"], [1.0, -3.0, 1.0]],
            [["x2", "x4"], [1.0, -3.5]]]
prob.linear_constraints.add(lin_expr=rows, senses=my_sense,
                                rhs=my_rhs, names=my_rownames)

第六步:直接调用优化求解器的求解方法(method),一键求解

#第六步:求解
prob.solve()

第七步:打印结果

#打印结果
# solution.get_status() returns an integer code
print("求解状态 = ", prob.solution.get_status(), ":")
print("目标函数值  = ", prob.solution.get_objective_value())
x = prob.solution.get_values()
print('x变量',x)

总结

cplex适合求解线性规划,整数规划、混合整数规划。好像不能求解非线性规划问题。

在这里插入图片描述

作者:电气-余登武

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python cplex优化包工具箱教程 的相关文章

随机推荐

  • 回味C语言

    虽然在实际上没怎么使用C语言了 但是看到C语言的书总是忍不住想看一下 喜欢这种至简 却又有着强大能力的语言 读完书随手写的一些笔记 略有些简单 书还是很喜欢的 推荐给大家 C专家编程 第一章 C 穿越时空的迷雾 原型决定C语言不支持函数重载
  • 小程序面试题

    1 简单描述一下微信小程序的相关文件类型 答 WXML WeiXin Markup Language 是框架设计的一套标签语言 结合基础组件 事件系统 可以构建出页面的结构 内部主要是微信自己定义的 套组件 WXSS WeiXin Styl
  • mysql 利用binlog增量备份,还原实例(日志备份数据库)

    一 什么是增量备份 增量备份 就是将新增加的数据进行备份 假如你一个数据库 有10G的数据 每天会增加10M的数据 数据库每天都要备份一次 这么多数据是不是都要备份呢 还是只要备份增加的数据呢 很显然 我只要备份增加的数据 这样减少服务器的
  • C++ 调用python

    本文代码已在vs2017上验证 c 调用python需要三类文件 这些文件都可以在python安装目录下找到 1 include文件夹 位于python目录下 2 dll文件 位于python目录下 如python37 dll 3 lib文
  • 超分辨率概述

    1 什么是超分辨率增强 Video super resolution is the task of upscaling a video from a low resolution to a high resolution 超分辨率 Supe
  • Git & GitHub 入门6:用好commit message

    git log 可以查看所有的 commit messages 修改repo中的文件内容后 add该文件 直接运行命令git commit进入message编辑状态 可以输入多行commit message说明 完成后点击ECS键退出编辑
  • Gin-swaggo为gin框架提供Swagger 文档

    官方 https github com swaggo gin swagger 开始使用 为API方法增加注释 加在controller api 层 See Declarative Comments Format 运行下面命令下载swgo g
  • L2-4 部落PTA

    在一个社区里 每个人都有自己的小圈子 还可能同时属于很多不同的朋友圈 我们认为朋友的朋友都算在一个部落里 于是要请你统计一下 在一个给定社区中 到底有多少个互不相交的部落 并且检查任意两个人是否属于同一个部落 输入格式 输入在第一行给出一个
  • hadoop3.2.1编译安装

    基础环境 centos 7 7 三台 hadoop需要的环境 Requirements Unix System JDK 1 8 Maven 3 3 or later ProtocolBuffer 2 5 0 CMake 3 1 or new
  • echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角

    展开全部 1 创建折线图的数据区 包括年份和数据 2 仅选择数据区创建折线图 插入选项卡 图表62616964757a686964616fe78988e69d8331333363396364工具组 折线图 3 得到的折线图x坐标不满足要求
  • c++可变参数模板函数

    可变参数模版函数 类型一致 可变参数 使用头文件 cstdarg va list arg ptr 开头指针 va start arg ptr n 从开头开始读取n个 va arg arg ptr T 根据数据类型取出数据 va end ar
  • jdk1.8升级后 sun.io.CharToByteConverter 错误处理

    项目工程中用到jdk1 6相关方法 可以使用 但是升级到jdk1 8以后 编译出现java lang NoClassDefFoundError sun io CharToByteConverter错误 后经查询 是jdk1 8版本中已经从s
  • 前端02:CSS选择器等基础知识

    CSS基础选择器 设置字体样式 文本样式 CSS的三种引入方式 能使用Chrome调试工具调试样式 HTML专注做结构呈现 样式交给CSS 即结构 HTML 和样式CSS相分离 CSS主要由量分布构成 选择器以及一条或多条声明 选择器 给谁
  • 深度学习10篇文章之Interleaved Group Convolution

    本文主要讲解Ting Zhang的Interleaved Group Convolutions for Deep Neural Networks 该文对Group convolution有较为详细的讲解 Abstract 文章开篇引出了 I
  • 新昌中学2021高考成绩查询,2021绍兴市地区高考成绩排名查询,绍兴市高考各高中成绩喜报榜单...

    距离2018年高考还有不到一个月的时间了 很多人在准备最后冲刺的同时 也在关心高考成绩 2018各地区高考成绩排名查询 高考各高中成绩喜报榜单尚未公布 下面是往年各地区高考成绩排名查询 高考各高中成绩喜报榜单 想要了解同学可以参考下 同时关
  • 轻松学懂图(下)——Dijkstra和Bellman-Ford算法

    概述 在上一篇文章中讲述了Kruskal和Prim算法 用于得到最小生成树 今天将会介绍两种得到最短路径的算法 Dijlkstra和Bellman Ford算法 Dijkstra算法 算法的特点 属于单源最短路径算法 什么是单源呢 通俗的说
  • 前端使用自定义指令实现埋点【vue3】

    vue项目有时候会需要进行数据采集 记录用户行为习惯 而且很多页面都会使用到 所以用vue自定义指令来实现埋点功能 埋点的几种方式 页面埋点 浏览次数及时长等 点击埋点 每一次点击行为 曝光埋点 统计区域是否被用户浏览 import cre
  • 神经网络量化----TensorRT深刻解读

    神经网络量化 TensorRT深刻解读 目录 神经网络量化 TensorRT深刻解读 前言 一 TensorRT简介 二 难点 1 架构 2 功能 三 实现 1 conv和ReLU的融合 2 conv和ReLU的融合 quant utils
  • oracle 解锁 账户_oracle用户解锁三种方法

    ORA 28000 the account is locked 的解决办法 2009 11 11 18 51 ORA 28000 the account is locked 第一步 使用 PL SQL 登录名为 system 数据库名称不变
  • python cplex优化包工具箱教程

    python cplex优化包教程 在做优化课题时 常常需要用到优化算法 个人优化算法专栏链接如下 最优化实战例子 需要掌握一些优化算法 但是一些比较出名的优化工具箱还是要会用 今天讲解下cplex工具箱 CPLEX Optimizer 是