工件的安装与排序问题

工件的安装与排序问题

 

毛益明 成仁仁 曾珠丽 涂文兵

 

摘要:本文对工件的安装与排序问题建立了3个优化模型,并给出了相应的算法,首先建立方差目标函数求出其中一组较优化的解,其次放宽目标函数的值求出其它可行解,最后对结果进行验证。

模型一:首先,以4g为重量约束上限,利用Lingo编写方差目标函数并得一种排序方案,在放宽目标函数的情况下,并且考虑到每个象限内的工件排序还有 种情况,实际得到 种排序方案;其次,结合工作经验,给出了人工简便算法,并对每次算法进一步修正,得到一组排序方案,其相邻的6个工件组的重量差对绝对值最大为4

模型二:在模型一的基础上建立模型二,以4克为重量约束上限且以3为体积约束下限,并用Lingo软件编程实现,在利用放宽目标函数值的前提下,得到 种排序方案。

模型三:利用第二组数据对模型二进行检验和修正,对于不满足条件的奇异数据本文按照方差和均值分析法更新数据且较精确的确定相应取值范围即第个工件的体积,使新数据在这范围内满足模型要求和求解,结果见模型三的表三。

 

关键字:安装排序 方差分析  0-1规划  优化理论  目标函数

 

 

 

 

 

 

 

 

 

 

 

 

 

一、        问题重述

 

某设备由24个工件组成,安装时需要按工艺要求重新排序。

Ⅰ.设备的24个工件均匀分布在等分成六个扇形区域的一圆盘的边缘上,放在每个扇形区域的4个工件总重量与相邻区域的4个工件总重量之差不允许超过一定值(如4g)。

Ⅱ.工件的排序不仅要对重量差有一定的要求,还要满足体积的要求,即两相邻工件的体积差应尽量大,使得相邻工件体积差不小于一定值(如3 );

Ⅲ.当工件确实不满足上述要求时,允许更换少量工件。

问题1.按重量排序算法;

问题2.按重量和体积排序算法;

问题3.当工件不满足要求时,指出所更换工件及新工件的重量和体积值范围,并输出排序结果。

 

二、        模型假设

 

124个工件均匀分布在一圆盘上

2、在满足条件Ⅰ、Ⅱ的前提下,考虑每个象限内的工件排序

3、在满足条件Ⅰ的基础上不考虑工件其他条件的约束

4、工件排序不仅要保证重量差,两工件组体积尽量大,使相邻工件组体积差不小于一定值(3)

5、只考虑满足重量差不大于某定植(4),体积差不小于某定植(3)即可

三、符号约定

 

:第i区内的第j个工件的重量

:第i个工件的重量

0-1变量,第 个工件被选为1,否则为0

;第i个工件的体积

0-1变量,第 个工件被选为1,否则为0

:第i个区内工件的总重量

:第i个区内工件的总体积

:数据的平均值

:数据方差

:数据标准差

 

四、    问题分析

对问题一:解题思想简单。根据模型的假设和要求,要解决问题一,只需要考虑各区内工件的重量差不超过某一定值(4克)即可,不需要考虑其他约束条件;首先建立重量目标函数即模型一,其次利用Lingo编程算出一种解,再次放宽目标值求出多钟解,最后对结果进行验证。

对问题二:在解决问题一的基础上对模型二进行求解,并且再加入一个体积约束条件,当然这里需要考虑24个工件的排序;

对问题三:要解决问题三,只要根据方差分析,逐一找出离均值较远的数或数的集合,进行逐一调整,然后在调整的基础上,找到数据调整的范围即可。

鉴于Lingo优化算法比较复杂。针对要解决问题一和问题二,工件的排序情况绝对不止一种或几种,一方面,应该穷举出所有满足约束条件的排序方案;另一方面,就是因为排序方案很多,所以如果只需找到某一个或某几个排序方案,只要用简便的算法人工就可以解决了。如果换一下数据和定植的大小,又是另一种情况,人工排序未必能够解决,并且不利于模型的进一步推广。基于以上分析,应该进一步探索出对问题一和问题二的计算机搜索的算法。针对要解决问题三,基于上面的考虑,要逐步找出需要调整的数,并要在此基础上确定重量与体积的允许波动范围,步骤较繁。

