Skip to content

zedlee9/Algorithm-Lin

 
 

Repository files navigation

Team8:Liu Yiyu and Cheng Long

题目

物流公司在流通过程中,需要将打包完毕的箱子装入到一个货车的车厢中,为了提高物流效率,需要将车厢尽量填满,显然,车厢如果能被100%填满是最优的,但通常认为,车厢能够填满85%,可认为装箱是比较优化的。

设车厢为长方形,其长宽高分别为L,W,H;共有n个箱子,箱子也为长方形,第i个箱子的长宽高为li,wi,hi(n个箱子的体积总和是要远远大于车厢的体积),做以下假设和要求:

  1. 长方形的车厢共有8个角,并设靠近驾驶室并位于下端的一个角的坐标为(0,0,0),车厢共6个面,其中长的4个面,以及靠近驾驶室的面是封闭的,只有一个面是开着的,用于工人搬运箱子;
  2. 需要计算出每个箱子在车厢中的坐标,即每个箱子摆放后,其和车厢坐标为(0,0,0)的角相对应的角在车厢中的坐标,并计算车厢的填充率。

问题分解为基础和高级部分,完成基础部分可得78分以上,完成高级部分可得85分以上。

基础部分:

  • 1. 所有的参数为整数;
  • 2. 静态装箱,即从n个箱子中选取m个箱子,并实现m个箱子在车厢中的摆放(无需考虑装箱的顺序,即不需要考虑箱子从内向外,从下向上这种在车厢中的装箱顺序);
  • 3. 所有的箱子全部平放,即箱子的最大面朝下摆放;
  • 4. 算法时间不做严格要求,只要1天内得出结果都可。

高级部分:

  • 1.参数考虑小数点后两位;
  • 2. 实现在线算法,也就是箱子是按照随机顺序到达,先到达先摆放;
  • 3. 需要考虑箱子的摆放顺序,即箱子是从内到外,从下向上的摆放顺序;
  • 4. 因箱子共有3个不同的面,所有每个箱子有3种不同的摆放状态;
  • 5. 算法需要实时得出结果,即算法时间小于等于2秒。

实验设计

建模

车厢和物品均有三个方向,x方向, y方向,z方向。

image-20230106133145614

箱子有3个不同的面,可以旋转,而六种旋转类型可以通过绕x、y和/或z轴旋转得到。主要有以下几种旋转方式

rotation type first axis to rotate about second axis to rotate about
0 - -
1 z -
2 y -
3 x y
4 x -
5 x z

根本不同旋转方式,再改变对应三维坐标。

方案

输入:车厢的长宽高,箱子的参数(按照顺序装入)

输出:存放的位置以及空间利用率

整体流程如下:

  1. 分别定义车厢类(Bin)、箱子类(Item)、装箱操作类(Packer),根据输入分别进行初始化

  2. 首先选择一个pivot点,即一个(x, y, z)坐标(初始为(0,0,0)),它表示特定3D车厢中的一个点,在这个点上尝试放入箱子。箱子的后左下角将放置在该pivot点上(即箱子3D模型的原点)。

​ 根据以下规则,找到合适坐标点以及方向进行摆放:

  1. 按照坐标轴的优先级:高>宽>长

  2. 判断对应摆放方式,是否超过了车厢的某一坐标系的大小

  3. 判断是否与已摆放物体相交

  4. 若无法成功放置,则尝试旋转箱子,共上诉6种旋转方式

  5. 如果仍不能放置,则更新pivot点,然后继续进行尝试。

About

李孟泽,袁泽澄算法期末大作业

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%