回溯法:最小重量机器设计问题(python解决)

阅读: 评论:0

回溯法:最小重量机器设计问题(python解决)

回溯法:最小重量机器设计问题(python解决)

问题描述:
最小重量机器设计问题:设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设 w[i][j] 是从供应商j处购得的部件 i 的重量, c[i][j]是相应的价格。试设计一个算法,给出总价格不超过 p 的最小重量机器设计。
利用回溯法求解问题,首先可以为该题的二维数组w、c赋初值,不妨令n=3,m=2、p=60。构造回溯法中的解空间树,大概如下:

根据回溯法的要求,进行的是深度遍历,同时满足重量尽可能小,价格不能超过p。
明确以上要求后便可以进行代码的编写:

# coding = 'utf-8'
# python
# 最小重量机器设计问题:设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。
# 设 w[i][j] 是从供应商j处购得的部件 i 的重量, c[i][j] 是相应的价格。
# 试设计一个算法,给出总价格不超过 p 的最小重量机器设计# 限定:价格不超过p 重量尽可能小n = 3 # 零件数量
m = 2 # 供应商数量
p = 60 # 不应超过的价格w = [[12, 15], [23, 24], [78, 70]] # 供应商j处购得的部件 i 的重量
c = [[8, 6], [13, 9], [14, 25]] # 相应的价格min_weight = 10000
bast_choose = [None]*3cur_choose = [None]*10
cur_weight = 0
cur_price = 0def backtrack(t):
# 此处的t代表每一次遍历i供应商的零件global cur_weight, cur_price, cur_choose, min_weight, p, w, cif t == n:# 遍历到叶子结点if cur_weight < min_weight:min_weight = cur_weightfor j in range(n):bast_choose[j] = cur_choose[j] + 1returnelse:for i in range(m): # 遍历供应商cur_choose[t] = icur_weight += w[t][i]cur_price += c[t][i]if cur_weight < min_weight and cur_price <= p:# 该供应商的重量小于局部最优解 同时价格满足要求 则遍历其子树backtrack(t+1)cur_weight -= w[t][i]cur_price -= c[t][i]cur_choose[t] = 0def main():backtrack(0)print('最小的重量是:%d'%min_weight)print('最佳选择是:',bast_choose)if __name__ == '__main__':main()

运行截图:

本文发布于:2024-02-04 22:11:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170717557660059.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:最小   重量   机器   python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23