最优化原理与算法

实验内容:

用matlab编制一维搜索程序(黄金分割法(0.618法)和Fibonacci法为例子)来求解一维问题
(1)min⁡αϕ(α)=eα−5α(1)\quad\min_{\alpha}\quad\phi(\alpha)=e^\alpha-5\alpha (1)αmin​ϕ(α)=eα−5α

(2)min⁡αϕ(α)=α3−2α2+1(2)\quad\min_{\alpha}\quad\phi(\alpha)=\alpha^3-2\alpha^2+1 (2)αmin​ϕ(α)=α3−2α2+1

其中ϵ=0.001其中\epsilon=0.001 其中ϵ=0.001


此问题中,需要先找出两个一维问题的初始区间,下面用进退法求出两函数的初始区间。

进退法求搜索区间

1.算法思想:

(1)给定初始点,初始步长>0,置,计算,并置.

(2)令,计算,置.

(3)若,则转步骤(4);否则转步骤(5).

(4)令,转步骤(2).

(5)若,则转步骤(6);否则,转步骤(7).

(6)置转步骤(2).

(7)令,停止计算.

这样得到含有极小点的区间.

2.代码实现:

该进退法现以.m文件实现

search_field.m

%% 求搜索区间
%在这我们将步长α记为a,将点μ,μ1,μ2,μ3记为m,m1,m2,m3
%将函数值φ,φ1,φ2,φ3记为f,f1,f2,f3,将[b1,b2]记为最终的搜索空间
clear all;
clc;
a = 1;  m3 = 0;  f3 = ft1(m3);  k = 0; %其中ft1为第一个函数的.m文件
m = m3+a;  f = ft1(m);  k = k+1;
while f<f3m2 = m3;  f2 = f3;  m3 = m;  f3 = f;  a = 2*a;  k = k+1;m = m3+a;  f = ft1(m);   k = k+1;
endwhile k==1m2 = m;  f2 = f;  a=-1*a;m = m3+a;  f = ft1(m);     k = k+1;while m<m3m2 = m3;  f2 = f3;  m3 = m;  f3 = f;a = 2*a;  k = k+1;end
end
m1 = m2;  f1 = f2;  m2 = m3;  f2 = f3;  m3 = m;
f3 = f;
b1 = min(m1,m3)
b2 = max(m1,m3)

ft1.m

function y = ft1(x)y = exp(x)-5*x;

求第二问的搜索区间时,只需把search_field.m中的ft1改为ft2即可

ft2.m

function y = ft2(x)y = x^3-2*x^2+1;

search_field.m运行后得出ft1的结果为b1=0, b2=3

search_field.m运行后得出ft2的结果为b1=0, b2=3

即两函数的初始搜索区间都为[0,3].

求出初始搜索区间后,紧接着用黄金分割法Fibonacci法计算出最优解.


一、黄金分割法

1.算法思想:

(1) 置初始搜索区间[a,b],并置精度要求 ε ,并计算左右试探点
αl=a+(1−τ)(b−a)\alpha_l=a+(1-\tau)(b-a) αl​=a+(1−τ)(b−a)

αr=a+τ(b−a)\alpha_r=a+\tau(b-a) αr​=a+τ(b−a)

其中
τ=5−12,\tau=\frac{\sqrt{5}-1}{2}, τ=25​−1​,
及相应的函数值
ψl=ψ(αl),ψr=ψ(αr)\psi_l=\psi(\alpha_l),\quad\psi_r=\psi(\alpha_r) ψl​=ψ(αl​),ψr​=ψ(αr​)
(2)如果
ψl<ψr\psi_l<\psi_r ψl​<ψr​
则置
b=αr,αr=αl,ψr=ψlb=\alpha_r,\quad\alpha_r=\alpha_l,\quad\psi_r=\psi_l b=αr​,αr​=αl​,ψr​=ψl​
并计算
αl=a+(1−τ)(b−a),ψr=ψl\alpha_l=a+(1-\tau)(b-a),\quad\psi_r=\psi_l αl​=a+(1−τ)(b−a),ψr​=ψl​
否则,置
a=αl,αl=αr,ψl=ψra=\alpha_l,\quad\alpha_l=\alpha_r,\quad\psi_l=\psi_r a=αl​,αl​=αr​,ψl​=ψr​
并计算
αr=a+τ(b−a),ψr=ψ(αr)\alpha_r=a+\tau(b-a),\quad\psi_r=\psi(\alpha_r) αr​=a+τ(b−a),ψr​=ψ(αr​)
(3)如果
∣b−a∣≤ϵ|b-a|\leq\epsilon ∣b−a∣≤ϵ
停止计算,极小点含于[a,b];否则转步骤(2).

