数据挖掘
旅行商问题
-
描述:给定一组城市(白点)及两两之间的距离,要求寻找一条最短的闭合路线,恰好访问每个城市一次并回到起点
-
决策变量:城市访问顺序(一个排列)
-
目标函数:总路程最小化
-
约束:每个城市访问一次;起点=终点;通常为完全图或稀疏图
-
复杂度:NP-难。n 个城市的哈密顿回路数约为 (n−1)!/2(对称TSP、忽略起点与方向),因此枚举不可行
-
求解思路:
-
精确算法:分支定界、动态规划(Held--Karp O(n^2 2^n))、割平面/整数规划(Concorde)。
-
近似与启发式:最近邻、2-opt/3-opt、Lin--Kernighan、元启发式(GA/ACO/SA/PSO/DE、TabuSearch、VNS)以及混合局部搜索
-
-
实物建议:
-
先用构造法得可行初解,再用k-opt细化
-
利用距离度量的三角不等式可加速剪枝
-
对大规模实例,采用分区/分层或岛模型并行搜索
-
背包问题
-
描述:给定一组物品,每个物品有价值 v_i和重量/体积 w_i,一只背包有容量上限 W。目标是在不超容量的前提下,选择一部分物品,使总价值最大
-
决策变量:每个物品是否被选择(0-1变量,或选取数量,取决于问题类型)
-
目标函数:总价值最小化
-
约束:所有被选物品的总重量不超过背包容量;每个物品最多选一次(0-1背包);或可选多次(完全背包);或有多个背包(多维/多重背包)
-
复杂度:NP-难。对于n个物品和容量W,0-1背包的状态空间为2ⁿ,枚举不可行。动态规划时间复杂度O(nW),但W较大时仍不可行。
-
求解思路:
-
精确算法:动态规划(0-1背包、完全背包)、分支定界、整数规划。
-
近似与启发式:贪心法(适用于分数背包)、遗传算法(GA)、模拟退火(SA)、蚁群算法(ACO)、粒子群优化(PSO)、禁忌搜索(TabuSearch)、局部搜索等
-
-
实物建议:
-
对于容量较小或物品数量较少,优先用动态规划或分支定界求精确解
-
对于大规模实例,采用启发式或元启发式算法快速获得近似解
-
贪心法仅适用于分数背包(可分割物品),对0-1背包不一定最优
-
可结合问题结构(如物品价值密度排序)优化搜索过程
-
多维/多重背包可用分解、分区或并行搜索提升效率
-
装箱问题
-
描述:要把一组物品装入容量相同的箱子中,使每个箱子的装载不超过容量,同时最小化所用箱子数量(或在给定箱数下最大化装载利用率)
-
决策变量:每个物品分配到哪个箱子(物品到箱子的分配方案)
-
目标函数:所用箱子的数量最小化
-
约束:每个物品必须被分配到一个箱子;每个箱子的总装载量不超过其容量;通常假设物品不可拆分
-
复杂度:NP-难。对于n个物品和箱子容量C,状态空间极大,枚举不可行。最优解难以在多项式时间内获得
-
求解思路:
-
精确算法:分支定界、动态规划、整数规划、列生成(Column Generation)、割平面法。
-
近似与启发式:首次适应(First Fit)、最佳适应(Best Fit)、最差适应(Worst Fit)、递归分组(Next Fit)、贪心法、遗传算法(GA)、模拟退火(SA)、蚁群算法(ACO)、粒子群优化(PSO)、禁忌搜索(TabuSearch)、局部搜索等
-
-
实物建议:
-
先用贪心或启发式算法(如First Fit、Best Fit)快速获得可行初解
-
对于大规模实例,可采用分区、分层或并行搜索提升效率
-
对物品按体积降序排序可提升贪心算法效果(FFD、BFD)
-
精确算法适用于物品数量较少或对最优解要求较高的场景
-
可结合问题结构(如物品分组、箱子预分配)优化搜索过程
-