本文介绍: 我们知道神经元的创建方式是以种群为基础的,一个种群内的所有神经元的参数都一样,而种群与种群之间的连接也是随机概率的。创建的邻接表存储在名为global_adjacency中,在主函数中创建神经元和突触。在创建神经元的同时给每一个神经元附上一个gid。在连接两个神经元群落时,需要设置连接点概率。就可以实现群落的是神经元的创建和连接。
我们知道神经元的创建方式是以种群为基础的,一个种群内的所有神经元的参数都一样,而种群与种群之间的连接也是随机概率的。所以我们首先应该设计一个Population的结构,考虑其需要的元素有神经元gid集合和种群好,所设计数据结构如下:
创建神经元为
在创建神经元的同时给每一个神经元附上一个gid。
void ConnectionManager::connect(int source_group_id, int target_group_id,double connection_probability)
{
//获取源种群和目标的神经元gid的集合
std::vector<int> source_neuron_group = populations[source_group_id].neuron_gid_group;
std::vector<int> target_neuron_group = populations[target_group_id].neuron_gid_group;
//打乱两个数组,保证随机性
std::random_shuffle(source_neuron_group.begin(), source_neuron_group.end());
std::random_shuffle(target_neuron_group.begin(), target_neuron_group.end());
// 根据连接概率和目标种群的神经元数量随机生成连接数量
std::default_random_engine generator;
generator.seed(rand01());
std::binomial_distribution<> gen(target_neuron_group.size(), connection_probability);
for (int ii = 0; ii < source_neuron_group.size(); ii++)
{
int index = source_neuron_group[ii]; //原神经元的gid
int num_connections = gen(generator);//连接数量
// 设置随机位置
int rand_conn = static_cast<int>(rand01() * target_neuron_group.size());
if (num_connections == 0)
continue;
//调整邻接表大小
//global_adjacency[index].resize(global_adjacency[index].size() + num_connections);
if ((num_connections + rand_conn) > target_neuron_group.size())
{
int diff = target_neuron_group.size() - rand_conn;
global_adjacency[index].insert(global_adjacency[index].end(), target_neuron_group.end() - diff, target_neuron_group.end());
num_connections = num_connections - diff;
global_adjacency[index].insert(global_adjacency[index].end(), target_neuron_group.begin(), target_neuron_group.begin() + diff);
}
else
{
global_adjacency[index].insert(global_adjacency[index].end(), target_neuron_group.begin() + rand_conn, target_neuron_group.begin() + num_connections + rand_conn);
}
}
}
创建的邻接表存储在名为global_adjacency中,在主函数中创建神经元和突触
int group1 = kernel().conn_manger.create(2);
int group2 = kernel().conn_manger.create(2);
//int group3 = kernel().conn_manger.create(10);
kernel().conn_manger.connect(group1, group2, 1.0);
//kernel().conn_manger.connect(group2, group3, 0.3);
原文地址:https://blog.csdn.net/qq_39591612/article/details/134689322
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_38222.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。