标签: convex-optimization

最佳开源混合整数优化求解器

我正在使用CPLEX来解决巨大的优化模型(超过100k变量)现在我想看看我是否能找到一个开源替代品,我解决了混合整数问题(MILP)和CPLEX工作得很好但是如果我们这样做很贵想要扩展所以我真的需要找到一个替代方案或开始编写我们自己的ad-hoc优化库(这将是痛苦的)

任何建议/见解将不胜感激

mathematical-optimization linear-programming convex-optimization cplex

48
推荐指数
9
解决办法
5万
查看次数

Java的数学优化库---免费或开源推荐?

有谁知道这样一个执行数学优化的库(线性编程,凸优化或更一般类型的问题)?我正在寻找像MATLAB这样的东西,但能够处理更大的问题.我是否必须编写自己的实现,或者购买其中一种商业产品(CPLEX等)?

mathematical-optimization linear-programming convex-optimization cplex gurobi

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


CVXOPT只有相等的约束

我正在尝试以下作为CVXOPT中的学习练习.我通过删除不等式约束并添加更多相等约束来对此处的示例代码进行微小修改.

from cvxopt import solvers, blas, matrix, spmatrix, spdiag, log, div
solvers.options['show_progress'] = False
import numpy as np    
np.random.seed(1)

# minimize     p'*log(p)
# subject to
#              sum(p) = 1
#              sum(p'*a) = target1
#              sum(p'*max(a-K,a^2)) = target2

a = np.random.randint(20, 30, size=500)
target1 = 30
target2 = 0.60
K = 26

A = matrix(np.vstack([np.ones(500), a, np.array([max(x-K,x*x) for x in a])]))
b = matrix([1.0, target1, target2])

n = 500
def F(x=None, z=None):
   if x is None: return 0, matrix(1.0, …
Run Code Online (Sandbox Code Playgroud)

python convex-optimization cvxopt

14
推荐指数
1
解决办法
1242
查看次数

凹面六边形有两个口的标准网格?

我正在计划通过带两个嘴的凹形双对称六边形流动的可视化.

边d1的长度等于边d2的另一长度的示例:

在此输入图像描述

我在这里首先讨论的关于不规则六边形的命名.

有标准的网格工具,你可以绘制自己的网格,但我想有一些标准库,以便我可以与其他人更好地合作,以后的流程模拟.我没有找到任何网库在MathCentral文件交换六边形这里.

是否有任何标准的网格库用于不规则的六边形形状?我也对任何其他语言开放,因为我可以阅读代码并将这些标准转换为Matlab库.

geometry mesh convex-optimization finite-element-analysis non-convex

9
推荐指数
1
解决办法
312
查看次数

R中的CVX-esque凸优化?

我需要解决(很多次,对于大量数据,以及其他一些东西)我认为归结为二阶锥形程序.它可以在CVX中简洁地表达,如下所示:

cvx_begin
    variable X(2000);
    expression MX(2000);
    MX = M * X;
    minimize( norm(A * X - b) + gamma * norm(MX, 1) )
  subject to
    X >= 0
    MX((1:500) * 4 - 3) == MX((1:500) * 4 - 2)
    MX((1:500) * 4 - 1) == MX((1:500) * 4)
cvx_end
Run Code Online (Sandbox Code Playgroud)

显示的数据长度和等式约束模式只是来自某些测试数据的任意值,但一般形式将大致相同,有两个客观术语 - 一个最小化错误,另一个是令人鼓舞的稀疏性 - 以及大量的等式约束关于优化变量的转换版本的元素(本身被约束为非负的).

这看起来效果非常好,比我之前的方法好得多,后者捏造了腐烂的约束.麻烦的是,围绕这一切的所有其他事情都发生在R中,将它移植到Matlab会非常麻烦.所以在R中这样做是否可行,如果是这样的话怎么样?

这真的归结为两个不同的问题:

1)这有什么好的R资源吗?据我所知,从CRAN任务页面可以看出,SOCP包选项是CLSCOPDWD,它包括一个SOCP求解器作为其分类器的附件.两者都有相似但相当不透明的接口,并且在文档和示例上有点薄,这使我们:

2)在这些包使用的约束块格式中表示上述问题的最佳方法是什么?上面的CVX语法隐藏了很多关于额外变量等等的繁琐工作,我可以看到自己花费数周的时间来试图做到这一点,所以任何提示或指针向我推进正确的方向都会非常受欢迎......

optimization r convex-optimization

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

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
查看次数

使到一组 n 个点的欧氏距离之和最小的点

W={(x1, y1), (x2, y2),..., (xn, yn)}在二维平面上有一组点。您能找到一种算法,将这些点作为输入并返回(x, y)2D 平面上与 中的点的距离总和最小的点W吗?换句话说,如果

di = Euclidean_distance((x, y), (xi, yi))

我想最小化:

d1 + d2 + ... + dn

algorithm mathematical-optimization convex-optimization computational-geometry

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