运筹优化学习10:分支定界算法求解整数规划问题及其Matlab实现(上)

简介: 运筹优化学习10:分支定界算法求解整数规划问题及其Matlab实现

1 从一个示例入手

原始题目:

20191011201759494.jpg

分支定界的计算过程:

20191011201606955.jpg

由上述示例可知:


在第一次分支时,我们的左侧分支得到的最优解是原问题的一个可行解,终止此分支,将其视为原问题的一个上界;右侧分支得到了-18.5的最优解,但不是原问题的可行解,继续对其进行分支,此时问题的界为【up = -16, lb = -18.5】

第二次分支时,左侧分支得到-17.4的可行解,但不是原问题的可行解,继续分支;右侧分支无可行解;此时问题的界更新为【up = -16, lb = -17.4】

第三次分支时,左侧分支得到原问题的可行解-17,停止搜索;右侧分支得到了-15.5的最优解,但不是原问题的可行解,且劣于之前确定的界限,停止搜索。

得到原问题的最优解为-17

分支定界算法的搜索过程是一个树结构的搜索,每次分支过程都是在解决原始问题的一个子问题。我们将原始的整数线性规划问题松弛为线性规划问题中,得到的线性规划问题的最优解就相当于分支的根节点,其作为所有分支节点的起点进行搜索;在完成一次分支后,如果得到的最优解是原问题的可行解,我们将停止对该分支进行继续搜索;如果不是原问题的可行解,我们会做一次上下界的检查,如果子问题不能产生更好的解,我们将会砍掉该分支;如果位于确定的上下界内,则继续对该分支进行搜索;当所有的分支都不能得到更好的解时,我们就认为得到了问题的最优解,算法即终止。显然,上述过程可以被视为一种目标明确的枚举过程。


2 关于松弛的你要知道的几个概念


松弛模型是为了针对离散优化变量指数级增长而设计的一种辅助性求解方法,其核心在于放松原问题的某些约束或目标函数,使之更易求解,确保对松弛问题的深入分析得到原问题的最优解。


对于整数规划问题,最好的松弛办法为将离散变量松弛为连续变量。


对于优化问题P和R而言,若问题P的可行解都是问题R的可行解,且R的最优解与P的最优解更优或相等,我们便将问题R称为问题P的松弛问题。


P和R的解空间如下图所示:


灰色椭圆为松弛问题最优解所处于的区域

黑点为原问题的最优解

白色椭圆为问题P的可行解范围

最外侧为松弛问题的解空间。


20191011204706559.png


显然,我们可以得出如下结论:


松弛问题R的不行解,对于问题P绝对是不可行的;

如果松弛问题P的最优解是原问题P的可行解,则其必然是原问题P的最优解;

对于最大值模型,松弛问题R的最优解提供了原问题P的上界,且原问题的每一个可行解都可以作为原问题的一个下界;

对于最小值问题,松弛问题R的最优解提供了原问题P的下界,且原问题的每个可行解都可以作为原问题的上界;


3 算法框架

有了上面的知识铺垫,我们就可以对分支定界算法的算法进行系统全面的描述了。

3.1 基本框架


1. Using a heuristic, find a solution xh to the optimization problem. Store its value, B = f(x_h). (If no heuristic is available, set B to infinity.) B will denote the best solution found so far, and will be used as an upper bound on candidate solutions.


2. Initialize a queue to hold a partial solution with none of the variables of the problem assigned.


3. Loop until the queue is empty:


     3.1. Take a node N off the queue.


     3.2. If N represents a single candidate solution x and f(x) < B, then x is the best solution so far. Record it and set B ← f(x).


     3.3. Else, branch on N to produce new nodes Ni. For each of these:


            3.3.1. If bound(N_i) > B, do nothing; since the lower bound on this node is greater than the upper bound of the problem, it will never lead to the optimal solution, and can be discarded.


            3.3.2. Else, store Ni on the queue.


英文看不懂,来个中文的:


20191011223326630.png

再来一个更为直观的流程图:

2019101421560813.png

3.2 三种搜索策略


广度优先策略(Breadth-first search,BFS):横向搜索,将同层的节点搜索完毕之后,在进行下一次的搜索;这种搜索可以用FIFO queue实现。首先介绍三种搜索策略:

深度优先策略(Depth-first search, DFS):纵向搜索,将一个分支走到底,然后再开下一个分支的搜索;这种搜索可以用LIFO queue也就是栈【后进先出】实现

最佳优先搜索(Best-First Search,BFS):基于广度优先策略,先对同层节点使用估价函数对所有节点进行估价,选择估值最小的节点遍历,直至得到最优解位置。可使用优先队列priority queue来实现。


相关文章
|
10天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
143 80
|
3天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
6天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
7天前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。
|
10天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
25 6
|
16天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
52 3
|
16天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
40 2
|
1月前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
138 15
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
28天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。