(4)计算极小点
x=a+b2,ψ(x)x=\frac{a+b}{2} ,\quad\psi(x) x=2a+b​,ψ(x)

2.代码实现:

黄金分割法不以.m文件实现


一维问题(1)的求解:
clc;
clear;
a=0;b=3;  %初始区间
f = @(x)exp(x)-5*x;       %创建题目要求的匿名函数,方便使用
eps = 0.001;   %区间精度
r = 0.618;     %黄金分割数
while((b-a)>=eps)x1 = a+(1-r)*(b-a);x2 = a+r*(b-a);     %黄金分割主要步骤if f(x1)<f(x2)      %两种情形的判断b = x2;x2 = x1;x1 = a+(1-r)*(b-a);elsea = x1;x1 = x2;x2 = a+r*(b-a);end
end
x = (a+b)/2;  %得到满足条件的最优解
disp(['最优解: x = ',num2str(x)]);
disp(['此时: f(x) = ',num2str(f(x))]);  %使用disp函数和num2str()进行输出
一维问题(2)的求解:
clc;
clear;
a=0;b=3;  %初始区间
f = @(x)x^3-2*x^2+1; %创建题目要求的匿名函数,方便使用
eps = 0.001;   %区间精度
r = 0.618;     %黄金分割数
while((b-a)>=eps)x1 = a+(1-r)*(b-a);x2 = a+r*(b-a);     %黄金分割主要步骤if f(x1)<f(x2)      %两种情形的判断b = x2;x2 = x1;x1 = a+(1-r)*(b-a);elsea = x1;x1 = x2;x2 = a+r*(b-a);end
end
x = (a+b)/2;  %得到满足条件的最优解
disp(['最优解: x = ',num2str(x)]);
disp(['此时: f(x) = ',num2str(f(x))]);  %使用disp函数和num2str()进行输出

3.运行结果:


运行的结果为:


运行的结果为:


二、Fibonacci法

1.算法思想:

(1)给定初始区间[a,b]和最终区间长度.求计算函数值的次数,使置辨别常数,计算试探点

及相应的函数值

(2)置.

(3)如果,则置

,则计算

否则计算

(4)如果,置

,则计算

否则计算

(5)若,停止计算

极小点含于[a,b]内,否则转步骤(2).

(6)计算极小点
x=a+b2,ψ(x)x=\frac{a+b}{2} ,\quad\psi(x) x=2a+b​,ψ(x)

2.代码实现:

Fibonacci法现以.m文件的形式实现

定义fibonacci.m文件

function [x_opt,f_opt,stepNum]=Fibonacci(f,a,b,ferror)
Fn=(b-a)/ferror;
x = [];
x(1) = 1;
x(2) = 1;
i = 1;
while x(i)<Fnx(i+2) = x(i)+x(i+1);i = i+1;
endN = i;
al = x(N-2)/x(N)*(b-a)+a;
ar = x(N-1)/x(N)*(b-a)+a;for i = 1:N-3f1 = feval(f,al);f2 = feval(f,ar);
if f1>f2a = al;f1 = f2;al = ar;ar = a+x(N-i-1)/x(N-i)*(b-a);
elseb = ar;ar = al;f2 = f1;al = a+x(N-i-2)/x(N-i)*(b-a);
end
stepNum = i;
end
x_opt = (a+b)/2;
f_opt = feval(f,x_opt);
stepNum = stepNum + 1;

定义f1.m文件

clear all;clc;
f=@(x)exp(x)-5*x;
a=0;
b=3;
ferror=0.001;
[x_opt,f_opt,stepNum]=Fibonacci(f,a,b,ferror);x_opt
f_opt
stepNum

定义f2.m文件

clear all;clc;
f=@(x) x^3-2*x^2+1;
a=0;
b=3;
ferror=0.001;
[x_opt,f_opt,stepNum]=Fibonacci(f,a,b,ferror);x_opt
f_opt
stepNum

3.运行结果:


运行f1.m文件后的结果为:


运行f2.m文件后的结果为:


