分布式仿真SNN的思考(二)

经过漫长的思考,我依然无法为昨天的第二个问题找到合适的解决方法。然后今天依然对整体的放着进行思考,找出规律再去写代码。考虑SNN网络:

分布式仿真SNN的思考(二)_第1张图片

那么他的邻接表gabal_adj:

0

1

2

1

3

2

1

3

3

4

5

4

6

5

2

6

5

3

假设有两个进程模拟,第a个进程上的SNN拓扑:

分布式仿真SNN的思考(二)_第2张图片 

则他的邻接adj1表应该为

0

1

2

1

2

1

3

4

5

2

6

 标红意味着他不在此进程。第b个进程上的拓扑

 分布式仿真SNN的思考(二)_第3张图片

则他的邻接表的表示adj2为

0

1

3

2

3

4

5

4

6

5

6

5

3

将这些数据放在一起有:

分布式仿真SNN的思考(二)_第4张图片

从以上的三张表中很容易得到神经元需要传递给的后突触和神经元,也可以识别是否传递给其它进程,但是需要一直维持一个全局的邻接表,感觉代价有点大。但换一种思考,只存储每个神经元的后神经元的个数,即

分布式仿真SNN的思考(二)_第5张图片

根据一定adj1[i].size()<=global_adj[i]. 很容易可以看出

当一个神经元i是本地神经元时,且adj1[i].size()

当一个神经元i是本地神经元时,且adj1[i].size()=global_adj[i].size(),那么一定是本地脉冲

当一个神经元i不是本地神经元,adj1[i].size()=global_adj[i].size(),远程脉冲

当一个神经元i不是本地神经元,adj1[i].size()

由此我们就可以解决之前提出的问题。

你可能感兴趣的:(分布式模拟脉冲神经网络,c++)