最优化算法-黄金分割搜索

参考《 Edwin》最优化导论第四版,7.2章节,算法采用go语言实现

/*****************************************
 * FileName  : golden_section_search.go
 * Author    : fredric
 * Date      : 2017.09.01
 * Note      : 黄金分割算法
 * History   :
*****************************************/
package search 

import(
    "fmt"
)

const(
    GOLDEN_SECTION_VALUE = 0.382
)

/*
* 黄金分割法的用途在于求救一元函数的极值,前提要求该函数在区间内有唯一极值,即单峰
* 取作用域[a0,b0]
* 每次迭代取[a1, b1],其中a1 - a0 = b0 - b1 = p*(b0 - a0)
* 通过判断如果
* : f(b1) > f(a1) ---> 则极值在区间a0 ~ b1之间
* : f(b1) < f(a1) ---> 则极值在区间a1 ~ b0之间
* 迭代继续,直至满足循环条件
* 通过计算可得p = 0.382
*/
func DoGoldenSectionSearch(){

    //假设方程为法f(x) = (x -1)*(x-1),区间为0 ~ 2
    a0 := 0.0
    b0 := 2.0

    delta := 0.02
    count := 0

    a1 := 0.0
    b1 := 2.0

    for b1 - a1 > delta {

        count++

        a1 = a0 + GOLDEN_SECTION_VALUE * (b0 - a0)
        b1 = a0 + (1 - GOLDEN_SECTION_VALUE) * (b0 - a0)

        f_a1 := (a1 - 1) * (a1 - 1)
        f_b1 := (b1 - 1) * (b1 - 1)

        if f_b1 > f_a1 {

            b0 = b1

        }else{

            a0 = a1
        }
    }

    fmt.Printf("a1 = %f, b1 = %f count=%d", a1, b1, count)

}
时间: 2024-10-10 21:20:59

最优化算法-黄金分割搜索的相关文章

最大熵学习笔记(五)最优化算法

  生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Principle).本文为一则读书笔记,将对最大熵原理以及由此导出的最大熵模型进行介绍,重点给出其中所涉及数学公式的理解和详细推导. 相关链接 最大熵学习笔记(零)目录和引言 最大熵学习笔记(一)预备知识 最大熵学习笔记(二)最大熵原理 最大熵学习笔记(三)最大熵模型 最大熵学习笔记(四)模型求解 最大熵学习笔

序列最小最优化算法(SMO)-SVM的求解(续)

在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SMO): 首先回顾一下.我们使用广义拉格朗日函数,将目标函数和限制条件写到一起,然后证明了原始问题能够转化成对偶问题来求解.并且使用KKT条件将对偶问题化简,得到下面的问题(以非线性可分SVM的研究问题作为例子,求解): $\max \limits_{a} \ -\frac{1}{2}\sum_{i=

最优化算法学习

最新学习了最优化相关的一些知识,为便于记忆,整理成最优化相关的http://系列,初学者,难免很多地方的理解有偏差,望指正 1. 最优化第一讲--概念 2. 一维搜索算法 最优化第二讲-一维搜索算法(二分法.等区间法) 最优化第二讲--一维搜索法(斐波那契法和java实现) 最优化第二讲--一维搜索法(黄金分割法和java实现) 最优化第二讲--一维搜索法(牛顿法) 3. 无约束的梯度技术 最优化第三讲--无约束的梯度技术 最优化算法学习

最优化算法&mdash;&mdash;常见优化算法分类及总结

之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称. 工程设计中最优化问题(optimalization problem)的一般提法是要选择一组参数(变量),在满足一系列有关的限制条件(约束)下,使设计

最优化算法-割线法

割线法获取极值,参考Edwin<最优化导论>第四版 7.6章节,算法采用go语言实现. /***************************************** * FileName : cut_search.go * Author : fredric * Date : 2017.09.01 * Note : 割线法算法 * History : *****************************************/ package search import( &qu

最优化算法-斐波那契数列搜索

斐波那契数列搜索,参考Edwin<最优化导论>第四版7.3章节,算法采用go语言实现. /***************************************** * FileName : fibonacci_search.go * Author : fredric * Date : 2017.09.01 * Note : 斐波那契数列搜索算法 * History : *****************************************/ package search

最优化算法-梯度下降

梯度下降算法,参考Edwin<最优化导论>8.2章节,算法采用go语言实现. 此处算法仍然存在疑惑,主要是获取梯度下降时如何确定步长,即使采用割线法获取最优步长,那么割线法的初始值又如何确定?? 下面程序中虽然采用了牛顿法获取极值,但非常依赖初始取值范围!! /***************************************** * FileName : grad.go * Author : fredric * Date : 2017.09.01 * Note : 梯度算法 *

机器学习常见的最优化算法

1. 梯度下降法(Gradient Descent) 梯度下降法是最早最简单,也是最为常用的最优化方法.梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解.一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的.梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“.最速下降法越接近目标值,步长越小,前进越慢. 在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法

机器学习中常见的最优化算法

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称.随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优