黄金分割法与Fibonacci法相关推荐

  1. 【最优化】黄金分割法与Fibonacci法

    (1)黄金分割法(0.618法) 基本思想:      它通过对试探点的函数值进行比较,使得包含极小点的区间不断缩短,当区间长度小到精度范围之内时,可以粗略地认为区间上各点的函数值均接近于极小值. 算 ...

  2. 【最优化】C++实现0.618法、Fibonacci法、二分法

    参考课本:最优化方法 - 孙文瑜等 根据课本P110算法3.2.1(0.618法计算步骤)编写C++代码,例题为P137第4题(1)(2) 0.618法代码 #include <iostream ...

  3. Fibonacci法的matlab实现

    推导过程看百度文库中的ppt Fibonacci法的基本步骤: 测试程序:try_FibonacciOpt.m clear all;clc %% the original conditions f=@ ...

  4. 黄金分割点c的坐标c语言,黄金分割法与进退法的C语言程序

    <黄金分割法与进退法的C语言程序>由会员分享,可在线阅读,更多相关<黄金分割法与进退法的C语言程序(5页珍藏版)>请在人人文库网上搜索. 1.基本思想:对f(x)任选一个初始点 ...

  5. 参数寻优问题详细解析

    参数寻优 参数寻优背景 参数寻优问题随处可见,举几个例子.  1. 小明假期结束回校,可以坐火车,可以坐汽车,可以坐飞机,还可以走着,小明从哪条路去学校更好呢?  2. 简单的数学,一元二次方程求根. ...

  6. matlab无约束最优化的一般算法流程图及代码(进退法,Fibonacci,黄金分割法,抛物线法)

    本实验中函数用单独function计算 %函数[fx]=f(x) function fx=f(x) fx=x.^4-4*x.^3-6*x.^2-16*x+4; 一,进退法,Fibonacci,黄金分割 ...

  7. c语言精确线搜索抛物线法,一维迭代搜索(黄金分割法抛物线法).ppt

    一维迭代搜索(黄金分割法抛物线法) 作业 P127页 3-15:3-17:3-19. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...

  8. 用等步长分割法(Equal Interval Search Method)求函数最大值的Python程序

    一维搜索方法:一维搜索,又称一维优化,是指求解一维目标函数 f(X) 最优解的过程,分为试探法和插值法.一维搜索最优化是优化方法中最简单.最基本的方法. 常用的方法有:等步长分割法.黄金分割法(0.1 ...

  9. 用黄金分割法(Golden Section Search Method)求函数最大值的python程序

    一维搜索方法:一维搜索,又称一维优化,是指求解一维目标函数 f(X) 最优解的过程,分为试探法和插值法.一维搜索最优化是优化方法中最简单.最基本的方法. 常用的方法有:等步长分割法.黄金分割法(0.1 ...

  10. 精确一维搜索——黄金分割法(0.618)

    文章内容摘自UESTC最优化张老师的PPT 代码:https://github.com/LHesperus/optimization-algorithm/tree/master/unconstrain ...

最新文章

  1. UVA 307 Sticks
  2. MapReduce-Reduce端join操作-步骤分析
  3. jquery 获取id最大的元素_超全整理!JQuery中的选择器集合
  4. Angular Universal 官网翻译
  5. Character中的奇葩
  6. php+如何按文字分割文件夹,PHP实现的大文件切割与合并功能示例
  7. [js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
  8. python实现组合问题_python3 最基本且简单的实现组合设计模式
  9. Java提高篇 —— Java关键字之static的四种用法
  10. Elasticsearch aggregations API
  11. [C++] map 迭代器 查找
  12. 为什么要学习 Spring Boot?
  13. getAttribute 与getParmeter 区别
  14. linux 运行级别,linux执行流程 /etc/rc.d/init.d目录理解
  15. ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memor
  16. MASM5.0下载安装与运行第一个HelloWorld
  17. Canvas API
  18. 硅钢片铁芯、坡莫合金、非晶及纳米晶软磁合金
  19. [Android 4.4.3] 泛泰A870 Mokee4.4.3 20140610 RC2.0 通过刷第三版 by syhost
  20. QQ空间认证之数据篇

热门文章

  1. 论如何做好IE和Chrome互殴时的一条好池鱼之事件绑定篇
  2. 计算机无法同步,在win7中,为什么电脑时间不能同步?
  3. 可能有用的篡改检测常识
  4. 华三交换机ping不通用户但用户_华三交换机ping不通路由器
  5. 单细胞测序在免疫治疗研究中的应用
  6. 【字符串】字符串的boder和其性质、应用
  7. linux误删除文件恢复
  8. Oracle误删除dbf文件和表空间恢复
  9. 微信最新版下载 8.0.6
  10. Linux - 用户与组-useradd-userdel-usermod-passwd