首页 > 其他分享 >三维装箱决策问题

三维装箱决策问题

时间:2023-05-24 20:35:04浏览次数:57  
标签:包装箱 三维 商品 算法 决策问题 装箱 放入

1.三维装箱决策问题

三维装箱问题即研究如何用最少数量的箱子将物品装起来。其描述如下:

可以看出,问题从计算最少容器数量变为能否用一定数量的容器能够装下。解决该问题,只需要解答出是,或者否即可。

2.三维装箱决策问题分析

三维装箱决策问题是NP-Complete问题。此类问题能够在多项式时间内验证答案是否准确,可是目前并没有任何算法能够在多项式时间内解得答案。意味着对于此类问题,一般只能采用诸如暴力解等时间复杂度很高的算法求解。当物品数n和容器数量k增加时,求得最优解所需时间也会急剧增长。

想要减短计算时间,可以使用启发式算法计算。启发式算法大致如下:

一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。

其核心是基于直观或者经验去构造算法。对于装箱,理解为基于平时装箱的经验,优先选择某些组合,或者放弃某些组合。如装箱时,一般会把体积最大的物品放在最下面,这种经验可以帮助排除掉一些不合理的组合,提高计算速度。最后,尽管计算出的结果牺牲一定的准确性,但是可以缩短计算时间。而经验若足够合理,也能使得计算结果准确性不会过于低。

一种经典的Bin packing problem启发式算法是First-Fit (FF)算法其核心思想是按照一定顺序取物品,一旦当前物品能够找到合适的角度和位置能够放入容器中,则放进去。其思想与现实中装箱的方法一定程度上吻合。另外该算法也被验证出有不俗的性能,能够保证计算出来的结果小于最优结果的1.7倍。

本文将介绍一种基于First-Fit算法实现的的包材推荐算法。

3.算法描述

(1) 原理描述

如图所示,首先建立三维坐标系,其中三个轴分别为Weight轴Height轴Length轴。当物体放入坐标轴时,使用其左后下顶点的坐标表示其位置。将包装箱按照各轴对应的方向置于坐标轴原点中。

接着将商品按照一定规则排序(如按体积从大到小),依次放入包装箱内。当一个商品放入箱子时,可以通过旋转物体调整方向。假设物体的尺寸为( w , h , l ) (w, h, l)(w,h,l),则一共有一下六种情况:

对于第一个商品,将其放在原点处。如果当前方向无法放入,则旋转商品,直到放入为止。商品1放入后,接着放商品2。此时商品2可以选择放在商品1的前方右方或者上方。如下图所示:

依次尝试将商品2放在这三个位置中,如果放不进,则旋转商品,一旦找到能商品放进包装箱的位置和方向,则将商品2放入。当商品3放入时,我们可以选择将商品3放入商品1的前方右方或者上方,商品2的前方右方或者上方。同理寻找可以将商品3放入包装箱的位置和方向,一旦找到,则将其放入。

同理对于商品n,可以选择放在商品(1…n − 1)的前方,右方或者上方。尝试不同的位置和方向,一旦校验到商品n超出包装箱或者与包装箱中别的商品位置有重合,就通过旋转或者改变位置的方式寻找下一个存放的方式,直至商品能够放进去位置。若商品无法放入包装箱中,则认为当前包装箱无法容纳所有商品,对下一种包装箱进行计算。

即可得代码逻辑如下:

sorted_box_list <- 按照体积排序的所有包材
sorted_sku_list <- 排好序的sku
total_sku_volume <- sku总体积
rotation_list <- 六种方向

for box in sorted_box_list:
   if box_volume < total_sku_volume then continue
   else 
	   fit <- false
	   for rotation in rotation_list:
	      if can_put(sku1, rotation, (0, 0, 0)) then 
	          fit <- true
	          put_into_box(sku1, rotation, (0, 0, 0))
	          break
	   if fit = false then continue
	       
	   for skui in sorted_sku_list[1:]:
	     fit <- false
	     find_position:
		      for item in box_item_list:
		          for position in [item_front, item_top, item_right]:
		              for rotation in rotation_list:
			              if can_put(skui, rotation, position) then 
			                 fit <- true
			                 put_into_box(skui , rotation, position)
			                 break find_position
	     if fix = false
	        then continue
	     return box
       

 

标签:包装箱,三维,商品,算法,决策问题,装箱,放入
From: https://www.cnblogs.com/guangzhiruijie/p/17429414.html

相关文章

  • 【无人机三维路径规划】基于遗传算法实现无人机三维路径规划含Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • HY-M5 三维机器视觉系统在工业自动化生产的应用
    Part.1 行业背景如今科学技术有了日新月异的变化,工业自动化也在不断地发展。然而,在高强度、高精准的工作环境下,人工操作已经不能适应企业的发展需求,于是机器人的出现便提供了高效快捷的解决方案。为了实现自动化生产并确保机器人生产线及其周边环境的监测与自适应调整等问题,三维视......
  • TPSO-DSDT粒子群算法在三维装箱问题上的应用
    组合算法是将传统启发式算法与数学规划算法结合元启发式算法共同工作进行相应的计算,还有融合多种算法所获得的计算方法,结合了所有算法自身的有点,规避其自身缺点从而达到解决装箱问题的最终目的。现在,组合算法的整体规划绝大多数都是通过启发式算法完成的,局部优化的过程采用的是人......
  • RIS/PACS系统,集成三维影像技术后处理功能
    PACS系统源码是按照DICOM3.0和HL7标准,遵循IHE标准工作流程,100%自主知识产权,以医疗影像的采集、传输、存储和诊断为核心,集流程质控、患者信息管理应用和患者关注服务于一体的,覆盖放射、超声、窥镜和病理等科室的CS架构的综合应用系统。集成三维影像后处理功能,包括三维多平面重建、......
  • 启发式算法在三维装箱问题上的应用
    启发式算法的出现时间比较难以确定,因为很多算法的提出都是在不同的领域和不同的时间段内,而且随着时间的推移,这些算法也在不断地完善和发展。以下是一些比较有代表性的启发式算法及其出现时间:1953年,模拟退火算法(SimulatedAnnealing,SA)模拟退火算法是一种基于固体物理学中固体退火......
  • 基于Web的智慧工业园区三维可视化安全管控系统
    建设背景随着经济飞速发展和产业创新升级,作为新经济形式的重要载体,工业园区污染严重、安全生产难以监管等问题日益突出。工业园区作为工业高质量发展的重要载体和平台,工厂聚集,安全生产风险集中,在这个背景下,建设智慧工业园区已经成为了许多企业和政府的共同选择。总体架构工业园区智......
  • 智慧产业园区三维可视化运维管理云平台
    改革开放以来,园区逐渐成为地区招商引资、储备人才的重要途径。我国社会、经济处于快速发展阶段,园区正向着智慧化、创、科技化转变。建设背景在人类的历史发展过程中,随着5G、人工智能、云计算、物联网、GIS等新一轮信息技术的迅速发展,已经促进第四次科技革命,进入到数据为王的时代,以......
  • 基于爬山优化算法的三维曲面极值搜索matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要       爬山法是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)。假定所求问题有多个参数,我们在通过爬山法逐步获得最优解的过程中可以依次分别将某个参数的值增加或者......
  • m基于LK光流提取算法的三维医学图像运动估计matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的图像,这些变化信息在不同时间,不断的流过眼......
  • 基于爬山优化算法的三维曲面极值搜索matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要爬山法是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)。假定所求问题有多个参数,我们在通过爬山法逐步获得最优解的过程中可以依次分别将某个参数的值增加或者减少一个单位。爬山法是......