用sets和data解决钢管切割问题(根数最少)
来源:互联网 发布:安卓编程视频 编辑:程序博客网 时间:2024/05/01 01:28
客户除了要50根4m长、20根6m长、15根8m长,还需要10根5m长的钢管,应该如何下料最节省?
解:这里以总根数最少为标准。
用lingo12解决如下:
model:
!钢管下料问题,以钢管根数最少为目标;
sets:
!定义基本集合Needs,及其属性length、num;
Needs/1..4/:length,num;
Cuts/1..3/:x;
!定义派生集合Pattern,及其属性R;
Patterns(Needs,Cuts):R;
endsets
data:
length= 4 5 6 8;
num= 50 10 20 15;
capacity= 19;
enddata
min=@sum(Cuts(i):x(i));
!满足需求约束;
@for(Needs(i): @sum(Cuts(j):x(j)*R(i,j))>num(i));
!满足切割模式约束;
@for(Cuts(j): @sum(Needs(i):length(i)*R(i,j))<capacity);
@for(Cuts(j):@sum(Needs(i):length(i)*R(i,j))>capacity
-@min(Needs(i):length(i)));
@sum(Cuts(i): x(i))>26; @sum(Cuts(i): x(i))<31;
@for(Cuts(i)| i #lt# @size(Cuts): x(i)>x(i+1));
@for(Cuts(j): @gin(x(j)));
@for(Patterns(i,j): @gin(R(i,j)));
end
--------------------------------------------------------------------------------------
结果如下:
-----------------------------------------------------------------------------------------------------------
解释如下:
即按照模式1、2、3分别切割10、10、8根原料钢管,使得原料钢管总根数是28根。
第一种切割模式下,1根原料钢管,切割成2根4m钢管、1根5m钢管、1根6m钢管;
第二种切割模式下,1根原料钢管,切割成3根4m钢管、1根6m钢管;
第三种切割模式下,1根原料钢管,切割成2根8m钢管;
- 用sets和data解决钢管切割问题(根数最少)
- 钢管下料问题(以钢管根数最少为标准)
- 算法学习笔记----用动态规划解决钢管切割问题
- 用lingo解决钢管下料问题
- 【算法导论】动态规划之“钢管切割”问题
- 【算法导论】动态规划之“钢管切割”问题
- 钢管切割Java
- 最少回纹切割数(Palindrome Partitioning II)
- 一个数以最少步骤分解为另外两个数和差问题的解决
- 一个数以最少步骤分解为另外两个数和差问题的解决
- 一个数以最少步骤分解为另外两个数和差问题的解决
- JS实现计算最少回文切割数
- 用set和data解决运输问题
- 最少步数(迷宫问题类型)
- 问题 : 最少钱币数
- 最少货币数问题
- 最少硬币问题(动态规划解决)
- 算法导论例题——钢管切割
- 开源项目之C++界面库 GLUI
- 致逝去acm,程序生涯
- 黑马程序员-Map集合的特点以及map集合的三个小弟学习日记
- Unity3D结合轮廓显示,实现完整的框选目标
- VS2010设置VC6的字体样式
- 用sets和data解决钢管切割问题(根数最少)
- Spark Core源码分析: Spark任务执行模型
- 《Linux Device Drivers》第一章 设备驱动程序简介——note
- 【DFS&字符串】Scramble String
- Java软件开发基础知识梳理之(9)------Hibernate抓取策略
- 在mac终端中用颜色显示不同类型文件
- Struts2+Spring+Hibernate step by step 09 ssh整合之查询用户
- Codeforces 412A Poster(贪心)
- 微信官网文本乱码