单纯形投影算法

目录

一,任意点到平移坐标轴面的投影

1,求解目标

2,转换变量

3,求解结果

4,f(t)的导数

5,f(t)的最小值

二,任意点到标准单纯形的投影

1,求解目标

2,公式变形

3,Moreau 分解

4,π函数的共轭函数

5,求解

6,总结

7,c++实现


本文来自论文:Projection Onto A Simplex

一,任意点到平移坐标轴面的投影

1,求解目标

求:

几何意义就是,考虑平移坐标轴面:

求任意一点y到这个平移坐标轴面的投影z,有了z就能求出整个式子的值了。

以n=2为例:

黑色线即坐标轴,红色线即平移坐标轴面,蓝色线展示了3个不同的投影例子。

2,转换变量

在几何意义中,我们当t是常数,对于任意点y,求y的投影点z。

反过来,我们把y当常数,即固定点,对于坐标轴面平移到不同的位置,即不同的t,有不同的投影点z。

3,求解结果

不防设y的n个分量是依次递增的,y1<=...<=yn,(全文同)

那么上式的结果就是:

其中,\hat{z}(t)_i=\left\{\begin{matrix} t,if\, y_i>t\\ y_i,if\, y_i<=t \end{matrix}\right.,1\leq i\leq n-1,\hat{z}(t)_n=t

4,f(t)的导数

f(t)在全体实数域上是可导的

5,f(t)的最小值

f(t)的最小值一定是在导数为0的点,且一定存在唯一的点。

t=(\sum _{i=k}^ny_i-1)/(n-k+1),t>=y_{k-1}时,f(t)取到最小值。

其中,1\leq k\leq n,y_0=-\infty

二,任意点到标准单纯形的投影

1,求解目标

标准单纯形:

对于任意点y,求投影:

2,公式变形

定义函数:

那么求解目标转化成:

3,Moreau 分解

参考原函数的近端映射函数和共轭函数的近端映射函数的对偶

即:

所以只需要求出

那么也就求出了

4,π函数的共轭函数

5,求解

其中,

所以,取t=(\sum _{i=k}^ny_i-1)/(n-k+1),t>=y_{k-1},其中,1\leq k\leq n,y_0=-\infty

再取\hat{z}(t)_i=\left\{\begin{matrix} t,if\, y_i>t\\ y_i,if\, y_i<=t \end{matrix}\right.,1\leq i\leq n-1,\hat{z}(t)_n=t

得到的就是

6,总结

不防设y1<=...<=yn

则求

只需要2步:

(1)取唯一的t=(\sum _{i=k}^ny_i-1)/(n-k+1),t>=y_{k-1},其中,1\leq k\leq n,y_0=-\infty

(2)\left\{\begin{matrix} x_i=max(y_i-t,0),1\leq i\leq n-1\\ x_n=y_n-t \end{matrix}\right.

7,c++实现

class VectorOpt
{
public://拓展数据域,加上idtemplate<typename T>static inline vector<pair<T, int>>expandWithId(const vector<T>& v){vector<pair<T, int>>ans;ans.resize(v.size());for (int i = 0; i < v.size(); i++)ans[i].first = v[i], ans[i].second = i;return ans;}//给vector拓展,加上id,但只按照原数据进行排序template<typename T>static inline vector<pair<T, int>> sortWithOrderMatch(const vector<T>& v){vector<pair<T, int>>ans = expandWithId(v);sort(ans.begin(), ans.end(), cmpJustFirst<T, int>);return ans;}
private:template<typename T>static inline bool cmp(T a, T b){return a < b;}template<typename T, typename T2>static inline bool cmpJustFirst(pair<T, T2> x, pair<T, T2> y){return cmp(x.first, y.first);}
};template<typename T>
vector<T> Simplexprojection(const vector<T> &x) //计算向量x到标准单纯形的投影
{vector<pair<T, int>> vp = VectorOpt::sortWithOrderMatch(x);int n = vp.size();T s = 0;for (int i = n - 1; i >= 0; i--) {s += vp[i].first;T t = (s - 1) / (n - i);if (i == 0 || t >= vp[i - 1].first) {vector<T> ans(vp.size());for (int i = n - 1; i >= 0; i--) {ans[vp[i].second] = max(vp[i].first - t, T{ 0 });}return ans;}}return x;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作一个RISC-V的操作系统十四-任务同步和锁

文章目录 并发与同步临界区和锁锁死锁解决死锁自旋锁&#xff08;spin lock&#xff09;原子性问题原子操作实现amoswap.w.aq例子 另一种方法自旋锁的注意事项代码其他同步技术 并发与同步 控制流&#xff1a;可理解为任务或进程 中断也可以理解为一个切换到另一个任务&#…

LeetCode 226.翻转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]示例…

CMake+qt+Visual Studio

#使用qt Creator 创建Cmake 项目,使用Cmake Gui 生成sln 工程&#xff0c;使用Visual Studio 开发 ##使用qt Creator 创建CMake项目 和创建pro工程的步骤一致&#xff0c;只是在选择构建系统的步骤上选择CMake,接下来步骤完全相同 工程新建完成之后&#xff0c;构建cmake 项…

想冲宇宙厂,直接挂了。。。

宇宙厂实际是字节&#xff0c;这个称呼是因为字节跳动主宰了宇宙内一切App&#xff0c;有点家大业大的意思。 今天分享一位字节春招凉经&#xff0c;问了一些数据库和Java八股&#xff0c;没出算法题&#xff0c;直接挂了&#xff0c;竟然最喜欢出算法题的字节&#xff0c;这次…

刷代码随想录有感(49):找树左下角的值

题干&#xff1a; 用层序遍历方便些&#xff0c;因为只需要把res不断替换成每一层第一个节点值即可&#xff0c;代码如下&#xff1a; class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*>que;if(root ! NULL)que.push(root);int res …

C++中的数据结构与算法

随处可见的红黑树 一般会用到[key,value]。 例如github中这个例子&#xff0c;第一个是访问网站&#xff0c;第二个是访问次数&#xff0c;但是这个不是静态的&#xff0c;这有个动态排序&#xff0c;并且当我们需要让相应的访问次数加1的时候&#xff0c;我们用红黑树查找的时…

C++每日一练——杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]]提示: 1 <…

Jsoncpp搭建交叉编译环境(移植到arm)

1. 官网下载源码 github地址&#xff1a;GitHub - open-source-parsers/jsoncpp at update 2. 交叉编译环境 当前平台/开发平台-编译环境&#xff1a; [rootlocalroot ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalroot ~]# uname -a Lin…

ELK创建仪表盘

创建仪表盘步骤&#xff1a; 一、保存search二、生成饼图三、创建仪表盘 一、保存search 首先保存一段时间内的search&#xff0c;可以添加想要的字段&#xff0c;并保存这个search方便下次直接打开该search&#xff0c;并方便在可视化和仪表盘中使用该search. 二、生成饼图…

Mac安装telnet

一、安装Homebrew 1、打开官网&#xff1a;Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

数字文旅重塑旅游发展新格局:以数字化转型为突破口,提升旅游服务的智能化水平,为游客带来全新的旅游体验

随着信息技术的迅猛发展&#xff0c;数字化已成为推动各行各业创新发展的重要力量。在旅游业领域&#xff0c;数字文旅的兴起正以其强大的驱动力&#xff0c;重塑旅游发展的新格局。数字文旅以数字化转型为突破口&#xff0c;通过提升旅游服务的智能化水平&#xff0c;为游客带…

急急急!微信朋友圈删除了怎么恢复?

微信朋友圈是我们与朋友分享生活点滴的重要平台&#xff0c;但有时候微信出现异常&#xff0c;导致我们编辑好的朋友圈被删除了&#xff0c;这时候该怎么办呢&#xff1f; 幸运的是&#xff0c;微信提供了一种简单的方式来恢复已删除的朋友圈内容。微信朋友圈删除了怎么恢复&a…

四信数字孪生水库解决方案,加快构建现代化水库运行管理矩阵

近年&#xff0c;水利部先后出台《关于加快构建现代化水库运行管理矩阵的指导意见》与《构建现代化水库运行管理矩阵先行先试工作方案》等文件&#xff0c;明确总体要求及试点水库、先行区域建设技术要求等&#xff0c;为全面推进现代化水库运行管理矩阵建设工作提供依据。 《2…

【Elasticsearch<一>✈️✈️】简单安装使用以及各种踩坑

目录 &#x1f378;前言 &#x1f37b;一、软件安装&#xff08;Windows版&#xff09; 1.1、Elasticsearch 下载 2.1 安装浏览器插件 3.1、安装可视化工具 Kibana 4.1、集成 IK 分词器 &#x1f37a;二、安装问题 &#x1f379;三、测试 IK 分词器 ​&#x1f377; 四、章…

spi接口的基本概念、引脚定义及注意事项

目录 基本概念 引脚定义 注意事项 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行接口技术&#xff0c;广泛应用于微控制器和各种外围设备之间的短距离通信。 基本概念 SPI接口允许微控制器以串行方式与一个或多个外围设备进行通信。它是一种高速、…

统信UOS下如何配置全局搜索

原文链接&#xff1a;统信UOS下如何配置全局搜索 Hello&#xff0c;大家好啊&#xff01;全局搜索是操作系统中非常实用的一个功能&#xff0c;它可以帮助我们快速定位文件、程序和其他资源。今天&#xff0c;我要给大家介绍如何在统信UOS桌面操作系统上配置全局搜索&#xff0…

IT廉连看——UniApp——样式绑定

IT廉连看——UniApp——样式绑定 一、样式绑定 两种添加样式的方法&#xff1a; 1、第一种写法 写一个class属性&#xff0c;然后将css样式写在style中。 2、第二种写法 直接把style写在class后面 添加一些效果&#xff1a;字体大小 查看效果 证明这样添加样式是没有问题的…

基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(matlab代码)

目录 1 主要内容 系统结构图 P2G-CCS 耦合模型 系统掺氢分析 其他算例对比 2 部分代码 3 下载链接 1 主要内容 该程序复现《基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度》模型&#xff0c;以碳交易和碳封存成本、燃煤机组启停和煤耗成本、弃风成本、购…

数据结构-二叉搜索树(BST)

目录 什么是二叉搜索树 二叉搜索树的特性 (1)顺序性 (2)局限性 二叉搜索树的应用 二叉搜索树的操作 (1)查找节点 (2)插入节点 (3)删除节点 (4)中序遍历 什么是二叉搜索树 如图所示&#xff0c;二叉搜索树&#xff08;binary search tree&#xff09;满足以下条件。…

2024长三角快递物流展:科技激荡,行业焕发新活力

7月8日&#xff0c;杭州将迎来快递物流科技盛宴&#xff0c;这是一年一度的行业盛会&#xff0c;吸引了全球领先的快递物流企业和创新技术汇聚一堂。届时&#xff0c;会展中心将全方位展示快递物流及供应链、分拣系统、输送设备、智能搬运、智能仓储、自动识别、无人车、AGV机器…