【问题标题】:How to set cvxpy n-dim variable first value?如何设置 cvxpy n-dim 变量的第一个值?
【发布时间】:2020-06-14 06:46:36
【问题描述】:

我是 python 的初学者,我尝试将 cvxpy 库用于我的优化项目。我尝试更改我的 n 维变量的第一个值但我得到一个 AttributeError

import cvxpy as cp
S = cp.Variable(100)
S[0].value=320000

output:AttributeError: can't set attribute

适用于一维变量

import cvxpy as cp
S = cp.Variable()
S.value=320000

提前致谢

【问题讨论】:

  • 你想达到什么目的? 修复变量?添加一个约束来做到这一点(或更丑陋:使用变量边界)。我不认为您可以触摸变量。根据用例的不同,还有Parameters的概念。
  • 所以 S 参数在我的研究中随着时间的推移而变化,这是我的一个约束,我把这个 S 放在一个 for 循环中并为其设置下限和上限,我最小化另一个变量也取决于 S。我想要做的是提前设置 S 变量的第一个值,如 S[0]=320000 但其他如 S[1],...S[99] 可以取任何值在优化问题中。我可以编辑变量的值,如果它像我展示的那样具有 1-dim,但是当涉及到多维变量时,它不起作用
  • 任一使用参数(如果效果很好 -> 例如,当它在 S 中总是相同的索引时 -> 拆分为大小为 1 的参数和大小为 n-1 的 var;它还可以保护多个 dcp-规范化)或修复的约束(然后您每次都为 dcp-canonicalization 付费)。恕我直言,除了读出结果外,不要碰.value(直到你找到一些允许这样做的明确文档)。另外:不要被这样一个事实所误导,您的代码在使用单例变量时不会崩溃。要么这是一种专业化(隐藏的参数使用),要么是没有受到问题保护的东西,要么......恕我直言:不要利用它

标签: python optimization cvxpy


【解决方案1】:

“变量”对象不支持项目分配。您可以强制执行您的要求作为约束:

import cvxpy as cp
S = cp.Variable(100) # Define your variables

objective = ... # Define your objective function

constraints = [] # Create an array of constraints
constraints.append(S[0]==320000) # Make your requirement a constraint

# Add more constraints

prob = Problem(objective, constraints) # Define your optimization problem
prob.solve(verbose=True) # Solve the problem

print(S.value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多