问题标签 [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.
python - 是否应该使用解析雅可比行列式加速 SLSQP 最小化?
我有大约 1000 个变量的约束最小化问题。目前我正在使用 scipy 的 SLSQP 例程:
(带有形式的约束x0[1,1]**2 + x0[1,2]**2 + ... + x0[1,N]**2 = 1
)
我曾希望提供雅可比行列式的分析形式会稍微加快这个过程(过度计算导数)。但是,当我比较运行时间时,似乎没有区别。
python - scipy.optimize.minimize(COBYLA 和 SLSQP)忽略在 for 循环中启动的约束
我正在使用 scipy.optimize.minimize 来解决复杂的油藏优化模型(SQSLP 和 COBYLA,因为问题受到边界和约束方程的约束)。每天有一个决策变量(蓄水量),在目标函数内,水库的释放量是作为蓄水量变化的函数来计算的。然后基于释放和存储惩罚的惩罚以最小化惩罚为目标(目标函数是所有惩罚的总和)。我在这个模型中添加了一些约束,以将存储的变化限制在物理系统限制内,这是决策变量 x(t+1) 和 x(t) 之间的差异,并且还取决于那个时间步的流入量 I( t)。使用 for 循环将这些约束添加到约束字典列表中。在此 for 循环函数之外添加了应有的约束。但是,在 for 循环中启动的涉及时间的约束却没有。
显然问题很复杂,所以我重新创建了一个更简单的版本来说明问题。这个问题有四个决策变量,并寻求最小化目标函数(我称之为函数),具有稳态约束(I = 流入必须等于 x = 流出)和非负性(即流出 x 不能为负):
在 for 循环中启动的约束是非负约束,但优化会为决策变量提供负值。然而,它确实遵守稳态约束。
当我使用以下代码计算问题时,值受到了适当的约束:
有什么想法我哪里出错了吗?我已经看到在其他应用程序中类似地启动了约束,所以我无法弄清楚,但假设它很简单。我有数百个约束要在此代码的完整版本中启动,因此像第二个示例中那样将它们写出来并不理想。
r - 使用portfolio.optim函数在R中进行二次规划的错误
我正在尝试从一个季度创建已实现的有效边界,其中包含 100 只股票的每日收盘价,不允许空头头寸。
第一步是计算每只股票在该期间的每日收益:
然后我使用 {tseries} 中的portfolio.optim() 函数执行二次规划并创建最佳投资组合:
但是,当我运行此函数时,会出现以下消息:
当我为更少的股票运行相同的代码时,它似乎运行良好:
有人知道我为什么会遇到这个问题吗?非常感谢你!
matlab - 使用 YALMIP 在 MATLAB 中找不到 QP 编码的解决方案
这是我第一次发帖!
我已经编写了附件图像中可用的 QP 算法,但不幸的是我没有得到任何解决方案。我收到的错误消息是“警告:求解器不适用(gurobi)”。所以看起来我不知何故没有 QP,因为 gurobi 解决了 QP……我努力找出我的错误在哪里,但找不到。任何人都可以看一下代码吗?
谢谢!
python - CVXOPT QP Solver: TypeError: 'A' must be a 'd' matrix with 1000 columns
我正在尝试使用 CVXOPT qp 求解器来计算支持向量机的拉格朗日乘数
这X
是一个1000 X 2
矩阵,Y
具有相同数量的标签。求解器抛出以下错误:
$ python svm.py
(1, 1000)
Traceback (most recent call last):
File "svm.py", line 35, in <module>
svm(X, Y, 50)
File "svm.py", line 29, in svm
sol = solvers.qp(P, q, G, h, A, b)
File "/usr/local/lib/python2.7/site-packages/cvxopt/coneprog.py", line 4468, in qp
return coneqp(P, q, G, h, None, A, b, initvals, options = options)
File "/usr/local/lib/python2.7/site-packages/cvxopt/coneprog.py", line 1914, in coneqp
%q.size[0])
TypeError: 'A' must be a 'd' matrix with 1000 columns
我打印了 A 的形状,它是(1,1000)
从向量重塑后的矩阵。究竟是什么导致了这个错误?
matlab - 使用 CVX 的简单线性约束 MatLab 的高效二次优化
(对不起格式化,我会尽力的)我想解决的:
其中A
是一个NxH
逻辑矩阵(大约一半是零,一半是一),b
是一个Hx1
常数向量,其中每个条目都是相同的(例如,b = (0.1,0.1,0.1,...)
. 是概率p
的常数向量,所以所有条目都在 中。最优也是一个分布,所以所有其条目的个数应该在 中。请注意,在实践中,例如非常大,例如相对较小,例如。Nx1
[0,1]
x
[0,1]
H
2 million
N
150
我目前正在使用 CVX 来解决这个问题。明确地说,我的代码是:
这会产生正确的结果。但是,当它很大时,它相当慢H
。鉴于我的优化程序的结构(逻辑 A、恒定约束、如果没有约束,则具有解析解的问题等),有没有更好的方法来解决这个问题?这里推荐CVX吗?
谢谢您的帮助。
prolog - swi prolog 中的优化
假设我想找到 argmax(x,y,z) -1/2(20x^2+32xy +16y^2)+2x+2y。
服从:x>=0, y>=0,z>=0 和 -x-y+z =0。
我知道设置为 0 的偏导数是:
-20x-16y+2=0 和 -16x-16y+2=0
所以我们可以有 x= 0 和 y =1/8 和 z=1/8。
我将如何在 Swi-prolog 中执行此操作?我看到有用于线性求解的库单纯形,但这是一个二次问题,但偏导数不是。(我有一点疑惑!)
这就是我所拥有的:
python - 二次规划 CPLEX
我正在尝试使用 CPLEX 的 Python API 实现一个简单的二次程序。随 CPLEX 提供的样本文件 qpex1 讨论了这一点。qpex.lp 中提到的问题是
该问题在 python 中实现时,接收一个矩阵 qmat,它实现了目标函数的二次部分。矩阵是:
有人可以解释这个矩阵的结构吗?正在使用的数据结构中有哪些部分?有哪些成分等等。
mathematical-optimization - CPLEX:外部优化中具有二次项的 Benders 分解
问题交叉发布在:IBM CPLEX 论坛
我正在尝试使用弯曲器分解来解决两阶段优化问题。基本问题如下所示:
min_x (f(x) + min_u(g(u)))
其中 g(u) 是一个线性规划,可以求解外部决策变量 x 的固定值。f(x) 是关于 x 的线性函数。我使用 CPLEX 的 python API 实现了特定代码,方法是使用回调并使用回调动态生成约束。结果与预期一致。
现在问题稍作修改,f(x) 是关于 x 的二次函数。但是,问题退出说没有解决方案存在,并且永远不会调用回调。这令人惊讶,因为我找不到不应该存在解决方案的原因。当我尝试调试代码时,我发现当目标不是二次方时,虽然在“mipopt(env,lp)”函数之后调用了用于剪切生成的回调函数,但现在没有调用它。问题的基本结构以图像的形式附上。这两个问题(一个是线性的,另一个是二次的)的唯一区别是目标中存在 x0^2 项。
主问题的代码是:
真正让我吃惊的问题之一是,如果所有二次项的系数都设置为 0,则基本上使问题与以前相同,即使这样solve()
仍会返回一条消息“不存在解决方案”。
least-squares - 如何计算非负约束最小二乘的投影矩阵?
假设我们在 R^p 中有一个数据向量z ,在 R^(p*N) 中有一个训练数据矩阵X,其中 N (N>p) 是训练数据矩阵中的样本数。
如果我们想找到z到由X的列跨越的线性子空间的投影,那么我们可以解决以下无约束问题
分钟 || z - X b ||^2。
b的最小二乘估计是 ( X X ')^-1 X z。因此z到子空间的投影可以写成X ( X X ')^-1 X z = P z。P = X ( X X ')^-1 X是满足P ' = P和P ^2 = P的投影矩阵。
如果我们给b添加非负约束,那么上面的优化问题就变成了
分钟 || z - X b ||^2, st b中的每个元素都是非负的。
拉格朗日是 || z - X b ||^2 - v ^T b,其中v是 N 维向量。将拉格朗日 wrt b的一阶导数设置为零,我们找到 b 的估计值:( X X ' )^-1 ( X ' z + 1/2 v )。因此z到子空间的投影是X ( X X ')^-1 ( X ' z + 1/2 v )。
我现在的问题可以描述如下。
是否有任何方法可以使用P z近似投影X ( X X ')^-1 ( X ' z + 1/2 v ) ,其中P是满足P ' = P和P ^2 = P的投影矩阵?我怎样才能估计这样的 P?
提前致谢!