最优化算法-斐波那契数列搜索
斐波那契数列搜索,参考Edwin《最优化导论》第四版7.3章节,算法采用go语言实现。
/****************************************** FileName : fibonacci_search.go* Author : fredric* Date : 2017.09.01* Note : 斐波那契数列搜索算法* History : *****************************************/ package search import("fmt" )func _get_fibonacci(i int) int{if i == 1 {return 1}else if i == 2{return 2}else{return _get_fibonacci(i - 1) + _get_fibonacci(i - 2)} }func _test_func(x float64) float64 {return x*x*x*x - 14*x*x*x + 60*x*x - 70*x }func _test_func_01(x float64) float64 {return (x - 1) * (x - 1) }/* * 基于黄金分割的思路对分割的比例系数p进行优化 * p采用斐波那契数列,即 * p1 = 1 - FN/FN+1 * p2 = 1 - FN-1/FN * ... * PN = 1 - F1/F2 * 总的压缩比:p1*p2*..pN = 1/FN+1 * 因此 F N+1 需要能够满足压缩比 */ func DoFibonnaciSearch(){fmt.Println("DoFibonnaciSearch")//最小区间为0.2//此时需要斐波那契的压缩比 1 + 2e/F N + 1 <= 最小区间长度/初始长度//取e是一个很小的整数,如0.05//则N等于第五次迭代可以满足要求a0 := 0.0b0 := 2.0p := 0.0delta := 0.05 //最后一次增加一个小整数做偏移for i := 5; i >=1; i-- {if i != 1 {fmt.Printf("a0 = %f, b0 = %f \n", a0, b0)//获取斐波那契数列p1 := _get_fibonacci(i)p0 := _get_fibonacci(i - 1)p = 1 - float64(p0)/float64(p1)a1 := a0 + p * (b0 - a0)b1 := a0 + (1 - p) * (b0 - a0)f_a1 := _test_func_01(a1)f_b1 := _test_func_01(b1)if f_b1 > f_a1 {b0 = b1}else{a0 = a1}fmt.Printf("a1 = %f, b1 = %f f_a1 = %f, f_b1 = %f p = %f\n", a1, b1, f_a1, f_b1, p)}else{a1 := a0 + (1/2 - delta) * (b0 - a0)b1 := a0 + (1/2 - delta) * (b0 - a0)f_a1 := (a1 - 1) * (a1 - 1)f_b1 := (b1 - 1) * (b1 - 1)if f_b1 > f_a1 {b0 = b1}else{a0 = a1}}}//for i := 5; i >=1; i-- {fmt.Printf("a0 = %f, b0 = %f", a0, b0) }
转载于:https://www.cnblogs.com/Fredric-2013/p/7531603.html
最优化算法-斐波那契数列搜索相关推荐
- Java数据结构与算法---斐波那契数列Fibonacci
Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...
- 427-动态规划算法-斐波那契数列
动态规划算法求解斐波那契数列 状态:dp数组,存储已经求解的子问题的最优解 递归版本的动态规划算法 //参数n表示斐波那契数列中数字的个数. //返回相应个数的斐波那契数列数字的值. int fabn ...
- 趣学算法--斐波那契数列
14天阅读挑战赛 努力是为了不平庸~ 目录 1.神奇的兔子数列 1.1问题分析 1.2斐波那契数列 1.3算法设计 1.3.1递归代码 1.3.2递归的改进,O(n)的代码 1.3.3时间复杂度为O( ...
- 经典算法——斐波那契数列
斐波那契数列的经典解法是采用递归的方式: f(n)=f(n-1)+f(n-2) n>2 f(1)=1 n=1 f(2)=1 n=2 按照这个思路可以写出递归算法: #in ...
- 算法-斐波那契数列:兔子序列
利用递归函数求斐波那契数列(兔子序列) 1.1.2.3.5.8.13.21-求第n个数是几,n任意一个数大家可以自定义,比如10,20等 分析: 从给出的数列中,可知, n=1时→1 n=2时→1 n ...
- C语言中经典算法——斐波那契数列的几种算法
斐波那契数列的递推公式: 我们尝试计算斐波那契数列的第n项并输出. 1.递归法 #include<stdio.h> int fib(int m) {if(m>=3){return f ...
- 算法—斐波拉契数列(跳楼梯问题)
问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题一看,就会轻易的知道用递归,f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2 ...
- 算法-斐波那契数列(黄金分割数列|兔子数列)
前言 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列 ...
- 算法 - 斐波那契数列问题(转自微信公众号码农翻身)
注:转自微信公众号漫画:什么是动态规划? 问题描述: 算法:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.要求用程序来求出一共有多少种走法. 解析:如果只差最后一步就能走 ...
最新文章
- U3D架构系列之- FSM有限状态机设计五
- 【转】NSMutableArray的正确使用
- redis的源码编译安装+发布订阅+RDB持久化
- magento 1.9 用户无法登录 magento 1.9 customer can not login
- 关于服务发现和负载均衡,你想知道的都在这儿
- 模型驱动架构探索之游戏引擎设计 (二)粒度统一
- RHEL6入门系列之三十一,管理计划任务
- Linux修改SSH端口号
- 12款响应式 Lightbox(灯箱)效果插件
- Swift 编程语言教程(官方文档)
- 移动硬盘提示磁盘结构损坏且无法读取怎么办
- 2008年全国337个地级市GDP排名
- 简单理解hibernate懒加载
- 安卓模拟器右边的虚拟键盘消失了,怎样调出来
- 马上2023年了,《北上广深杭》有哪些值得加入的软件测试大厂公司呢?花了三天三夜整理出各大互联网公司
- GALAXY S8+ SM-G955N 韩版改G955F双卡多国系统G955NKSU3CRI3 dual sim card
- micropython开发板pcb_STM32F405RGT6核心板兼MicroPython开发板的电路方案设计(原理图+完整工程)...
- 神经网络算法计算过程推导
- vs2010打开vs2017的.sln文件
- hive内嵌时间日期函数:所有关于时间日期的函数