第五章上机报告

一、问题描述

7-2 最小重量机器设计问题 (25 分)

设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij​是从供应商j 处购得的部件i的重量,cij​是相应的价格。 试设计一个算法,给出总价格不超过d的最小重量机器设计。

输入格式:

第一行有3 个正整数n ,m和d, 0<n<30, 0<m<30, 接下来的2n 行,每行n个数。前n行是c,后n行是w。

输出格式:

输出计算出的最小重量,以及每个部件的供应商

二、算法分析

1. 请用回溯法的方法分析“最小重量机器设计问题”

刚开始先选择第一个部件,如果第一个供应商提供的第1个部件的价格没有超过规定的总价d的话,那么第一个部件就由第1个供应商提供,如果超过的话就判断第二个供应商提供的价格是否满足要求,满足则选,不满足则继续判断接下来的供应商提供的价格,直到满足要求为止,此时更新记录当前价格和重量的两个变量值。接下来依次选择第2个、第3个……第n个部件的供应商,方法同上。如果有多种方案都满足总价不超过d的要求的话,那么比较每种方案部件的总重量,选择总重量最小的那个方案。

 

2.说明“最小重量机器设计问题"的解空间

理论上就有m的n次方个解。

 

(1)说明“最小重量机器设计问题"的解空间树

 根节点的cPrice=0,cWeight=0,表示当前没有选择任何一个供应商。接下来的一层,根据所选的供应商更新对应的cPrice cWeight值;接着选择第二个部件由哪个供应商提供,直到选择完所有的部件。这时再与记录的找到的最优解比较,如果这一次遍历找到的总重量比最优解的总重量还小,比最优解更优,那么就更新最优解。

在遍历的过程中,有时候会遇到明显不满足要求、不必再往下继续遍历的情况,这时候要设计一个剪枝算法来减少计算。剪枝的条件就是:如果本次搜索部件的总价格已经超过了要求的d价格,或者是目前的总重量已经超出了最优解的总重量时,那么明显不是最优解,不必再往下继续搜索遍历,剪去这一分支、继续寻找别的解决方法即可。

 

(2)在遍历解空间树的过程中,每个结点的状态值是什么

每个结点有两个状态值,分别是当前的总价格、当前的总重量。

 

3. 你对回溯算法的理解

用回溯这种算法,可以用画空间树的方法来做题,更直观,比较容易理解,但有时一些剪枝函数会漏了忘写,导致运行不通过,还是掌握得不够牢固;而且回溯几乎要遍历所有的解,因此有时候时间复杂度挺高。

 

posted @ 2021-12-13 19:30  lyoooooo  阅读(48)  评论(0编辑  收藏  举报