本章概要

本章介绍了优化问题的基本概念,以及常见的优化算法(随机搜索,爬山,模拟退火,遗传算法)。读完本章后,感觉茅塞顿开,之前一直认为遗传算法高深莫测,原来这些算法都是根据生物,物理的启发而来的,顿时亲切了许多。

什么是优化(Optimization

一个问题的解有一系列组合,在这些组合中找出最优的解的过程就是优化。最笨的方法,枚举出所有可能的结果,找出最优的解。但是,往往可能性太多,计算机根本上无法枚举出所有的解决方案。

成本函数(Cost Function)

最优的解决方案在成本函数中得到最大或最小值。成本函数是指导优化继续进行的根本。

优化算法

  • 随机搜索:计算一组随机的组合方案,在这个方案中找到最优秀解,比较盲目,有可能最优解并不在这个随机的解决方案中。
  • 爬山:个人理解就是贪心算法,找到相比于当前解决方案而言最优的相邻方案,如此往复,直到找不到更优的方案为止。显著的问题就是只能找到局部最优解,无法找到全局最优解。改进算法是当找到一个最优解后,随机开始另一组探寻,多尝试几次。这样,虽然可以找到全局最优解,但是不能保证每次都可以。
  • 模拟退火(Simulated Annealling):此方法受物理中锻造合金的启发,首先将合金加热到一个高的温度,然后慢慢冷却,在冷却过程中,可以找到low energy configuration。算法大体思想与爬山有点类似,首先随机选取一个相邻的解决方案,如果更优,那么选取,否则,不拒绝,也不选取,会通过一个概率计算到底是拒绝还是选取,开始时,此概率会比较大,温度比较高,但是每一次选举后,温度会降低,选择较差方案的概率会降低。当温度降到一定程度,过程结束。这个方法可以使得优化在开始时,允许出现非最优解,这样可以加大找到全局最优解的机会。
  • 遗传算法(Genetic Algorithm):遗传算法受到生物遗传的启发,主要思路是首先随机组合第一代解决方案,根据目标函数的结果排序,取出最优的一部分作为第二代(称之为精英),其他的全部淘汰掉(是不是很残忍),然后在在精英中通过突变或者杂交的方式,创建出第其他的方案,称之为第二代,然后对第二待排序,任然取出精英,如此往复,直到精英基本不变或者代数到达一定上限时结束。

优化算法的不足

上面提到的优化算法依赖一个事实,最优解通常与次优解较近,但是如果较远,如下图所示:

全局最优点在比较靠右的地方,但是由于最优点的两边是一些不好的点,所以根据上面的优化算法,找到全局最游解的概率不高。如果解空间无规律,那么可能随机搜索会比其他优化方案更好。

读书笔记《集体智慧编程》Chapter 5 : Optimization相关推荐

  1. 《集体智慧编程》读书笔记2

    最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...

  2. 《集体智慧编程》读书笔记10

    最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...

  3. 《集体智慧编程》读书笔记4

    最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...

  4. 《集体智慧编程》数学公式

    这篇博客的目的主要是为了记录这些公式,取自原书附录B. 1.欧几里得距离(Euclidean Distance) 用途:计算距离,衡量相似度 公式: 代码实现: def euclidean(p, q) ...

  5. 《集体智慧编程》——第一章导读

    为什么80%的码农都做不了架构师?>>>    什么是集体智慧 其含义是指:为了长早新的想法,而将一群人的行为.偏好或思想组合在一起. 完成这项工作的一种最为基础的方法,便是使用调查 ...

  6. 读书笔记——《Python编程从入门到实践》第二章

    读书笔记--<Python编程从入门到实践>第二章 读书笔记--<Python编程从入门到实践>第二章 变量 如何使用变量 如何规范变量命名 字符串 字符串是什么 如何修改字符 ...

  7. 《集体智慧编程》笔记(1 / 12):集体智慧导言

    文章目录 什么是集体智慧 什么是机器学习 机器学习的局限性 真实生活中的例子 学习型算法的其他用途 小结 Netflix, Google都适用了先进算法,将来自不同人群的数据加以组合,进而得出新的结论 ...

  8. 【读书笔记】并发编程需要注意的几个典型问题

    本文为<Computer Systems: A Programmer's Perspective>第12.7节-并发编程问题的读书笔记.下面开始正文. 1. 线程安全        一个线 ...

  9. 读书笔记:《编程之美》

    <编程之美>读书笔记 我所阅读的<编程之美>是由<编程之美>小组所编写,由电子工业出版社出版,出版时间为2018年11月.此书的由来是有关于微软的面试,后来被用来教 ...

  10. 【读书笔记】Python编程:从入门到实践-埃里克·马瑟斯,python基础体系巩固和常见场景练习

    [概述] 书名:Python编程:从入门到实践 作者:埃里克·马瑟斯 日期:2021年09月01日 读书用时:1632页,100小时,27个笔记 [读书笔记] ◆ 第4章 操作列表 >> ...

最新文章

  1. 【云计算】阿里云云计算专业认证考试
  2. 移动端IOS和androi及浏览器js判断[转载]
  3. AOE网上的关键路径
  4. 【解决方案】Windows10局域网内配置文件夹共享(附网络中没有找到的情况解决方案)
  5. vue.js组件学习(上)
  6. Netty(一) SpringBoot 整合长连接心跳机制
  7. JGroups:无需额外基础架构的领导人选举
  8. 论文阅读课2-Inter-sentence Relation Extraction with Document-level (GCNN,句间关系抽取,ACL2019
  9. 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结
  10. Cron 表达式一篇通
  11. 设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,
  12. 编译LTIB遇到的问题解决办法
  13. L7805CV-ASEMI三端稳压管L7805CV
  14. 数字波束形成 工程实现matlab 仿真,数字波束形成算法仿真实现
  15. 秀米的对话框格子可以变大吗_如何使用秀米进行排版(对外版)课件.ppt
  16. Python: scipy.signal.coherence的用法及代码示例
  17. wildcard java_java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
  18. 5-RNN-01_字符集RNN
  19. matlab求第二类曲面积分,第二型曲面积分的参数形式计算
  20. RNA-seq 详细教程:实验设计(2)

热门文章

  1. 如何发布GAE的应用(一)
  2. 机器学习算法分类总结
  3. 《C++ Primer 5th》笔记(9 / 19):顺序容器
  4. C++ primer第六章6.6函数匹配
  5. 中科大 计算机网络8 协议层次和服务模型
  6. cygwin/gcc与MinGW
  7. AVS 分像素运动估计优化算法
  8. VUE:解决 [Vue warn]: Error in render: “TypeError: item.slice is not a function“ (取部分数据)
  9. 石牌村中的美好 ...
  10. Servlet全面讲解