箱柜装载问题

ahjxtxw 2018-10-15 01:29:17
现有一些小的木箱需要装到大的集装箱里面,
装箱规则:
1) 集装箱总长度:不能超过 11.86 m;也不能小于 11.5 m
2) 集装箱总重量:不能超过 19900 Kg
3) 长度为4.73 木箱, 一个集装箱里面只能有一件
4) 只允许存在一个不满足条件的空箱 ( 小于 11.5 m ) ,
即: 1号集装箱装完之后,货物长度 11.6 , 2号 11.4 m , 3号 11.2 m (不行 )
1号集装箱装完之后,货物长度 11.6 , 2号 11.7 m , 3号 11.2 m (允许 )

目前写了一个遍历的方法, 可以满足前3条规则, 第4条规则满足不了,
各位兄台帮帮忙 !!!

附测试数据 , 供参考(拷贝到EXCEL查看)

批次号码 包装号码(木箱编号) 木箱重量 木箱长度
PC-2018-098 130 3720 4.73
PC-2018-098 125 3720 4.73
PC-2018-098 122 3660 4.73
PC-2018-098 121 3660 4.73
PC-2018-098 129 3720 4.73
PC-2018-098 128 3720 4.73
PC-2018-098 123 3720 4.73
PC-2018-098 126 3720 4.73
PC-2018-098 124 3720 4.73
PC-2018-098 127 3720 4.73
PC-2018-098 86 2340 4.15
PC-2018-098 93 2340 4.15
PC-2018-098 99 2340 4.15
PC-2018-098 82 2340 4.15
PC-2018-098 84 2340 4.15
PC-2018-098 98 2340 4.15
PC-2018-098 94 2340 4.15
PC-2018-098 95 2340 4.15
PC-2018-098 96 2340 4.15
PC-2018-098 97 2340 4.15
PC-2018-098 83 2340 4.15
PC-2018-098 91 2340 4.15
PC-2018-098 92 2340 4.15
PC-2018-098 85 2340 4.15
PC-2018-098 5 5360 3.9
PC-2018-098 2 5360 3.9
PC-2018-098 1 5360 3.9
PC-2018-098 4 5360 3.9
PC-2018-098 3 5360 3.9
PC-2018-098 74 1880 3.62
PC-2018-098 73 1880 3.62
PC-2018-098 77 1880 3.62
PC-2018-098 76 1880 3.62
PC-2018-098 75 1880 3.62
PC-2018-098 72 1880 3.62
PC-2018-098 66 1680 3.58
PC-2018-098 68 1680 3.58
PC-2018-098 65 1680 3.58
PC-2018-098 62 1680 3.58
PC-2018-098 63 1680 3.58
PC-2018-098 64 1680 3.58
PC-2018-098 67 1680 3.58
PC-2018-098 24 3611 3.5
PC-2018-098 23 3611 3.5
PC-2018-098 25 3611 3.5
PC-2018-098 26 3611 3.5
PC-2018-098 18 3780 3.42
PC-2018-098 19 3780 3.42
PC-2018-098 20 3780 3.42
PC-2018-098 21 3780 3.42
PC-2018-098 22 3780 3.42
PC-2018-098 34 2840 3.32
PC-2018-098 30 2840 3.32
PC-2018-098 31 2840 3.32
PC-2018-098 32 2840 3.32
PC-2018-098 33 2840 3.32
PC-2018-098 35 2840 3.32
PC-2018-098 16 5040 3.2
PC-2018-098 17 3200 3.2
PC-2018-098 11 5120 3.01
PC-2018-098 8 5120 3.01
PC-2018-098 9 5120 3.01
PC-2018-098 10 5120 3.01
PC-2018-098 13 5120 3.01
PC-2018-098 14 5120 3.01
PC-2018-098 15 5120 3.01
PC-2018-098 6 5120 3.01
PC-2018-098 12 5120 3.01
PC-2018-098 7 5120 3.01
PC-2018-098 29 3606 2.98
PC-2018-098 28 3606 2.98
PC-2018-098 27 3606 2.98
PC-2018-098 112 3380 1.7
PC-2018-098 113 3380 1.7
PC-2018-098 114 3380 1.7
PC-2018-098 115 3380 1.7
PC-2018-098 116 3380 1.7
PC-2018-098 118 3380 1.7
PC-2018-098 119 3380 1.7
PC-2018-098 109 3380 1.7
PC-2018-098 117 3380 1.7
PC-2018-098 120 3380 1.7
PC-2018-098 110 3380 1.7
PC-2018-098 111 3380 1.7
PC-2018-098 56 1360 1.67
PC-2018-098 81 1820 1.67
PC-2018-098 59 1360 1.67
PC-2018-098 104 2596 1.67
PC-2018-098 69 1582 1.67
PC-2018-098 108 2596 1.67
PC-2018-098 71 1582 1.67
PC-2018-098 70 1582 1.67
PC-2018-098 79 1820 1.67
PC-2018-098 78 1820 1.67
PC-2018-098 57 1360 1.67
PC-2018-098 58 1360 1.67
PC-2018-098 103 2596 1.67
PC-2018-098 88 2520 1.67
PC-2018-098 90 2520 1.67
PC-2018-098 80 1820 1.67
PC-2018-098 107 2596 1.67
PC-2018-098 101 2596 1.67
PC-2018-098 105 2596 1.67
PC-2018-098 106 2596 1.67
PC-2018-098 89 2520 1.67
PC-2018-098 102 2596 1.67
PC-2018-098 61 1360 1.67
PC-2018-098 87 2520 1.67
PC-2018-098 100 2596 1.67
PC-2018-098 60 1360 1.67
PC-2018-098 50 2926 1.25
PC-2018-098 47 2926 1.25
PC-2018-098 48 2926 1.25
PC-2018-098 49 2926 1.25
PC-2018-098 53 741.4 1.16
PC-2018-098 52 1340 1.16
PC-2018-098 51 1714 1.16
PC-2018-098 46 2690 1
PC-2018-098 45 2690 1
PC-2018-098 54 256 0.96
PC-2018-098 41 3640 0.96
PC-2018-098 39 3640 0.96
PC-2018-098 37 3640 0.96
PC-2018-098 43 3640 0.96
PC-2018-098 44 3640 0.96
PC-2018-098 55 176 0.96
PC-2018-098 42 3640 0.96
PC-2018-098 38 3640 0.96
PC-2018-098 40 3640 0.96
PC-2018-098 36 3640 0.96

