04 最优化方法

推荐书籍:

《最优化方法》 李元科

 

 
11332520-65dd2e5c398d441a.png
 

基本概念:

目标函数     无约束优化   约束优化 

 

 
11332520-227cee53290a2306.png
 

 

 
11332520-1934bf51d80d2419.png
 

 迭代下降法 

1)图解法:

 
11332520-3825b36f10939516.png
 

 

 
11332520-7aa631cd7e1f7a7e.png
 
 
11332520-49997983c306f8ca.png
 

 2)迭代下降法

 

 
11332520-dd6fe69cec2d38b6.png
 

 

 
11332520-9900421d8cc0c507.png
 

 

 

 

导数是函数在一个点上变化率的描述 。 偏导数是函数在一点沿坐标方向的变化率 ,方向导数是函数在一点沿任意方向的变化率 ,梯度则是函数在一个点上变化率最大的方向导数 。 函数在一个点上沿任意方向的方向导数等于函数在该点的梯度在该方向上的投影 。

 

方向导数:

 

 

 
11332520-6c59160c95ddce74.png
 

 梯度定义:

 
11332520-76acfb47eb8e158a.png
 

 

 
11332520-ce68131eb52ca273.png
 

无约束优化 : 

 

 
11332520-c98123904b5e5f8a.png
 

 

 
11332520-0f8c007c5f11764a.png
 

约束优化: 

 

 
11332520-55850352c23624e9.png
 

 

 
11332520-fc484785d3b51492.png
 

 

 
11332520-c9006614d6d82702.png
 

 

 

梯度下降法(看一阶导数):

 

 
11332520-5f27656e1f1c1ec6.png
 

 

 

 
11332520-5f65f4c6ca79f48d.png
 

牛顿法(二阶导数):

 

 
11332520-d6a80f3831a81a9a.png
 

 

 
11332520-f3f03a3d59f4fd60.png
 

 

 
11332520-46b70a8a93800769.png
 

 

 
11332520-bf9e5f3d53c49b5b.png
 

启发式算法:

遗传算法:模拟退火算法:蚁群算法:

模拟退火算法:

参看:
http://www.cnblogs.com/ranjiewen/p/6084052.html

 

from random import randint

def flip(segs, pos):

    return segs[:pos] + str(1-int(segs[pos])) + segs[pos+1:]

def flip_n(segs, n):

    for i in range(n):

        segs = flip(segs, randint(0, len(segs)-1))

    return segs

def anneal(text, segs, iterations, cooling_rate):

    temperature = float(len(segs))

    while temperature > 0.5:

        best_segs, best = segs, evaluate(text, segs)

        for i in range(iterations):

            guess = flip_n(segs, int(round(temperature,0)))

            score = evaluate(text, guess)

            if score < best:

                best, best_segs = score, guess

        score, segs = best, best_segs

        temperature = temperature / cooling_rate

        print(evaluate(text, segs), segment(text, segs))

    print()

    return segs

运行示例:

text = "doyouseethekittyseethedoggydoyoulikethekittylikethedoggy"

seg1 = "0000000000000001000000000010000000000000000100000000000"

anneal(text, seg1, 5000, 1.2)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值