基于上述综合分析,对问题一本文只考虑重量约束问题,建立模型一,探索出搜索所有所有可能排序方案的算法,并给出相应的简便算法,人工对工件进行排序,可贡参考;针对问题二,本文考虑重量及体积双重约束,建立模型二,这是对模型一中的算法进行进一步修正而探索出适合模型二的算法;针对问题三,建立模型三,建立方差分析模型,在用 选择剔除奇异值的基础上,逐一找出要调整的数据,最终确定调整数据的范围。

 

五、    模型的建立与求解

 

5.1模型一的建立

 

5.1.1模型的建立

根据模型的假设和问题分析,为了计算方便,对数据进行初步处理,分别把每组数据减去该组数据中的最小值,得到新的数值不影响排序结果,据此,得到新的数据如表一:

 

 

 

 

 

 

 

序号

重量-327.5

体积-94

序号

重量-327.5

体积-94

序号

重量-339.5

体积-95.1

序号

重量-339.5

体积-95.1

1

20.5

7.5

13

21

10.5

1

19

7.9

13

18

7.4

2

24.5

8

14

19.5

3

2

18

7.9

14

15.5

7.9

3

19.5

10

15

19

3

3

15.5

7.9

15

14

8.4

4

21.5

0

16

20.5

5

4

11.5

8.4

16

17

8.4

5

20

4

17

20

4

5

16

7.9

17

16.5

8.4

6

19.5

6.5

18

20.5

2.5

6

17.5

6.9

18

13

8.9

7

2.5

4.5

19

5.5

0.5

7

1.5

0.9

19

3

2.9

8

1.5

4

20

2.5

7.5

8

2.5

1.4

20

4.5

1.4

9

1.5

5

21

5

8

9

0.5

0.4

21

0

2.9

10

0

10.5

22

4

10

10

4.5

1.9

22

2

0.9

11

1.5

10.5

23

4

0

11

3

0

23

1.5

0.9

12

4

10

24

4.5

4

12

4

1.4

24

5.5

1.9

 

表一:经初步处理的工件数据

 

如图一所示,两相邻象限之间工件总重量之差不允许超过一定值(如4g),即 之差, 之差, 之差, 之差, 之差, 之差的绝对值不大于某定值 ,本模型着眼于给出的第一组数据进行计算,力求在算法上有所突破,使操作简便易行,其他数据的处理也迎刃而解,据此建立如下模型:

 

 

图一  工件6象限的排序情况

5.1.2利用lingo优化算法的编制和实现

采用lingo优化算法,我们基于两点考虑:一方面,仔细分析所给的数据可知,满足(1)、(2)式的工件排序不止一种,应该尽量地列出所有可能;另一方面,采取lingo优化且放宽目标值算法可以提高模型的推广价值。所以,我们给出此算法的流程图。如图2所示

开始

输入数据

一组可行解数据

(放宽目标值)数据满足重量要求?

输出数据

结束

N

图二 模型一的流程图

同时,本文应用Lingo软件包,以第一组数据为例,编程实例见附表

 

5.1.3模型结果

根据计算机搜索结果,现列举两种第一组工件的排序方案如表二,第二组排序方案与之相同。

 

 

第一扇区

第二扇区

第三扇区

第四扇区

第五扇区

第六扇区

第一组

序号

重量

序号

重量

序号

重量

序号

重量

序号

重量

序号

重量

21

12

9

12.5

23

13.5

7

13.5

22

14

8

14.5

24

17.5

20

16.5

10

16.5

12

16

19

15

11

15

4

23.5

18

25

15

26

3

27.5

14

27.5

5

28

1

31

13

30

2

30

6

29.5

16

29

17

28.5

求和

84

求和

84

求和

86

求和

86.5

求和

85.5

求和

86

说明

每象限内工件的和与相邻象限内工件的和的差的绝对值的最大值为2克。

第二组

序号

重量

序号

重量

序号

重量

序号

重量

序号

重量

序号

重量

10

0

8

1.5

9

1.5

11

1.5

7

2.5

20

2.5

19

5.5

21

5

24

4.5

23

4

22

4

12

4

15

19

3

19.5

6

19.5

14

19.5

5