...全文
353 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WMERP 2018-10-19
  • 打赏
  • 举报
回复
按无限数量写组合种类是可以按照1,3把所有组合列出,再通过2条件排除不合理组合。
WMERP 2018-10-19
  • 打赏
  • 举报
回复
补充一下,当有N个箱存在时,你先不管现在有多少个箱,先汇总出有多个种类的箱,先只管123条件不管数量,然后写算法组合出所有可能的组合,然后再根据各种拥有的数量去掉不合理的组合,再根据组合来循环配对(数量这时候判断),得出最终的第一个合适的集。
比如:这么多箱中现在有 A B C E F 五种箱,任意组合(A最多一个,其他无限制数量)实现 满足 1,2条件的集合,然后再由数量来判断使用哪些组合,剩余的就是尾箱。比如A最多一个,那么有10个A那么至少有10个箱,然后再根据其他箱的数量计算每种含A的箱最大箱数(0~10),同理不含A的箱也由数量来定最大箱数,再用假设法一个一个的排除可能性,比如 A1箱最大6箱,那么6箱时,其他箱的最大箱数情况就变化,这时A2箱最大 3,那么再有一个A箱,如果另外的A箱都是0,那么这个类型的就都不成立。那么就可以排除所有A1=6,A2=3的集,再循环计算A1=6,A2=2,A3=2,但是B箱(无A)无满足的,那么 622这个集也可以排除了,再来 试6211和其他不为0的箱组合,直到存在合适结果集为止。
ahjxtxw 2018-10-16
  • 打赏
  • 举报
回复
引用 2 楼 husonyao 的回复:
另外思路就是现在有N个二维数K(a,b) a=长度,b=重量 ,然后需要创建M个二维数组 J(K)(M)=(K1,K2,K3.....),将N个二维数不停的交换位置(其中有L个4.73位置不能变动)排列组合,使得至少 M - 1 个数组11.86>sum(a)>11.5 and M个素组 SUM(B)<199990 and M个数组sum(a)<11.86


恩, 现在就是这个想法, 但是难点就在这个“排列组合”
拍了老半天了, 前3个规则满足, 最后一个不行
WMERP 2018-10-16
  • 打赏
  • 举报
回复
另外思路就是现在有N个二维数K(a,b) a=长度,b=重量 ,然后需要创建M个二维数组 J(K)(M)=(K1,K2,K3.....),将N个二维数不停的交换位置(其中有L个4.73位置不能变动)排列组合,使得至少 M - 1 个数组11.86>sum(a)>11.5 and M个素组 SUM(B)<199990 and M个数组sum(a)<11.86
WMERP 2018-10-16
  • 打赏
  • 举报
回复
程序无法象人这样思考,你应该先按照常用箱的规格定下来几个模板,先根据模板来组合生成箱,比如有4.73的按照有4.73的标准模板(4.73中再分有无4.15的,模板个数自己先定),然后不能按照模板来的再根据以上规则先自由组合,最后再根据条件成立情况不同箱之间交换箱来达到。

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