#include <iostream>
#include <cstring>
using namespace std;
static unsigned long Next = 1;
//RAND_MAX assumed to be 32767
int myrand(void)  //题目中已给出的伪随机数生成函数
{Next = Next * 1103515245 + 12345;return((unsigned)(Next/65536)%32768);
}int N, S, P, T;
double Dt; //Delta_t 时间间隔 //定义存储结构体,神经元和突触
int rn;
struct neural{double v_pre, u_pre; //神经元内状态参数v和u的前一时间间隔整数倍的时刻,即前一记录时刻的状态 double v, u; //神经元内状态v和u为当前记录时刻的状态 double a, b, c, d; //神经元内的其他参数,常量 ,a和b是用来通过上一记录时刻计算此时记录时刻的状态所需要用到的参数 //c和d是当该神经元某时刻受到所有脉冲之和大于或等于30时,用来再次重置v和u
}NN[1000];int r[1000]; //用来存储每个脉冲源的参数,即r
double IK[1000][10000] = {0}; //记录突触的某个时刻出结点和延迟后时间 的突触传播的强度 ,即某个强度,什么时刻,到达某个出结点//又因为出结点的编号恰好与神经元对应,即到达的是某个编号的神经元 struct edg{int from, to; //突触的入结点编号,出结点编号 double w;    //在该突触上传播的脉冲强度,虽然脉冲是神经元或脉冲源发射脉冲//但由于突触的方向是单向的,所以,可以只记录传播时的脉冲强度 int D;   //突触上的传播延迟
}e[1000];//按题目要求输入
int main()
{scanf("%d %d %d %d", &N, &S, &P, &T); //N个神经元,S个突触,P个脉冲源,从0时刻仿真到T时刻 scanf("%lf", &Dt); //仿真期间,每隔Dt的时间间隔记录一次 int rn;  //具有相同初始状态v,u和内部参数a,b,c,d的神经元个数 double vv, uu, aa, bb, cc, dd; //初始时即0时刻时,神经元的状态,和自己设置的四个参数 int sum = 0;while(sum<N) //输入神经元的参数 {scanf("%d %lf %lf %lf %lf %lf %lf", &rn, &vv, &uu, &aa, &bb, &cc, &dd);for(int i=sum; i<sum+rn; i++){NN[i].v_pre = NN[i].v = vv;NN[i].u_pre = NN[i].u = uu;NN[i].a = aa;NN[i].b = bb;NN[i].c = cc;NN[i].d = dd;}sum = sum + rn;}for(int i=0; i<P; i++)scanf("%d", &r[i]);   //输入每个脉冲源的参数,用来和伪随机数作比较,以判断是否发出脉冲信号//存放在r数组中 for(int i=0; i<S; i++) //输入每个突触的参数 {int ff, tt;double ww;int DD;scanf("%d %d %lf %d", &ff, &tt, &ww, &DD);e[i].from = ff;  //突触的入结点编号 e[i].to = tt;    //突触的出结点编号 e[i].w = ww;     //突触传播的脉冲强度 ,突触出结点所受到的脉冲 e[i].D = DD;     //突触的传播延迟 }//计算所有脉冲源在1到T时刻,是否会发送脉冲,
//并将脉冲强度值赋值到连接的神经元IK中 for(int t=1; t<T; t++)  //遍历每个记录时刻 {for(int i=0; i<P; i++) //遍历每个脉冲源,{if(r[i]>myrand()) //依次判断每个脉冲源是否发送脉冲信号 {for(int j=0; j<S; j++) //若脉冲源要发射脉冲,遍历每个突触 {if((e[j].from == i+N) && (t+e[j].D <= T)) //因为脉冲源的编号排在神经元之后,而神经元的数量为N,而i在【0,p】之间,所以脉冲源的编号在【N,N+i】之间 {                                      //如果突触的入结点编号等于脉冲源编号, 且当前记录时刻加上在突触上的延时时间,还在仿真时间内 IK[e[j].to][t+e[j].D] = e[j].w;     //则把当前突触传播的脉冲强度,用IK记录,突触的出结点,和延迟后的时刻 ,即突触的出结点所连接的神经元接受脉冲的时刻 }}}}}//计算每个时刻,每个神经元按照公式计算。
//如果满足条件,发出脉冲。 int cnt[1000] = {0};for(int t=1; t<=T; t++)  //每个时刻判断一次所有的神经元 {for(int i=0; i<N; i++)  //遍历每个神经源 {NN[i].v = NN[i].v_pre + Dt*(0.04*NN[i].v_pre*NN[i].v_pre + 5*NN[i].v_pre + 140.0 - NN[i].u_pre) + IK[i][t];NN[i].u = NN[i].u_pre + Dt*NN[i].a*(NN[i].b*NN[i].v_pre - NN[i].u_pre);if (NN[i].v >= 30) //如果神经元内v的值满足条件 {cnt[i]++;       //则发射脉冲 ,记录神经元发射的脉冲次数 NN[i].v = NN[i].c;  NN[i].u = NN[i].u + NN[i].d;  //如题,重置神经元内部参数 for(int j=0; j<S; j++)   //遍历每个突触 {if((e[j].from == i) && (t+e[j].D <= T))  //突触的入结点等于若神经元的编号,且延迟后在时间范围内 {IK[e[j].to][t+e[j].D] += e[j].w; //则把突触的出结点所连接的神经元在当前时刻延迟后所收的的脉冲,加上当前时刻的脉冲 }}}NN[i].v_pre = NN[i].v; NN[i].u_pre = NN[i].u;   //更新神经元内部的参数,每过一个纪录时刻,神经元内参数的当前时刻状态就变成了前一时刻的状态 }}//遍历每个神经元,求得T时刻的最值和发送脉冲数的最值 double minv = NN[0].v, maxv = NN[0].v; //存储所有神经元的v的最值 int mincnt = cnt[0], maxcnt = cnt[0];  //存储所有神经元的脉冲次数的最值for(int i=1; i<N; i++) //遍历每个神经元 {if(minv > NN[i].v) minv = NN[i].v;  //寻找所有神经元V的最小值,并记录 if(maxv < NN[i].v) maxv = NN[i].v;  //寻找所有神经元V的最大值,并记录if(mincnt > cnt[i]) mincnt = cnt[i];if(maxcnt < cnt[i]) maxcnt = cnt[i];  //同理 }printf("%.3lf %.3lf\n", minv, maxv); //输出结果 printf("%d %d\n",mincnt, maxcnt);return 0;
}