20

17

20

2

24.5

4

21.5

13

21

18

20.5

16

20.5

1

20.5

求和

49

求和

47.5

求和

46.5

求和

45.5

求和

47

求和

47

说明

每象限内工件的和与相邻象限内工件的和的差的绝对值的最大值为3.5克。

 

本模型以4为重量约束上限,其他约束上限同理,这样通过计算机搜索,得到  种排序方案。由于模型没有考虑每象限内工件的排序情况,所以每种排序情况还包括 种排序方案,则第一组数据,在以4为重量约束上限时,有: 种排序方案。

5.2模型二的建立

5.2.1模型二的建立

在解决问题一的基础上对模型二进行求解,并且再加入一个体积约束条件,建立关于重量和体积的两个目标函数,利用加权法把两个单目标函数转换成关于体积和重量的单目标函数,加权因子分别为 ,鉴于重量和体积两个约束条件同等重要故取 。模型二的具体表达式如下:

 

5.2.2利用lingo优化算法的编制和实现

采用lingo优化算法,本文基于两点考虑:一方面,仔细分析所给的数据可知,满足(1)、(2)、(3)式的工件排序不止一种,应该尽量地列出所有可能;另一方面,采取lingo优化且放宽目标值算法可以提高模型的推广价值。所以,本文给出此算法的流程图。如图3所示

开始

输入数据

一组可行解数据

(放宽目标值)数据满足重量且体积要求?

输出数据

结束

N

图三 模型二的流程图

同时,本文应用Lingo软件包,以第一组数据为例,第二组数据作验证,程序实例见附表二的模型二程序。

 

5.2.3模型结果

利用Lingo得到结果,现列举两种第二组工件的排序方案如表四,第一组排序方案与之相同。

 

 

第一扇区

第二扇区

第三扇区

序号

重量

体积

序号

重量

体积

序号

重量

体积

10

16.5

1.9

15

26

8.4

1

31

7.9

2

30

7.9

19

15

2.9

12

16

1.4

9

12.5

0.4

17

28.5

8.4

6

29.5

6.9

14

27.5

7.9

23

13.5

0.9

22

14

0.9

求和

86.5

18.1

求和

83

20.6

求和

90.5

17.1

第四扇区

第五扇区

第六扇区

序号

重量

体积

序号

重量

体积

序号

重量

体积

4

23.5

8.4

5

28

7.9

3

27.5

7.9

20

16.5

1.4

8

14.5

1.4

7

13.5

0.9

16

29

8.4

13

30

7.4

18

25

8.9

24

17.5

1.9

11

15

0

21

12

2.9

求和

86.5

20.1

求和

87.5

16.7

求和

78

20.6

每扇区内工件的和与相邻象限内工件的重量和的差的绝对值的最大值为4克,每扇区内工件的和与相邻象限内工件体积最小值为3.5

5.3模型三的建立

六、        模型的评价

 

6.1模型的优点

模型一和模型二的最大优点是运用了计算机搜索的方法找出所有可行性方案,还可以解决其他类似问题,有较强的推广价值。实用性强,分析较好。建立模型中都采取了逐层推进的分析方法,并通过证明结论的方式,使论证更有根据,有较高的参考价值;另一方面,对定值进行了灵敏度分析,对厂家的生产及工人师傅实际使用都有参考价值。

6.2模型的缺点

模型一只考虑了工件重量的约束,模型二只考虑工件重量与体积约束对工件进行排序,与实际使用中的排序有一定的差距。模型三对调整范围确定时,只论证了分布在最大数和最小数范围之间的数是满足要求的,没有进一步探索在最大数和最小数范围之外的数是否满足要求,建立的模型有一定的缺陷。

 

七、    参考文献

 

[1]  杨钰,何旭洪等.Mathematica应用指南.北京:人民邮电出版社,1999

[2]  李尚志.数学建模竞赛教程.南京:江苏教育出版社江苏省,1996

[3]  王雪琴,李金山.数学建模.重庆:解放军出版社,2000

[4]  张韵华.Mathematica符号计算系统使用教程.合肥:中国科学技术出版社,1998

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附录一:

 

序号

重量

体积

序号

重量

体积

序号

重量

体积

序号

重量

体积

