pulp
: Pulp 类
|
一个线性规划问题 |
|
此类为具有指定关联参数的 LP 变量建模 |
|
一个 |
|
一个线性规划约束 |
|
通过向一个硬约束添加变量来构建一个弹性子问题 |
|
包含将固定约束 \(\sum_{i}a_i x_i = b\) 转换为弹性约束所生成的子问题。 |
待处理
LpFractionConstraint, FractionElasticSubProblem
LpProblem 类
- class pulp.LpProblem(name='NoName', sense=1)[源代码]
基类:
object
一个线性规划问题
创建一个线性规划问题
此函数创建一个新的 LP 问题,并指定相关的参数
- 参数:
name – 输出 .lp 文件中使用的问题名称
sense – LP 问题目标的类型。可以是
LpMaximize
。
- 返回:
一个线性规划问题
问题的三个重要属性是:
- objective
The objective of the problem, an
LpAffineExpression
一些更重要的方法:
- solve(solver=None, **kwargs)[源代码]
解决给定的 Lp 问题。
此函数修改问题以使其适合求解,然后调用 solver.actualSolve() 方法来找到解决方案。
- 参数:
solver – 可选:要使用的特定求解器,默认为默认求解器。
- 副作用:
在
actualSolve()
中,问题对象的属性被更改以反映 Lp 解决方案。
- writeLP(filename, writeSOS=1, mip=1, max_length=100)[源代码]
将给定的Lp问题写入一个.lp文件。
此函数将定义的Lp问题的规范(目标函数、约束、变量)写入文件。
- 参数:
filename (str) – 要创建的文件名。
- 返回:
变量
- 副作用:
文件已创建
- writeMPS(filename, mpsSense=0, rename=0, mip=1, with_objsense: bool = False)[源代码]
根据问题信息生成一个mps文件
- 参数:
- 返回:
- 副作用:
文件已创建
- toJson(filename, *args, **kwargs)[源代码]
从 LpProblem 信息创建一个 json 文件
- 参数:
filename (str) – 要写入的文件名
args – json 函数的附加参数
kwargs – json 函数的额外关键字参数
- 返回:
无
- variables()[源代码]
返回问题变量
- 返回:
包含问题变量的列表
- 返回类型:
(列表,
LpVariable
)
变量与表达式
- class pulp.LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)[源代码]
此类为具有指定关联参数的 LP 变量建模
- 参数:
name – 输出 .lp 文件中使用的变量名称
lowBound – 该变量范围的下限。默认值为负无穷大。
upBound – 此变量范围的上限。默认值为正无穷大。
cat – 该变量所属的类别,整数、二进制或连续(默认)
e – 用于基于列的建模:与变量在目标函数和约束中的存在相关
- classmethod dicts(name, indices=None, lowBound=None, upBound=None, cat='Continuous', indexStart=[])[源代码]
此函数创建一个包含指定关联参数的
LpVariable
字典。- 参数:
name – 每个创建的LP变量名称的前缀
indices – LP 变量字典键的字符串列表,以及变量名称本身的主要部分
lowBound – 这些变量的范围下限。默认值为负无穷大。
upBound – 这些变量的范围上限。默认值为正无穷大。
cat – 这些变量所属的类别,整数型或连续型(默认)
- 返回:
一个
LpVariable
的字典
- classmethod fromDict(dj=None, varValue=None, **kwargs)[源代码]
从字典(kwargs)中的信息初始化一个变量对象
- 参数:
dj – 变量的影子价格
varValue (float) – 设置变量的值
kwargs – 初始化变量的参数
- 返回:
一个
LpVariable
- 返回类型:
:LpVariable
- classmethod from_dict(dj=None, varValue=None, **kwargs)
从字典(kwargs)中的信息初始化一个变量对象
- 参数:
dj – 变量的影子价格
varValue (float) – 设置变量的值
kwargs – 初始化变量的参数
- 返回:
一个
LpVariable
- 返回类型:
:LpVariable
- setInitialValue(val, check=True)[源代码]
将变量的初始值设置为 val。如果求解器支持,可以用于求解器的预热启动。
- 参数:
- 返回:
如果值已设置则为真
- 抛出:
ValueError – 如果 check=True 且值不在边界内
示例:
>>> x = LpVariable('x',lowBound = 0, cat='Continuous')
>>> y = LpVariable('y', upBound = 5, cat='Integer')
给出 \(x \in [0,\infty)\), \(y \in (-\infty, 5]\), 一个整数。
- class pulp.LpAffineExpression(e=None, constant=0, name=None)[源代码]
基类:
OrderedDict
一个
LpVariables
的线性组合。可以通过以下方式初始化:e = None: 一个空的表达式
e = dict: 给出一个表达式,其中值是键的系数(项的顺序未确定)
e = 包含2元组的列表或生成器:相当于 dict.items()
e = LpElement: 一个长度为1且系数为1的表达式
e = other: 常量被初始化为 e
示例
>>> f=LpAffineExpression(LpElement('x')) >>> f 1*x + 0 >>> x_name = ['x_0', 'x_1', 'x_2'] >>> x = [LpVariable(x_name[i], lowBound = 0, upBound = 10) for i in range(3) ] >>> c = LpAffineExpression([ (x[0],1), (x[1],-3), (x[2],4)]) >>> c 1*x_0 + -3*x_1 + 4*x_2 + 0
简而言之,\(\textsf{LpAffineExpression([(x[i],a[i]) for i in I])} = \sum_{i \in I} a_i x_i\) 其中(注意顺序):
x[i]
是一个LpVariable
a[i]
是一个数值系数。
- toDict()[源代码]
将
LpAffineExpression
导出为字典列表,但不导出常数- 返回:
带有系数的字典列表
- 返回类型:
- to_dict()
将
LpAffineExpression
导出为字典列表,但不导出常数- 返回:
带有系数的字典列表
- 返回类型:
约束条件
- class pulp.LpConstraint(e=None, sense=0, name=None, rhs=None)[源代码]
-
一个线性规划约束
- 参数:
e –
LpAffineExpression
的一个实例sense – 其中之一
LpConstraintEQ
,LpConstraintGE
,LpConstraintLE
(分别为0, 1, -1)name – 识别字符串
rhs – 约束目标的数值
- classmethod fromDict(_dict)[源代码]
从包含必要信息的字典初始化一个约束对象
- 参数:
_dict (dict) – 带有数据的字典
- 返回:
一个新的
LpConstraint
- classmethod from_dict(_dict)
从包含必要信息的字典初始化一个约束对象
- 参数:
_dict (dict) – 带有数据的字典
- 返回:
一个新的
LpConstraint
- class pulp.FixedElasticSubProblem(constraint, penalty=None, proportionFreeBound=None, proportionFreeBoundList=None)[源代码]
基类:
LpProblem
包含将固定约束 \(\sum_{i}a_i x_i = b\) 转换为弹性约束所生成的子问题。
- 参数:
constraint – 基于弹性约束的 LpConstraint
penalty – 违反约束的惩罚(正值或负值)
proportionFreeBound – 约束违反的比例界限(正和负),不受惩罚
proportionFreeBoundList – 无惩罚的约束违反的比例界限,表示为一个列表,其中 [-ve, +ve]
创建一个线性规划问题
此函数创建一个新的 LP 问题,并指定相关的参数
- 参数:
name – 输出 .lp 文件中使用的问题名称
sense – LP 问题目标的类型。可以是
LpMaximize
。
- 返回:
一个线性规划问题
组合与排列
- pulp.combination(iterable, r)
返回可迭代对象中元素的连续 r 长度组合。
combinations(range(4), 3) –> (0,1,2), (0,1,3), (0,2,3), (1,2,3)
- pulp.allcombinations(orgset, k)[源代码]
返回 orgset 中最多包含 k 个项目的所有组合
- 参数:
orgset – 要迭代的列表
k – 子集的最大基数
- 返回:
子集的迭代器
例子:
>>> c = allcombinations([1,2,3,4],2) >>> for s in c: ... print(s) (1,) (2,) (3,) (4,) (1, 2) (1, 3) (1, 4) (2, 3) (2, 4) (3, 4)
- pulp.permutation(iterable, r=None)
返回迭代对象中元素的连续 r 长度排列。
permutations(range(3), 2) –> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)