问题的定义

装箱问题(Bin packing problem),又称集装优化,是一个利用运筹学去解决实际生活的的经典问题。在维基百科的定义如下:

In the bin packing problem, items of different volumes must be packed into a finite number of bins or containers each of a fixed given volume in a way that minimizes the number of bins used. In computational complexity theory, it is a combinatorial NP-hard problem. The decision problem (deciding if items will fit into a specified number of bins) is NP-complete.

中文大概意思就是:装箱问题中,不同体积的物品必须被打包到有限数量的箱子(bins)或容器中,每个箱子的体积都是固定的,并且要使所使用的箱子数量最小化。在计算复杂度理论中,它是一个 NP-难的问题。

从20世纪70年代初开始,装箱问题就引起了广泛的探讨和研究。然而装箱问题可以追溯到1831年高斯(Gauss)开始研究布局问题,因为装箱问题和布局问题本质上是一样的,到现在已有百余年的历史。虽然经过几代人的努力,但迄今尚无成熟的理论和有效的数值计算方法。(摘自百度百科)

装箱问题是NP难解问题,这意味着该问题不存在在多项式时间内求得精确解的算法。因此对装箱问题算法的研究指的是对其近似算法的研究,所谓近似算法即该算法可以求得与精确解接近的结果但不一定得到精确解。目前,已经提出了大量的近似算法,其中适应近似算法是目前时间复杂性比较低的一种近似算法。如下次适应(NF)算法、首次适应(FF)算法、最佳适应(BF)算法、降序首次适应(FFD)算法、降序最佳适应(BFD)算法等。

装箱问题中最早被研究的是一维装箱问题。随着研究的深入,人们发现实际生活中更多存在的是一些带约束的装箱问题,因此也就抽象化出了,如二维装箱问题(条形装箱问题、剪裁问题)、三维装箱问题、变容装箱问题、有色装箱问题、对偶装箱问题等等一系列的带约束的装箱问题。一维装箱问题是指要求把一些物品放入到具有固定容量的箱子中,并最小化所使用的箱子数目。本文介绍的就是一维装箱问题。

数学模型

假设我们有一堆物品长度分别为 $w_{i} $,若干长度为 $C (C>w_i)$ 的箱子;问:最少需要几个箱子才能把所有物品全部装进箱子?我们首先对问题进行一个简单的分析,回答两个简单的问题。最坏的情况是什么?

因为物品的长度小于箱子的长度,所以不存在一件物品一个箱子装不下的情况。因此,最坏的情况就是一个物品放一个箱子,所以可行解的上界是物品的个数 n。

最理想的情况是什么?

最理想的情况就是每个箱子都填满,我们假设物品可以分割,那么每个箱子都可以被填满,在这种情况下所需要的箱子数应该为 $\lceil \frac{\sum w_i}{C} \rceil$ 。

综上所述,$OPT$ 的取值范围应当为 $[\lceil \frac{\sum w_i}{C} \rceil, n]$。所以我们编写的算法得出来的箱子个数应该在这个范围内,而且越接近 $\lceil \frac{\sum w_i}{C} \rceil $,算法越好。

