第五次作业

已知:

机器由 n 个部件组成

每个部件可以从 m 个供应商中选择一个

𝑐
𝑖
𝑗
c
ij

:第 i 个部件从第 j 个供应商购买的价格

𝑤
𝑖
𝑗
w
ij

:对应的重量

总价格不能超过给定上限 d

目标:

在总价格 ≤ d 的前提下,选择每个部件的供应商,使机器总重量最小。

该问题是一个带约束的组合优化问题,可以使用回溯法求解。

  1. 用回溯法分析“最小重量机器设计问题”
    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→ 该结点不可能产生可行解,立即回溯

如果到达叶子结点:比较当前重量与已知最小重量,若更小,则更新最优解

  1. 我对回溯算法的理解

我对回溯算法的理解是:回溯算法是一种有条件的穷举搜索方法。
它的特点是:逐步构造解,每一步只做一个选择,选择不合适就撤销(回退),遇到不符合条件的情况就提前放弃,不用把所有情况都试一遍,能节省大量时间。

本质是深度优先搜索,一条路走到头,不行就回头换路,适合解决组合问题如:0-1 背包、n 皇后、排列组合、机器设计问题等

一句话总结

回溯法通过对解空间树进行深度优先搜索,在搜索过程中不断判断约束条件,对不可能得到最优解的分支及时回退。

posted @ 2025-12-21 10:56  起剑  阅读(1)  评论(0)    收藏  举报