MATLAB 混合整数二次规划 (MIQP) 求解器项目说明
项目介绍
本项目提供了一个基于分支定界算法(Branch and Bound)的混合整数二次规划(MIQP)求解实现方案。MIQP 问题在工程优化、金融建模和能源管理中具有广泛应用,其核心挑战在于处理目标函数中的二次型非线性以及决策变量中的整数约束。本求解器旨在通过递归搜索与连续松驰优化相结合的方法,寻找全局最优解。
功能特性
- 混合变量求解:支持同时包含连续变量与整数变量的复杂优化问题。
- 二次规划支持:核心求解器能够处理具有正定二次项矩阵的目标函数。
- 完善的约束体系:支持线性不等式约束、线性等式约束以及变量的上下界限制。
- 高效剪枝逻辑:内置两种剪枝机制,包括基于不可行性的剪枝和基于目标函数下界(松弛解)的剪枝,有效缩小搜索空间。
- 最不整分支策略:在分支过程中优先选择小数部分最接近 0.5 的变量进行分支,以期快速收敛。
- 结果可视化与校验:自动生成最优变量分布图及目标函数贡献分析图,并对整数约束的合规性进行自动校验。
使用方法
- 环境配置:确保 MATLAB 环境中已安装优化工具箱(Optimization Toolbox)。
- 参数定义:根据标准 MIQP 形式定义二次项矩阵 H、线性项向量 f、约束矩阵 A/b、等式矩阵 Aeq/beq 以及变量的上下界 lb/ub。
- 指定整数索引:通过向量形式指定哪些变量必须为整数。
- 执行求解:运行求解逻辑,系统将递归搜索解空间。
- 结果分析:程序将输出最优目标函数值、计算耗时、每个变量的具体取值及其类型,并展示结果图表。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:MATLAB Optimization Toolbox(用于调用 quadprog 函数解决松弛子问题)。
算法实现逻辑
核心求解逻辑采用数学规划中的分支定界框架,具体流程如下:
- 根节点松弛求解:首先忽略所有整数约束,将原问题视为一个标准的连续二次规划(QP)问题进行求解。
- 剪枝判断:
- 如果当前节点的松弛问题无解(不可行),则停止该分支的搜索。
- 如果当前节点的最优目标函数值已经大于或等于已发现的全局最优整数解,则该分支不再可能产生更优解,执行剪枝。
- 整数可行性检查:检查松弛解中指定的整数变量是否满足整数要求。如果所有整数变量的残差均在容差范围内(1e-6),则更新全局最优解。
- 分支过程:若存在非整数解,找到小数部分偏移最大的变量。以此变量为基础创建两个子节点:
- 左分支:增加上界约束,限制该变量小于等于当前值的下取整。
- 右分支:增加下界约束,限制该变量大于等于当前值的上取整。
- 递归搜索:深度优先或系统化地遍历搜索树,直到所有分支被探索或剪枝。
关键模块分析
- 优化模型构造:程序通过模拟资产组合优化场景,生成正定矩阵作为风险度量矩阵。通过设置特定的线性约束和等式约束,模拟复杂的工程逻辑限制。
- 递归闭包函数:在求解器内部定义了递归逻辑,能够共享外部作用域中的最优解状态,从而实现高效的全局状态管理。
- 性能统计:利用高精度计时器记录搜索时间,并对决策变量的最终状态进行分类统计。
- 数据可视化:
- 变量分布图:直观展示连续变量与整数变量在最优解中的取值差异。
- 能量分布图:将目标函数拆解为二次项(风险/成本高阶项)与线性项(收益/成本线性项),通过饼图展示各自在总目标值中的占比。
应用场景参考
该求解逻辑可直接应用于以下实际工程问题:
- 微电网能量管理:处理发电机组的启停逻辑(二进制变量)与出力分配(连续变量)。
- 机器人轨迹寻优:在避障逻辑中引入逻辑变量,结合路径平滑度的二次目标进行寻优。
- 资产组合优化:在满足最低持仓量或固定交易成本的情况下,寻找风险最小化的投资组合。