java实现 一维装箱问题_装箱问题(Bin packing problem)相关推荐

  1. python调用cplex求解装箱问题_装箱问题的CPLEX求解

    装箱问题(Bin Packing Problem) 装箱问题即搬家公司问题.一个搬家公司有无限多的箱子,每个箱子的承重上限为W,当搬家公司进入一个房间时,所有物品都必须被装入箱子,每个物品的重量为wi ...

  2. Bin Packing Problem

    题意 让你解决一个装箱问题,给你两种算法,让你求用这两种算法解决问题得到的方案 解题思路 对于第一种方法,用线段树维护区间最大值,要注意需要先判断左边以保证找到最前面的. 对于d第二种方法,使用low ...

  3. B - Bin Packing Problem (线段树+multiset)

    第一个算法用线段树来进行快速查询第一个可以装下item的bin 第二个算法用multiset的二分快速找到能装下item的最小的bin(也就是lower_bound()) 线段树可以对无序的序列实现快 ...

  4. 【补题】Bin Packing Problem

    题意:我们现在用一种容量为c的容器分两种方法去装下n个物品,n个物品的体积给定,必须按照顺序来存放物品,求两种方法分别用多少容器. 第一种方法:我们每次找能放下目前的容器,都放不下就新开一个容器 第二 ...

  5. 【论文阅读】(2022)A goal-driven ruin and recreate heuristic for the 2D variable-sized bin packing prob...

    文章目录 一.Abstract 摘要 二.Introduction 介绍 三.Solution representation 解决方案的表示 四.Ruin and recreate heuristic ...

  6. java 遗传禁忌搜索_[转载]模拟退火,遗传算法,禁忌搜索,神经网络

    在工程实践中,经常会接触到一些比较"新颖"的算法或理论,比如模拟退火,遗传算法,禁忌搜索,神经网络等.这些算法或理论都有一些共同的特性(比如模拟自然过­程),通称为"智能 ...

  7. HDU - 1613 Ecological Bin Packing

    问题描述: Background Bin packing, or the placement of objects of certain weights into different bins sub ...

  8. Google OR-Tools(六) 装箱问题 Bin Packing

    本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法. 装箱问题的描述是要将一组给定尺寸的物品放置到具有固定容量的容器中,一般情况下由于容器有容量限制,不可能放入所有物品,那么 ...

  9. 【算法理论】bin packing 装箱问题

    Bin packing(装箱问题) Problem:给定n件物品和k个箱子,每一个箱子的容量为1,每一件物品的大小w为(0,1),要求使用最少数目的箱子来装上全部的物品. 这个问题是NPC问题,只有a ...

最新文章

  1. Java虚拟机管理的内存运行时数据区域解释
  2. 发布管理——保证变更有序与有质的进行
  3. python中的Xpath方法总结
  4. RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
  5. linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)
  6. Java技术回顾之JNDI--实例
  7. Linux Kettle 闪退问题解决方案
  8. linux过滤重复字符串,linux – 从制表符分隔文件中删除重复的单词/字符串
  9. TensorFlow 2 Object Detection API 教程: 安装
  10. 对话短文本语义匹配-冠军代码
  11. 50个常用sql语句 网上流行的学生选课表的例子
  12. 基于Windows 7环境的WAPI无线网络应用层控制实现
  13. 短信平台API接口demo示例-JAVA/Message/XSend
  14. 计算机实现两个数相加的过程,嵌入式FORTH虚拟计算机的实现
  15. Excel QUARTILE函数计算逻辑
  16. ”标准答案没出来,我怎么知道我想表达什么?……“这样的话,根本就不仅仅是笑话,而且还是现实
  17. 燕之屋三年半消耗近7亿,难逃“智商税”风波
  18. 字节跳动秋招提前批(计算机视觉工程师)
  19. 咸鱼ZTMR实例—加速传感器
  20. Web前端UI框架 JQuery WeUI

热门文章

  1. chrome浏览器主页被劫持
  2. Linux切换壁纸,Linux 随机换壁纸
  3. 树莓派4B系统一键安装opencv,再也不要用编译安装啦!(支持buster、bullseye)
  4. [Elasticsearch](五)Docker环境下搭建Elasticsearch,Elasticsearch集群,Elasticsearch-Head以及IK分词插件和拼音分词插件
  5. React之官网首页篇
  6. 华为鸿蒙系统与麒麟系统,搭载鸿蒙系统,麒麟9000处理器
  7. oracle sql 简繁体转换
  8. ks 曲线_模型算法基础——KS曲线
  9. 鸡声茅店月,人迹板桥霜;莫道君行早,更有早行人
  10. 蚂蚁分类信息系统PC手机网址自适应,网页自适应移动端及根据访问设备自动识别展示手机站或PC站