单纯形投影算法

目录

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

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:
	//拓展数据域,加上id
	template<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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB数值类型

MATLAB 数值 MATLAB支持各种数字类&#xff0c;包括有符号和无符号整数以及单精度和双精度浮点数。默认情况下&#xff0c;MATLAB将所有数值存储为双精度浮点数。 您可以选择将任何数字或数字数组存储为整数或单精度数字。 所有数值类型都支持基本数组运算和数学运算。 转换…

好看的PPT目录怎么做?推荐2款一键生成目录的AI PPT软件!

一份完整的 PPT 演示文稿&#xff0c;由多个页面组成&#xff0c;包括 PPT 封面页、PPT 目录页、PPT 分隔页&#xff08;PPT 过渡页&#xff09;、PPT 内容页、PPT 结束页&#xff0c;每一个页面类型&#xff0c;在整个 PPT 中起到不同的作用&#xff1a; PPT 封面页是 PPT 的…

蒸镀的氧化硅薄膜为什么有时候是绿色有时候是棕色的?

知识星球&#xff08;星球名&#xff1a;芯片制造与封测社区&#xff0c;星球号&#xff1a;63559049&#xff09;里的学员问&#xff1a;我们用热阻式蒸镀设备镀氧化硅薄膜&#xff0c;出来的颜色有时候会发生变化是什么原因呀&#xff1f;有时候薄膜是绿色有时候是棕色。 氧…

金蝶云星空与旺店通·企业版对接集成付款申请单查询连通创建调拨入库单

金蝶云星空与旺店通企业版对接集成付款申请单查询连通创建调拨入库单 数据源平台:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&a…

智能物联网与Web3:连接未来数字生活的桥梁

随着科技的不断进步&#xff0c;智能物联网&#xff08;IoT&#xff09;和Web3技术正成为数字化时代的关键驱动力。智能物联网将各种物理设备连接到互联网&#xff0c;使其能够感知环境、收集数据并与其他设备通信&#xff0c;而Web3技术则以去中心化、安全性和透明性为核心&am…

DataX数据采集流程(项目)

目录 1.CDH介绍 2.ClouderaManager架构 3.服务器 4.dataX架构 5.Datax数据处理流程 6.DataX的使用说明 7.Mysql数据切割 8.Mysql数据导入HDFS 9.查询站点 站点页面如下&#xff0c;可进一步查询导入的数据内容 10.dataX-Web访问页面 创建数据库连接 1.CDH介绍 --(…

NDK 入门(二)—— 调音小项目

NDK 入门系列主要介绍 JNI 的相关内容&#xff0c;目录如下&#xff1a; NDK 入门&#xff08;一&#xff09;—— JNI 初探 NDK 入门&#xff08;二&#xff09;—— 调音小项目 NDK 入门&#xff08;三&#xff09;—— JNI 注册与 JNI 线程 NDK 入门&#xff08;四&#xff…

【错题集-编程题】重排字符串(贪心 + 构造)

牛客对应题目链接&#xff1a;重排字符串 (nowcoder.com) 力扣对应题目链接&#xff1a;1054. 距离相等的条形码 - 力扣&#xff08;LeetCode&#xff09; 一、分析题目 二、代码 1、没看题解之前AC的代码 //牛客代码(看了题解之后AC的代码) #include <iostream> #inc…

【Python BUG】connect: permission denied.

问题描述 解决方案 本质是权限问题 sudo密码即可

C语言阶段性测试错题纠正与拓展

引言&#xff1a;在2024年4月26日&#xff0c;我进行了C语言知识的“期末考试”。通过这次考试&#xff0c;我发现了我的知识漏洞。所以&#xff0c;我写下这篇博客来记录我的错题&#xff0c;并进行纠正&#xff0c;然后对于以前遗忘知识的回顾。 更多有关C语言的知识详解可前…

什么是摇摆交易?澳福一篇文章全面解读

摇摆交易是八大外汇交易策略其中一种交易策略。摇摆交易基于这样的想法&#xff0c;交易者希望利用波动范围和趋势市场的优势&#xff0c;通过选择“顶部”和“底部”&#xff0c;交易者可以相应地输入多头和空头头寸。即可以应用局部校正来最大化利润。fpmarkets澳福认为这种交…

P5931 灯泡

题目描述 相比 Wildleopard 的家&#xff0c;他的弟弟 Mildleopard 比较穷。他的房子是狭窄的&#xff0c;而且在他的房间里仅有一个灯泡。每天晚上&#xff0c;他徘徊在自己狭小的房子里&#xff0c;思考如何赚更多的钱。有一天&#xff0c;他发现他的影子的长度随着他在灯泡…

【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码

文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果 二、代码实现 坦克大战游戏 2.1 项目搭建 本游戏主要分为两个对象&#xff0c;分别是我方坦克和敌方坦克。用户可…

人工智能技术在教育中的潜力有多大

原文&#xff1a;人工智能技术在教育中的潜力有多大&#xff1f; - 知乎 作者&#xff1a;大全Prompt 链接&#xff1a;https://www.zhihu.com/question/637034129/answer/3346272227 来源&#xff1a;知乎 谢邀&#xff1a;在技术快速发展的今天&#xff0c;人工智能&#x…

数据复制的艺术:深拷贝与浅拷贝在JavaScript中的实现方式

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 赋值和拷贝 浅拷贝与深拷贝区别 浅拷贝的实现方式 1.Object.assign() 2.…

变革 Perplexica:AI驱动的问答搜索引擎

Perplexica是一个开源的人工智能搜索工具&#xff0c;也可以说是一款人工智能搜索引擎&#xff0c;它深入互联网以找到答案。受Perplexity AI启发&#xff0c;它是一个开源选择&#xff0c;不仅可以搜索网络&#xff0c;还能理解您的问题。它使用先进的机器学习算法&#xff0c…

国产Sora诞生!清华团队发布Vidu大模型,可直接生成16秒视频

大模型之争已从单模态转向多模态。 4月27日&#xff0c;在2024中关村论坛年会未来人工智能先锋论坛上&#xff0c;清华大学联合北京生数科技有限公司正式发布了文生视频大模型——Vidu。 在会议上&#xff0c;清华大学人工智能研究院副院长、生数科技首席科学家朱军对外展示了…

windows11家庭版开启Hyper-v

前提&#xff1a;如果在控制面板中-->程序和功能-->启用和关闭windows功能-->没有Hyper-v 1.什么是Hyper-v&#xff1f; Hyper-v分为两个部分&#xff1a;底层的虚拟机平台、上层的虚拟机管理软件 2.Hyper-v安装 2.1新建hyper.cmd文件&#xff0c;写入下面的内容&…

C++初阶-----对运算符重载的进一步理解(2)

目录 1.对于加加&#xff0c;减减运算符的重载理解 2.const修饰的一些事情 3.日期对象之间的减法实现逻辑 1.对于加加&#xff0c;减减运算符的重载理解 &#xff08;1&#xff09;在C语言里面&#xff0c;我们已经知道并且了解加加&#xff0c;减减的一些基本的用法&#…

RepeatMasker 基因组重复区域文件

rmsk.txt 一般关注标红的几列, 各列含义: Schema for RepeatMasker - Repeating Elements by RepeatMasker "rmsk.txt" 是 UCSC Genome Browser 提供的一个文件,用于描述重复序列的注释信息。通常,它包含了以下列: 1. **bin**:UCSC Genome Browser 使用的染色…