Successive Convex Approximation算法的学习笔记

news2024/11/15 9:40:56

文章目录

    • 一、代码debug
    • 二、原理

本文主要参考了CSDN上的 另一篇文章,但规范了公式的推导过程和修缮了部分代码

一、代码debug

首先,我们将所有的代码放到MATLAB中,很快在命令行中出现了错误信息

在这里插入图片描述
很显然有问题,但是我不知道发生了什么问题。我猜测可能是求解器没有正确安装,因此我正确安装了Gurobi求解器

在这里插入图片描述

注意安装Gurobi求解器需要验证license,具体内容可以查询网络上的安装教程。在命令行中输入grbgetkey+licence 就可以完成激活。

在这里插入图片描述


但此时还是有问题,我经过查询得知是MEX文件无法指定,是系统路径没有添加gurobi文件的bin,因此我添加到系统路径中

在这里插入图片描述
在这里插入图片描述
此后文件便可以正确运行了,结果如下。

在这里插入图片描述
在这里插入图片描述

二、原理

现考虑如下非凸二次规划问题

min ⁡ f ( x , y ) = [ x , y ] Q [ x , y ] T = x 2 + x y − y 2 s.t. − 1 ≤ x ≤ 1 − 1 ≤ y ≤ 1 \begin{aligned} &\operatorname*{min}f(x,y)&& \left.=\left[\begin{matrix}{x,y}\\\end{matrix}\right.\right]Q\left[\begin{matrix}{x,y}\\\end{matrix}\right]^{T} \\ &&&=x^{2}+xy-y^{2} \\ &\text{s.t.}&& -1\leq x\leq1 \\ &&&-1\leq y\leq1 \end{aligned} minf(x,y)s.t.=[x,y]Q[x,y]T=x2+xyy21x11y1

其中,

Q = [ 1 0.5 0 5 ] . Q=\begin{bmatrix}1&0.5\\0&5\\\end{bmatrix}. Q=[100.55].

原问题的目标函数可以通过特征值分解转化为凸函数减去凸函数的形式,凸函数减去凸函数未必是凸函数。

Q = V D V T = V ( λ P − λ N ) V T = V λ P V T ⏟ P − V λ N V T ⏟ N \begin{aligned}Q=VDV^T=V\left(\lambda_P-\lambda_N\right)V^T=\underbrace{V\lambda_PV^T}_{P}-\underbrace{V\lambda_NV^T}_{N}\end{aligned} Q=VDVT=V(λPλN)VT=P VλPVTN VλNVT

其中,矩阵 P P P N N N 都是半正定矩阵,矩阵 D D D 的表达式如下

D = [ λ 1 λ 2 ⋱ λ k λ k + 1 ⋱ ] = [ λ 1 λ 2 ⋱ λ k 0 ⋱ ] ⏟ λ P − [ 0 0 ⋱ 0 − λ k + 1 ⋱ ] ⏟ λ N D=\left.\left[\begin{array}{cccc}\lambda_{1}& & & & & \\ &\lambda_{2}& & & &\\ & & \ddots & & &\\ & & & \lambda_{k}& &\\ & & & & \lambda_{k+1} &\\ & & & & &\ddots \end{array}\right.\right] =\underbrace{\left.\left[\begin{array}{cccc}\lambda_{1}& & & & & \\ &\lambda_{2}& & & &\\ & & \ddots & & &\\ & & & \lambda_{k}& &\\ & & & & 0 &\\ & & & & &\ddots \end{array}\right.\right]}_{\lambda_P} -\underbrace{\left.\left[\begin{array}{cccc}0& & & & & \\ &0 & & & &\\ & & \ddots & & &\\ & & &0& &\\ & & & & - \lambda_{k+1} &\\ & & & & &\ddots \end{array}\right.\right]}_{\lambda_N} D= λ1λ2λkλk+1 =λP λ1λ2λk0 λN 000λk+1

其中 λ 1 , λ 2 , … , λ k ≥ 0 , λ k + 1 , λ k + 2 , … < 0 \lambda_1,\lambda_2,\ldots,\lambda_k\geq0,\lambda_{k+1},\lambda_{k+2},\ldots<0 λ1,λ2,,λk0,λk+1,λk+2,<0

对目标函数的第二项 [ x , y ] N [ x , y ] T \left[x,y\right]N[x,y]^T [x,y]N[x,y]T 在点 ( x ∗ , y ∗ ) (x^{*},y^{*}) (x,y) 处进行凸近似,即在点 ( x ∗ , y ∗ ) (x^{*},y^{*}) (x,y) 处进行一阶泰勒展开

