当前位置:网站首页>最优化方法——0.618法matlab实现
最优化方法——0.618法matlab实现
2022-08-09 03:01:00 【泡泡怡】
一、基本思想
0.618法的基本思想是通过取试探点和进行函数值的比较,使包含极小点的搜索区间不断缩短,当区间长度缩短到一定程度时,区间上各点的函数值均接近极小值,从而各点可以看作为极小点的近似。
二、代码实现
1.问题的提出:
求函数y=(x-203)^2-3的最优解。
2.代码
(1)先用进退法确定函数值极小值点所在区间
clear;clc;
%给初始条件
%自变量向量
x(1)=4461;
%函数值向量
y(1)=(x(1)-203)^2-3;
%步长向量
h(1)=0.5;
%步长放大因子
t=1;
%进行搜索
%自变量迭代
x(2)=x(1)+h(1);
%函数值迭代(
y(2)=(x(2)-203)^2-3;
(2)比较函数值判定继续前进还是反向搜索
if y(2)>y(1)
a0=x(2);
b0=y(2);
x(2)=x(1);
y(2)=y(1);
x(1)=a0;
y(1)=b0;
h(1)=-h(1);
end
(3)进一步搜索
k=2;
while y(k)<=y(k-1)
h(k)=t*h(k-1);
x(k+1)=x(k)+h(k);
y(k+1)=(x(k+1)-203)^2-3;
x0=x(k-1);
y0=y(k-1);
k=k+1;
end
%输出结果
a=min(x0,x(k))
b=max(x0,x(k))
(4)然后用0.618法确定极小值点和极小值
%给出判定迭代停止条件
e=10^-3;
%构造端点向量
a(1)=a;
b(1)=b;
c(1)=a(1)+0.382*(b(1)-a(1));
d(1)=a(1)+0.618*(b(1)-a(1));
%给出迭代指针
kk=1;
%计算插值点对应的数值项
p_1(1)=(c(1)-203)^2-3;
p_r(1)=(d(1)-203)^2-3;
%构造迭代,缩小区间
while (b(kk)-a(kk))>e
if p_1(kk)<p_r(kk)
kk=kk+1;
a(kk)=a(kk-1);
b(kk)=d(kk-1);
d(kk)=c(kk-1);
p_r(kk)=p_1(kk-1);
c(kk)=a(kk)+0.382*(b(kk)-a(kk));
p_1(kk)=(c(kk)-203)^2-3;
end
if p_1(kk)>=p_r(kk)
kk=kk+1;
a(kk)=c(kk-1);
b(kk)=b(kk-1);
c(kk)=d(kk-1);
p_1(kk)=p_r(kk-1);
d(kk)=a(kk)+0.618*(b(kk)-a(kk));
p_r(kk)=(d(kk)-203)^2-3;
end
end
alpha=(c(kk)+d(kk))/2
f_min=(p_r(kk-1)+p_1(kk-1))/2
调参过程:先令h1=0.5,t=4,得到alpha =202.9950 f_min = -2.9999再令h1=0.5,t=1, alpha =203,f_min=-3这个时候就已经十分接近了;但是会发现你只有让步长因子尽可能大的时候我们线性搜索的速度会加快。速度还是很重要滴!!
边栏推荐
猜你喜欢
随机推荐
2027年加密市场将会发生什么?思维的跨越?长期预测无法脱离形势变化
Building PO layered architecture of automated testing framework from 0
如何实现canal数据同步
C专家编程 第9章 再论数组 9.6 C语言的多维数组
【洛谷】P1456 Monkey King
用DFS解决最终幻想13-2时钟谜题
7月更新速递 | 产品实验室N+1,EasyV For Unreal上线!
flatMap() :对每个元素执行映射函数并将结果展平
win10上运行emwin
【扫雷--2】
Matlab实现异构交通流
数学基础(四)极大似然估计、误差的高斯分布与最小二乘估计的等价性
Solve the Final Fantasy 13-2 Clock Puzzle with DFS
Redis中SDS简单动态字符串
C专家编程 第10章 再论指针 10.1 多维数组的内存布局
dice和iou
【剑指offer】二进制中1的个数&&2的幂
《独行月球》:独孤月的两次选择,让一个“中间人”成为大英雄
i18n 国际化
sql语句实现按顺序排序而不是拼音首字母排序









