python cplex优化包工具箱教程

article/2025/4/12 20:19:22

python cplex优化包教程

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


文章目录

  • python cplex优化包教程
  • 一、安装
  • 二、使用步骤
    • 1.算例
    • 2.求解
  • 总结


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

一、安装

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适合求解线性规划,整数规划、混合整数规划。好像不能求解非线性规划问题。

在这里插入图片描述

作者:电气-余登武


http://chatgpt.dhexx.cn/article/6I70KLxt.shtml

相关文章

【CPLEX教程01】Cplex介绍,下载和安装Cplex

前言 最近学习列生成算法,需要用到优化求解器。所以打算学习一下cplex这个商业求解器。 当然也有其他更多的选择,这里暂时以比较容易上手和性能比较好的cplex开始吧。其实,小编也早就想学习使用这个cplex了,毕竟是个好东西。 所以打算出一系列教程推出,大家可以关注我们获…

Java调用cplex求解泊位分配模型_修正重发【CPLEX教程03】JAVA调用cplex求解一个TSP模型详解...

先给大家看看程序流程图&#xff1a; 具体求解过程如下&#xff1a; 1. 定义一个模型 IloCplex model new IloCplex(); 2. 定义决策变量,boolVar可以返回一个0-1的bool类型决策变量。 // define variablesIloIntVar[][] x new IloIntVar[data.size()][data.size()];for (int …

Visual Studio(VS2017/VS2019) C++ 配置 CPLEX 教程

文章目录 一、涉及软件二、配置效果三、配置步骤1、首先选择代码运行的环境2、打开项目的属性项3、修改C/C附加包含目录4、修改C/C预处理器中的预处理器定义项5、修改C/C代码生成中的运行库6、修改链接器常规项中的“附加库目录项”7、修改链接器输入中的“附加依赖项”8、 点击…

cplex java_【CPLEX教程03】java调用cplex求解一个TSP问题模型

00 前言 前面我们已经搭建好cplex的java环境了,相信大家已经跃跃欲试,想动手写几个模型了。今天就来拿一个TSP的问题模型来给大家演示一下吧~ CPLEX系列教程可以关注我们的公众号哦!获取更多精彩消息! 01 TSP建模 关于TSP建模,就不多解释了。以及什么是TSP问题,也不要问我…

cplex java_【CPLEX教程02】配置Cplex的Java环境以及API说明

00 前言 因为小编一般用的C和Java比较多&#xff0c;而且现在开发大型算法用这类面向对象的编程语言也方便得多。基于上面的种种考虑&#xff0c;加上时间和精力有限&#xff0c;所以就暂时只做C和Java的详细教程辣。关于matlab和python的也许后续会补上的吧。 然后在开始之前&…

最新最易上手IntelliJ IDEA配置CPLEX详细步骤

目录 一、CPLEX安装 1.CPLEX安装包下载 2.CPLEX安装 二、IDEA配置CPLEX 1.将CPLEX安装目录的cplex.jar包添加到项目文件中&#xff1a; 2.将CPLEX的x64_win64文件夹添加到IDEA的VM options中 三、在IDEA中检验是否安装成功 一、CPLEX安装 1.CPLEX安装包下载 由于IBM公司的…

Cplex安装与环境配置步骤(C++与Python)

一、Cplex简介 Cplex是IBM公司的一个优化问题求解器。主要用于求解线性规划&#xff0c;混合整数规划、二次规划等问题。 Cplex求解速度快&#xff0c;使用简单易上手。除了自带的语言外&#xff0c;cplex可以利用C、Java、Python等语言使用。对于运筹优化方向的问题求解事半功…

形状-自适应椭圆

自适应椭圆 根据内容自适应宽高&#xff0c;如果宽高相等&#xff0c;显示为一个圆&#xff0c;宽高不等显示为椭圆&#xff0c;如下图所示&#xff1a; 自适应椭圆实现 想要达到上图所示的效果&#xff0c;我们必须先了解border-radius 的两个特性 border-radius可以单独…

112.(leaflet篇)leaflet椭圆修改

