中间端优化

这里列出的简化方法并不特定于某种类型的求解器。 无论您希望针对的是二次规划求解器还是锥形求解器,这些方法都可以应用。

请在使用这些代码之前,查看我们的免责声明关于Reductions API的内容。

Complex2Real

class cvxpy.reductions.complex2real.complex2real.Complex2Real(problem=None)[source]

基础类: Reduction

将复数提升为实数表示。

accepts(problem) None[source]

判断是否接受问题的减少。

Parameters:
problem : Problem

要检查的问题。

Returns:

如果可以应用减少,则为True,否则为False。

Return type:

布尔

apply(problem)[source]

将归约应用于问题并返回等价问题。

Parameters:
problem : Problem

将应用归约的问题。

Returns:

  • 问题或字典 – 一个等价的问题,编码为问题或字典。

  • 逆数据、列表或字典 – 为了反转此特定应用,减少所需的数据。

invert(solution, inverse_data)[源代码]

返回给定inverse_data的原始问题的解决方案。

Parameters:
solution : Solution

生成逆数据的问题的解决方案。

inverse_data

编码原始问题的数据。

Returns:

原始问题的解决方案。

Return type:

Solution

CvxAttr2Constr

class cvxpy.reductions.cvx_attr2constr.CvxAttr2Constr(problem=None, reduce_bounds: bool = False)[source]

基础类: Reduction

将凸变量属性扩展为约束。

accepts(problem) bool[source]

判断是否接受问题的减少。

Parameters:
problem : Problem

要检查的问题。

Returns:

如果可以应用减少,则为True,否则为False。

Return type:

布尔

apply(problem)[源代码]

将归约应用于问题并返回等价问题。

Parameters:
problem : Problem

将应用归约的问题。

Returns:

  • 问题或字典 – 一个等价的问题,编码为问题或字典。

  • 逆数据、列表或字典 – 为了反转此特定应用,减少所需的数据。

invert(solution, inverse_data) Solution[source]

返回给定inverse_data的原始问题的解决方案。

Parameters:
solution : Solution

生成逆数据的问题的解决方案。

inverse_data

编码原始问题的数据。

Returns:

原始问题的解决方案。

Return type:

Solution

reduction_attributes() list[str][source]

返回将被减少的属性。

Dgp2Dcp

class cvxpy.reductions.dgp2dcp.dgp2dcp.Dgp2Dcp(problem=None)[source]

基础:Canonicalization

将DGP问题简化为DCP问题。

这种简化方法以DGP问题作为输入,并返回一个等价的DCP问题。因为每个(广义)几何规划都是DGP问题,所以这种简化方法可以用来将几何规划转换为凸形式。

示例

>>> import cvxpy as cp
>>>
>>> x1 = cp.Variable(pos=True)
>>> x2 = cp.Variable(pos=True)
>>> x3 = cp.Variable(pos=True)
>>>
>>> monomial = 3.0 * x_1**0.4 * x_2 ** 0.2 * x_3 ** -1.4
>>> posynomial = monomial + 2.0 * x_1 * x_2
>>> dgp_problem = cp.Problem(cp.Minimize(posynomial), [monomial == 4.0])
>>>
>>> dcp2cone = cvxpy.reductions.Dcp2Cone()
>>> assert not dcp2cone.accepts(dgp_problem)
>>>
>>> gp2dcp = cvxpy.reductions.Dgp2Dcp(dgp_problem)
>>> dcp_problem = gp2dcp.reduce()
>>>
>>> assert dcp2cone.accepts(dcp_problem)
>>> dcp_problem.solve()
>>>
>>> dgp_problem.unpack(gp2dcp.retrieve(dcp_problem.solution))
>>> print(dgp_problem.value)
>>> print(dgp_problem.variables())
accepts(problem)[source]

如果问题是DGP,则被接受。

apply(problem)[source]

将DGP问题转换为DCP问题。

canonicalize_expr(expr: Expression, args: list, canonicalize_params: bool = True)[source]

规范化一个表达式,相对于规范化的参数。

Parameters:
expr: Expression

要规范化的表达式。

args: list

表达式的参数。

canonicalize_params: bool = True

包含参数的常量子树是否应该被规范化?

Returns:

规范化的表达式,约束条件

invert(solution, inverse_data)[source]

返回给定inverse_data的原始问题的解决方案。

Parameters:
solution : Solution

生成逆数据的问题的解决方案。

inverse_data

编码原始问题的数据。

Returns:

原始问题的解决方案。

Return type:

Solution

EvalParams

class cvxpy.reductions.eval_params.EvalParams(problem=None)[source]

基础类: Reduction

用它们的常数值替换符号参数。

accepts(problem) bool[source]

判断是否接受问题的减少。

Parameters:
problem : Problem

要检查的问题。

Returns:

如果可以应用减少,则为True,否则为False。

Return type:

布尔

apply(problem)[源代码]

用常量值替换参数。

Parameters:
problem : Problem

需要评估参数的问题。

Returns:

一个新问题,其中参数已被转换为常量。

Return type:

Problem

Raises:

ParameterError – 如果 problem 有未指定的参数(即,一个参数的值为 None)。

invert(solution, inverse_data)[source]

返回给定inverse_data的原始问题的解决方案。

FlipObjective

class cvxpy.reductions.flip_objective.FlipObjective(problem=None)[source]

基础类: Reduction

将最小化目标转换为最大化目标,反之亦然。

accepts(problem) bool[source]

判断是否接受问题的减少。

Parameters:
problem : Problem

要检查的问题。

Returns:

如果可以应用减少,则为True,否则为False。

Return type:

布尔

apply(problem)[source]

\(\max(f(x)) = -\min(-f(x))\)

Parameters:
problem : Problem

目标需要翻转的问题。

Returns:

  • 问题 – 一个目标翻转的问题。

  • 列表 – 反向数据。

invert(solution, inverse_data)[source]

将翻转问题的解决方案映射到原始问题的解决方案。

Parameters:
solution : Solution

一个解决方案对象。

inverse_data : list

调用apply返回的逆数据。

Returns:

原始问题的解决方案。

Return type:

Solution