第五次作业
已知:
机器由 n 个部件组成
每个部件可以从 m 个供应商中选择一个
𝑐
𝑖
𝑗
c
ij
:第 i 个部件从第 j 个供应商购买的价格
𝑤
𝑖
𝑗
w
ij
:对应的重量
总价格不能超过给定上限 d
目标:
在总价格 ≤ d 的前提下,选择每个部件的供应商,使机器总重量最小。
该问题是一个带约束的组合优化问题,可以使用回溯法求解。
- 用回溯法分析“最小重量机器设计问题”
1.1 “最小重量机器设计问题”的解空间
解空间指的是:
👉 所有可能的“部件–供应商”选择方案的集合。
对每个部件 i(1 ≤ i ≤ n),都要从 m 个供应商中选一个
一个完整解可以表示为:
(x1+x2+...+xn)
xi表示第 i 个部件选择的供应商编号(1~m)。
因此解空间的规模为:
𝑚的n次方
其中:
满足总价格 ≤ d 的方案是可行解
在所有可行解中,总重量最小的方案是最优解
1.2 “最小重量机器设计问题”的解空间树
解空间可以用一棵 解空间树 来表示:
根结点:尚未为任何部件选择供应商
第 1 层结点:为第 1 个部件选择一个供应商
第 k 层结点:已经为前 k 个部件选择了供应商
第 n 层(叶子结点):为所有 n 个部件都选好了供应商,对应一个完整设计方案
特点:
树的深度为 n
每一层最多有 m 个分支(对应 m 个供应商)
回溯法按深度优先方式遍历该解空间树:
如果当前选择导致总价格超过 d,则停止向下扩展,回溯
否则继续向下搜索
1.3 遍历解空间树时,每个结点的状态值
在遍历解空间树的过程中,每个结点需要保存以下状态信息:
当前已选择的部件数即当前在第几层,表示已经为前 k 个部件选择了供应商
当前累计总价格,已选部件对应的价格之和,用于判断是否超过预算 d(可行性剪枝)
当前累计总重量,已选部件对应的重量之和,用于与当前最小重量进行比较(最优性判断)
当前选择的供应商序列,用于最终输出每个部件对应的供应商编号
如果在某个结点:当前累计价格 > d→ 该结点不可能产生可行解,立即回溯
如果到达叶子结点:比较当前重量与已知最小重量,若更小,则更新最优解
- 我对回溯算法的理解
我对回溯算法的理解是:回溯算法是一种有条件的穷举搜索方法。
它的特点是:逐步构造解,每一步只做一个选择,选择不合适就撤销(回退),遇到不符合条件的情况就提前放弃,不用把所有情况都试一遍,能节省大量时间。
本质是深度优先搜索,一条路走到头,不行就回头换路,适合解决组合问题如:0-1 背包、n 皇后、排列组合、机器设计问题等
一句话总结
回溯法通过对解空间树进行深度优先搜索,在搜索过程中不断判断约束条件,对不可能得到最优解的分支及时回退。

浙公网安备 33010602011771号