当前位置: 首页 > news >正文

Successive Convex Approximation算法的学习笔记

文章目录

    • 一、代码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
clcQ=[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-10breakend
end
x_result=x_tempX = 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')

相关文章:

Successive Convex Approximation算法的学习笔记

文章目录 一、代码debug二、原理 本文主要参考了CSDN上的 另一篇文章&#xff0c;但规范了公式的推导过程和修缮了部分代码 一、代码debug 首先&#xff0c;我们将所有的代码放到MATLAB中&#xff0c;很快在命令行中出现了错误信息 很显然有问题&#xff0c;但是我不知道发生…...

IoT数采平台2:文档

IoT数采平台1&#xff1a;开篇IoT数采平台2&#xff1a;文档IoT数采平台3&#xff1a;功能IoT数采平台4&#xff1a;测试 【平台功能】 基础配置、 实时监控、 规则引擎、 告警列表、 系统配置 消息通知&#xff1a;Websocket 设备上线、设备下线、 数据变化、 告警信息、 实时…...

Vue监听器watch的基本用法

文章目录 1. 作用2. 格式3. 示例3.1 value 值为字符串3.2 value 值为函数3.3 value 值为对象 4. 与计算属性对比 1. 作用 监视数据变化&#xff0c;执行一些业务逻辑或异步操作。 2. 格式 监听器 watch 内部以 key &#xff1a;value 的形式定义&#xff0c;key 是 data 中的…...

MySQL UPDATE JOIN 根据一张表或多表来更新另一张表的数据

当使用MySQL时&#xff0c;经常需要根据一张表或多张表的数据来更新另一张表的数据。这种情况下&#xff0c;我们可以使用UPDATE语句结合JOIN操作来实现这一需求。本文将介绍MySQL中使用UPDATE JOIN的技术。 什么是UPDATE JOIN UPDATE JOIN是MySQL中一种结合UPDATE语句和JOIN…...

JS实现继承的方式ES6版

上一篇&#xff1a;JS实现继承的方式原生版 ES6的继承 主要是依赖extends关键字来实现继承&#xff0c;且继承的效果类似于寄生组合继承。 class Parent() { }class Child extends Parent {constructor(x, y, color) {super(x, y);this.color color;} }子类必须在construct…...

elementui 左侧或水平导航菜单栏与main区域联动

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、elementui 实现一个固定位置的Pagination&#xff08;分页&#xff09;组件 文章目录 系列文章目录…...

YUNBEE云贝-技术分享:PostgreSQL分区表

引言 PostgreSQL作为一款高度可扩展的企业级关系型数据库管理系统&#xff0c;其内置的分区表功能在处理大规模数据场景中扮演着重要角色。本文将深入探讨PostgreSQL分区表的实现逻辑、详细实验过程&#xff0c;并辅以分区表相关的视图查询、分区表维护及优化案例&#xff0c;…...

5.2 通用代码,数组求和,拷贝数组,si配合di翻转数组

5.2 通用代码&#xff0c;数组求和&#xff0c;拷贝数组&#xff0c;si配合di翻转数组 1. 通用代码 通用代码类似于一个用汇编语言写程序的一个框架&#xff0c;也类似于c语言的头文件编写 assume cs:code,ds:data,ss:stack data segmentdata endsstack segmentstack endsco…...

Oracle23免费版简易安装攻略

installation-guide 1 安装 root用户下 wget https://yum.oracle.com/repo/OracleLinux/OL8/developer/x86_64/getPackage/oracle-database-preinstall-23c-1.0-1.el8.x86_64.rpm wget https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23c-1…...

《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023

《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023 前言简介相关工作模型构架Basic ClassificationBias ExtractionUnbiased Inference实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天…...

基于springboot+vue的健身房管理预约管理系统

...

【编译lombok问题】已解决:编译突然找不到符号问题-get/set找不到符号

一、场景&#xff1a;编译突然找不到符号 报错信息&#xff1a; 找不到符号 符号&#xff1a;方法getName() 二、原因&#xff1a; 没有使用lombok支持的编译器 三、解决方法&#xff1a; 打开File-Settings&#xff0c;按以下步骤进行设置&#xff1b; 修改&#xff1a;-Djp…...

第四篇:3.3 无效流量(Invalid traffic) - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xff09;第四篇广…...

PyTorch示例——使用Transformer写古诗

文章目录 PyTorch示例——使用Transformer写古诗1. 前言2. 版本信息3. 导包4. 数据与预处理数据下载先看一下原始数据开始处理数据&#xff0c;过滤掉异常数据定义 词典编码器 Tokenizer定义数据集类 MyDataset测试一下MyDataset、Tokenizer、DataLoader 5. 构建模型位置编码器…...

vue 视频添加水印

1.需求背景 其实腾讯云点播的api也支持视频水印&#xff0c;但是只有单个水印&#xff0c;大概效果是这样子的&#xff0c;不满足我们的需求&#xff0c;我们的需求是需要视频中都是水印。 腾讯云点播水印 项目需求的水印&#xff08;主要是防录屏,最后的实现效果是这样&…...

Web Animations API 动画

Element.animate() dom.animate动画可以避免污染dom原有的css动画 参考资料 Element.animate() - Web API 接口参考 | MDN Element: getAnimations() method - Web APIs | MDN .tunnel{width:200px;height:200px;background-color:#38f;}<div class"tunnel" …...

【大数据存储】实验五:Mapreduce

实验Mapreduce实例——排序&#xff08;补充程序&#xff09; 实验环境 Linux Ubuntu 16.04 jdk-8u191-linux-x64 hadoop-3.0.0 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-juno-SR2-linux-gtk-x86_64 实验内容 在电商网站上&#xff0c;当我们进入某电商页面里浏览…...

日志服务 HarmonyOS NEXT 日志采集最佳实践

作者&#xff1a;高玉龙&#xff08;元泊&#xff09; 背景信息 随着数字化新时代的全面展开以及 5G 与物联网&#xff08;IoT&#xff09;技术的迅速普及&#xff0c;操作系统正面临前所未有的变革需求。在这个背景下&#xff0c;华为公司自主研发的鸿蒙操作系统&#xff08…...

Educational Codeforces Round 133 (Rated for Div. 2) (C dp D前缀和优化倍数关系dp)

A&#xff1a;能用3肯定用三&#xff0c;然后分类讨论即可 #include<bits/stdc.h> using namespace std; const int N 2e510,M2*N,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; typedef unsigned long long ULL; usi…...

【讲解下如何Stable Diffusion本地部署】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...