− [ x ∗ , y ∗ ] N [ x ∗ , y ∗ ] T − [ ∇ ( [ x , y ] N [ x , y ] T ) ∣ x ∗ , y ∗ ] T ( [ x , y ] − [ x ∗ , y ∗ ] ) T = − [ x ∗ , y ∗ ] N [ x ∗ , y ∗ ] T − ( 2 N [ x ∗ , y ∗ ] T ) T ( [ x , y ] − [ x ∗ , y ∗ ] ) T = − 2 [ x ∗ , y ∗ ] N [ x , y ] T + [ x ∗ , y ∗ ] N [ x ∗ , y ∗ ] T \begin{aligned}&-\left[x^*,y^*\right]N\left[x^*,y^*\right]^T-\left[\nabla\left(\left[x,y\right]N\big[x,y\big]^T\right)\right|_{x^*,y^*}\Big]^T\left(\left[x,y\right]-\left[x^*,y^*\right]\right)^T\\ &=-\left[x^*,y^*\right] N \left[x^*,y^*\right]^T -\left(2N\left[x^*,y^*\right]^T\right)^T\left(\left[x,y\right]-\left[x^*,y^*\right]\right)^T\\ &=-2{\Big[}x^{*},y^{*}{\Big]}N{\Big[}x,y{\Big]}^{T}+{\Big[}x^{*},y^{*}{\Big]}N{\Big[}x^{*},y^{*}{\Big]}^{T} \end{aligned} [x,y]N[x,y]T[([x,y]N[x,y]T) x,y]T([x,y][x,y])T=[x,y]N[x,y]T(2N[x,y]T)T([x,y][x,y])T=2[x,y]N[x,y]T+[x,y]N[x,y]T

至此,原问题可转化为:
min ⁡ f ( x , y ) = [ x , y ] P [ x , y ] T − 2 [ x ∗ , y ∗ ] N [ x , y ] T + [ x ∗ , y ∗ ] N [ x ∗ , y ∗ ] T s . t . − 1 ≤ x ≤ 1 − 1 ≤ y ≤ 1 \begin{aligned} &\min & &f\left(x,y\right)=\left[x,y\right]P\left[x,y\right]^{T}-2\left[x^{*},y^{*}\right]N\left[x,y\right]^{T}+\left[x^{*},y^{*}\right]N\left[x^{*},y^{*}\right]^{T} \\ &s.t.& &-1\leq x\leq1 \\ & & &-1\leq y\leq1 \end{aligned} mins.t.f(x,y)=[x,y]P[x,y]T2[x,y]N[x,y]T+[x,y]N[x,y]T1x11y1

clear all
close all
clc
 
 
 
Q=[1,0.5;0.5,-1];
 
x=sdpvar(2,1);
xmin=-1;
xmax=1;
Constraints=[];
Constraints=[Constraints,xmin<=x<=xmax];
ops = sdpsettings('solver', 'gurobi', 'verbose', 0);
 
