SQP求解器推导与matlab命令(JacobianHessian矩阵)

news2024/10/3 2:26:30

缩写

SQP(Sequential Quadratic Programming)序列二次规划
NLP 非线性规划问题

matlab代码
matlab中求解器
SQP的认识
《最优化方法及其Matlab程序设计》 书 马昌凤

SQP 知乎

基础知识点

I.Jacobian矩阵
Def: 一阶偏导
在这里插入图片描述

II.Hessian矩阵
Def: 二阶偏导

图 三阶的Hessian矩阵

意义:
二阶导数表示导数的变化规律,如果函数是一条曲线,且曲线存在二阶导数,那么二阶导数表示的是曲线的曲率,曲率越大,曲线越弯曲。以此类推,多维空间中的一个点的二阶导数就表示该点梯度下降的快慢。
e.g: 以二维图像为例,一阶导数是图像灰度的变化即灰度梯度,二阶导数就是灰度梯度变化程度,二阶导数越大灰度变化越不具有线性。(即灰度改变越大,不是线性的梯度。 \tiny{ 以二维图像为例,一阶导数是图像灰度的变化即灰度梯度,二阶导数就是灰度梯度变化程度,二阶导数越大灰度变化越不具有线性。(即灰度改变越大,不是线性的梯度。} 以二维图像为例,一阶导数是图像灰度的变化即灰度梯度,二阶导数就是灰度梯度变化程度,二阶导数越大灰度变化越不具有线性。(即灰度改变越大,不是线性的梯度。

0.前提知识-Newton method

牛顿法(Newton method)和拟牛顿法(quasi Newton method)是求解无约束最优化问题的常用方法,有收敛速度快的优点。
牛顿法是迭代算法,每一步都需求解目标函数的海塞矩阵(Hessian Matrix),计算比较复杂。
拟牛顿法通过正定矩阵近似海塞矩阵的逆矩阵或海塞矩阵,简化了这一计算过程。

I.求解方程的零值
原理
使用函数  的泰勒级数的前面几项来寻找方程  的根
II.求解方程的极小值/最优化问题
在这里插入图片描述
III.小结
缺点:
1.Newton method迭代公式(*)没有步长因子,是定步长迭代.
在这里插入图片描述
2.在这里插入图片描述

拟牛顿法
基本思想是:不用二阶偏导数而构造出可以近似海塞矩阵(或海塞矩阵的逆)的正定对称阵。不同的构造方法就产生了不同的拟牛顿法。

reference:
知乎 牛顿法和拟牛顿法

1.SQP概念/理论

概念

非线性规划问题(NLP)
目标函数约束条件中包含非线性函数的规划问题。
一般说来,求解非线性规划问题比求解线性规划问题困难得多。而且,不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适用于各种问题的一般算法,已有的各种方法都有其特定的适用范围。

序列二次规划算法(SQP)
是目前公认的求解约束非线性优化问题最有效的方法之一。
与其他算法相比,序列二次规划法的优点是收敛性好、计算效率高、边界搜索能力强,因此受到了广泛的重视及应用。
**思想:**在序列二次规划法的迭代过程中,每一步都需要求解一个或多个二次规划(QP)子问题。

二次规划问题(QP)
就是目标函数为二次函数,约束函数为线性函数的最优化问题。

缺点:
一般地,由于二次规划子问题的求解难以利用原问题的稀疏性、对称性等良好特性,随着问题规模的扩大,其计算工作量和所需存储量是非常大的。因此,目前的序列二次规划算法一般只适用与中小规模问题。

推导

SQP求解思想
将复杂的非线性约束最优化问题转化为比较简单的二次规划(QP)问题求解的算法。
QP求解思想
根据约束条件的不同,二次规划可分为等式约束二次规划问题和不等式约束二次规划问题。
[等式约束常见的解法有直接消去法、广义消去法、拉格朗日(Lagrange)法;
不等式约束基本思想是把不等式约束转化为等式约束再求解,常见解法有有效集(active set)方法,有效集方法在每步迭代中把有效约束作为等式约束,然后可以用拉格朗日法求解,重复直到求得最优解。]
PS:
在这里插入图片描述
数学过程:
在这里插入图片描述

Reference
SJTU分享 知乎
概念的辨析 详细

2.SQP matlab中工具

I.脚本命令
MathWorks -patternsearch
命令解释

在这里插入图片描述
参数解释:
%x为所求得的最小值点,而不是最小值
%fval为对应最小值点x处的最小值
%fun为目标函数。注:若有趣为m文件,要用通过句柄@进行引用
%x0 x0为给出进行搜索的初始向量
%A线性约束条件:不等式中的系数
%b线性约束条件:不等式右端的值
%Aeq线性约束条件:等式中的系数
%beq线性约束条件:等式右端的值
%lb x的下界
%ub x的上界

some说明:
模式搜索法(又称Hooke-Jeeves的算法)是一种直接搜索的算法,它并不依赖于导数,因此可以使用直接搜索来解决目标函数不可微分或甚至不连续的问题。
需要给定一个初始点.
MATLAB提供了三种直接搜索算法,称为广义模式搜索(GPS)法,生成集搜索(GSS)法和网格自适应搜索(MADS)法。它们的不同之处在于用于搜索的方向向量不同。
在这里插入图片描述

⋅ \cdot example
①无约束

% function y = psobj(x)
% y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));
%存为psobj.m
fun=@psobj;
x0=[10,-10];
x=patternsearch(fun,x0)

②线性不等式约束
在这里插入图片描述

fun=@psobj;

A = [-3,-2;
    -4,-7];
b = [-1;-8];
x0 = [0.5,-0.5];
[x,fval] = patternsearch(fun,x0,A,b)

note:
A*x0 - b0, 初值要设在activate set区域

③边界限制在这里插入图片描述

fun=@psobj;

lb = [0,-Inf];
ub = [Inf,-3];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = [1,-5];
[x,fval] = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub)

