问题标签 [quadratic-programming]

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 回答
234 浏览

r - R:二次规划/等渗回归

我想最小化以下等式:

具有以下约束:

我有一个 20*10 ruw 和 20*10 quw 矩阵,我现在需要生成一个符合约束的 yuw 矩阵。我正在使用 R 进行编码,并且熟悉 lpsolve、optimx 和 quadprog 包,但不知道如何将它们用于这个特定问题。我知道我必须使用 quadprog 包,因为这是一个二次规划问题。我不是在寻找一个完整的答案,我想要一些关于如何构建约束矩阵和解决问题的最佳方法的指导。

0 投票
4 回答
134 浏览

algorithm - 进行分配时最小化最小二乘的算法?

假设我们必须将 x 数量分配给 k 所需数量。是否有算法可以最小化实际 k 分配值和 k 所需数量之间的平方距离?

例如,假设我们需要将 x=5 分配给 k=3 所需数量的 2,-3,4。

我们可以将 5 分配给 2,-3,6,产生 0^2 + 0^2 + 2^2 = 4 的平方距离。

我们可以将负数或任何金额分配给 k 个金额。唯一的限制是分配的金额必须总计为原始 x。分配的金额也不必是整数,只要是实数。

0 投票
0 回答
118 浏览

c++ - 巨大的矩阵 (C++) (Visual Studio 2015) (QuadProg 库)

我正在尝试使用 QuadProg++ 库。问题是我的 CI 变量很大。高达 40,000 * 20,000。使用这个大小,它会占用太多内存(至少 12GB ......)。我有 2 个问题: 1.- 有什么方法可以给“solve_quadprog”函数提供不同的数据类型,而不是矩阵的 double 类型?我尝试了short,但它不允许我。2.- 有人知道如何解决这个尺寸问题吗?这个CI变量其实很简单,只有一条对角线全为1,另一条对角线全为-1(其他全为0)

如果可以使用另一个库(解决二次规划问题)解决这些问题也不是问题。任何解决方案将不胜感激在此先感谢

0 投票
1 回答
113 浏览

optimization - 可以用这个目标函数中的绝对值代替方差吗?

最初,我将目标函数建模如下:

argmin var(f(x),g(x))+var(c(x),d(x))

其中 f,g,c,d 是线性函数

为了能够使用线性求解器,我将问题建模如下

argmin abs(f(x),g(x))+abs(c(x),d(x))

在这种情况下将方差更改为绝对值是否正确,我很确定它们的含义与两个函数之间的差异最小

0 投票
1 回答
364 浏览

c++ - CGAL 二次编程包找到不正确的解决方案

我正在使用 CGAL QP 包来解决以下二次问题:

在此处输入图像描述

我正在使用以下 MPS 文件来定义问题(first_qp.mps):

请注意,我使用 QUADOBJ 来定义 D 矩阵。在 QUADOBJ 的情况下,仅必须指定对角线之上或之下的 2D 条目,对角线之上的条目是从对称性推导出来的。然后我将此文件提供给求解器(first_qp_from_mps.cpp):

项目编译,可执行文件运行,返回解向量(0 1 0 0 0 0 0 0 0),目标函数的值为0。我知道这是不正确的。解向量不满足上限约束。在此解向量处评估的目标函数不能等于 0。

我在为我的二次规划问题指定 MPS 文件时犯了错误,还是我需要在求解器搜索解决方案的方式上进行调整?我的问题可能与 CGAL 使用的确切类型有关吗?

例如,我尝试在以下行中更改<int><double>

该程序已编译,但当我运行可执行文件时,求解器返回没有可行的解决方案。但我知道有一个可行的解决方案——我在 Excel 中找到了一个使用求解器的解决方案。

0 投票
1 回答
109 浏览

r - 如何在 R 中进行二次规划?

我正在尝试解决 R 中的二次问题。我有以下数据:

我需要计算出 λ1 到 λ8。我尝试使用例程:solve.QP(Dmat, dvec, Amat, bvec, meq=0, factorized=FALSE)from package quadprog。在我的情况下,我很困惑为dvec,输入什么。我尝试了以下但它没有给出正确的结果:bvecDmat

结果应该是 λ1 = 65.5261,λ2=65.5261, λ3 到 λ8 = 0。任何帮助将不胜感激。

