最优化理论笔记及期末复习(《数值最优化》——高立)

news2024/9/21 0:30:36

目录

  • 一、预备知识
  • 二、无约束最优化方法的基本结构
  • 三、凸集和凸函数
  • 四、负梯度方法和Newton型方法
  • 五、共轭梯度法
  • 六、约束最优化问题的最优性理论
  • 七、罚函数方法
  • 八、期末复习
    • 8.1 知识点复习
    • 8.2 习题复习
    • 8.3 大实验代码
      • 8.3.1实验内容
      • 8.3.2实验目的
      • 8.3.3算法描述
      • 8.3.4程序中的参数设置、终止准则、关键技术(语句)等说明
        • 8.3.5实验代码
          • 8.3.5.1 目标函数
          • 8.3.5.2 计算梯度
          • 8.3.5.3 Armijo准则更新步长
          • 8.3.5.4最速下降法
          • 8.3.5.5 BFGS法
          • 8.3.5.6 FR共轭梯度法
          • 8.3.5.7 主程序
  • 九、总结

一、预备知识

请添加图片描述
请添加图片描述
请添加图片描述

二、无约束最优化方法的基本结构

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

三、凸集和凸函数

请添加图片描述

四、负梯度方法和Newton型方法

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、共轭梯度法

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

六、约束最优化问题的最优性理论

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

七、罚函数方法

请添加图片描述
请添加图片描述

八、期末复习

8.1 知识点复习

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

8.2 习题复习

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

8.3 大实验代码

8.3.1实验内容

利用Matlab编程,实现采用简单Armijo非精确线搜索求步长的三种方法:负梯度法、BFGS法及FR共轭梯度法,并求解如下无约束优化问题:
m i n f ( x ) = 10 ( x 1 3 − x 2 ) 2 + ( x 1 − 1 ) 2 min f(x) =10(x_1^3-x_2)^2+(x_1-1)^2 minf(x)=10(x13x2)2+(x11)2
通过实验过程进一步理解三种方法的原理和步骤,并对实验结果进行分析比较。

8.3.2实验目的

掌握无约束最优化算法的基本架构,并能熟练使用Matlab软件实现一些基本实用的算法并进行数值试验分析。

8.3.3算法描述

请添加图片描述
请添加图片描述

8.3.4程序中的参数设置、终止准则、关键技术(语句)等说明

请添加图片描述
请添加图片描述

8.3.5实验代码

8.3.5.1 目标函数
%%计算函数值
function f=func(X)
f=10.*(X(1).^3-X(2)).^2+(X(1)-1).^2;
end
8.3.5.2 计算梯度
%计算梯度值
function g=grd(X)
%计算梯度表达式
% syms x1 x2;
% f=10*(x1^3-x2)^2+(x1-1)^2;
% diff(f,x1)
% diff(f,x2)
% ans = 2*x1 - 60*x1^2*(- x1^3 + x2) - 2
% ans = - 20*x1^3 + 20*x2
g=[2*X(1) - 60*X(1).^2*(- X(1).^3 + X(2)) - 2;- 20*X(1).^3 + 20*X(2)];
end
8.3.5.3 Armijo准则更新步长
function x=armijo(func,xk,dk,gk)
m=0;max_m=1000;
rho=0.001;alpha=1;belta=0.618;
gd=gk'*dk;
fk=feval(func,xk);%初始化条件
while m<max_m
    x=xk+alpha*dk;%试探点
    f=feval(func,x);%试探点的函数值
    if f<=fk+alpha*rho*gd%终止条件
        break;
    end
    alpha=alpha*belta;%修改alpha的值
    m=m+1;
end
8.3.5.4最速下降法
function [x1 fval1 k1]=fd(x0,func,gfunc,eps,kmax)
k1 = 0;
x1 = x0;%设置初始条件
while k1 < kmax
    g = feval(gfunc,x1);%计算梯度,x改变时更新梯度
    if norm(g)<eps%迭代终止条件
        break;
    end
    d=-g;%更新方向
    x1=armijo(func,x1,d,g);%采用Armijo搜索计算当前点x,最终找到近似最优解
    k1=k1+1;
