例:某车间有一批长度为7.4m的同型钢管,砍用它们来做100套钢架,已知每套钢架需用长2.9m、2.1m和1.5m的钢管各一根。问如何下料方可使所用材料最省
解:因为所需钢材总长度是固定的,所以要使用料的根数最少,也就是要使裁下来的残料最少、而残料的多少取决于裁取方法,故设

为按第j种方法裁取钢管的跟数,则对各种可能的裁取方法所产生的残料:
所裁长度/m |
裁料方案 |
所需根数 |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
2.9 |
2 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
100 |
2.1 |
0 |
0 |
2 |
1 |
2 |
1 |
3 |
0 |
100 |
1.5 |
1 |
3 |
0 |
1 |
2 |
3 |
0 |
4 |
100 |
残料长度/m |
0.1 |
0 |
0.3 |
0.9 |
0.2 |
0.8 |
1.1 |
1.4 |
|
f := array(0.1,0,0.3,0.9,0.2,0.8,1.1,1.4);
a := array();
b := array();
aeq := array((2,1,1,1,0,0,0,0),(0,0,2,1,2,1,3,0),(1,3,0,1,2,3,0,4));
beq := array(100,100,100);
lb := array(0,0,0,0,0,0,0,0);
ub := array();
x0 := array();
options := array();
Ozarr := array();
Intarr := array(0,1,2,3,4,5,6,7);
return prog_L(f,a,b,aeq,beq,lb,ub,x0,options,ozarr,Intarr);
结果:
array("X":
(10.00,30.00,50.00,0.00,0.00,0.00,0.00,0.00),"Fval":16.00,"Error_M":1,"Iter":8)
"Error_M"的各输出值的含义详见表9-2。
表9-2 结果信息"Error_M"含义
Error_M取值 |
含义 |
1 |
函数得到收敛的解 |
3 |
目标函数值变化小于设定精度 |
4 |
发现局部最优值 |
5 |
方向倒数小于精度 |
0 |
达到迭代次数 |
-1 |
算法终止 |
-2 |
没有发现可行解 |
-3 |
发散问题 |
-4 |
无可行下降方向 |
-7 |
不能继续求解,问题可能病态 |