我想使用cvxpy查找具有某些给定不等式约束的数据集的中心点。
我试图做出一个约束,以使从最佳点(opt_point)到原点的距离大于一个常数,例如300。有两种方法可以做到这一点。
首先
constraints = [opt_point[0]**2 + opt_point[1]**2 >= 300]
这不起作用,我意识到可以解决<=
不等式,但是不能解决>=
。阅读一些页面后,我意识到quad_form
函数是凸的,因此我尝试了:
constraints = [cp.quad_form(opt_point, P)>=300]
但是,任何一个都不能解决问题。
opt_point = cp.Variable(2);
cost = 0
for i in range(len(xPoints)):
cost += cp.sum_squares(opt_point-data[i,:])
assert cost.is_convex()
P = cp.diag([1, 1])
constraints = [cp.quad_form(opt_point, P)>>300]
prob = cp.Problem(cp.Minimize(cost),constraints)
prob.solve()
opt_point = opt_point.value;
您能否解释一下如何施加更多不平等约束而不产生以下错误?
问题不遵循DCP规则。但是,该问题确实遵循DGP规则。考虑使用
gp=True
调用此函数。