④非线性约束

nonlinear inequalities c(x) or equalities ceq(x) defined in nonlcon.
patternsearch optimizes fun such that c(x) ≤ 0 and ceq(x) = 0.

function [c,ceq] = ellipsetilt(x)
% ceq = [];
% c = x(1)*x(2)/2 + (x(1)+2)^2 + (x(2)-2)^2/2 - 2;
%存为ellipsetilt.m

x0 = [-2,-2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @ellipsetilt;
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

note:
c(x0)0 =8, 初值要设在activate set区域

===
命令的一些设置

① Different patternsearch Algorithms

x0 = 12*randn(1,2);
lb = [-15,-26];
ub = [26,15];
fun = @(x)sawtoothxy(x(1),x(2));

optsc = optimoptions("patternsearch",Algorithm="classic");%"nups"  "nups-mads"
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsc)

②with Nondefault Options

fun=@psobj;

options = optimoptions('patternsearch','Display','iter','PlotFcn',@psplotbestf);  %酷,显示迭代细节
x0 = [0,0];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

③Obtain All Outputs

[x,fval,exitflag,output] = patternsearch(fun,x0) 

缺点: 约束条件,多个方程时matrix提炼

===

II.GUI输入
在这里插入图片描述

缺点: 能否多个方程计算

意外收获
matlab 句柄函数求值

syms x y    %不能x(1) x(2)
f=@(x,y) x*y/2 + (x+2)^2 + (y-2)^2/2 - 2;
feval(f,-2,-2)

在这里插入图片描述

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

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

相关文章

【SpringCloud+Vue】生成微信二维码及扫码登录--OAuth2

OAuth2 微信登录流程 前端代码实现 后端代码实现 导入依赖 yml 实体类以及返回结果 工具类 微信配置信息 HTTP客户端连接池 JWT 控制层 业务层 持久层 OAuth2 OAuth2是OAuth(Open Authorization,开放授权)协议的延续版本。用来授…

Hinge Loss 和 Zero-One Loss

文章目录Hinge Loss 和 Zero-One LossHinge LossZero-One LossHinge Loss 和 Zero-One Loss 维基百科:https://en.wikipedia.org/wiki/Hinge_loss 图表说明: 纵轴表示固定 t1t1t1 的 Hinge loss(蓝色)和 Zero-One Loss&#xff…

字节5年测试经验,12月无情被辞,划水的兄弟别再这样了····

前言 先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入字节,以“人员优化”的名义无情被裁员,之后跳槽到了有赞,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成…

实现一个小程序分享图 wxml2canvas

我们经常会遇上动态生成海报的需求,而在小程序中,生成图片非Canvas莫属。但是在实际工作当中,为了追求效率,我们会不可避免地去使用一些JS插件,而 wxml-to-canvas 就是一款官方推荐且非常优秀的插件,它可以…

图文详解Ansible中的变量及加密

文章目录一、变量命名二、变量级别三、.变量设定和使用方式1.在playbook中直接定义变量2.在文件中定义变量3.使用变量4.设定主机变量和清单变量5.目录设定变量6.用命令覆盖变量7.使用数组设定变量8.注册变量9.事实变量10.魔法变量四、JINJA2模板五、 Ansible的加密控制练习1.用…

