标签: convex-optimization

使用实际值检查 cvxpy 中的约束是否正常

在 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()
Run Code Online (Sandbox Code Playgroud)

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

maximize 2.0*x + y
subject to …
Run Code Online (Sandbox Code Playgroud)

python optimization convex-optimization cvxpy

4
推荐指数
1
解决办法
2300
查看次数

从R的optim函数获取更多细节

我对optim函数不是很熟悉,我想从结果中得到这些信息:a)实现结果需要多少次迭代?和b)绘制部分解的序列,即在每次迭代结束时获得的解.

我的代码到现在看起来像这样:

  f1 <- function(x) {
  x1 <- x[1]
  x2 <- x[2]
  x1^2 + 3*x2^2
}

res <- optim(c(1,1), f1, method="CG")
Run Code Online (Sandbox Code Playgroud)

如何改进它以获得更多信息?

提前致谢

artificial-intelligence r convex-optimization

4
推荐指数
2
解决办法
1147
查看次数

多边形分解 - 去除凹点以形成凸多边形

我想解析以蓝色显示的以下多边形,从多边形中删除导致凹陷的所有点.

替代文字

目前,我一直试图做的是:

  • 从多边形中取出每个点
  • 测试该点以查看它是否属于由该组的其余部分创建的多边形
  • 如果为true则删除该点
  • 如果错误保持重点

这在大多数情况下都有效,但在前一种情况下,(2,3)和(2,4)处的点都不会被删除.在这两种情况下,其中一个点将被删除,但另一个点将不依赖于传入数组的顺序.

我想知道的是:

  1. 有没有办法测试,看看我正在处理的多边形是否恰好有这些情况之一(IE:连续3个故障点?)
  2. 有没有更简单的方法来创建凸多边形?

谢谢.

geometry convex-optimization convex-polygon computational-geometry

3
推荐指数
1
解决办法
1521
查看次数

使用fminunc函数

我试图使用fminunc函数进行凸优化.但是,在我的情况下,我正在考虑与logx相关的渐变.让我的目标函数为F.然后梯度将是

dF/dx = (dF/dlogx) * (1/x)
= > dF/dlogx = (dF/dx) * x
Run Code Online (Sandbox Code Playgroud)

所以

logx_new = logx_old + learning_rate * x * (dF/logx)
x_new = exp(logx_new)
Run Code Online (Sandbox Code Playgroud)

我怎样才能在fminunc中实现它

matlab convex-optimization

3
推荐指数
1
解决办法
1万
查看次数

最小化 cvxpy 中的日志函数

我正在尝试使用 CVXPY 模拟精确线搜索实验。

objective = cvx.Minimize(func(x+s*grad(x))) 
s = cvx.Variable()
constraints = [ s >= 0]
prob = cvx.Problem(objective, constraints)
obj = cvx.Minimize(prob)
Run Code Online (Sandbox Code Playgroud)

(cvxbook byod pg472) 在此输入图像描述

上面的方程是我的输入目标函数。

def func(x):
np.random.seed(1235813)
A = np.asmatrix(np.random.randint(-1,1, size=(n, m)))
b = np.asmatrix(np.random.randint(50,100,size=(m,1)))
c = np.asmatrix(np.random.randint(1,50,size=(n,1)))
fx = c.transpose()*x - sum(np.log((b - A.transpose()* x)))
return fx
Run Code Online (Sandbox Code Playgroud)

梯度函数

def grad(x):
np.random.seed(1235813)
A = np.asmatrix(np.random.randint(-1,1, size=(n, m)))
b = np.asmatrix(np.random.randint(50,100,size=(m,1)))
c = np.asmatrix(np.random.randint(1,50,size=(n,1)))
gradient = A * (1.0/(b - A.transpose()*x)) + c
return gradient
Run Code Online (Sandbox Code Playgroud)

使用此方法通过最小化目标函数来查找 t“步长”会导致错误“AddExpression”对象没有属性“log”。

我是 CVXPY …

convex-optimization cvxpy

3
推荐指数
1
解决办法
2877
查看次数

SVM序列最小优化收敛性问题

我已经在支持向量机上工作了大约2个月了.我自己编写了SVM编码,对于SVM的优化问题,我使用了John Platt博士的Sequential Minimal Optimization(SMO).

现在我正处于我要进行网格搜索以找到我的数据集的最佳C值的阶段.(请在此处查找我的项目应用程序和数据集详细信息的详细信息SVM分类 - 每个类的最小输入集数量)

