标签: cvxpy

Python约束非线性优化

在python中推荐的约束非线性优化包是什么?

我试图解决的具体问题是:

我有一个未知的X(Nx1),我有M(Nx1)u向量和M(NxN)s矩阵.

max [5th percentile of (ui_T*X), i in 1 to M]
st 
0<=X<=1 and
[95th percentile of (X_T*si*X), i in 1 to M]<= constant
Run Code Online (Sandbox Code Playgroud)

当我开始解决这个问题时,我只有一点估计值u,s并且我能够解决上面的问题cvxpy.

我意识到,而不是一个估计us,我有整个值的分布,所以我想改变我的目标函数,以便我可以使用整个分布.上面的问题描述是我尝试以有意义的方式包含该信息.

cvxpy不能用来解决这个问题,我试过了scipy.optimize.anneal,但我似乎无法对未知值设置界限.我也看过了,pulp但它不允许非线性约束.

python mathematical-optimization cvxpy

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

从CVX到CVXPY或CVXOPT

我一直在尝试将一些代码从Matlab传递给Python.我在Matlab上有相同的凸优化问题但是我在将它传递给CVXPY或CVXOPT时遇到了问题.

n = 1000;
i = 20;
y = rand(n,1);
A = rand(n,i);
cvx_begin
variable x(n);
variable lambda(i);
minimize(sum_square(x-y));
subject to
    x == A*lambda;
    lambda >= zeros(i,1);
    lambda'*ones(i,1) == 1;
cvx_end
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用PythonCVXPY.

import numpy as np
from cvxpy import *

# Problem data.
n = 100
i = 20
np.random.seed(1)
y = np.random.randn(n)
A = np.random.randn(n, i)

