运筹优化学习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]


相关文章
|
16天前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
111 68
|
18天前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
124 11
架构学习:7种负载均衡算法策略
|
10天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
30 10
|
13天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
43 4
|
13天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
24 4
|
13天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
36 1
|
23天前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。
|
16天前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
25天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
26天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真