证明力引导算法forceatlas2为什么不是启发式算法

2024-05-07 07:52

本文主要是介绍证明力引导算法forceatlas2为什么不是启发式算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本概念

吸引力
F a ( n i ) = ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j \displaystyle \bm{F}_a(n_i)= \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} Fa(ni)=njNctd(ni)ωi,jdE(ni,nj)Vi,j
其中 n i n_i ni代表节点 i i i N c t d ( n i ) \mathcal{N}_{ctd}(n_i) Nctd(ni)代表与节点 n i n_i ni相连的所有节点的集合。 ω i , j \omega_{i,j} ωi,j是节点 n i n_i ni与节点 n j n_j nj之间边的权重。 d E ( n i , n j ) d_E(n_i, n_j) dE(ni,nj)是节点 n i n_i ni与节点 n j n_j nj之间的距离。 V i , j \bm{V}_{i,j} Vi,j是从节点 n i n_i ni倒节点 n j n_j nj之间的单位方向矢量。

图1. 吸引力定义中一些基本概念示意图
在这里插入图片描述

斥力
F r ( n i ) = ∑ n j ∈ N , n ≠ n j k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) d E ( n i , n j ) V j , i \displaystyle \bm{F}_r(n_i)=\sum_{n_j \in \mathcal{N}, n \neq n_j} k_r \frac{(D(n_i)+1)(D(n_j)+1)}{d_E(n_i,n_j)} \bm{V}_{j,i} Fr(ni)=njN,n=njkrdE(ni,nj)(D(ni)+1)(D(nj)+1)Vj,i
N \mathcal{N} N所有节点的集合, k r k_r kr一个 ( 0 , 1 ) (0,1) (0,1)之间的系数。 D ( n i ) D(n_i) D(ni)节点 n i n_i ni的度, D ( n j ) D(n_j) D(nj)节点 n j n_j nj的度。 V j , i \bm{V}_{j,i} Vj,i节点 n j n_j nj倒节点 n i n_i ni的单位方向矢量。

二、关于力引导过程是启发式与否的探讨

问:力引导系统的过程的结果是确定的吗?
答:是

证明过程出发点:
只要证明最终顶点分布是一个确定的结果,是否就证明了该结果是非启发式的。

证明:
力引导过程最终平衡态是指整个系统达到力的平衡 → \to 所有节点的速度为0,即 v ( n i ) → 0 , i = 1 , ⋯ , N v(n_i) \to 0,i=1,\cdots,N v(ni)0,i=1,,N。下面将开始推导平衡态情况下,节点所处的状态。

按照系统合力为0推导

0 = F r e s u l t a n t = ∑ n i ∈ N { F n i 节点所受吸引力合力 ( n i ) + F n i 节点所受斥力合力 ( n i ) } \bm{0}=\bm{F}_{resultant}=\sum_{n_i \in N} \left\{ \bm{F}_{n_i节点所受吸引力合力}(n_i)+\bm{F}_{n_i节点所受斥力合力}(n_i) \right\} 0=Fresultant=niN{Fni节点所受吸引力合力(ni)+Fni节点所受斥力合力(ni)}
= ∑ n i ∈ N { F a ( n i ) + F r ( n i ) } =\sum_{n_i \in N} \left\{ \bm{F}_a(n_i) + \bm{F}_r(n_i) \right\} =niN{Fa(ni)+Fr(ni)}
= ∑ n i ∈ N { ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j + ∑ n k ∈ N , n k ≠ n i k r ( D ( n i ) + 1 ) ( D ( n k ) + 1 ) d E ( n i , n k ) V k , i } =\sum_{n_i \in N} \left\{ \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} + \sum_{n_k \in \mathcal{N}, n_k \neq n_i} k_r \frac{(D(n_i)+1)(D(n_k)+1)}{d_E(n_i,n_k)} \bm{V}_{k,i} \right\} =niN njNctd(ni)ωi,jdE(ni,nj)Vi,j+nkN,nk=nikrdE(ni,nk)(D(ni)+1)(D(nk)+1)Vk,i

= ∑ n i ∈ N { 俩节点相同的斥力和吸引力 + 不存在吸引力的节点之间的斥力 } =\sum_{n_i \in N} \left\{ 俩节点相同的斥力和吸引力 + 不存在吸引力的节点之间的斥力 \right\} =niN{俩节点相同的斥力和吸引力+不存在吸引力的节点之间的斥力}

= ∑ n i ∈ N { { ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j + ∑ n j ∈ N c t d ( n i ) k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) d E ( n i , n j ) V j , i } + ∑ n k ∈ N , n k ≠ n i k r ( D ( n i ) + 1 ) ( D ( n k ) + 1 ) d E ( n i , n k ) V k , i } =\sum_{n_i \in N} \left\{ \left\{ \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} + \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} k_r \frac{(D(n_i)+1)(D(n_j)+1)}{d_E(n_i,n_j)} \bm{V}_{j,i} \right\} + \sum_{n_k \in \mathcal{N}, n_k \neq n_i} k_r \frac{(D(n_i)+1)(D(n_k)+1)}{d_E(n_i,n_k)} \bm{V}_{k,i} \right\} =niN njNctd(ni)ωi,jdE(ni,nj)Vi,j+njNctd(ni)krdE(ni,nj)(D(ni)+1)(D(nj)+1)Vj,i +nkN,nk=nikrdE(ni,nk)(D(ni)+1)(D(nk)+1)Vk,i

