二次规划求解器实现与应用项目说明文档
一、项目介绍
本项目是一个基于MATLAB内置优化引擎构建的二次规划(Quadratic Programming, QP)科学计算工具。其核心目标是高效求解标准形式的最小化问题:min 0.5*x'*H*x + f'*x。该工具集成了数值计算、工程建模与结果可视化功能,能够处理包含线性不等式约束、线性等式约束以及变量上下界约束在内的复杂优化模型。
二、功能特性
- 标准化模型求解:完美支持二次规划的标准数学描述。
- 多约束类型支持:涵盖 A*x <= b(不等式)、Aeq*x = beq(等式)及 lb <= x <= ub(边界约束)。
- 算法策略切换:支持根据问题规模和特性选择内点法(Interior-point-convex)或有效集法(Active-set)。
- 投资组合优化:内置马科维茨风险最小化模型实例。
- 大规模计算优化:具备处理高维稀疏矩阵的能力,确保计算效率。
- 结果深度分析:提供最优解坐标、目标函数值、算法收敛标志以及拉格朗日乘子(灵敏度分析)的提取。
- 多维度可视化:自动生成等高线图、资产配置饼图、解向量分布图及约束强度分析图。
三、系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 必备工具箱:Optimization Toolbox(优化工具箱)。
四、实现逻辑与功能模块说明
系统通过三个核心场景逐步演示了二次规划从数值理论到工程应用的完整流程:
- 场景一:标准数值优化
该描述实现了一个二维空间下的二次函数最小化过程。程序首先定义了正定的 Hessian 矩阵 H1 和线性系数向量 f1,随后设定了变量在 [0, 0.8] 范围内的边界约束以及一个线性不等式和约束(x1 + x2 <= 1)。系统采用内点法进行迭代寻优,并记录求解器的收敛状态和迭代次数。
- 场景二:投资组合风险最小化(Markowitz 模型)
此场景展示了二次规划在金融工程中的实际应用。目标是在满足预期年化收益率(≥ 11%)且投资总占比为 100% 的前提下,通过最小化资产协方差矩阵(H2)来寻找最优资产配置比例。该模型禁用了卖空机制(x >= 0),并选择有效集法以处理带有等式约束的小规模精确优化问题。
- 场景三:大规模稀疏矩阵处理
为测试系统在处理工业级数据时的性能,该模块自动生成了一个 100 维的稀疏正定对称矩阵作为目标函数核心。结合随机生成的线性约束和大规模变量边界,演示了求解器在面临高维参数空间时如何通过 sparse 存储结构和优化算法保持计算的稳定性和高效性。
五、关键函数与算法细节
- 核心求解器
系统统一调用 quadprog 函数作为底层计算引擎。通过传入 H、f、A、b 等参数,系统在满足線性约束的空间内搜索目标函数的全局最小值。
- 算法配置策略
利用 optimoptions 函数对求解过程进行精细控制:
- Algorithm: 指定不同的数值策略。内点法适用于大规模、稀疏问题;有效集法则在处理带有边界约束的小型问题时具有较高的精确度。
- Display: 设置为 'iter' 或 'final' 以监控迭代过程或仅查看最终结果。
- MaxIterations: 限制最大迭代步数以防止死循环。
- 结果评价指标
系统通过 exitflag 判断求解质量。返回值为 1 表示找到全局最优解,负值则代表问题可能无解或不收敛。同时,output 结构体记录了实际消耗的计算资源。
- 约束灵敏度分析
系统提取了 lambda 结构体中的拉格朗日乘子,用于分析各项约束对比优结果的影响强度。乘子值越大,表示该约束对目标函数的限制越明显。
六、可视化处理逻辑
求解完成后,系统通过一个多子图视窗对结果进行解析:
- 目标函数等高线图:叠加显示约束可行域与最优解的具体位置,直观呈现寻优路径。
- 资产权重饼图:将抽象的优化向量转化为具体的投资配比方案。
- 向量分布针状图:反映高维空间下各变量取值的离散情况。
- 乘子强度柱状图:量化分析各约束条件的“活性”和对最优解的边际贡献。
七、使用方法
- 启动 MATLAB 并进入项目所在文件夹。
- 运行主程序代码。
- 命令行将实时输出各场景的计算细节(如迭代信息、最优坐标、最小方差等)。
- 自动弹出绘图窗口,展示优化结果的图形化解析。