gpt4 book ai didi

python - 在具有实际值的 cvxpy 中检查约束是可以的

转载 作者:行者123 更新时间:2023-11-28 22:55:23 26 4
gpt4 key购买 nike

在解决 cvxpy 中的优化问题时,是否有一种很好的方法可以通过将优化变量替换为实际值来检查约束是否有效?

我有一个复杂的优化问题(100 多个约束),但我知道最优解应该是什么。但是,cvxpy 失败并显示错误消息 ValueError: Rank(A) < p or Rank([G; A]) < n我认为这是因为我在其中一个约束中有错字,使它们不一致。有没有一种很好的方法可以用实际值代替变量,看看违反了哪些约束(因为它们可能有拼写错误)?

我的实际问题比较复杂,所以我做了一个简单的例子:

from cvxpy import *

x = variable(name='x')
y = variable(name='y')

c1 = greater_equals(x, 1.)
c2 = greater_equals(y, 1.)
c3 = less_equals(x + y, -4.) # typo: -4 should be +4

p = program(maximize(2. * x + y), [c1, c2, c3])

p.solve()

-4在约束中c3应该是 +4 .这失败并显示错误消息:Certificate of primal infeasibility found.如果我输入 p.show()我得到:

maximize 2.0*x + y
subject to
x >= 1.0
y >= 1.0
x + y <= -4.0

是否有一个值可以替代正确的解决方案 ( x == 3., y == 1. ) 以便看到违反了第三个约束?我试过弄乱 x.value等,但还没找到办法

最佳答案

我找到了一个好的方法,使用约束的 left 属性,它确实有一个 value 属性:

x.value = 3.
y.value = 1.
for c in [c1, c2, c3]:
constraint_text = '%s %s %s' % (c.left.value, c.type, c.right)
print '%s becomes %s which is %s' % (c, constraint_text, eval(constraint_text))

打印:

x >= 1.0 becomes 3.0 >= 1.0 which is True 
y >= 1.0 becomes 1.0 >= 1.0 which is True
x + y <= -4.0 becomes 4.0 <= -4.0 which is False

如果有人知道更好的方法,请随时分享。

关于python - 在具有实际值的 cvxpy 中检查约束是可以的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16974122/

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