gpt4 book ai didi

python - CVXPY:如何高效解决一系列类似问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:43 25 4
gpt4 key购买 nike

我在 CVXPY modelling language 中定义了一个大问题.我想解决一系列这样的问题 - 仍然是相同的格式但具有不同的参数(常量)。

我发现在调用 problem.solve() 之后,内部问题生成需要 20 秒,主要优化运行时间需要 0.2 秒。很多时候我都想解决几十个类似的问题。

有没有像 YALMIP optimizer 这样的 CVXPY 工具?或任何减少问题产生时间的可能性?

最佳答案

是的。甚至在官方docs中都有解释。 .

Parameters

Parameters are symbolic representations of constants. The purpose of parameters is to change the value of a constant in a problem without reconstructing the entire problem.

直接来自文档的示例(已修改):

from cvxpy import *
import numpy

# Problem data.
n = 15
m = 10
numpy.random.seed(1)
A = numpy.random.randn(n, m)
b = numpy.random.randn(n, 1)
# gamma must be positive due to DCP rules.
gamma = Parameter(sign="positive") # !!!

# Construct the problem.
x = Variable(m)
error = sum_squares(A*x - b)
obj = Minimize(error + gamma*norm(x, 1))
prob = Problem(obj) # !!!

# Construct a trade-off curve of ||Ax-b||^2 vs. ||x||_1
sq_penalty = []
l1_penalty = []
x_values = []
gamma_vals = numpy.logspace(-4, 6)
for val in gamma_vals:
gamma.value = val # !!!
prob.solve() # !!!
# Use expr.value to get the numerical value of
# an expression in the problem.
sq_penalty.append(error.value)
l1_penalty.append(norm(x, 1).value)
x_values.append(x.value)

那么它是做什么的

正如您所注意到的,优化问题的设置可能需要一些时间,因为它遵循 DCP 方法(通过构造证明凸性)。

使用参数,这个 DCP 处理只完成一次!每个新的解决方案只会改变问题中的一些小部分。尽可能精确地描述您的参数很重要,这样 DCP 才能起作用。示例:Parameter(sign="positive")

还有什么可以做的吗

也许吧。根据求解器的不同,您还可以使用热启动,如果您认为特殊的猜测(例如上次迭代的解向量)是解决新问题的良好开端。

这会将:prob.solve() 替换为 prob.solve(warm_start=True),从而重新使用之前的解决方案作为开始(解释 here ).手动定义这个向量似乎是不可能的(来自 cvxpy)。

遗憾的是,据我所知,唯一支持这个(在 cvxpy 中)的求解器是 SCS(其他人会忽略它而不会崩溃)!

关于python - CVXPY:如何高效解决一系列类似问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44263875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com