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


相关文章
|
19天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
12天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
19天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
19天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
19天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
19天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
19天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
19天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
19天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!