京公网安备 11010802034615号
经营许可证编号:京B2-20210330
本文将探究一个被称为二次规划的优化问题,这是一种特殊形式的非线性约束优化问题。二次规划在许多领域都有运用,比如投资组合优化、求解支持向量机(SVM)分类问题等。在R中求解二次规划有许多包,这次,我们将讨论一下quadprog包。在我们开始讲解案例之前,我们将先简短地介绍一下二次规划的机理。
对于一个二次规划问题,首先要考虑的就是一个二次目标函数:
Q(x)=12xTDx−dTx+c.
这里 x 在 ℝn 中是一个向量, D 是一个n×n 的对称正定矩阵,在 ℝn 中 d 是常数项约束,c 是一个标量常数。Q(x)函数通常以二次函数的形式出现,并且它高维的通项表达式是:
q(x)=ax2+bx+c
Q(x)的关键特性在于这是一个凸函数。
我们也对向量x构造一个线性约束集合,即x ∈ℝn。
我们把这些约束写成:
Ax=fBx≥g
这里,A 是一个 m1×n 的矩阵且约束为 m1≤n,BB 是一个 m2×n 的矩阵.向量 f 和向量 g的长度分别是m1和m2.
这是一种让我们可以充分考虑实际条件的标准型。比如我们让 x 强制满足
∑i=1nxi=1
的求和条件,或者满足ai≤xi≤bi的区间约束。接下来,我们将介绍如何将这些约束转化为矩阵表达。
用这个符号系统,我们可以简洁表示二次规划 (QP):
{minimizex∈ℝn:Q(x)=12xTDx−dTx+csubjectto:Ax=fBx≥g
考虑目标函数:
Q(x,y)==12[xy][2−1−12][xy]−[−32][xy]+4x2+y2−xy+3x−2y+4.
我们这个约束条件下的可行域内寻求最小化:
yyy≥≥≤2−x−2+x3.
我们可以找到这个可行域的顶点并在R画出整个可行域:
plot(0, 0, xlim = c(-2,5.5), ylim = c(-1,3.5), type = "n", xlab = "x", ylab = "y", main="Feasible Region") polygon(c(2,5,-1), c(0,3,3), border=TRUE, lwd=4, col="blue")
SHAPE \* MERGEFORMAT
想要用quadprog包求解二次规划,我们需要同时转化我们的目标函数和约束条件为矩阵形式。这里是官方文档的说明:
This routine implements the dual method of Goldfarb and Idnani (1982, 1983) for solving quadratic programming problems of the form min(-d^T b + 1/2 b^T D b) with the constraints A^T b >= b_0.
可惜官方文档多可读性不高,我们很难得知如何准确地转化二次型Q(x,y)为一个矩阵形式。首先,我们观察到,对于任意常数 c, 都存在MinQ(x,y)+c 和 Q(x,y)的解相等。因此,我们可以忽略二次规划中的常数项:
D=[2−1−12]d=[−32].
我们可以写出约束方程的矩阵形式:
⎡⎣⎢⎢1−1011−1⎤⎦⎥⎥[xy]≥⎡⎣⎢⎢2−2−3⎤⎦⎥⎥
因此:
A=⎡⎣⎢⎢1−1011−1⎤⎦⎥⎥Tb0=⎡⎣⎢⎢2−2−3⎤⎦⎥⎥
quadprog包默认是求解最小化问题,目标函数二次,约束一次。所以,我们的约束条件默认的形式也就是AX>=bvec。通常我们需要把一些原来是求极大值的问题或者<=约束通过乘以负号来转化。
这是R的完整实现:
· 参数Dmat表示海赛矩阵
· 参数dvet表示一阶向量,和Dmat的维数要相对应。
· 参数Amat表示约束矩阵,默认的约束都是是>=。
· 参数bvet表示右边值,由向量,和Amat的维数要相对应。
· 参数 meq 表示从哪一行开始Amat矩阵中的约束是需要被当作等式约束的。
(1/6,11/6) 点是唯一满足约束条件和 Q(x,y)的最小化目标,但 (−4/3,1/3)点才是 Q(x,y) 的最小值点。iterations,Lagrangian 和 iact 都是用来描述quadprog算法性能的。对于这些值之后我们将进一步讨论。现在,让我们先可视化二次规划的解。为此,我们在Q(x,y)的可行域边界添加一个外侧的等高线图。
在图中,深绿色区域表示Q(x,y) 表面目标函数值较小的解,而亮色表示目标函数值较大的解。红点是Q(x,y)的全局最小值点,而黄点表示二次规划的解。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
一、问题:为什么 ID 会"断号" 很多刚接触 MySQL 的同学都会有一个困惑:表里的主键 ID 是自增的,删了中间几行数据之后,ID 变 ...
2026-10-22一、问题场景:为什么会重复 JOIN 同一个子查询 在写复杂 SQL 时,经常遇到这种需求:同一张表或同一个聚合子查询,要和主表关联 ...
2026-10-22人力资源专员是HR体系的执行入口。招聘信息发布、简历初筛、面试安排、考勤汇总、入离职手续、劳动合同与档案管理,大多由这个岗 ...
2026-10-22人力资源经理问“必学技巧”,真正要解决的不是知识清单不够长,而是时间有限、业务催得紧,学完却用不上。更有效的路径是:先用 ...
2026-10-22内容营销岗位的核心任务,不是“把文案写得更漂亮”,而是围绕目标受众,用持续的内容供给影响认知、推动转化并沉淀复购。它至少 ...
2026-10-22理财经理培训课程很多,难的是判断“先学什么、后学什么、学完能做什么”。与其按课程名称罗列,不如先看岗位任务:客户分层与维 ...
2026-10-22理财经理的知识结构,可以先用一句话概括:合规与产品知识决定“不出错”,客户经营与资产配置决定“够不够专业”,市场研判与数 ...
2026-10-22经济学背景做数据分析,优势不在工具,而在问题意识:供需如何相互作用、成本与收益如何权衡、变量之间是相关还是因果。真正的缺 ...
2026-10-22需要,但要把“需要”理解准确。经济学本身就在处理数据:GDP、物价、就业、企业营收、问卷调研,都是经济分析的原料。真正的区 ...
2026-10-22经济学分析能力不是单一技能,它至少由三层构成:把现实问题转成可检验假设的理论框架能力、用数据与统计方法验证假设的工具能力 ...
2026-10-22金融分析师的知识提升,先补的不是更多模型,而是让结论可复核的底层能力。按任务顺序,大致是四层:财务与业务理解、指标口径管 ...
2026-10-22金融分析师的“通用技能”,指换到不同机构、不同行业组仍用得上的底层能力,而非某家公司内部系统的操作经验。按任务拆,日常要 ...
2026-10-22先给结论:数据分析证书不是金融分析师的准入条件,招聘方也不会因为一张证书就直接判断你能做分析。要不要考,取决于你当前任务 ...
2026-10-22金融分析师的核心技能,不是“会看K线”或“会讲宏观”,而是能把一家公司、一个行业或一类资产,转化为可核查的数据判断与书面 ...
2026-10-22产品经理的知识提升,不是把需求文档、原型、SQL、数据分析、项目管理都学一遍,而是先对准目标岗位的真实任务,找出自己最缺的 ...
2026-10-22产品专员提升工作知识,最有效的方式不是先囤课程,而是围绕日常交付的四件事来补:需求调研与优先级判断、原型与PRD表达、竞品 ...
2026-10-22产品运营专员提升个人能力,常见误区是先把Excel、SQL、Python列成一张学习清单,然后从第一个工具开始学。更有效的做法是先回答 ...
2026-10-22产品运营的能力提升,最怕从“课程目录”出发:今天学增长模型,明天背SQL语法,学完却说不清自己负责的功能为什么激活率低。更 ...
2026-10-22产品经理的技能和影响力不是两条分开的赛道。技能决定你能不能把问题分析清楚、把方案设计对;影响力决定你的判断能否被团队接受 ...
2026-10-22产品经理要学的数据分析能力,不是“会写SQL”或“会用BI工具”这么简单。更准确地说,是围绕需求评估、功能迭代、指标监控、实 ...
2026-10-22