Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]酷爱玩编程的朋友请进来看看,这里有一个有点玄妙的难题

1976yuan  发表于:2010-05-09 13:16:01  
复制

某系列床上用品有A、B、C、D、E五种规格的型号,它们都要用到同一种面料,下面是各型号的产品对同一种面料的单耗数据:

 

A单独裁剪消耗的面料是:2.25米/件
B单独裁剪消耗的面料是:3.12米/件
C单独裁剪消耗的面料是:3.89米/件
D单独裁剪消耗的面料是:1.3米/件
E单独裁剪消耗的面料是:1.8米/件

但是由于单独裁剪会产生面料的严重浪费,所以如果能几种产品進行组合套裁则会减少面料的消耗,下面是套裁组合的单耗情况:

A和B套裁组合: 1件A+2件B所消耗的面料是:6.3米/组合
A和C套裁组合: 1件A+2件C所消耗的面料是:7.9米/组合
B和C套裁组合: 2件B+3件C所消耗的面料是:12.9米/组合
D和E套裁组合: 4件D+3件E所消耗的面料是:7.3米/组合

现在客人给我们下达了1个订单,订单明细是这样的:
A 2400件 B 2800件 C 1356件 D 3460件 E 1200件

★★如果每种产品都是单独裁剪,则计算面料结果如下:
 A产品用料:2.25x2400=5400米
 B产品用料:3.12x2800=8736米
 C产品用料:3.89x1356=5274.84米
 D产品用料:1.3x3460=4498米
 E产品用料:1.8x1200=2160米
    整个订单采用单独裁剪计算的总面料是:5400+8736+5274.84+4498+2160=26068.84米

而采用套裁计算,则有多种套裁组合方案,不同的方案计算出来的面料总量也是不一样的.
★★套裁组合方案1:如果以AB组合、AC组合优先,则套裁计算出来的结果如下:
 1400个A和B的组合用料:6.3x1400=8820米
 678个A和C的组合用料:7.9X678=5356.2米
 A单独裁剪的用料:2.25x(2400-1400x1-678x1)=724.5米
 B单独裁剪的用料: 3.12x(2800-2x1400)=0
 C单独裁剪的用料: 3.89x(1356-2x678)=0
 400个D和E的组合用料:7.3x400=2920米
 D单独裁剪的用料:1.3x(3460-400x4)=2418米
 E单独裁剪的用料: 1.8x(1200-3*400)=0

 采用套裁组合方案1计算出来的整个订单的总面料是:8820+5356.2+724.5+0+0+2920+2418+0=20238.7米

★★套裁组合方案2:如果以BC组合、DE组合优先,则套裁计算结果改成了如下情况:
 452个B和C组合用料:12.9x452=5830.8米
 C单独裁剪的用料: 3.89x(1356-452x3)=0米
    在B和C進行组合后,B还剩下的余数是:2800-2x452=1896件,由于A和B又可以進行组合,所以下面又必须计算A和B组合用料的情况:
        948个A和B组合用料:6.3x948=5972.4米
 A单独裁剪的用料:2.25x(2400-948x1)=3267米
 B单独裁剪的用料:3.12x(2800-452x2-948x2)=0米
 400个D和E的组合用料:7.3x400=2920米
 D单独裁剪的用料:1.3x(3460-400x4)=2418米
 E单独裁剪的用料: 1.8x(1200-3*400)=0

 采用套裁组合方案2计算出来的整个订单的总面料是:5830.8+0+5972.4+3267+0+2920+2418+0=20408.2米


*********************下面总结一下整个订单的面料计算情况:*************
 如果全部单独裁剪,面料的总用量是26068.84米  
 如果采用套裁组合方案1,面料的总用量是20238.7米
 如果采用套裁组合方案2,面料的总用量是20408.2米

    可见单独裁剪是相当浪费面料的,不同的套裁方案所节约的面料数量也是不一样的.
    程序最终的结果是计算出用料最少的一种套裁方案。

 

Top
1976yuan 发表于:2010-05-09 13:32:58

这个问题一直困扰着我很多年,一直无法用程序实现自动计算这种类型的面料消耗,但这种情况在我们的实际生产中又是普遍存在的.到目前为止我还没有找到好的方案来解决,但由于时间紧迫,到年底的时候我必须出软件,如果那时还找不到好的方法,只能采取将单耗数据导出到excel,再让操作者用手工计算填入excel表格,再在excel里面通过VBA将最终的计算结果存储到access数据库里面的做法了.



竹笛 发表于:2010-05-09 14:14:32

将手算的过程,一步一步写出来。就可以写出程序了。



陈福祥 发表于:2010-05-09 15:09:19

这是一个多方案选择问题,需要研究一下。因为我搞公路施工时,也有这样的问题,就是钢筋下料。观注中。



赵文斌 发表于:2010-05-09 19:49:57

