1. 回溯法分析“最小重量机器设计问题”
1.1 解空间说明
“最小重量机器设计问题”的解空间是一个 n 层 m 分支的解空间树,其中每一层代表一个部件的决策,每一层的分支代表选择不同供应商的方案。
总共有 mnm^n 个可能的组合,每种组合对应一个供应商选择方案。
- 解空间结构:
- 每个节点表示当前已选择的供应商方案和累计的总重量及总成本。
- 目标是找到所有满足 总成本 ≤ d 的方案,并选择其中总重量最小的。
1.2 解空间树说明
- 解空间树的层次: 解空间树有 nn 层,对应 nn 个部件。
- 每层的分支数: 每层有 mm 个分支,对应选择第 tt 层的 mm 个供应商之一。
- 根节点: 表示尚未选择任何部件,累计成本 tc=0tc = 0,累计重量 tw=0tw = 0。
- 叶节点: 表示选择了所有部件的供应商方案,计算出总重量 twtw 和总成本 tctc。
1.3 节点的状态值
在遍历解空间树的过程中,每个节点的状态值包括:
- 当前已选的供应商组合 xx: 一个数组,记录当前已选择的供应商。
- 当前累计重量 twtw: 当前已选方案的总重量。
- 当前累计成本 tctc: 当前已选方案的总成本。
- 层数 tt: 表示当前正在处理第 tt 个部件。
1.4 利用限界函数剪枝
为了减少不必要的搜索,限界函数会判断是否有必要扩展某节点:
- 成本剪枝: 若当前累计成本 tc+a[t][i].c>dtc + a[t][i].c > d,则剪去该分支,因为总成本已超过限制。
- 重量剪枝: 若当前累计重量 tw+a[t][i].w≥minwtw + a[t][i].w \geq \text{minw},则剪去该分支,因为重量已不可能更优。
- 层次剪枝: 若已经达到叶节点(t>nt > n),则检查当前解是否比最优解更优,否则不扩展。
2. 对回溯算法的理解
2.1 回溯算法的本质
回溯算法是一种 系统地搜索解空间 的方法,适用于组合优化问题。其核心思想是:
- 枚举所有可能的解: 通过递归构造解空间树。
- 动态地判断可行性: 利用限界函数对无效分支进行剪枝,避免冗余计算。
- 回退并继续探索: 在递归结束时,回退到上一个状态,继续尝试其他可能。
2.2 回溯算法的特点
- 完整性: 回溯算法会穷举所有解,并返回最优解或所有可行解。
- 高效性: 使用剪枝技术减少不必要的计算,提升效率。
- 递归性: 回溯通过递归函数构造解空间树,每个递归层表示一个决策点。
2.3 回溯算法的优缺点
- 优点:
- 缺点:
- 在解空间较大时,可能面临性能瓶颈。
- 剪枝策略的设计对算法效率影响很大。
2.4 回溯算法的适用场景
- 组合问题: 如子集、排列、组合等。
- 约束满足问题: 如数独、图着色问题。
- 优化问题: 如背包问题、机器设计问题。