如何使用Python API将Cplex混合整数规划求解问题转化为?
摘要:绝对的原创!Cplex-Python API混合整数规划求解教程!这是我盯了一天的程序一条条写注释悟出来的•́‸ก 一、问题描述 求解有容量限制的的设施位置问题,使用Benders分解。模型如下: [minquadsum^{locat
绝对的原创!Cplex-Python API混合整数规划求解教程!这是我盯了一天的程序一条条写注释悟出来的•́‸ก
一、问题描述
求解有容量限制的的设施位置问题,使用Benders分解。模型如下:
\[min\quad\sum^{locations}_{j=1}fixedCost_j//open_j+\sum^{locations}_{j=1}\sum^{clients}_{i=1}cost_{ij}×supply_{ij}
\]
\(s.t.\)
\[\sum^{locations}_{j=1}supply_{ij}=1\quad\quad\forall{i\in{clients}}
\]
\[\sum^{clients}_{i=1}supply_{ij}\leq{capacity}_{ij}×open_{j}\quad\quad\forall{j\in{locations}}
\]
\[0\leq{supply}_{ij}\leq{1}\quad\quad\forall{i\in{clients}};\forall{j\in{locations}}
\]
\[open_i=0或1\quad\quad\forall{i\in{clients}}
\]
二、程序
1. sys.exit函数:优雅地退出程序
摘自博文:Python中的sys.exit函数:优雅地退出程序_Python 笔记_设计学院
在Python编程中,程序在运行过程中可能会遇到需要停止程序的情况,如果不加处理,程序运行到中途就被强制停止的话,可能会导致数据丢失,甚至可能会让程序异常崩溃。因此,对于Python程序退出的处理,我们可以使用Python的内置函数sys.exit(),进行优雅地退出程序。
(1)sys.exit函数的基本用法
Python内置函数\(sys.exit()\),用于退出程序。如果该函数被调用时不带任何参数,那么Python解释器将会以状态码0来退出程序,表示程序运行成功,并返回控制台。下面是\(sys.exit()\)基本用法的示例代码:
import sys
sys.exit()
如果该函数被调用时带有整数参数n,那么Python解释器将会以状态码n来退出程序,并返回控制台。下面是以状态码1退出程序的示例代码:
import sys
sys.exit(1)
注意,当状态码不等于0时,表示程序运行发生某种异常或错误,需要进一步处理。
(2)sys.exit程序终止时的清理工作
在程序结束之前,我们可能需要完成一些清理工作,比如关闭一些文件、释放一些内存等。如果程序直接使用强制停止的方式结束,就有可能使这些工作被忽略或未能完全完成。此时,我们可以利用try/finally语句来完善这部分清理工作:
import sys
import time
try:
# code block here
time.sleep(5)
finally:
# closing file or releasing resource
print('clean up resources')
sys.exit()
2. 程序实现
(1)函数简介
\(cpx = cplex.Cplex()\)
\(cpx.variables.add(obj,lb,ub,type)\)
简介:cpx.cariables.add()是用于向模型中添加变量的方法,在新版的Cplex中,为了节约内存空间,通常以range的格式存储数据。所以为了方便查看,一般还要将其转换为list。
参数详解:
obj(list): 变量的目标函数系数列表;
lb(list): 变量的下界列表。默认为0;
ub(list): 变量的上界列表。默认为正无穷。
types(list): 变量的类型。可以是以下值:'C': 连续变量;'I': 整数变量;'B': 二进制变量。默认值为 'C'。
注意:参数只支持一维列表的输入,如果是二维及以上的列表需要使用for循环进行输入
\(cplex.SparsePair(ind,val)\)
简介:cplex.SparsePair()用于表示稀疏的线性表达式。它主要用于定义线性约束和目标函数,特别是在涉及大量变量且多数系数为0的情况下。使用稀疏表示可以显著提高效率和节省内存。
参数详解:
ind(list): 一个包含变量索引的列表。这些索引指向模型中的特定变量(也就是用于输入决策变量)。这个列表为int型数据列表时,代表的是决策变量对应索引列表;为字符串型数据时,代表的是决策变量。
