
1) 【一句话结论】泊位分配优化问题中,贪心算法适用于资源有限、需求简单的快速决策场景(如按船舶到达时间优先分配),遗传算法适用于多目标(时间、成本、安全)且约束复杂的长期优化场景(通过模拟进化寻找全局最优解)。
2) 【原理/概念讲解】泊位分配的核心是“资源(泊位)与需求(船舶)的匹配”,需平衡时间(停靠时长)、成本(使用费、装卸费)、安全(船舶类型匹配、安全距离)。
3) 【对比与适用场景】
| 算法类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 贪心算法 | 每次选择当前局部最优解,逐步构建最终解 | 简单、快速,时间复杂度低(如O(n log n)排序后选择) | 资源有限、需求单一(如仅考虑时间,泊位数量固定,船舶到达时间已知) | 可能陷入局部最优,无法保证全局最优 |
| 遗传算法 | 模拟生物进化,通过种群迭代优化,解决复杂多目标问题 | 需设置种群规模、交叉率、变异率等参数,迭代次数多 | 多目标(时间、成本、安全)、约束复杂(如船舶类型、泊位容量、安全距离) | 参数设置影响结果,计算成本较高 |
4) 【示例】(贪心算法伪代码):
输入:船舶列表 ships = [(到达时间, 停靠时长, 成本, 安全等级), ...],空闲泊位列表 free_docks = [泊位ID, ...]
输出:分配方案 assignments = []
步骤:
ships 按到达时间升序排序(sort by arrival_time)。ships:s,遍历 free_docks 中的泊位 d:d 是否满足船舶的安全等级(如船舶类型匹配,安全距离足够)。s 分配给 d,更新 d 的空闲时间(空闲时间 = 当前时间 + s.停靠时长),从 free_docks 移除 d,加入 assignments。free_docks 仍无匹配,标记船舶等待。def greedy_dock_allocation(ships, free_docks):
ships.sort(key=lambda s: s[0]) # 按到达时间排序
assignments = []
for ship in ships:
for dock in free_docks:
if is_safe(ship, dock): # 检查安全约束
dock.free_time = current_time + ship[1]
assignments.append((ship, dock))
free_docks.remove(dock)
break
return assignments
5) 【面试口播版答案】
“面试官您好,泊位分配优化问题通常用贪心算法解决简单场景,用遗传算法处理复杂多目标。比如,当泊位数量固定、船舶到达时间已知时,贪心算法按船舶到达时间排序,优先分配最早到达的船舶,每次选择当前空闲泊位中满足安全约束的最优解,快速完成分配。而遗传算法适合多目标(时间、成本、安全),通过模拟进化,用种群表示多种分配方案,通过选择、交叉、变异迭代,找到平衡时间、成本和安全的最优解。比如,假设有3个泊位,5艘船舶,按到达时间排序后,贪心算法会依次分配,可能优先考虑时间,而遗传算法会考虑成本和安全,通过多代优化,找到更优的分配方案。总结来说,贪心算法适合快速决策,遗传算法适合长期复杂优化。”
6) 【追问清单】
7) 【常见坑/雷区】