地图之家总目录(订阅之前请先查看该博客) 地图之家:cesium+leaflet+echart+地图数据+地图工具等相关内容的介绍 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> …

java panel画椭圆_如何在Java 2D中绘制椭圆?

在Ellipse2D类定义由成帧矩形定义的椭圆。您可以使用double或float值创建椭圆。使用双精度值创建椭圆时&#xff0c;请使用Ellipse2D.Double类。对于浮点值&#xff0c;您可以使用Ellipse2D.Float该类。package org.nhooo.example.geom; import javax.swing.*; import java.awt…

AEJoy —— 随机运动表达式之球面上的随机运动(四)

效果图 原理与代码 现在我们已经掌握了产生随机运动的技巧,让我们做一些有趣的事情。 我们的目标是看看我们是否能在球面上创造随机运动。我们会看到,通过一些几何学,一些三角学和我们的随机运动算法,我们可以解决一些看似不可能的问题。 首先让我们看一看几何学和涉及的…

椭圆伸缩之思考

我们讨论的椭圆缩放基于二维空间&#xff0c;首先给出以下定义及性质&#xff1a; 1 基点&#xff1a;如果选择一个能控制图形比例&#xff08;缩放&#xff09;变换的点&#xff0c;使该点再变换后仍保持不变&#xff0c;则称其为基点&#xff08;不动点&#xff09;。 2 比例…

自由落体java编程_java模拟自由落体运动源代码

简单做了一个 import java.awt.borderlayout; import java.awt.button; import java.awt.color; import java.awt.frame; import java.awt.graphics; import java.awt.panel; import java.awt.point; import java.awt.event.actionevent; import java.awt.event.actionlistener…

点旋转的java算法_点和椭圆(旋转)位置测试:算法

另一种选择是将所有内容都放入2D旋转椭圆的等式中&#xff0c;并查看结果是否小于1 . 因此&#xff0c;如果以下不等式为真&#xff0c;则在椭圆内部有一个点 其中(xp&#xff0c;yp)是点坐标&#xff0c;(x0&#xff0c;y0)是椭圆的中心 . 我实施了一个小的Mathematica程序&am…

(转载)在Eclipse中使用JUnit4进行单元测试(中级篇)

<原文地址如下&#xff1a;http://blog.csdn.net/andycpp/archive/2006/10/09/1327147.aspx> 我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclipse自动生成了一个测试框架&#xff0c;在这篇文章中&#xff0c;我们来仔细分析一下这个测试框架中的每一个细节&…

用Python模拟小球的平抛运动,及其在落地后的运动轨迹

废话不多说&#xff0c;先上效果演示&#xff08;doge&#xff09;: 1、需求分析 给定一个小球&#xff0c;在离地某高度处给予一初始速度&#xff0c;当其撞击到地面后&#xff0c;速度衰减为原来的α倍&#xff0c;当其速度衰减为初始速度的1%后&#xff0c;运动结束。 2、运…

【达内课程】Eclipse中的junit测试

文章目录 简介使用测试1测试2生成测试报告 简介 使用 下载junit 新建一个java项目&#xff0c;把junit jar包放入项目&#xff0c;右键项目&#xff0c;选择properties&#xff0c;把jar包加进来 测试1 创建如下文件 在这里插入代码片如果出错 如果成功 测试2 新建H…

java斜椭圆_JAVA 任意椭圆方向画法

展开全部 使用32313133353236313431303231363533e4b893e5b19e31333332636266 AffineTransform 把Ellipse2D 旋转一下就可以了。 import java.awt.image.BufferedImage; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.Color; import …

从STL的视角,了解下Map、Set、Tuple和Initializer_List的区别

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

用Java模拟行星的运动

这段时间都在寝室里自学Java,就想自己写个小程序玩一玩。同时&#xff0c;我也是个三体迷&#xff0c;就想着能不能用学的Java来模拟一下三体运动。这个程序算是我正式写模拟三体运动前的一个尝试。 一、程序分析 首先来百度一番查一下太阳、水星、金星和地球的各种参数(非精确…