[V,D] = eig(Q);%计算A的特征值对角阵D和特征向量V,使AV=VD成立
lambda_P=D;
lambda_N=-D;
lambda_P(find(D<0))=0;
lambda_N(find(D>0))=0;
P=V*lambda_P*V';
N=V*lambda_N*V';
x0=[0.5;0.5];
x_temp=x0;
while(1)
    f_k=(x'*P*x-2*x_temp'*N*x+x_temp'*N*x_temp);
    sol=solvesdp(Constraints,f_k,ops);
    display([sol.info,' 目标函数值:',num2str(value(x_temp'*Q*x_temp))])
    x_temp_before=x_temp;
    x_temp=value(x);
    if sqrt(sum((x_temp-x_temp_before).^2)/length(x_temp))<1e-10
        break
    end
end
x_result=x_temp
 
X = gridsamp([-1 -1;1 1], 40);
[m,~]=size(X);
YX=zeros(m,1);
for i=1:size(X,1)
    x=X(i,:);
    y=x*Q*x';
    YX(i)=y;
end
X1 = reshape(X(:,1),40,40); X2 = reshape(X(:,2),40,40);
YX = reshape(YX, size(X1));
figure(1), mesh(X1, X2, YX)%绘制预测表面
hold on
scatter3(x_temp(1),x_temp(2),x_temp'*Q*x_temp,200,'r','pentagram','filled')

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

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

相关文章

剪映国际版 v3.7 来了,全功能纯净,附400套离线模板下载

剪映国际版 v3.7 来了&#xff0c;全功能纯净&#xff0c;附400套离线模板下载 相比国内版 国际版不仅没有广告&#xff0c;所有素材和功能都是免费使用的。 CapCut是剪映的国际版本,操作和各种功能几乎和剪映一模一样&#xff0c; 是一款免费无限制使用的视频剪辑软件,软件…

极客时间: 用 Word2Vec, LangChain, Gemma 模拟全本地检索增强生成(RAG)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Linux中安装nacos

Linux中安装nacos 一、前言二、准备1、下载2、上传到服务器3、解压 三、配置1、备份配置文件2、导入sql3、修改前4、修改后 四、使用1、启动2、关闭 一、前言 最近国外的docker似乎是出什么问题&#xff0c;试过很多手段都拉不下 nacos 镜像&#xff0c;就打算在服务器装一下 …

二. CUDA编程入门-双线性插值计算

目录 前言0. 简述1. 执行一下我们的第十个CUDA程序2. Bilinear interpolation3. 代码分析总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 Note&#xff1a;关于 CUDA 加速双线程插值的内容博主…

golang slice总结

目录 概述 一、什么是slice 二、slice的声明 三、slice的初始化、创建 make方式创建 创建一个包含指定长度的切片 创建一个指定长度和容量的切片 创建一个空切片 创建一个长度和容量都为 0 的切片 new方式创建 短声明初始化切片 通过一个数组来创建切片 声明一个 …

Coursera上托福专项课程01:TOEFL Reading and Listening Sections Skills Mastery 学习笔记

TOEFL Reading and Listening Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-reading-listening-sections-skills-mastery 这门课的笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 TOEFL Reading and Listening …

【微服务】面试题(一)

最近进行了一些面试&#xff0c;这几个问题分享给大家 一、分别介绍一下微服务、分布式以及两者的区别 微服务&#xff08;Microservices&#xff09;和分布式系统&#xff08;Distributed Systems&#xff09;是两种不同的软件架构风格&#xff0c;虽然它们之间有些重叠&#…

SV学习笔记(五)

文章目录 线程的使用程序和模块什么是线程线程的概念澄清 线程的控制fork并行线程语句块fork…joinfork…join_any等待所有衍生线程停止单个线程停止多个线程停止被多次调用的任务 线程的通信写在前面event事件通知的需求semaphore旗语mailbox信箱三种通信的比较和应用 参考资料…

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…

[羊城杯 2020]Easyphp2 ---不会编程的崽

摆烂一周了&#xff0c;继续更&#xff01;&#xff01;题目还是简单哦。 提示明显要我们修改数据包&#xff0c;第一反应是修改referer。试了一下不太对。url很可能存在文件包含 使用伪协议读取一下源码吧。它过滤了base64关键字。尝试url编码绕过&#xff0c;这里可以使用二…

实景三维技术在推进城市全域数字化转型的作用

4月2日&#xff0c;国家数据局发布《深化智慧城市发展推进城市全域数字化转型的指导意见&#xff08;征求意见稿&#xff09;》&#xff08;下称&#xff1a;《指导意见》&#xff09;&#xff0c;向社会公开征求意见。 《指导意见》作为推进城市数字化转型的重要文件&#xf…

11、子串-滑动窗口最大值

题解&#xff1a; 双端队列是一种特殊的队列&#xff0c;允许你在队列的两端进行插入和删除操作。在滑动窗口问题中&#xff0c;我们使用它来存储可能是当前窗口最大值的元素的索引。 维护队列的顺序&#xff1a; 当新元素进入窗口时&#xff0c;我们将它与队列尾部的元素进…

echarts 毕节区县地图 包含百管委、高新区 (手扣)

百度网盘 链接&#xff1a;https://pan.baidu.com/s/14yiReP8HT_bNCGMOBajexg 提取码&#xff1a;isqi

MQ简介和面试题

一&#xff0c;什么是MQ MQ全称是Mwessage Queue(消息队列)&#xff0c;是在消息传输过程中保存消息的容器&#xff0c;多用于分布式系统之间进行通信&#xff0c;解耦和低耦合性 二&#xff0c;常见的MQ产品 RebbitMQ,RocketMQ, ActiveMQ, Kafka, ZeroMQ, MetaMQ 其中我们…

(学习日记)2024.04.06:UCOSIII第三十四节:互斥量函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)

一、前言 目前有一个关于通过STM32F411CEUx的I2S总线接口控制SSS1700芯片进行音频输入输出的研究。 SSS1700 是具有片上振荡器的 3S 高度集成的USB音频控制器芯片 。 SSS1700 功能支持96 KHz 24 位采样率&#xff0c;带外部音频编解码器&#xff08;24 位/96KHz I2S 输入和输出…

工具推荐-针对Nacos利器-NacosExploitGUI_v4.0

Nacos是由阿里所开发的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 工具简介 集成Nacos的各种poc Nacos控制台默认口令漏洞(nacos,nacos)Nacostoken.secret.key默认配置(QVD-2023-6271)Nacos-clientYaml反序列化漏洞Nacos Jraft Hessian反序列化漏洞…

【Hadoop技术框架-MapReduce和Yarn的详细描述和部署】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天的内容主要是Hadoop的后两个组件&#xff1a;MapReduce和yarn的相关内容。同时还有Hadoop的完整流程。希望对大家有所帮助。感谢大家关注点赞。 &#x1f49e;&#x1f49e;前路漫漫&…

使用GDAL进行简单的坐标系转换

使用GDAL进行简单的坐标系转换 使用python GDAL进行简单的坐标系转换&#xff0c;暂时不考虑不同基准坐标系转换的精度问题。 安装环境 使用UbuntuAnaconda python 环境 conda install gdal 定义坐标系 from osgeo import gdal from osgeo import osrsrs_wgs84 osr.Spati…

ICP配准算法

配准算法 问题定义ICP(point to point)算法思想步骤分解point to point和point to plane的区别ICP配准算法的标准流程NDT 本篇将介绍配准算法&#xff0c;将介绍ICP(point to point)、ICP(point to plane)和NDT算法。其中ICP有两种&#xff0c;point to point表示通过构建点与点…