在现实世界中,选择最佳选项是一个优化问题,因此,我们拥有最佳解决方案。在数学中,优化是一个非常广泛的主题,旨在找到最适合数据/问题的方法。可以使用贪婪算法(“贪婪算法是遵循解决问题的启发式算法,在每个阶段进行局部最优选择,以求找到全局最优值的算法”)来解决此类优化问题。这是Wikipedia的定义,我们通过牢记约束来找到最佳解决方案之一。这是用于优化的最简单算法之一。
让我们考虑一个问题,Hareus得到1500美元的零用钱。他是一个招待员,需要购买该月的必需品。因此,他保留了1000美元的必需品,现在剩下500美元中的其余部分用于他的支出。他去了超市,在那里他不得不根据买东西决定要买什么value(a measure of each item related to productivity)并且具有500 $的约束。这是优化问题之一,以下是以最佳方式之一选择项目的代码。
关键思想:最高生产率为$500。
Python实现:
# 优化问题的贪婪算法 # 为物品定义了一个类, # 其名称,价值和成本 class Itm(object): def __init__(self, name, val, cost): self.name= name self.val= val self.cost= cost def getvalue(self): return self.val def getcost(self): return self.cost def __str__(self): returnself.name # 定义用于建立列表的功能 # 生成的项目列表 # 在超级市场有售 def buildlist(names, values, costs): menu = [] for i in range(len(names)): menu.append(Itm(names[i], values[i], costs[i])) return menu # 贪心算法的实现 # 选择最佳选择之一 def greedy(items, maxcal, keyfunction): itemscopy = sorted(items, key = keyfunction, reverse = True) result = [] totalval = 0 totalcal = 0 for i in range(len(items)): if (totalcal + itemscopy[i].getcost() <= maxcal): result.append(itemscopy[i]) totalval = totalval + itemscopy[i].getvalue() totalcal = totalcal + itemscopy[i].getcost() return (result, totalval) # 主功能 # 所有值都是随机的 names = ['Ball', 'Gloves', 'Notebook', 'Bagpack', 'Charger', 'Pillow', 'Cakes', 'Pencil'] values = [89,90,95,100,90,79,50,10] costs = [123,154,25,145,365,150,95,195] Itemrs = buildlist(names, values, costs) maxcost = 500 # 他必须花的最大钱 taken, totvalue = greedy(Itemrs, maxcost, Itm.getvalue) print('Total vaule taken : ', totvalue) # 打印选择的项目列表以获得最佳值 for i in range(len(taken)): print(' ', taken[i])
输出结果
Total vaule taken : 374 Bagpack Notebook Gloves Ball