d E ( n i , n j ) = d j d_E(n_i,n_j)=d_{j} dE(ni,nj)=dj,其对应的x、y和z三轴分量为 d j x , d j y , d j z d_j^x, d_j^y, d_j^z djx,djy,djz,上述推导过程中存在矢量,下面我将采用解析结合,进一步推导。 V i , j \bm{V}_{i,j} Vi,j x x x y y y z z z轴上的坐标分别为 ( p x , p y , p z ) (p_x, p_y, p_z) (px,py,pz),则 V j , i \bm{V}_{j,i} Vj,i x x x y y y z z z轴上的坐标分别为 ( − p x , − p y , − p z ) (-p_x, -p_y, -p_z) (px,py,pz)。则上述公式可拆分为两个函数 f 1 f_1 f1 f 2 f_2 f2

f 1 = ( ∑ n j ∈ N c t d ( n i ) { ω i , j d j x p x − k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) d j x p x } , ∑ n j ∈ N c t d ( n i ) { ω i , j d j y p y − k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) d j y p y } , ∑ n j ∈ N c t d ( n i ) { ω i , j d j z p z − k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) d j z p z } ) f_1=\left(\sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \left\{ \omega_{i,j} \; d_j^x p_x - k_r \frac{(D(n_i)+1)(D(n_j)+1)}{d_j^x} p_x \right\}, \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \left\{ \omega_{i,j} \; d_j^y p_y - k_r \frac{(D(n_i)+1)(D(n_j)+1)}{d_j^y} p_y \right\}, \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \left\{ \omega_{i,j} \; d_j^z p_z - k_r \frac{(D(n_i)+1)(D(n_j)+1)}{d_j^z} p_z \right\} \right) f1= njNctd(ni){ωi,jdjxpxkrdjx(D(ni)+1)(D(nj)+1)px},njNctd(ni){ωi,jdjypykrdjy(D(ni)+1)(D(nj)+1)py},njNctd(ni){ωi,jdjzpzkrdjz(D(ni)+1)(D(nj)+1)pz}

f 2 = ∑ n k ∈ N , n k ≠ n i k r ( D ( n i ) + 1 ) ( D ( n k ) + 1 ) d E ( n i , n k ) V k , i f_2=\sum_{n_k \in \mathcal{N}, n_k \neq n_i} k_r \frac{(D(n_i)+1)(D(n_k)+1)}{d_E(n_i,n_k)} \bm{V}_{k,i} f2=nkN,nk=nikrdE(ni,nk)(D(ni)+1)(D(nk)+1)Vk,i
其中, f 1 f_1 f1是关于各个 d E ( n i , n j ) d_E(n_i, n_j) dE(ni,nj)的函数, f 2 f_2 f2是关于各个 d E ( n i , n k ) d_E(n_i, n_k) dE(ni,nk)的函数。再令, ω i , j p x = k 1 d j x \omega_{i,j} p_x=k_1^{d_j^x} ωi,jpx=k1djx − k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) p x = k 2 d j x -k_r (D(n_i)+1)(D(n_j)+1) p_x=k_2^{d_j^x} kr(D(ni)+1)(D(nj)+1)px=k2djx ω i , j p y = k 1 d j y \omega_{i,j} p_y=k_1^{d_j^y} ωi,jpy=k1djy − k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) p y = k 2 d j y -k_r (D(n_i)+1)(D(n_j)+1) p_y=k_2^{d_j^y} kr(D(ni)+1)(D(nj)+1)py=k2djy ω i , j p z = k 1 d j z \omega_{i,j} p_z=k_1^{d_j^z} ωi,jpz=k1djz − k r ( D ( n i ) + 1 ) ( D ( n j ) + 1 ) p z = k 2 d j z -k_r (D(n_i)+1)(D(n_j)+1) p_z=k_2^{d_j^z} kr(D(ni)+1)(D(nj)+1)pz=k2djz。那么函数 f 1 f_1 f1则为

f 1 = ( ∑ n j ∈ N c t d ( n i ) { k 1 d j x d j x + k 2 x j d j x } , { k 1 d j y d j y + k 2 d j y ) d j y } , { k 1 d j z d j z + k 2 d j z ) d j z } ) f_1=\left(\sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \left\{ k_1^{d_j^x} d_j^x + \frac{k_2^{x_j}}{d_j^x} \right\}, \left\{ k_1^{d_j^y} d_j^y + \frac{k_2^{d_j^y})}{d_j^y} \right\}, \left\{ k_1^{d_j^z} d_j^z + \frac{k_2^{d_j^z})}{d_j^z} \right\} \right) f1= njNctd(ni){k1djxdjx+djxk2xj},{k1djydjy+djyk2djy)},{k1djzdjz+djzk2djz)}

此时求偏导
{ ∂ f 1 ∂ x = 0 ∂ f 1 ∂ y = 0 ∂ f 1 ∂ z = 0 \left\{\begin{array}{l} \frac{\partial f_1}{ \partial x}=0 \\ \frac{\partial f_1}{ \partial y}=0 \\ \frac{\partial f_1}{\partial z}=0 \end{array} \right. xf1=0yf1=0zf1=0

由于距离只能为正,为了使得函数 f 1 f_1 f1最小,应满足距离满足如下情况
(1)根据函数 f 1 f_1 f1,相互连接的节点之间应满足距离 k 1 d j k 2 d j \frac{k_1^{d_j}}{k_2^{d_j}} k2djk1dj
(2)根据函数 f 2 f_2 f2,没有连接的节点之间的距离趋于无穷大。

这篇关于证明力引导算法forceatlas2为什么不是启发式算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966765

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个