BPP问题及相关问题建模

BPP问题介绍

概括:

BPP问题是指一维装箱问题,也简称装箱问题。将一组不同大小的物品装入一组容器中,每个容器的容量有限,目标是找到最优的装箱方案,使得所用容器数量最少。物品和箱子的体积都是一维的,通常表示为长度。

(1)物品集合:给定一组不同大小的待装物品,物品体积固定。

(2)箱子集合:一组可用的箱子,每个箱子的容量是固定的。

(3)装箱方案:将所有物品装入箱子的一种方案。

(4)目标函数:使用的箱子数量尽可能少。

(5)约束条件:每个物品必须完整放入一个箱子中,不能分割;每个箱子放入的总物品体积不能超过箱子容量。

建模:

符号介绍:

目标函数:

约束条件:

建模:

变尺寸装箱问题:

算法:

FF算法(First Fit Algorithm)
概括:

该算法按顺序逐个考虑物品,并尝试将物品放入第一个能够容纳它的容器中。

步骤:

(1)初始化:创建一个空箱子列表,每个箱子的容量为给定的最大容量。

(2)遍历物品:a.对每个物品,从左到右遍历现有的箱子列表;

                           b.对于每个箱子,检查物品是否可以放入当前箱子(即物品大小小于等于箱子剩余容量);

                           c.如果找到可以放入该物品的箱子,则将物品放入,并更新箱子的剩余容量;

                           d.如果没有找到可以放入该物品的箱子,则创建一个新箱子,将物品放入新箱子中,并更新箱子列表。

(3)结果输出:所有物品都被放入箱子后,算法结束。箱子列表中的箱子数量即为所求的最小箱子数量。

优缺点:

较高的容器利用率,剩余空间少,但是容器分布不均衡。

NF算法(Next Fit Algorithm)
概括:

该算法按顺序逐个考虑物品,并尝试将物品放入当前打开的容器中。如果当前容器无法容纳该物品,则打开一个新的容器并将物品放入其中。

步骤:

(1)初始化:打开一个箱子,并将其设置为当前箱子,其容量为给定的最大容量。

(2)遍历物品:a.检查物品是否可以放入当前箱子(即物品大小小于等于箱子剩余容量);

                           b.如果物品可以放入当前箱子,将该物品放入,并更新箱子的剩余容量;

                           c.如果物品无法放入当前箱子,则关闭当前箱子,打开一个新的容器,将物品放入新的箱子中,并将该箱子设置为当前箱子,更新箱子的剩余容量。

(3)结果输出:所有物品都被放入箱子后,算法结束。箱子列表中的箱子数量即为所求的最小箱子数量。

优缺点:

简单易实现,具有较高的效率。但是容器利用率较低。

BF算法(Best Fit Algorithm)
概括:

与FF算法和NF算法不同,BF算法在每次放置物品时尝试找到一个最合适的容器来容纳该物品,以最小化剩余空间。

步骤:

(1)初始化:创建一个空箱子列表,每个箱子的容量为给定的最大的容量。

(2)遍历物品:a.对每个物品,遍历现有的所有箱子,找出能够容纳该物品且剩余空间最小的箱子;

                           b.如果找到这样的箱子,则将物品放入该箱子,并更新箱子的剩余容量;

                           c.如果没有找到足够空间的箱子,则打开一个新箱子,将该物品放入新箱子中,并更新箱子列表。

(3)结果输出:所有物品都被放入箱子后,算法结束。箱子列表中的箱子数量即为所求的最小箱子数量。

优缺点:

该算法减少了使用箱子的数量,空间利用率较高。但是,每次遍历都需要搜索所有已打开的箱子,算法效率较低,计算成本高。

算法举例:
def get_min_boxes(things,box_weight):
    things=sorted(things,reverse=True)#将数据由大到小排序
    print(things)
    m=len(things)-1;count=0
    for i in range(len(things)):
        sum=0
        print('{',end='')
        sum=things[i]
        print(things[i],' ',end='')
        while m>=0:
            j=m
            sum+=things[j]
            if sum>box_weight:
                count+=1
                break
            print(things[j],'',end='')
            m-=1
        if j==i:
            # count+=1
            print('}')
            break
        print('}')
 
    print('最少需要使用',count,'个容积为',box_weight,'的箱子')
if __name__=='__main__':
    things=[4,8,1,4,2,1]
    box_weight=10
    # things=[3,15,14,19,13,4,10,4,20,3,1,7,13,8,18,18,20,5,9,8]
    # box_weight=20
    get_min_boxes(things,box_weight)

一维装箱实例:

http://t.csdnimg.cn/8qVmK

二维装箱问题

组合优化问题,将一组不同大小的矩形物品放置到最少数量的矩形容器中。目标是以最小的空间浪费将所有物品放入容器,同时满足物品不重叠且完全位于容器内的约束。

物品和箱子都是二维的,通常表示为长和宽。

三维装箱问题

将一组不同大小的立方体物品放置到最少数量的立方体容器中。目标是以最小的空间浪费将所有物品放入容器,同时满足物品不重叠且完全位于容器内的约束。

应用:

物流与配送:确定最小数量的货车来运输一定量的货物,要考虑货车的载重限制,体积限制等等。

云计算资源优化:如何在云计算环境中分配虚拟机到物理服务器上,以最小化服务器的数量和能耗。

行李装载,仓库存储等等。

引用提供了关于基于S3C64XX的24bpp LCD帧缓冲设置信息,而引用提供了将256色数据整理成一个包含16进制的24bpp和16bpp代码表以及一个16bpp数组的可用Excel表格。然而,这两个引用内容并没有直接回答你的问题关于视频的10bPP和12bPP。 视频的10bPP和12bPP是指每像素位数,也就是每个像素使用的位数来表示颜色。10bPP指的是每个像素使用10个bit来表示颜色,可以表示2^10 = 1024种不同的颜色。同样,12bPP指的是每个像素使用12个bit来表示颜色,可以表示2^12 = 4096种不同的颜色。 因此,视频的10bPP和12bPP可以提供更高的颜色深度和更丰富的颜色表现能力。这对于需要更精细的色彩表现的应用程序和场景非常重要。 然而,请注意这些只是关于颜色深度的概念,具体的设置和实现可能会依赖于具体的硬件和软件平台,以及所使用的视频编解码器和显示设备。 总之,视频的10bPP和12bPP提供了更高的颜色深度和更丰富的色彩表现能力,适用于需要更精细色彩表现的应用程序和场景。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [setup-fb-24bpp.rar_framebuffer 24bpp](https://download.csdn.net/download/weixin_42651281/86530152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [256色 24bpp 和 16bpp 代码表](https://download.csdn.net/download/weixin_38103659/11128303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值