python完全背包最优_python 完全背包问题_遗传算法Python实战 009.背包问题

原标题:遗传算法Python实战 009.背包问题

写在前面的话

以下部分内容,来自百度

背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。

问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?

背包问题里面可以附加各种限制,比如容器的大小、容量、形状等等,我们在这里不做特别复杂的设定,仅做重量限制,也就是说可以认为你放进去的物品是可以不受形状的限制,仅受重量和容积的限制,比如你要放入的是糖或者盐这类东西。

下面是我们要放入背包中的物品:

物品名称

价值

重量(kg)

容量(L)

面粉

1680

0.265

0.41

黄油

1440

0.5

0.13

1840

0.441

0.29进入算法实现部分

首先,定义个物品类,用来记录物品的各种属性:

cla***esource:

def__init__( self, name, value, weight, volume):

self.Name = name

self.Value = value

self.Weight = weight

self.Volume = volume

然后就可以设定物品信息和条件了:设定背包的最大承载重量为10kg,最大容量为4L

items = [Resource( " 面粉", 1680, 0.265, .41),

Resource( " 黄油", 1440, 0.5, .13),

Resource( " 糖", 1840, 0.441, .29)]

maxWeight = 10

maxVolume = 4

我们的目标是在这些限制条件下,将背包里的东西价值最大化。

我们可以想想,如何通过完成这个目标。

首先我们当然是希望价值与重量比和价值与体积比最优的物品优先——这样我们可以得到尽可能高的总价值。

当我们不能再把性价比最好的资源塞进去的时候,我们就要考虑用下一个最有价值的资源填满剩余的空间,以此类推。

一旦背包装满了,我们还需要考虑,我们是否可以用其他类型的项目组合来代替一种类型的项目,以便于最大限度的增加背包内物品的总价值。

然后定义一个用于记录当前背包中资源信息的类:

classItemQuantity:

def__init__( self, item, quantity):

self.Item = item

self.Quantity = quantity

def__eq__( self, other):

returnself.Item == other.Item andself.Quantity == other.Quantity

定义健壮性类:背包算法里面,肯定是轻、小、贵为最优,所以需要重量、容积和价值三个成员变量。在对比的时候,优先对比价值,价值相同的时候情况下,对比重量,最后对比容量。

classFitness:

def__init__( self, totalWeight, totalVolume, totalValue):

self.TotalWeight = totalWeight

self.TotalVolume = totalVolume

self.TotalValue = totalValue

def__gt__( self, other):

ifself.TotalValue != other. TotalValue:

returnself

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值