前提条件是否还可以更多点(如原材料的参数,是面料的话就是卷料吧,有长度.宽度;另外还有工艺问题,也就是可以怎么搭配方便,这不是单纯的数学概念了,而是结合工时效率了,不然就算节省了面料可增加了工时也是划不来的.

条件不充分,算出来的成本不一定节约了.也许题目中的方案都不是最优方案.特别是部分组合和整体组合方案.那里面的可能性太多了.靠人工算估计有点悬.如果有更多的依据支撑的话就好鉴定些.以上属个人见解如有理解错误的地方见谅.



zhaoyoulong 发表于:2010-05-10 10:42:19
这是一个数学问题,要提供更详细的面料信息,如一张面料的规格等

lt 发表于:2010-05-10 11:53:57

按描述实际上就是在一定比例情况取组合数量和剩余数量问题。假设N代表组合数量,S代表剩余数量,以AB组合、AC组合优先用伪代码简单描述如下,其它情况类似:
-------------------------------------------------------------------
if 2*A=B then
N(AB)=A
S(A1)=0
S(B1)=0
END IF
----------------------------------------------------------
if 2*A>B then
N(AB)=B\2
S(A1)=A-N(AB)
S(B1)=B-N(AB)*2  '小于2

if 2*S(A1)=C then
N(AC)=S(A1)
S(A2)=0
S(C)=0
END IF

if 2*S(A1)>C THEN
N(AC)=C\2
S(A2)=S(A1)-N(AC)
S(C)=C-N(AC)*2  '小于2
END IF

if 2*S(A1)<C THEN
N(AC)=S(A1)
S(A2)=0
S(C)=C-N(AC)*2
END IF
END IF

--------------------------------------------------------------------
if 2*A<B then
N(AB)=A
S(A1)=0
S(B1)=B-N(AB)*2 

if 3*S(B1)=2*C then
N(AC)=S(B1)\2
S(B2)=0
S(C)=0
END IF

if 3*S(B1)>2*C THEN
N(AC)=C\3
S(B2)=S(B1)-N(AC)*2
S(C)=C-N(AC)*3   '小于3
END IF

if 3*S(B1)<2*C THEN
N(AC)=S(B1)\2
S(B2)=S(B1)-N(AC)*2 '小于2
S(C)=C-N(AC)*3
END IF
END IF



周裕涛 发表于:2010-05-10 12:35:49

我只是根据楼主的意思提炼了一个数据模型,仅供参考,结果在查询里

点击下载此附件

lt 发表于:2010-05-10 14:57:21

最后一段,修改一下变量名

--------------------------------------------------------------------

if 2*A<B then
N(AB)=A
S(A1)=0
S(B1)=B-N(AB)*2 

''另外按楼主的意思在AB组合、AC组合优先中,似乎不用包括下面这些

if 3*S(B1)=2*C then 

N(BC)=S(B1)\2
S(B2)=0
S(C)=0
END IF

if 3*S(B1)>2*C THEN
N(BC)=C\3
S(B2)=S(B1)-N(BC)*2
S(C)=C-N(BC)*3   '小于3
END IF

if 3*S(B1)<2*C THEN
N(BC)=S(B1)\2
S(B2)=S(B1)-N(BC)*2 '小于2
S(C)=C-N(BC)*3
END IF
END IF



煮江品茶 发表于:2010-05-10 18:42:31
应该是一个线性规划问题

1976yuan 发表于:2010-05-11 09:37:35

非常感谢各位的热心参与.不过请大家暂时不要参与这个帖子的讨论了,因为帖子中描述的是我这里的一个特例,大家仅仅根据这个特例而建立起来的数据模型无法适用于实际情况的所有场景.还是等我整理出来了一个数据表模型之后再请大家来讨论吧.



煮江品茶 发表于:2010-05-12 07:01:37

 

请参见《图示化线性规划实例》一文。



煮江品茶 发表于:2010-05-12 07:14:32


煮江品茶 发表于:2010-05-12 11:50:36
处理的基本思路如下:
1、初始化数据:将订单数量对应分配给Xa、Xb、Xc、Xd、Xe,这样可以计算出最大的消耗量;
2、按Xab=Xab+1;Xa=Xa-1;Xb=Xb-2,循环调整这三个值,退出循环的条件为Xa或Xb为0。调整的结果将是的Xa或者Xb减至0;
3、按Xac=Xac+1;Xa=Xa-1;Xc=Xc-2,循环调整这三个值,退出循环的条件为Xa或Xc为0。调整的结果将是的Xa或者Xc减至0;
4、根据1至3的结果分4种情况:Xb和Xc均为0、Xb和Xc均大于0、Xb大于0Xc等于0、Xb等于0Xc大于0。根据这四种情况进行Xbc条增和处理。
5、Xde的调整与1类似,不赘述。

总记录:13篇  页次:1/1 9 1 :