当前位置: 首页 > article >正文

种群和种群之间连接的设计

我们知道神经元的创建方式是以种群为基础的,一个种群内的所有神经元的参数都一样,而种群与种群之间的连接也是随机概率的。所以我们首先应该设计一个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);

就可以实现群落的是神经元的创建和连接。


http://www.kler.cn/a/155273.html

相关文章:

  • Android OpenGL ES详解——立方体贴图
  • 设计模式:工厂方法模式和策略模式
  • qt QVideoWidget详解
  • GitLab实现 HTTP 访问和 SMTP 邮件发送
  • Docker无缝更新Zentao
  • 力扣.15 三数之和 three-sum
  • 树莓派多串口通信
  • 力扣5.最长回文子串
  • 变分和导数有什么关系
  • 智能优化算法应用:基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Linux 命令stat
  • Spring学习笔记:Day2
  • docker容器中创建非root用户
  • PMP-01
  • Docker安装Elasticsearch以及ik分词器
  • 8-1运用指针比较三个数的大小
  • 深入理解Servlet(下)
  • 【车载开发系列】FlashMemory基本概念
  • 使用Redis和opcache为网站加速教程
  • Filament引擎分析--command抽象设备API
  • 深入理解网络非阻塞 I/O:NIO
  • zabbix_sender——向zabbix交互的sdk
  • Pandas在Excel同一个sheet里插入多个Dataframe和行
  • Leetcode.330 按要求补齐数组
  • ★543. 二叉树的直径
  • 架构图是什么,怎么做?