I2C总线应用测试程序

参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…

yunUI组件库解析:图片上传与排序组件yImgPro

yunUI是笔者开源的微信小程序功能库。目前其中包含了一些复杂的功能组件。方便使用。未来它将分为组件、样式、js三者合为一体,但分别提供。 本文所用代码皆来源于组件库中的yImgPro组件。详细代码可至github查看。地址: yunUI 。 npm地址:yu…

Bing+ChatGPT 对传统搜索引擎的降维打击

早些时候申请了新版 Bing 的内测资格,终于收到了通过的邮件。 一天的体验之后,我的感受是:当新版 Bing 具备了 ChatGPT 的聊天能力之后,它的能力不论是对传统搜索引擎,还是 ChatGPT 自身,都将是降维打击。 …

LeetCode 237. 删除链表中的节点

原题链接 难度:middle\color{orange}{middle}middle 题目描述 有一个单链表的 headheadhead,我们想删除它其中的一个节点 nodenodenode。 给你一个需要删除的节点 nodenodenode 。你将 无法访问 第一个节点 headheadhead。 链表的所有值都是 唯一的&…

IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置

上一篇文章 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 目标 告警恢复通知 - 经过评估无法实现原因: 告警和恢复是单独完全不相关的事件, 告警是 Warning 级别, 恢复是 Normal 级别, 要开启恢复, 就会导致所有 Normal Events 都会被发送, 这个数量是很恐怖的; 而且…

【重排重绘】从输入url到浏览器展示页面发生了什么?

目录步骤如下:一、用户在浏览器搜索栏中输入url地址二、浏览器解析域名得到服务器ip地址浏览器解析域名得到服务器ip地址有哪些过程?三、TCP三次握手建立客户端和服务器的连接四、客户端发送HTTP请求获取服务器端的静态资源五、服务器发送HTTP响应报文给…

程序员深度体验一周ChatGPT发现竟然....

程序员深度体验一周ChatGPT发现竟然… 周一打卡上班,老板凑到我跟前:“小李啊,这周有个新需求交给你做一下,给我们的API管理平台新增一个智能Mock的功能…”。我条件反射般的差点脱口而出:“这个需求做不了…”。不过…

【软件测试】资深测试总结的几个自动化测试点,提升跨越一大步......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 自动化的软件测试与…

PostgreSQL查询引擎——SELECT STATEMENTS SelectStmt

SelectStmt: select_no_parens %prec UMINUS| select_with_parens %prec UMINUS select_with_parens:( select_no_parens ) { $$ $2; }| ( select_with_parens ) { $$ $2; } 该规则返回单个SelectStmt节点或它们的树,表示集合操作树(set-operation tree…

JAVA线程池的使用

一、池化思想和JAVA线程池 池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客 )。 线程池是另一种池化思想的运用,把…

MySQL 派生表产生关联索引auto_key0导致SQL非常的慢

相同的SQL在maridb运行0.5秒,在MySQL8.0.26中运行要19秒 官方MySQL在处理子查时,优化器有个优化参数derived_merge,MySQL7开启添加,默认on.很多情况可以自动优化派生表,避免创建临时索引auto_key0和生成临时表数据做…

C++入门:函数重载

目录 一. 函数重载的概念和分类 1.1 什么是函数重载 1.2 函数重载的分类 1.3 关于函数重载的几点注意事项 二. C实现函数重载的底层逻辑(为什么C可以实现函数重载而C语言不能) 2.1 编译器编译程序的过程 2.2 为什么C可以实现函数重载而C语言不能 …

内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程

管家婆软件从网络架构上分两种版本:web(浏览器http端口)访问的版本和客户端(211固定端口sqlserver数据库)访问的版本。公司库管经常用仓库登录管家婆,一旦需要在公司外部登陆访问管家婆客户端,就…

微信中如何接入机器人才比较正常

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 为什么会有这个话题?大家都知道最近有个AI机器人很火,那就是AI机器人,关于它的介绍,大家可以自行百度去,我这边就不多介绍了。 好多人嫌网页版玩的不过瘾,就把这个机器人接入到了QQ上,接入到了钉钉上,TG …

Go语言基础知识学习笔记

环境准备 下载安装Golang:https://golang.google.cn/dl/ 因为国外下载速度较慢,我们需要配置国内代理 # 开启包管理工具 go env -w GO111MODULEon # 设置代理 go env -w GOPROXYhttps://goproxy.cn,direct # 设置不走 proxy 的私有仓库,多…