我已经成功检查了我自定义实现的SVM的精度,C值范围从2 ^ 0到2 ^ 6.但是现在我遇到了关于C> 128的SMO收敛的一些问题.就像我试图找到C = 128的alpha值一样,它在实际收敛并成功给出alpha值之前需要很长时间.

对于C = 100,SMO收敛所花费的时间约为5小时.这个巨大的我认为(因为SMO应该很快.)虽然我的准确度很高?我被搞砸了,因为我不能测试更高C值的准确性.

我实际上显示了SMO每次传递中更改的alpha数,并且让10,13,8 ... alphas不断变化.KKT条件确保收敛,所以这里发生了什么奇怪的事情?

请注意,虽然执行时间很长,但我的实现在C <= 100时工作正常且准确性很高.

请给我关于这个问题的意见.

谢谢你和干杯.

smo classification machine-learning convex-optimization svm

2
推荐指数
1
解决办法
1876
查看次数

在linprog包中设置的R线性编程忽略使用solveLP的约束(小于或等于)

我在linprog R包中使用solveLP来解决一个简单的线性编程问题:

minimize -x1-x2 
subject to 2*x1+x2+x3    =12
           x1+2*x2   +x4 = 9
           x1,x2,x3,x4 >=0
Run Code Online (Sandbox Code Playgroud)

具有双重等价物:

maximize 12*y1+9*y2 
subject to 2*y1+y2 <= -1
           y1+2*y2 <= -1
           y1,y2 <=0
Run Code Online (Sandbox Code Playgroud)

如果我以原始形式陈述问题,我会得到正确的结果(5,2,0,0).但是当以双重形式陈述问题时,前两个约束只会被忽略.我得到的结果(0,0)显然违反了(2*y1 + y2 <= -1且y1 + 2*y2 <= -1),是否有额外的设置或参数我缺少?请查看下面的代码,让我知道您的想法:

require(linprog)
objVec <- c(-1,-1,0,0) 
rhsConstr <- c(12, 9,0,0,0,0) 
Amat <- rbind( c( 2, 1, 1, 0 ),
               c( 1, 2, 0, 1 ),
               c( 1, 0, 0, 0 ),
               c( 0, 1, 0, 0 ),
               c( 0, 0, 1, 0 ),
               c( 0, 0, …
Run Code Online (Sandbox Code Playgroud)

statistics r linear-programming convex-optimization

2
推荐指数
1
解决办法
2050
查看次数

使用 CVXOPT 或 CVXPY 进行凸编程

我需要在 Python 中使用 CVXOPT 或 CVXPY 解决优化问题,但遇到了困难。目标函数是

Minimize Sum(a*x^2+b/x)
Run Code Online (Sandbox Code Playgroud)

受以下限制

5 <= x < 40;

sum(v/d)<=T
Run Code Online (Sandbox Code Playgroud)

其中向量x是优化变量,向量ab是给定的,并且T是给定的标量。

python optimization convex-optimization cvxopt cvxpy

2
推荐指数
1
解决办法
2327
查看次数

什么是凸优化的dotnet库?

你会推荐任何凸优化库吗?

理想的开源.半定规划和QCQP的先验.

(我打算用fsharp和任何dotnet一起使用它)

.net optimization f# convex-optimization convex

0
推荐指数
1
解决办法
454
查看次数

将半定程序从 CVX 转换为 CVXPY

我想将以下 SDP(它只是验证约束的可行性)从 CVX (MATLAB) 转换为 CVXPY (Python):

Ah = [1.0058, -0.0058; 1, 0];
Bh = [-1; 0];
Ch = [1.0058, -0.0058; -0.9829, 0.0056];
Dh = [-1; 1];

M = [0, 1;1, 0];
ni = size(M,1)/2;
n = size(Ah,1);
rho = 0.5;

cvx_begin sdp quiet
    variable P(n,n) semidefinite
    variable lambda(ni) nonnegative
    Mblk = M*kron(diag(lambda),eye(2));
    lambda(ni) == 1  % break homogeneity (many ways to do this...)
    [Ah Bh]'*P*[Ah Bh] - rho^2*blkdiag(P,0) + [Ch Dh]'*Mblk*[Ch Dh] <= 0
cvx_end


switch cvx_status
    case 'Solved' …
Run Code Online (Sandbox Code Playgroud)

python matlab convex-optimization cvx cvxpy

0
推荐指数
1
解决办法
1403
查看次数