2

我想标准化一些 cvxpy 问题并在我的代码库中的许多地方使用它们。这是一个干净的例子:

from cvxpy import Variable, Parameter, Problem, Minimize

def problem_builder(n, ...)
    var = Variable(n)
    param = Parameter(n)

    costs = #Some complex convex function of var and param
    return Problem(Minimize(costs), constraints)

prob = problem_builder(4)
prob.var.value = [1,2,3,4]  #???
prob.parameters()[0] = [1,2,3,4]  #Ugly ???

我可以在函数外部创建 var 和 param,然后将它们传递给问题,但这似乎很尴尬。

我可以从 prob 以某种方式访问​​ var 和 param 吗?跨多个模块使用相同的 cvxpy 问题的最佳实践是什么?

4

1 回答 1

1

按照 sascha 关于创建包装类的评论...

from cvxpy import Variable, Parameter, Problem, Minimize

class MyProblem(self, n, ...):
    self._var = Variable(n)
    self.param = Parameter(n)

    costs = #Some complex convex function of var and param
    self._problem = Problem(Minimize(costs), constraints)

    def solve(self):
        self._problem.solve()
        return self._target

problem = MyProblem(4, ...)
for param_value in param_values:
    problem.param.value = param_value
    answer = problem.solve()

这允许在标准化问题设计的同时扫描参数参数。

于 2018-06-07T21:19:56.873 回答