我们公司的求最优化问题可能与其它求最优化问题有些差别,因为它无论是输入数据还是输出数据,都是在Excel电子表格上进行的,表格如下:
序号
长度
合计
切割数
实用长
源料长
用料数
余料
处理
1
1058 57
2
1028 1311
3
989 684
4
1040 513
5
1180 57
6
1233.5 57
7
1311 57
8
875 114
9
837 57
10
978 57
11
866 57
12
50 4212
“长度”与“合计数量”例的数据是已有的,“源料长度”是用户输入的,其它4个例要用程序来计算。每一例与每一例之间都有一一的对应关系,也有优先级。当用户输入源料长度后,程序先计算"切割数",求切割数的公式是:切割数=INT(源材料长度/(长度+切割锯缝))(切割锯缝等于5),假设当用户输入源材料长度为5350,那么序号1的切割数是 {INT(5350/(1058+5))=5}(取整,忽略小数位),切割数求出来后,就接着求"实用长"。{实用长=((长度+5)*切割数)};实用长后是"用料数"。{用料数=合计数量/开料数};求出用料数后是求“余料”。{余料=源料长度-实用长}。所以它们的求解顺序是:切割数->实用长->用料数->余料。人工求解很简单,但如果是在程序里来计算,那就难了。因为在人工的运算过程中,开料人员不断判断、不断优化,以求最优的开法,但程序却无法像人那样,所以开发这样的程序有很大的难度。上面的求解关系很简单,但却有种种的限制:(1),要求余料是浪费得最少的,一般是在50或100之间;(2),对于“用料数”不足一支的情况下,可以忽略余料,比如下表的长度为1200的那一行,用5950的源料长度来开,但因为用料数为0.50小于1,所以那怕余料为1110也可以忽略不计。(3),“合计”例数量最多的要优先求解,因为这是一个关于最优化的问题,当需求的数量很大的时候,它所用到的材料就需求很多,如果不把余料控制好,将会造成很大的浪费。(所以公司的要求是:把合计数量最多的(比如100支以上的)优先计算,剩下的数量需求不多的用“多级套料法”。注:多级套料法在下文解释)(4),对源材料长度的种类限制,一般是限制4种(种类限制的意思是:比如6000为一种,5000为一种,4500为一种,4000为一种,总共是4种)。(5),程序根据用户限制的种类优先计算合计数量最多的长度,然后把数量少的用多级套料法,所谓的多级套料法只是我们在开发过程中的一个代名词,它真正的原理是组合。在多级套料中用户规定一种源料长度,用它来开所有“合计数量”少的长度,它原理是这样的:上表有长度1233.5,如果用5000来开它,余料是46,所以它是最优的,但此时却不能用5000来开它,因为用户已经规定了只能用6000来开它,用6000开了以后它的余料是1046。为了不造成浪费,把余料1046拿来开上面与它最接近或少于它的长度,比如1040。用式子表示的话可以如下表:
(1233.5+5)*4+(1040+5)*1=5999(余料是6000-5999=1)
(1127+5)*4+(539+5)*1+(839+5)*1=5916 (6000-5916=84)
(924+5)*6+(343+5)*1=5922
(6000-5922=78)
(1192+5)*5=5985
(6000-5988=12)
(539+5)*11=5984
(6000-5984=16)
(6),当所有的长度都得到最优解后,还要一一对应的输到Excel表格中去。至于采用多级套料法的,把组合的那些都写到“处理”例去。如下表
长度
合计
切割数
实用长
源料长度
用料数
余料
处理
1450
2 4 5840 5950 0.50 110
1085
12 4 4380 5950 1.50 1570 1450=1
1085
8 4 4380 5950 2.00 1570 1500=2
1200
2 4 4840 5950 0.50 1110
1630
18 2 3280 5950 9.00 2670 650=36
1630
12 2 3280 5950 6.00 2670 650=24
1630
4 2 3280 5950 2.00 2670 650=8