1

348

101.5

13

348.5

104.5

1

358.5

103

13

357.5

102.5

2

352

102

14

347

105

2

357.5

103

14

355

103

3

347

105

15

346.5

107.5

3

355

103

15

353.5

103.5

4

349

105.5

16

348

104.5

4

351

103.5

16

356.5

103.5

5

347.5

106

17

347.5

104

5

355.5

103

17

356

103.5

6

347

104

18

348

104.5

6

357

102

18

352.5

104

7

330

94

19

333

97

7

341

96

19

342.5

98

8

329

98

20

330

97

8

342

96.5

20

344

96.5

9

329

100.5

21

332.5

99

9

340

95.5

21

339.5

98

10

327.5

98.5

22

331.5

98

10

344

97

22

341.5

96

11

329

98

23

331.5

96.5

11

342.5

95.1

23

341

96

12

331.5

99

24

332

94.5

12

343.5

96.5

24

345

97

 

 

 

 

附录二:

 

模型一

第一组工件安排和排序的程序

model:

sets:

part/part1..part6/:total;

index/1..24/:weight;

gonjian(part,index):x;

endsets

data:

weight=348,352,347,349,347.5,347,330,329,329,327.5,329,331.5,348.5,347,346.5,348,347.5,348,333,330,332.5,331.5,331.5,332;

enddata

min=@sum(part(i)|i#le#5:@abs(total(i)-total(i+1)))+@abs(total(6)-total(1));

@for(gonjian:@bin(x));

@for(part(i):@sum(index(j):x(i,j))=4);

@sum(part(i):@sum(index(j):x(i,j)))=24;

@for(index(j):@sum(part(i):x(i,j))=1);

@for(part(i):total(i)=@sum(index(j):x(i,j)*weight(j)));

@abs(total(6)-total(1))<=4;

@for(part(i)|i#le#5:@abs(total(i)-total(i+1))<4);

end

 

 

 

 

第二组工件安排和排序的程序

model:

sets:

part/part1..part6/:total;

index/1..24/:weight;

gonjian(part,index):x;

endsets

data:

weight=358.5 357.5 355 351 355.5 357 341 342 340 344 342.5 343.5 357.5 355 353.5 356.5 356

352.5 342.5 344 339.5 341.5 341 345;

enddata

min=@sum(part(i)|i#le#5:@abs(total(i)-total(i+1)))+@abs(total(6)-total(1));

@for(gonjian:@bin(x));

@for(part(i):@sum(index(j):x(i,j))=4);

@sum(part(i):@sum(index(j):x(i,j)))=24;

@for(index(j):@sum(part(i):x(i,j))=1);

@for(part(i):total(i)=@sum(index(j):x(i,j)*weight(j)));

@abs(total(6)-total(1))<=4;

@for(part(i)|i#le#5:@abs(total(i)-total(i+1))<4);

end

模型二

model:

sets:

part/part1..part6/:total,v;

index/1..24/:weight,tiji;

gonjian(part,index):x;

endsets

data:

weight=358.5 357.5 355 351 355.5 357 341 342 340 344 342.5 343.5 357.5

355 353.5 356.5 356 352.5 348 344 348 341.5 341 345;

 

tiji=103 103 103 103.5 103 102 96 96.5 95.5 97 95.1 96.5 102.5 103

103.5 103.5 103.5 104 99 96.5 99 96 96 97;

 

 

enddata

min=@sum(part(i)|i#le#5:@abs(tiji(i)-tiji(i+1)))+@abs(tiji(6)-tiji(1));

@for(gonjian:@bin(x));

@for(part(i):@sum(index(j):x(i,j))=4);

@sum(part(i):@sum(index(j):x(i,j)))=24;

@for(index(j):@sum(part(i):x(i,j))=1);

@for(part(i):total(i)=@sum(index(j):x(i,j)*weight(j)));

@abs(total(6)-total(1))<=4;

@for(part(i)|i#le#5:@abs(total(i)-total(i+1))<=4);

@for(part(i):v(i)=@sum(index(j):x(i,j)*tiji(j)));

@abs(v(6)-v(1))>=3;

@for(part(i)|i#le#5:@abs(v(i)-v(i+1))>=3);

end

 

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页