# Construct the problem.
x = Variable(n)
lmbd = Variable(i)
objective = Minimize(sum_squares(x - y))
constraints = [x == …
Run Code Online (Sandbox Code Playgroud)

python matlab cvxopt cvx cvxpy

6
推荐指数
1
解决办法
6256
查看次数

CVXPY 中的逐元素乘法

我正在尝试在目标函数中的 CVXPY 中进行元素乘法。这是否允许作为凸问题的一部分?

X是 anx 1 变量。 V是 anxn 常数。

我想做相当于np.multiply(X, V*X),它返回一个 nx 1 向量。

python convex-optimization cvxpy

6
推荐指数
1
解决办法
5872
查看次数

CVXPY 中的约束不遵循 DCP 规则

我想使用 CVXPY 解决这个问题,但我不知道为什么会收到以下错误消息:

DCPError:问题不遵循 DCP 规则。

我想我的限制不是DCP。有没有办法在 DCP 中对此进行建模?

n_k = [10000, 20000]

request_rate = [15, 10]

p_k_1 = np.random.rand(n_k[0])

p_k_2 = np.random.rand(n_k[1])

#params
p_k_param_1 = cvx.Parameter(1, n_k[0], sign="positive")
p_k_param_1 = np.array(p_k_1)
p_k_param_2 = cvx.Parameter(1, n_k[1], sign="positive")
p_k_param_2 = np.array(p_k_2)

request_rate_param = cvx.Parameter(2, sign="positive")
request_rate_param = np.array(request_rate)

#varibales
c_k = cvx.Variable(2)
T_k = cvx.Variable(2)


constraints = [ cvx.sum_entries(c_k) <= 10000,
               c_k >= 0,
               c_k[0]==cvx.sum_entries(1-cvx.exp(-request_rate_param[0]*T_k[0]*p_k_param_1)),
               c_k[1]==cvx.sum_entries(1-cvx.exp((-request_rate_param[1]*T_k[1])*p_k_param_2))]

h_k_1 = request_rate_param[0] * cvx.sum_entries((p_k_param_1 * (1-cvx.exp(-request_rate_param[0]*T_k[0]*p_k_param_1))))
h_k_2 = request_rate_param[1]* cvx.sum_entries(p_k_param_2 * (1-cvx.exp(-request_rate_param[1]*T_k[1]*p_k_param_2)))


obj = …
Run Code Online (Sandbox Code Playgroud)

python convex-optimization cvxpy

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

CVXPY抛出`SolverError`异常的具体原因是什么?

我正在使用 CVXPY(版本 1.0)来解决二次程序(QP),我经常遇到这个异常:

求解器错误:求解器“xxx”失败。尝试另一个求解器。

这使我的程序非常脆弱。我尝试了不同的求解器,包括 CVXOPT、OSQP、ECOS、ECOS_BB、SCS。他们都或多或少有相同的问题。我注意到,当我使求解器的停止标准更严格(例如,降低绝对误差容限)时,我会变SolverError得更频繁,而当我使其不那么严格时,SolverError问题会减弱甚至消失。我还发现 CVXPY 抛出的方式SolverError是随机的:如果我多次运行同一个程序,有一些运行SolverError会获得最佳结果而另则会获得最佳结果。

虽然我可以通过尝试更多次并降低停止标准来避免 SolverError,但我真的很想了解异常背后的真正具体原因

求解器错误:求解器“xxx”失败。尝试另一个求解器。

这个错误并没有真正提供信息,我不知道如何提高解决问题的稳健性。其原因是否特定于求解器?是否为一组明确定义的情况抛出此异常?或者它只是一种说“由于未知原因出现问题”的方式?这些可能是什么原因?

convex-optimization numerical-stability cvxopt quadratic-programming cvxpy

6
推荐指数
1
解决办法
4569
查看次数

CVXPY 中的初始猜测/热启动:给出解决方案的提示

在这段代码中:

import cvxpy as cvx

# Examples: linear programming
# Create two scalar optimization variables.
x = cvx.Variable()
y = cvx.Variable()

# Create 4 constraints.
constraints = [x >= 0,
               y >= 0,
               x + y >= 1,
              2*x + y >= 1]

# Form objective.
obj = cvx.Minimize(x+y)

# Form and solve problem.
prob = cvx.Problem(obj, constraints)
prob.solve(warm_start= True)  # Returns the optimal value.
print ("status:", prob.status)
print ("optimal value", prob.value)
print ("optimal var", x.value, y.value)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方式来选择温暖的起始值自己(例如:X …

python optimization solver cvxpy

6
推荐指数
2
解决办法
2971
查看次数

cvxpy stlibc ++ MacOS Mojave上的安装错误

尝试在Mac上使用pip install安装cvxpy软件包时,收到以下错误消息:

warning: include path for stdlibc++ headers not found; pass '-std=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
In file included from cvxpy/cvxcore/src/cvxcore.cpp:15:
cvxpy/cvxcore/src/cvxcore.hpp:18:10: fatal error: 'vector' file not found
#include <vector>
^~~~~~~~
1 warning and 1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

Mac正在运行OS Mojave.

python python-3.x libc++ cvxpy

6
推荐指数
2
解决办法
1864
查看次数

尝试用 cvxpy 解决数独

我正在尝试使用cvxpy优化包解决数独。我对优化和 cvxpy 都很陌生。

约束条件是:

  1. 所有值都在 1 到 9 之间
  2. 所有行的总和 = 45
  3. 所有列的总和 = 45
  4. 所有平方和 = 45
  5. 给定的数字(我正在尝试解决 17 条线索数独)。

所以,这是我的代码:

from cvxpy import *
import numpy as np

x = Variable((9, 9), integer=True)
obj = Minimize(sum(x)) #whatever, if the constrains are fulfilled it will be fine 
const = [x >= 1, #all values should be >= 1
         x <= 9, #all values should be <= 9
         sum(x, axis=0) == 45,  # sum of all rows should …
Run Code Online (Sandbox Code Playgroud)

python algorithm optimization sudoku cvxpy

6
推荐指数
1
解决办法
1284
查看次数

如何反转 cvxpy 中的变量矩阵?

如何反转 cvxpy 中的变量矩阵?

我有一个问题变量矩阵,定义如下:

import cvxpy as cp
A = cp.Variable(2,2)
Run Code Online (Sandbox Code Playgroud)

我想求解一个具有涉及该矩阵逆的目标函数的程序。我几乎尝试了所有我能想到的方法(包括手动定义逆矩阵),但似乎没有任何效果。

我的问题的完整代码是:

A = cp.Variable((2,2)) # matrix A is 2X2
c = cp.Variable(2) # center of 2d ellipsoid

constraints = [A >> 0]
constraints += [cp.pnorm(cp.matmul(A, v[i] - cp.matmul(A,c)), p=2) <= np.array([1,1]) for i in range(10)]

# this is where I'm stuck. Using np.linalg.inv doesn't work.
# I also can't seem to calculate this inverse manually 
obj_fn = cp.log_det(np.linalg.inv(A))

prob = cp.Problem(cp.Minimize(obj_fn), constraints)
prob.solve(solver='CVXOPT')
Run Code Online (Sandbox Code Playgroud)

python cvxopt cvxpy

6
推荐指数
1
解决办法
2082
查看次数

在python中使用cvxpy包构建融合套索惩罚

Fused Lasso (Tibshirani 等人,2005)鼓励系数的稀疏性及其差异的稀疏性。

这是损失函数和正则化的公式:【公式截图】(https://cdn1.imggmi.com/uploads/2019/11/17/967043f94a1382c5e14fdd1eb25bad9e-full.png)
第一项是 L2 (mse) 损失,第二项是对系数的 L1 惩罚(Lasso 正则化),最后一项是链接文章中引入的新项。

我如何用cvxpy包来模仿这个 - 具体来说,我如何实现最后一项?

分别有LassoRidge Penalties 的示例代码。我大致了解这些代码是如何工作的,但有一些功能我不知道我应该如何决定使用哪一个。例如,让我们比较 Lasso 和 Ridge 惩罚代码。

# Lasso

import cvxpy as cp
import numpy as np
import matplotlib.pyplot as plt

def loss_fn(X, Y, beta):
    return cp.norm2(cp.matmul(X, beta) - Y)**2

def regularizer(beta):
    return cp.norm1(beta)

def objective_fn(X, Y, beta, lambd):
    return loss_fn(X, Y, beta) + lambd * regularizer(beta)

def mse(X, Y, beta):
    return (1.0 / X.shape[0]) * loss_fn(X, Y, beta).value …
Run Code Online (Sandbox Code Playgroud)

python lasso-regression cvxpy

6
推荐指数
1
解决办法
1306
查看次数