0 投票
1 回答
2945 浏览

r - 如何使用 R 包 Quadprog 解决 SVM?

我想知道实施 Quadprog 来解决二次规划的正确方法是什么。

我有以下问题(从互联网上摘录)并且还在查看以下http://cbio.ensmp.fr/~thocking/mines-course/2011-04-01-svm/svm-qp.pdf

在此处输入图像描述

解决这个问题的正确方法是什么?如果我遇到上述问题,本教程对解决有用吗? http://www.r-bloggers.com/solving-quadratic-progams-with-rs-quadprog-package/

0 投票
1 回答
392 浏览

multithreading - MATLAB 的 quadprog 在我强大的本地机器与另一台远程机器上非常慢

我正在使用 MATLAB quadprog,它在我的本地机器上运行非常慢。

当我在远程机器上运行确切的代码时,它会在 10 分钟内完成。当我在本地机器上运行它时,即使 24 小时后它也不会终止(我有时会杀死它)。

当代码运行时,我的本地机器上的内存使用量为 ~10GB RAM(而我的本地机器有 ~100GB 的可用 RAM)。远程机器上的使用量是 20-30GB RAM。

关于如何使它在我的本地机器上运行得更快的任何想法?

重要编辑 10 月 18 日:我在两台机器上都执行了一个较小规模的问题。在本地机器上需要 1900 秒,在远程机器上需要 8 秒,增益约为 240。这两台机器也有多个多核处理器。这次我注意到htop,远程机器使用它的所有处理器,而本地机器只使用一个处理器(尽管所有其他处理器都可用)。关于如何让 MATLAB 使用本地机器上的所有处理器的任何想法?


一些旁注:

1:nnz 代表 H,Aeq =~ 10e6,尺寸约为 11e6 x 11e6

2:只有等式约束的四边形编程有一个封闭形式的解决方案(参见Boyd)。当我使用封闭形式的解决方案解决它时,在我的本地机器上大约需要 10 分钟,而在远程机器上需要 5 分钟。虽然两者都消耗约 20-30GB 的内存。由于我想添加不等式约束,我希望能够在我的本地机器上快速运行 quadprog。

3:下面是cat /proc/cpuinfo我的机器vs远程机器(远程机器更强,但本地机器也很强):14核vs 4核是〜x3.5的增益(不考虑多线程开销),并且AVX 与 SSE 最大〜x2。所以它不能解释我看到的 240 的增益。此外,当我使用封闭形式的解决方案(而不是 quadprog)时,远程机器与本地机器相比只有 x2 的增益。

4:我确定我运行的是64位版本,因为我看到内存消耗是10-15GB。

5:本地系统运行RHEL,远程运行ubuntu。

本地uname -a结果:

远程uname -a结果:

6:机器上启用了超线程。我用这个脚本检查了它。

7:按照某人的建议启动并行池无济于事。

谢谢!

单个处理器的本地机器 cpu 信息(在许多中)

单个处理器的远程机器 cpu 信息(在许多中)

0 投票
0 回答
370 浏览

matlab - IBM cplexqp 成功时很快,但失败时很慢(exitflag=5)

我通过matlab 中的 cplexqp 函数使用 IBM 的 CPLEX(或 ILOG)二次规划求解器,并得到一个奇怪的行为,当问题可行时它很快成功(例如 5-10 秒)但当它不可行时失败非常缓慢(60-300 秒)。问题非常大,例如在 N=100-500 个变量上存在 3000-10000 个不等式约束。

退出标志有 5 表示“解决数字问题”。将容差从 1e-3 更改为 1e-10(通过options.simplex.tolerances.feasibilityoptions.simplex.tolerances.optimality)并没有消除这种不对称性。

我猜它试图“太努力”以避免数字问题。对相关参数有什么建议吗?

0 投票
2 回答
57 浏览

java - 二次规划 - 特定输出

我希望 Quadratic 程序只打印必要的输出。这是代码:

当我在写:java Quadratic 1 0 1 时,它带回:“NaN 没有解决方案。” 什么是 NaN?

当我写:java Quadratic 1 -2 1 它打印两次:“1.0 1.0”。我如何变成一个人?因为我已经写了这个 if 命令:if (first == second)。

太感谢了!!!