end
fval1=feval(func,x1);%计算目标函数值
8.3.5.5 BFGS法
function [x2,fval2,k2]=bfgs(x0,func,grd,H0,eps,kmax)
k2=0;
H=H0;
x2=x0;
g=feval(grd,x2);%设置初始条件
while k2<kmax
    if norm(g)<eps%终止条件
        break;
    end
    d=-H*g;%更新方向
    x_=x2;%原来的x
    x2=armijo(func,x2,d,g);%更新后的x
    g_=g;%原来的g
    g=feval(grd, x2);%更新后的梯度
    s=x2-x_;
    y=g-g_;
    if s'*y>0
        v=y'*s;
        H=H+(1+(y'*H*y)/v)*(s*s')/v-(s*y'*H+H*y*s')/v;
        %采用BFGS方法更新H
    end
    k2=k2+1;
end
fval2=feval(func,x2);%计算目标函数值

8.3.5.6 FR共轭梯度法
function [x3,fval3,k3]=FR(x0,func,gfunc,eps,kmax)
n=9;k3=0;x3=x0;%设置初始条件
while k3<kmax
    g=feval(gfunc,x3);%更新g
    m=g'*g;%更新后的g*g
    if norm(g)<eps%终止条件
        break;
    end
    if mod(k3,n)==0%n步重新开始策略
        d=-g;
    else
        belta=m/q;%belta的计算
        d=-g+belta*d;%更新d的值
        if g'*d>=0
            d=-g;
        end
    end
    x3=armijo(func,x3,d,g);%采用Armijo搜索计算当前点,最终找到近似最优解
    q=g'*g;%更新前的g*g
    k3=k3+1;
end
fval3=feval(func,x3);%计算目标函数值
8.3.5.7 主程序
clear;clc
x0=unifrnd(-5,5,2,1);%产生满足[-5, 5]均匀分布的初始点
%x0=[3.4913;-1.0777];%[-5,5]均匀分布产生的初始点
...x0=[0.2753;-0.1224];x0=[0.1232;1.1167];x0=[-1.1955;0.6782];x0=[-3.7301;4.1338];x0=[1.3236;-4.0246];
...x0=[2.9221;4.3399];x0=[4.5949;1.7874];x0=[1.5574;2.5774];x0=[-4.6429;2.4313];x0=[3.4913;-1.0777]
eps=1.e-8;%设置精度1.e-4,1.e-5;1.e-6;1.e-7;1.e-8;
kmax=100000;%设置迭代上限
H0=eye(2);%H初始为一个2×2的单位矩阵
%%采用Armijo搜索的负梯度法程序
tic
[x1,fval1,k1]=fd(x0,'func','grd',eps,kmax);
t1=toc;
%%采用Armijo搜索的BFGS法程序
tic
[x2,fval2,k2]=bfgs(x0,'func','grd',H0,eps,kmax)
t2=toc;
%%采用Armijo搜索的FR共轭梯度法程序
tic
[x3,fval3,k3]=FR(x0,'func','grd',eps,kmax);
t3=toc;

SSE1=sqrt(sum((x1-[1;1]).^2,1));%负梯度法下近似解与精确解的2范数下的误差
SSE2=sqrt(sum((x2-[1;1]).^2,1));%BFGS法下近似解与精确解的2范数下的误差
SSE3=sqrt(sum((x3-[1;1]).^2,1));%FR共轭梯度法下近似解与精确解的2范数下的误差
A=[SSE1 fval1 k1 t1;SSE2 fval2 k2 t2;SSE3 fval3 k3 t3]'%分别记录【误差,函数值,迭代次数,运行时间】

请添加图片描述

九、总结

本篇文章详细的讲解最优化理论的一些常见方法,有了这些基础的最优化知识,方便我们以后深入学习最优化理论以及人工智能方面的知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计基于Springboot的中点游戏分享网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【C++】STL:String

&#x1f431;作者&#xff1a;傻响 &#x1f431;专栏&#xff1a;《C/C - STL》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; ​ 目录 STD - String标准库 字符串类介绍 字符串类构造函数 No.1 string() ; No.2 string(const char…

实操1 : Jupyter Notebook 如何更换主题+全部主题展示+深色主题下如何设置可视化图表

文章目录(一) 如何更换主题(二) 全部主题展示(三) 深色主题下设置可视化图表(一) 如何更换主题 1.打开 Jupyter Notebook, 新建一个Python文件 在文件中输入下方命令开始安装主题 pip install --upgrade jupyterthemes -i https://pipy.douban.com/simple2.win R 打开 cmd 命…

效率工具之Arthas

Arthas 阿里巴巴开源的Java诊断工具&#xff1b;追踪方法执行链、反编译、监控JVM状态 在线安装 使用 1. trace 跟踪调用链 解决痛点&#xff1a;定位问题根据日志推理分析&#xff0c;方法出入参不可见&#xff0c;分支判断太多情况下 定位很慢&#xff0c;分析出可能有问…

[附源码]JAVA毕业设计科院垃圾分类系统(系统+LW)

[附源码]JAVA毕业设计科院垃圾分类系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

JVM学习-- JVM调优

一、选择垃圾收集器 垃圾收集器和内存大小有关 一般情况&#xff0c; serialserial old 适用几十兆内存 pspo 适用几百兆~几个G parNewCMS 可以用到20G G1 可以用到上百G ZGC 可以 4T~16T 1. 常见垃圾收集器组合参数设定 -XX:UseConc(urrent)MarkSweepGC ParNew CM…

【web实战-业务逻辑】评论点赞逻辑

目录 点赞逻辑一&#xff1a; 第一步&#xff1a;找关键 第二步&#xff1a;猜测逻辑 第三步&#xff1a;结论 第四步&#xff1a;归类 点赞逻辑二&#xff1a; 第一步&#xff1a;找关键 第二步&#xff1a;猜测逻辑 第三步&#xff1a;结论 第四步&#xff1a;归纳…

Framework 学习之旅:Service 启动过程

前言 Service 的启动过程将分为两个部分&#xff0c;分别是ContextImpl到ActivityManageService调用过程和ActivityThread启动Service过程。 ContextImpl到ActivityManageService调用过程 一般启动服务操作在Activity中调用startService方法&#xff0c;从Activity的startSe…

[附源码]计算机毕业设计springboot智慧园区运营管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

360T7路由器进行WiFi无线中继教程

360T7路由器进行WiFi中继教程1. 概述2. 360T7路由器进行WiFi中继实现教程2.1 登录路由器管理界面2.2 选择上网方式2.3 搜索WiFi2.4 连接WiFi2.5 点击确认2.6 在主页面查看网络1. 概述 中继路由系统由一组中继路由器组成&#xff0c;为不能交换路由信息的路由域提供中继路由。该…

关于小程序session_key漏洞问题的解决2022-12-01

业务背景&#xff1a;开发了小程序&#xff0c;使用了一段时间以后&#xff0c;小程序提示系统漏洞session_key的问题&#xff0c;在网上找了好多的博客&#xff0c;感觉好多写的没那么清晰&#xff0c;更偏重于理论&#xff0c;导致自己走了很多的弯路&#xff0c;为了更方便快…

基于海鸥算法优化的lssvm回归预测-附代码

基于海鸥算法优化的lssvm回归预测 - 附代码 文章目录基于海鸥算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于海鸥算法优化的LSSVM4.测试结果5.Matlab代码摘要&#xff1a;为了提高最小二乘支持向量机&#xff08;lssvm&#xff09;的回归预测准确率&#xff0c;对…

【树莓派不吃灰】Linux服务器篇(核心概念)

目录1. 第一章 架设服务器前的准备工作2. 第二章 基础网络概念3. 第三章 局域网络架构简介4. 第四章 连上 Internet5. 第五章 Linux 常用网络指令6. 第六章 Linux 网络侦错7. 第七章 网络安全与主机基本防护8. 第八章 路由观念与路由器设定9. 第九章 防火墙与 NAT 服务器&#…

Python源码剖析2-字符串对象PyStringObject

二、 1、PyStringObject与 PyString_Type PyStringObject是变长对象中的不可变对象。当创建了一个PyStringObject对象之后,该对象内部维护的字符串就不能再被改变了。这一点特性使得 PyStringObject 对象能作为 PyDictObject 的键值,但同时也使得一些字符串操作的效率大大降低…

Kafka RecordAccumulator 三 高并发写入数据

Kafka RecordAccumulator 三 高并发写入数据 首先我们客户端会通过多线程的方式来发送消息&#xff08;一般业务需求可能会通过业务系统或者大数据流计算系统如Spark Streaming或者Flink将业务数据发送出去&#xff0c;进而让下游系统消费使用&#xff09;&#xff0c;那这里业…

【Linux】进程状态|僵尸进程 |孤儿进程

索引运行状态&#xff1a;阻塞状态挂起状态看看Linux是怎么做的运行状态R睡眠状态S停止状态T两个特殊的进程&#xff1a;僵尸进程孤儿进程在之前我们听过很多很多进程的状态&#xff0c;像是运行、新建、就绪、挂起、阻塞、等待、停止、挂机、死亡等等。推荐阅读&#xff1a;通…

http协议之digest(摘要)认证,详细讲解并附Java SpringBoot源码

目录 1.digest认证是什么&#xff1f; 2.digest认证过程 3.digest认证参数详解 4.基于SpringBoot实现digest认证 5.digest认证演示 6.digest认证完整项目 7.参考博客 1.digest认证是什么&#xff1f; HTTP通讯采用人类可阅读的文本格式进行数据通讯&#xff0c;其内容非…

Android入门第40天-Android中的Service(SimpleStartService)

简介 博文总阅读量已经突破了300万&#xff0c;给自己加油打CALL。 从今天开始&#xff0c;之前39天的Android如果每一篇只有30分钟就能读完和掌握那么从今天开始越往后会越复杂。因为我们的Android教程开始进入“中级”难度了。特别是Service&#xff0c;这个Service我要分成…

java面向对象的三大特性之封装和继承(配视频讲解)

&#x1f345;程序员小王的博客&#xff1a;程序员小王的博客 &#x1f345;程序员小王的资源博客&#xff1a;http://wanghj.online/ &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 如有编辑错误联系作者&#xff0c;如果有比较好的文章欢迎…

JMeter入门教程(13) --事务

文章目录1.任务背景2.任务目标3.任务实操3.1.1 事务控制器3.2.2循环控制器1.任务背景 JMeter中的事务是通过事务控制器实现的。&#xff0c;为了衡量服务器对某一个或一系列操作处理的响应时间&#xff0c;需要定义事务。下面我们详细介绍在JMeter中如何使用事务 2.任务目标 …