Optimization 特定约束,而不是最小二乘问题的一般约束

Optimization 特定约束,而不是最小二乘问题的一般约束,optimization,constraints,least-squares,constraint-programming,cvxpy,Optimization,Constraints,Least Squares,Constraint Programming,Cvxpy,假设我手头有一个像这样的简单问题 import cvxpy as cp import numpy as np A = np.array([[ 143, -144, -343, 56] ,[-7632, 77, -277, 63 ] ,[ 55, -75, 74, 744 ] ,[-22 , 177, -28, 12] ,[-848 , -433 , 121, 54] ,[98, 75, 155, 87]]) b = [-114, -734, -270, 577, 676, 122]

假设我手头有一个像这样的简单问题

import cvxpy as cp
import numpy as np

A = np.array([[ 143, -144, -343, 56]
,[-7632,  77, -277, 63 ]
,[ 55, -75,   74, 744 ]
,[-22 , 177, -28, 12]
,[-848 , -433 , 121, 54]
,[98, 75, 155, 87]])

b = [-114, -734, -270,  577,  676, 122]

n = 4
x = cp.Variable(n)
objective = cp.Minimize(cp.sum_squares(A*x - b))
prob = cp.Problem(objective)
result = prob.solve()

print(" x =", x.value)
这个问题的答案是
x=[0.04802172-0.7942824 0.88297924-0.47109203]
,其中:

 x1 = 0.04802172, x2 = -0.7942824, x3 = 0.88297924, x4 = -0.47109203
我知道我可以为这个问题定义一个通用的constriant,类似这样的东西可以应用于所有的reslut:

constraints = [0 <= x, x <= 1]

prob = cp.Problem(objective, constraints)

constraints=[0您尝试了什么?关于
constraints=[cp.abs(i)@sascha,它不起作用。我正在考虑尝试二次编程,还不确定。我需要每对答案的第二个值都小于第一个值。您可以使用标准索引suntex索引到向量中。例如,如果x是一个变量(而不是标量),您可以编写x[0]>=0来约束第一个组件为非负。您的变量仍然是非负的吗?如果是,您不需要abs,这些约束将是线性且简单的。只需将
[x[1]>=x[0]]
添加到
约束
Cvxpy有一个函数
abs()
。然而,绝对值也经常会产生凸性问题。您可以随时将自己线性化(需要时,借助额外的二进制变量)。例如,
abs(x),您尝试了什么?关于
约束=[cp.abs(I)呢@sascha,它不起作用。我正在考虑尝试二次编程,还不确定。我需要每对答案的第二个值小于第一个值。你可以使用标准索引suntex索引到向量中。例如,如果x是变量(而不是标量),你可以写x[0]>=0将第一个组件约束为非负。您的变量仍然是非负的吗?如果是,您不需要abs,并且这些约束将是线性且简单的。只需将
[x[1]>=x[0]]
添加到
约束
Cvxpy有一个函数
abs()
。但是,绝对值也经常会产生凸性问题。您可以随时对自己进行线性化(需要时借助额外的二进制变量)。例如,
abs(x)
1) abs(x2)< abs(x1) (and so on and so forth forth ,ie, abs(x4)< abs(x3) , ...)
2) The last two results (in this case x3 and x4) are free to obtain any values.