CCF CSP 202109-3 脉冲神经网络相关推荐

  1. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  2. 脉冲神经网络在目标检测的首次尝试,性能堪比CNN | AAAI 2020

    译者 |  VincentLee 来源 | 晓飞的算法工程笔记 脉冲神经网络(Spiking neural network, SNN)将脉冲神经元作为计算单元,能够模仿人类大脑的信息编码和处理过程.不 ...

  3. 第三十二课.脉冲神经网络SNN

    目录 时间驱动与事件驱动 时间驱动 事件驱动 基于时间驱动的脉冲神经元 spikingjelly:LIF神经元 实验仿真 时间驱动与事件驱动 时间驱动 为了便于理解时间驱动,我们可以将SNN(spik ...

  4. 人工神经网络秒变脉冲神经网络,新技术有望开启边缘AI计算新时代

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 能更好模仿生物神经系统运行机制的脉冲神经网络在发展速度和应用范围上都还 ...

  5. 脉冲神经网络(SNN)概述

    https://www.toutiao.com/a6701844289518830091/ 主要讨论脉冲神经网络的拓扑结构.信息的脉冲序列编码方法.脉冲神经网络的学习算法和进化方法等. 一.脉冲神经网 ...

  6. 类脑量子叠加脉冲神经网络:从量子大脑假说到更好的人工智能

    来源:神经现实 作者:曾毅研究团队 | 封面:Mario De Meyer 排版:光影 以深度神经网络为代表的现代人工智能模型在识别图像.语音.文字等模式信息任务取得优异表现.然而,生物大脑具有处理复 ...

  7. 强化学习中的脉冲神经网络

    简 介: 脉冲强化学习是最近兴起的将脉冲神经网络应用到强化学习中的一个研究领域.固然脉冲神经网络的引入会给强化学习带来一些新的东西,但目前的研究仍然仅仅满足于如何让算法收敛,而没有发挥出脉冲神经网络独 ...

  8. 脉冲神经网络_【强基固本】脉冲神经网络(SNN)

    "强基固本,行稳致远",科学研究离不开理论基础,人工智能学科更是需要数学.物理.神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出"强基固本"专栏,讲解 ...

  9. 如何看待第三代神经网络SNN?详解脉冲神经网络的架构原理、数据集和训练方法 原创

    作者丨科技猛兽 编辑丨极市平台 本文首发于极市平台公众号,转载请获得授权并标明出处. 本文目录 1 脉冲神经网络简介 2 脉冲神经网络原理 3 脉冲神经网络数据集 4 脉冲神经网络训练方法 5 脉冲神 ...

  10. 计算机能力挑战赛_蓝桥杯、PAT、CCF CSP、团体程序设计天梯赛、传智杯、计算机能力挑战赛、软考等大学生编程比赛/考试介绍...

    介绍7个适合普通大学生参加的编程比赛/考试(注:有的比赛如蓝桥杯有多种赛别,本文仅介绍其中的程序设计/编程比赛). 编程入门书籍推荐<算法笔记>,内容详细易懂,对新手非常友好,描述语言为C ...

最新文章

  1. 输入vue ui没反应
  2. c++ 调用python2类获取返回值
  3. PAT乙级-1056. 组合数的和(15)
  4. 2021年10月份自考感悟
  5. oracle别名作用范围,在Oracle的Where子句子查询中使用别名或表名,
  6. 信息收集之子域名查询--子域名扫描器: 子域名挖掘机 Subdomainsbrute---基本使用
  7. 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...
  8. php试题及答案 博客,转php面试题及我的答案(一)
  9. 2020年30种最佳的免费网页爬虫软件
  10. 计算机设备布局图,电脑主板插槽对应哪些硬件?详细的主板布局图解
  11. Matlab实现小世界网络生成及其分析
  12. iPhone添加节假日日历地址
  13. kiosk 无效_开发Kiosk Web应用程序的10个技巧
  14. HTML5期末大作业:售票网站设计——票务网站整套模板(24个页面) HTML+CSS+JavaScript
  15. 曾经的大学德育论文,致敬天津理工大学
  16. python爬取网易词典,利用Python3和Charles爬取有道词典
  17. 前端json格式的介绍,转换以及解析
  18. 屏幕分辨率 VGA、HVGA、QVGA、WVGA、WQVGA
  19. 君子博学而日参省乎己,则知明而行无过矣
  20. linux安装socket.io,Socket.IO

热门文章

  1. revit二次开发 ExportContext
  2. 为什么我们需要软件质量管理平台SonarQube
  3. java sqlldr_java调用sqlldr报错:Message 2100 not found
  4. .net 导入Excel2007
  5. 【游戏设计】从星露谷物语中学习游戏制作
  6. JSP中连接数据库时的一些心得体会
  7. c语言 字符串 正序再倒序_MySQL - 字符串索引优化
  8. Otsu(大津法,最大类间方差法)
  9. 使用你们的AirDisk产品会不会泄露文件给你们,会不会将文件数据传送到你们服务器?
  10. 企业文化与价值观 — 给新员工的一封信