问题标签 [cvxopt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1040 浏览

python - 将 Python 的多处理模块与 cvxopt 包一起使用

我刚刚遇到了用于凸优化的cvxopt 包的问题,​​我在文档中没有找到它。我想知道是否有人知道导致它的原因以及如何最好地解决它。

问题是当您import cvxopt在使用multiprocessing.Process实例的 Python 程序中时,这些进程不能再并行运行。它们似乎自动同步。请注意,无论cvxopt程序是否实际使用了任何功能,都会发生这种情况。简单地导入包就会产生这种效果。

例子:

上面的脚本启动了四个与主程序并行运行的进程。在具有四个内核的机器上,我有四个进程,每个进程占用 100% 的 CPU。

但是,在import cvxopt开始时取消注释语句时,每个进程最终只占用 25% 的 CPU,就好像它与其他进程同步一样。

我对解释和解决方法都感兴趣。如果我忽略的文档中有明显的解释,我深表歉意。


有关如何重现问题的详细信息

我运行它的环境是 Linux 3.5.0(Ubuntu 12.10 发行版)和 Python 3.2.3。这就是我安装 cvxopt 的方式:

  1. 安装 matplotlib 1.2.1(我这样做是因为它包含 pylab,它在许多 cvxopt 示例脚本中使用。我不确定这是否是实际要求)。我使用了这个 tar.gz 包sudo python3 setup.py install安装了它。

  2. 安装了 BLAS 和 ATLAS

    以上可能是不必要的,但如果这引起任何问题,我会感到惊讶。

  3. 使用此处的 tar.gz 包安装 cvxopt 1.1.6和sudo python3 ./setup.py install.

0 投票
2 回答
10775 浏览

python - 安装cvxopt的问题

我正在尝试在 Windows 上安装 cvxopt,我使用 2.7 Python Enthought 发行版。我按照这里的说明进行操作,

http://abel.ee.ucla.edu/cvxopt/install/

我遇到的错误如下,

./liblapack.a:无法读取符号:存档没有索引;运行 ranlib 以添加 o ne collect2: ld returned 1 exit status error: command 'gcc' failed with exit status

请帮助我,我很迷茫。非常感谢。

0 投票
0 回答
1135 浏览

svm - SVM 实现中的阈值 b

我正在使用我自己的 SVM 粗略实现,使用 cvxopt 来解决固有的二次规划问题。我是 SVM 的新手。

因为这是我自己的实现,所以我有责任找出边缘支持向量和分离平面的阈值 b。在一个大小合适的(大约 5K 个样本,二维数字输入)数据集上,在一个软 SVM 公式中,我在试图找出边际支持向量时遇到了这个问题。

边距支持向量是小于 C 的非零 alpha。但是,如果我盲目地使用 cvxopt 的 feastol 参数来确定哪些 alpha 可以被视为 C,哪些可以被视为小于 C,我发现阈值 b 来自每个边距支持向量差异很大,有时甚至是惊人的。(理论上,从任何边缘支持向量派生的阈值 b 应该是相同的)

有时临时阈值有效,但有时似乎不可行——也许有一种方法可以巧妙地尝试不同的阈值来获得一些“最少不一致”的 b 集合或类似的集合。

(a) 真正的从业者(或“内部”实现,如 libsvm 或 svm-light 等)在实践中是否遇到过这种情况,或者在我的具体情况下这听起来像错误或实现问题吗?

(b) 如果这在实践中确实是一个问题,如何解决:Burges 的 SVM 教程指出,您只需对从边际支持向量派生的所有阈值取平均值——这也是 matlab 代码中所做的Gunn 的技术报告 ( http://www.ecs.soton.ac.uk/~srg/publications/pdf/SVM.pdf )。这是简单的出路并且在实践中效果很好,这是在 libsvm 或 svm-light 等中完成的吗?或者是否有一些原则性的方法来尝试不同的阈值以获得最小不一致的可接受的阈值集 b ?

0 投票
1 回答
494 浏览

matlab - 如何在 matlab 的 cvx 块中找到 argmax?

我试图在 matlab 的 cvx 块中找到 argmax。这只是为了使用线性规划找到贝尔曼方程的最优策略。在下面的代码中,如果我这样做:

它找到列表 Q 的最大值并且工作正常,但只要我这样做:

要找到列表 Q 的 argmax,它会抱怨:

在 cvx 中找到 argmax 有不同的方法吗?

0 投票
2 回答
703 浏览

cvxopt - 为 python 安装 cvxopt - 我在哪里可以找到 libblas.a 和 liblapack.a

关于在 Windows 上安装 cvxopt,我有一个(我认为是)相当简单的问题。我正在关注这个“指南” http://cvxopt.org/install/index.html。但我被困在你应该做的部分

将 libblas.a 和 liblapack.a 复制到 src 目录。

我认为可以公平地说,我对这类事情非常糟糕,而且我不知道自己在做什么。因此,如果有人能告诉我在哪里可以找到这些,我将非常有帮助。我想这与以下几点有关:

制作 lapacklib && cp liblapack.a ..

制作 && cp blas_WIN.a ../libblas.a

但我真的什么都做不了……

提前致谢!

0 投票
2 回答
1285 浏览

matlab - 使用matlab cvx进行最小切割

我正在尝试使用用户图上的二进制最小切割来检测社区。为此,我尝试使用本文所示的 Fiedler 方法的变。这就是他们将其正式化的方式:

在此处输入图像描述

现在,我正在尝试使用 matlab 中的 CVX 包来执行此操作。这是我的代码:

但它向我显示以下错误:

这里 A1 是一个矩阵,定义如下:

同样 A2 = A1。

并且 pi1 是一个矩阵,它是一个对角矩阵,其值等于该特定行中 A1 的所有值的总和。这样做我得到

类似地,pi1 = pi2。

并且 tou1 = pi1 - A1,并且 tou2 = pi2 - A2。

有人可以指出我到底做错了什么。这会有很大帮助。提前致谢 !

0 投票
1 回答
4823 浏览

python - python/cvxopt 中的凸优化

我正在尝试使用 python 中的 cvxopt 库对线性目标函数和凸约束进行约束优化(最大化)问题。目前,约束是二次的,但我想最终用一个通用的凸多项式来做。问题基本上是:最大化 c_1*x_1 + c_2*x_2 + c_3*x_3 受约束 k_1*x_1^(alpha+1) + k_2*x_2^(alpha+1) + k_3*x_3^(alpha+1) <= 预算,并且 x_i 非负数。我的代码:

我的输出是:

关于出了什么问题的任何提示?

0 投票
1 回答
2411 浏览

python - Python:从 MATLAB 的 quadprog 移植到 cvxopt 二次编程

我正在将一个 MATLAB 脚本移植到使用quadprog函数的 Python。最好的等价物似乎是qp。我可以用文档和一些时间计算出等效的符号,但我很懒,只复制粘贴一些代码而不是考虑它会很好。所以:

  • 这两个函数中的哪个参数是等价的?
  • 如何将 quadprog 的上限和下限合并到 cvxopt.solvers.qp 中?

我已经阅读了这个相关的问题,但我什至比这更懒惰。

0 投票
1 回答
76 浏览

python - 定义变量:程序逻辑流的问题

我目前正在尝试实现以下算法来查找最大边距决策边界(用于 SVM):

我们关心的唯一变量是 w*,它应该是一个矩阵(来自 CVXOPT 包,而不是 numpy 数组——尽管 CVXOPT 矩阵可以从 numpy 数组创建)。当我检查是否定义了 w* 时,主要问题发生了。

如果我在第 4 行将它初始化为 None,那么它对于第 9 行的“w* is undefined”比较工作正常,但第二个比较“|w| < |w*|”,它比较 w 和 w 的范数*, 失败,因为您不能只在 None 变量上运行 np.linalg.norm() 。

如果我将 w* 初始化为某个垃圾矩阵(例如 [40,40])并记住它作为我未定义的占位符值,在我需要检查 w* 是否未定义的行下替换该垃圾矩阵,那么我也运行遇到问题——CVXOPT 不允许直接比较矩阵来查看它们是否相等。我可以循环浏览并比较每个元素,但这会严重影响性能(尤其是因为我可能将它用于大型数据集)。

这是我的错误代码的要点:http: //tinyurl.com/pr5j44w

请注意,wopt 是有问题的变量 w*。

0 投票
0 回答
1153 浏览

python - 如何使用 Enthought python (Canopy) 安装 CVXOPT

在开始之前,让我为这篇文章添加替代标题:

如何使用英特尔 MKL 编译 CVXOPT?

如何更改 CVXOPT 中的 __init__.py 以使用英特尔 MKL 进行编译?

让我解释一下这个问题。我正在尝试使用 Enthought python 安装 pystruct,因为与 Ubuntu 包管理器中的 python 相比,Enthought python 提供了显着的速度。加速主要是由于使用英特尔 MKL 库编译后端线性代数库。我不得不说 CVXOPT 和 pystruc 与 gnu python 配合得很好。

我想知道是否有人尝试使用 Enthought python(Canopy 以前的 EPD)安装 CVXOpt?它需要使用英特尔 MKL 编译。

当我构建 CVXOPT 并尝试将其导入 Enthought python 时,我收到以下错误(这似乎是链接器错误):

但是,如果我尝试在默认 python 中导入它,我不会收到错误(测试也有效)。

我想问题在于链接到错误的库。我也有 INTEL MKL,以防我需要针对 MKL 重新编译 CVXOPT(这似乎是 blas Enthought 正在使用的版本)。我在文档中找不到任何说明如何使其与 Enthough 一起使用,请告知。

更新:正如我之前提到的,CVXOPT 使用 gnu python 编译和运行。我做了以下技巧,这看起来不是一个好主意,但它确实有效:

我从这篇文章中学到的:(libgfortran:未找到版本“GFORTRAN_1.4”

现在,问题是这样做的干净方法是什么?我怎样才能只为一个包预加载库。或者使用英特尔 MKL 编译 CVXOPT 并且根本不需要预加载库?

谢谢,
凯汉