专栏首页算法与编程之美深入理解遗传算法(一)

深入理解遗传算法(一)

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

首先来看一个线性方程组的求解问题。

已知N元一次方程y = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w6x6

其中给定 x1, …, x6的数据如下:

x1

x2

x3

x4

x5

x6

y

4

-2

7

5

11

1

44.1

将列表中的x1, …, x6代入到上述方程得到

y’ = 4w1 - 2w2 + 7w3 + 5w4 + 11w5 + w6

试求出一组w1,w2, …, w6使得y’的值尽可能的接近于y.

方案一

随机的给定一组w的值如下:

w1

w2

w3

w4

w5

w6

2.4

0.7

8

-2

5

1.1

计算 y’ = 4w1 - 2w2 + 7w3 + 5w4 + 11w5 + w6

= 110.3

y = 44.1

定义|y’ - y| 为预测值y’与真实值y之间的误差error,可以得到上面的误差为:

error = |y’ - y| = |110.3 - 44.1| = 66.2

方案二

接下来,再观察另外一组随机给定的w值。

w1

w2

w3

w4

w5

w6

-0.4

2.7

5

-1

7

0.1

计算 y’ = 4w1 - 2w2 + 7w3 + 5w4 + 11w5 + w6

= 100.1

error = | y’ - y| = |100.1 - 44.1| = 56

方案二的误差56比方案一的误差66.2要小,因此方案二的w取值更好。

思考

通过方案一和方案二的示例可以看出,给定任意的一组w值,期望y’的值越接近y则这组值越好,这就是评估w值的好坏的方法。

方案一和二都是通过随机的给定一组w值,接着计算y’的值,最后通过评估|y’ -y|的差值来判断当前选取的w值的好坏。如果按照这种方式继续进行下去,则不能保证每一次随机的取值都能更好的缩小误差,也许上一次选取的w值更好。

要想求的一组w值,使得y'无限接近于y,没有办法一次性就可以得到想要的结果,通常情况都需要经过多次的迭代,总是希望每一次迭代后的结果比上一次要好,即|y'-y|的值越来越小。这样经过多次迭代就可以慢慢的逼近y,进而求得最优的值。

如何达到上述目的,下一讲将介绍遗传算法的不一样的思路,敬请持续关注。

更多精彩文章:

算法|从阶乘计算看递归算法

算法|字符串匹配(查找)-KMP算法

JavaScript|脚本岂能随意放置

开发|优秀的Java工程师的“对象”一定不错

谈一谈|2019蓝桥杯回顾与分享

where2go 团队


微信号:算法与编程之美

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:gongsuochen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 前端|npm全局创建wps加载项

    基于vscode的方式创建wps加载项在获取类型之后,无法自动生成wps加载项,在网上查询相关问题内容也无果。不过Wps官方文档又更新了通过npm全局的方式创建...

    算法与编程之美
  • HTML|css选择器模型

    我们在做前端网页的时候需要简单的布局形式使网页变得美观好看。一些尺寸,颜色,背景等形式都可以通过CSS选择器模型来解决。往往布局网页形式的方法很多,但CSS选择...

    算法与编程之美
  • Java|写一个用迭代法解方程的Java程序

    迭代法也称辗转法,是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令...

    算法与编程之美
  • springboot 定制个性 banner

    使用spring boot 开发时,当程序启动的时候控制台会输出由字符组成的Spring符号。这个是SpringBoot为自己设计的Banner:

    似水的流年
  • SpringBoot基础之banner玩法解析

    SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的banner。看似简单的banner,我们能够对它做些什么呢?本篇文章就带...

    程序新视界
  • Android极速开发之发送短信

    实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员。

    Javen
  • 「Spring源码分析」Banner

    今天主要来分析 Spring banner 的加载流程,从获取内容和输出内容这两个角度进行分析

    花言不知梦
  • 链栈 原

    链栈就是栈结构的链表形式。其他的操作和数组表示栈一摸一样。 下面是具体的代码实现:

    青木
  • 快速学习-Eureka注册中心

    在刚才的案例中,user-service对外提供服务,需要对外暴露自己的地址。而consumer(调用者)需要记录服务提供者的地址。将来地址出现变更,还需要及时...

    cwl_java
  • django template实现定义临时变量,自定义赋值、自增实例

    {{value|add:-10}} value=5,则返回-5,这个比较好理解,减法就是加一个负数

    砸漏

扫码关注云+社区

领取腾讯云代金券