惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
博客园 - 司徒正美
博客园 - 叶小钗
T
Tailwind CSS Blog
博客园 - Franky
V
V2EX
有赞技术团队
有赞技术团队
美团技术团队
雷峰网
雷峰网
爱范儿
爱范儿
Jina AI
Jina AI
D
DataBreaches.Net
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - WUST许志伟

进化算法一定比局部搜索更强吗?MOEA和Pareto 局部搜索在多目标组合优化问题上的实验分析GECCO2024 从“找最短路”到运输系统智能:IEEE T-ITS 近五年车辆路径问题研究图景 大模型为何在陌生表达上失守?从TEVC论文EvoJail理解长尾安全漏洞 从并行进化到分布式进化计算读 A Survey on Distributed Evolutionary Computation 从“两阶段”到“距离单目标”:VRPTW 真的“换目标”了吗? 课题组学习南京大学陈贵海教授“自演进异构融合的边缘智能计算”的专题学术报告 课题组学习北京大学许进教授“求解NP完全问题专用机——探针计算机”的专题学术报告 课题组参加中国仿真学会资源规划仿真与决策专业委员会成立大会 江西财经大学段琦琦博士来演化计算与人工智能课题组开展学术交流与访问 【CFP】IEEE iCaMaL 2026 Special Session “AI-Driven Systems for Next-Generation Industrial Automation” 本课题组举办学术交流活动:安徽大学田野教授作专题报告 Gary Yen教授在BICTA2025做主旨汇报并访问本课题组 【倒计时10天】第20届国际生物启发式计算:理论与应用会议(BIC-TA 2025)将于2025年11月7-9日在武汉召开! Ishibuchi教授与Lie Meng Pang博士受邀于本课题组开展学术交流与指导 武汉科技大学人工智能与演化计算实验室许志伟课题组参加IEEE CEC 2025 武汉科技大学人工智能与演化计算实验室许志伟课题组参加第八届智能优化与调度学术会议 武汉科技大学人工智能与演化计算实验室许志伟课题组参加2025中国膜计算论坛 论文研读-ClusteringGA研读与实现 论文研读-元启发式算法的平移、缩放和旋转不变变异算子的设计原则 连续邮资问题-分支限界法求解 TSP问题-分支限界法求解 最大团问题-分支限界法求解 背包问题-分支限界法求解 回溯法解决图着色问题 回溯法求解简单组合优化问题 以简单组合优化为例讨论计算复杂性 基于MOA*的多目标路径规划问题之我见 一种单目标A*算法设计与实现
从组合优化问题建模到贪心法求解以简单调度为例
WUST许志伟 · 2024-10-18 · via 博客园 - WUST许志伟

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报
所用教材:北京大学屈婉玲教授《算法设计与分析》
课程资料:https://www.icourse163.org/course/PKU-1002525003
承诺不用于任何商业用途,仅用于学术交流和分享

1. 简单调度问题(1.2)

  • 问题描述: 有n项任务,每项任务加工时间已知. 从0时刻开始陆续安排到一台机器上加工. 每个任务的完成时间是从0时刻到任务加工截止的时间.
  • 求: 总完成时间(所有任务完成时间之和)最短的安排方案.

实例

  • 假定有一个实例:
    任务集 \(S=\{1,2,3,4,5\}\),
    加工时间: \(t_1=3, t_2=8, t_3=5, t_4=10, t_5=15\)

贪心法解法

  • 此时我们可以按照贪心法进行求解,即将加工任务按照加工时间从小到大进行排序,则加工时间少的任务会被多次重复计算而加工时间多的任务重复计算次数少。可以得到:
    贪心法解法

问题建模

  • 输入: 任务集: \(S=\{1,2, \ldots, n\}\), 第 \(\boldsymbol{j}\) 项任务加工时间: \(\boldsymbol{t}_{\boldsymbol{j}} \in \mathbf{Z}^{+}, \boldsymbol{j}=\mathbf{1 , 2 , \ldots , n}\).

  • 输出:调度 \(I, S\) 的排列 \(i_1, i_2, \ldots, i_n\)

  • 目标函数: \(I\) 的完成时间, \(t(I)=\sum_{k=1}^n(n-k+1) t_{i_k}\)

  • 最优解 \(I^*\) : 使得 \(t\left(I^*\right)\) 达到最小, 即 \(\boldsymbol{t}\left(\boldsymbol{I}^*\right)=\min \{\boldsymbol{t}(\boldsymbol{I}) \mid \boldsymbol{I}\)\(\boldsymbol{S}\) 的排列 \(\}\)

  • 描述:对于n个任务的任务集中的每个任务j,其加工时间是一个正整数,用\(\boldsymbol{t}_{\boldsymbol{j}}\)表示,输出是一个调度I,其表示任务一个排列顺序。目标函数则是调度I的完成时间。最优解就是使得目标函数t(I)达到最小的任务排列,此处记作\(I^*\)

贪心法求解简单调度

  • 设计策略:加工时间短的先做
  • 算法:根据加工时间从小到大排序,依次加工
  • 算法正确性:对所有输入实例都得到最优解
  • 证明:加入调度f, 第i,j项任务相邻且有逆序(即加工时间长的任务排在加工时间短的任务之前), 即\(t_i>t_j\)。交换任务i和j得调度g.
  • 总完成时间 \(t(g)-t(f)=t_j-t_i<0\)
  • 所以通过这个式子说明,我们减少了一个逆序以后,它的加工时间是总的时间是减少了。当调度I没有逆序出现时,因此它在总的加工时间中达到最小的,它是个最优解。

反例

  • 当然,贪心法不能求解所有问题,往往不是正确的。
  • 例如,在如下背包问题中:
    背包问题反例
  • 假设我们使用贪心法,使用单位重量下的物品价值进行评价,则有 单位重量价值大的优先, 总重不超 6按照 \(\frac{\boldsymbol{v}_i}{\boldsymbol{w}_i}\) 从大到小排序: \(1,2,3,4\)

\[\frac{7}{3} > \frac{9}{4}>\frac{9}{5}>\frac{2}{2} \]

  • 通过贪心法,我们得到的解是物品{1,4},重量是2+3=5,价值是7+2=9。然而,我们可以找到一个更好的解物品{2,4},重量是4+2=6,价值是9+2=11。因此,简单使用贪心法不能求解所有组合优化问题。

2. 简单投资问题(1.2)

  • 问题: \(m\) 元钱, 投资 \(n\) 个项目. 效益函数 \(f_i(x)\),表示第 \(i\) 个项目投 \(x\) 元的效益, \(i=1,2, \ldots, n\).求如何分配每个项目的钱数使得总效益最大?

实例:

简单投资问题

问题建模

  • 输入:\(n, m, f_i(x), i=1,2, \ldots, n, x=1,2, \ldots, m\) n 项目数,m钱数,\(f_i(x)\)表示效益函数。
  • 解: \(n\) 维向量 \(<x_1, x_2, \ldots, x_n>, x_i\) 是第 \(i\) 个项目的钱数, 使得下述条件满足:
  • 目标函数:$ \max \sum_{i=1}^n f_i\left(x_i\right) $
  • 约束条件:$ \sum_{i=1}^n x_i=m, \quad x_i \in \mathbf{N} $

小结

优化问题求解的关键

  • 建模: 对输入参数和解给出形式化或半形式化的描述
  • 设计算法: 采用什么算法设计技术
  • 正确性: 是否对所有的实例都得到正确的解
  • 分析算法一一效率