运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解(中)

简介: 运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解

3.2 第二次迭代

得到新的RMP:

 dvar int+ y1; dvar int+ y2; dvar int+ y3; dvar int+ y4;
 minimize y1 + y2 + y3 + y4;
 subject to{
5*y1 + 0*y2 + 0*y3 + 1*y4 >= 25;
0*y1 + 2*y2 + 0*y3 + 2*y4>= 20;
0*y1 + 0*y2 + 2*y3 + 0*y4>= 18;
}

得到结果为:Y = [3,0,9,10];

对偶变量为:gif.gif

现在我们要加一列到RMP中,记为gif.gif,计算其检验数:

gif.gif

得到子问题:

gif.png

得到gif.gif,ruduce cost的取值为负数,因此加入gif.gif

3.3 第三次迭代

 dvar int+ y1; dvar int+ y2; dvar int+ y3; dvar int+ y4;dvar int+ y5;
 minimize y1 + y2 + y3 + y4 + y5;
 subject to{
5*y1 + 0*y2 + 0*y3 + 1*y4 + 1*y5>= 25;
0*y1 + 2*y2 + 0*y3 + 2*y4 + 1*y5 >= 20;
0*y1 + 0*y2 + 2*y3 + 0*y4 + 1*y5>= 18;
}

得到结果为:Y = [2,0,0,1,18];


对偶变量为:gif.gif


现在我们要加一列到RMP中,记为gif.gif,计算其检验数:


gif.gif


得到子问题:


gif.png


得到gif.gif,ruduce cost的取值为0,因此不加入gif.gif


3.4 最终RMP


gif.gif


令上述模型中的决策变量都取整数,得到的Cplex的最优方案组合为[2,0,0,1,18],最优值为21


对应到实际问题就是,2个卷切5个3米的;1个卷1个3米和2个6米;18个卷切1个3米、1个6米和1个7米


最终我们得到了29个3米的,20个6米的,18个7米的;总共切了21个卷,浪费21*16 - (25*3 + 6*20 + 7*18)=15米


4 多种长度木材的例子

4.1 问题说明

有三种长度为9,14,16的木材,成本价分别为5,9,10,需要切割长度为4的成品 30个;长度为5的成品20个;长度为7的成品40个,求解切割方案,使得总体成本价最低。

构建的模型:

image.png

模型:

gif.png

找初始方案: gif.gif

4.2 Cplex OPL求解

4.2.1 初始RMP

gif.png

Cplex求解:

dvar int+ x1; dvar int+ x2; dvar int+ x3;
minimize 5*x1 + 5*x2 + 5*x3; 
subject to{
2*x1 + 0*x2 + 0*x3 >= 30;
0*x1 + 1*x2 + 0*x3 >= 20;
0*x1 + 0*x2 + 1*x3 >= 40;
}

决策变量X = [15,20,40]; 对偶变量:[2.5,5,5];最优值375

构建新的列:gif.gif

构建subproblem时,我们再求gif.gif时,发现 gif.gif有三个,那么我们就需要构建三个子问题,然后得到其中的最大的


image.png

检验数相同,我们选择成本更低的方案,因此我们新增加的列是[0,3,0]

4.2.2 第一次进基离基

gif.png

Cplex求解:

dvar int+ x1; dvar int+ x2; dvar int+ x3; dvar int+ x4;
minimize 5*x1 + 5*x2 + 5*x3 + 10*x4; 
subject to{
2*x1 + 0*x2 + 0*x3 + 0*x4 >= 30;
0*x1 + 1*x2 + 0*x3 + 3*x4 >= 20;
0*x1 + 0*x2 + 1*x3 + 0*x4 >= 40;
}

X = [15, 0, 40, 6.7]; 目标值341.67;对偶变量:[2.5, 3.3, 5]

对应最优整数解, X = [15, 0, 40, 7]; 目标345

可知,变量  gif.gif应该离基,构建新的列:gif.gif

image.png


添加列[0,0,2],离基列[0,1,0]


相关文章
|
4天前
|
监控 算法 网络协议
Java 实现局域网电脑屏幕监控算法揭秘
在数字化办公环境中,局域网电脑屏幕监控至关重要。本文介绍用Java实现这一功能的算法,涵盖图像采集、数据传输和监控端显示三个关键环节。通过Java的AWT/Swing库和Robot类抓取屏幕图像,使用Socket进行TCP/IP通信传输图像数据,并利用ImageIO类在监控端展示图像。整个过程确保高效、实时和准确,为提升数字化管理提供了技术基础。
35 15
|
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
|
8月前
|
存储 安全 Java
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
107 1
|
8月前
|
存储 Java
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
|
8月前
|
Java 测试技术 C++
【JAVA学习之路 | 进阶篇】File类及常用方法
【JAVA学习之路 | 进阶篇】File类及常用方法
|
8月前
|
Java
【JAVA学习之路 | 进阶篇】方法引用与构造器引用
【JAVA学习之路 | 进阶篇】方法引用与构造器引用

热门文章

最新文章