CCF-CSP 第23次认证考试 202109-3脉冲神经网络(模拟)(100分)

CSP-J初赛模拟试题及答案 (1)判断题16. 输入的n等于1001时,程序不会发生下标越界。(X)17. 输入的a[i]必须全为正整数,否则程序将陷入死循环。(X)18. 当输入”5 2 11 9 16 10”时,输出为”3 4 3 17 5”。(X)19. 当输入为”1 511998“时,输出为”18”。(√)20. 将源代码中g函数的定义(13-16行)移到main函数的后面,程序可以正常编译运行。(X)单选题21. 当输入为”2 -65536 2147483647”时,输出为(B)。(2)判断题。 阅读详情

问题描述

试题编号:202109-3
试题名称:脉冲神经网络
时间限制:1.0s
内存限制:512.0MB
问题描述:

题目背景

在本题中,你需要实现一个 SNN(spiking neural network,脉冲神经网络)的模拟器。一个 SNN 由以下几部分组成:

  1. 神经元:按照一定的公式更新内部状态,接受脉冲并可以发放脉冲
  2. 脉冲源:在特定的时间发放脉冲
  3. 突触:连接神经元-神经元或者脉冲源-神经元,负责传递脉冲

题目描述

神经元会按照一定的规则更新自己的内部状态。本题中,我们对时间进行离散化处理,即设置一个时间间隔 Δt,仅考虑时间间隔整数倍的时刻 t=kΔt(k∈Z+),按照下面的公式,从 k−1 时刻的取值计算 k 时刻的变量的取值:

vk=vk−1+Δt(0.04vk−12+5vk−1+140−uk−1)+Ik

uk=uk−1+Δta(bvk−1−uk−1)

其中 v 和 u 是神经元内部的变量,会随着时间而变化,a 和 b 是常量,不会随着时间变化;其中 Ik 表示该神经元在 k 时刻接受到的所有脉冲输入的强度之和,如果没有接受到脉冲,那么 Ik=0。当进行上面的计算后,如果满足 vk≥30,神经元会发放一个脉冲,脉冲经过突触传播到其他神经元;同时,vk 设为 c 并且 uk 设为 uk+d,其中 c 和 d 也是常量。图 1 展示了一个神经元 v 变量随时间变化的曲线。

 
图1: 神经元 v 变量随时间变化的曲线

突触表示的是神经元-神经元、脉冲源-神经元的连接关系,包含一个入结点和一个出结点(可能出现自环和重边)。当突触的入结点(神经元或者脉冲源)在 k 时刻发放一个脉冲,那么在传播延迟 D(D>0) 个时刻以后,也就是在 k+D 时刻突触的出结点(神经元)会接受到一个强度为 w 的脉冲。

脉冲源在每个时刻以一定的概率发放一个脉冲,为了模拟这个过程,每个脉冲源有一个参数 0<r≤32,767,并统一采用以下的伪随机函数:

C++ 版本:

static unsigned long next = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}

C++

Python 版本:

next = 1
def myrand():
    global next
    next = (next * 1103515245 + 12345) % (2 ** 64)
    return (next // 65536) % 32768

Python

Java 版本:

long next = 1;
int myrand() {
    next = next * 1103515245 + 12345;
    return (int)((Long.divideUnsigned(next, 65536)) % 32768);
}

Java

在每个时间刻,按照编号顺序从小到大,每个脉冲源调用一次上述的伪随机函数,当 r>myrand() 时,在当前时间刻发放一次脉冲,并通过突触传播到神经元。

进行仿真的时候,已知 0 时间刻各个神经元的状态,从 1 时间刻开始按照上述规则进行计算,直到完成 T 时刻的计算,再输出 T 时刻神经元的 v 值和发放的脉冲次数分别的最小值和最大值。

规定输入数据中结点按如下方式顺序编号:[0,N−1] 为神经元的编号,[N,N+P−1] 为脉冲源的编号。

代码中请使用双精度浮点类型。

输入格式

从标准输入读入数据。

输入的第一行包括四个以空格分隔的正整数 N S P T,表示一共有 N 个神经元,S 个突触和 P 个脉冲源,输出时间刻 T 时神经元的 v 值。

输入的第二行是一个正实数 Δt,表示时间间隔。

输入接下来的若干行,每行有以空格分隔的一个正整数 RN 和六个实数 v u a b c d,按顺序每一行对应 RN 个具有相同初始状态和常量的神经元:其中 v u 表示神经元在时刻 0 时的变量取值;a b c d 为该神经元微分方程里的四个常量。保证所有的 RN加起来等于 N。它们从前向后按编号顺序描述神经元,每行对应一段连续编号的神经元的信息。

输入接下来的 P 行,每行是一个正整数 r,按顺序每一行对应一个脉冲源的 r 参数。

输入接下来的 S 行,每行有以空格分隔的两个整数 s(0≤s<N+P)、t(0≤t<N) 、一个实数 w(w≥0) 和一个正整数 D,其中 s 和 t 分别是入结点和出结点的编号;w 和 D 分别表示脉冲强度和传播延迟。

输出格式

输出到标准输出。

输出共有两行,第一行由两个近似保留 3 位小数的实数组成,分别是所有神经元在时刻 T 时变量 v 的取值的最小值和最大值。第二行由两个整数组成,分别是所有神经元在整个模拟过程中发放脉冲次数的最小值和最大值。

只要按照题目要求正确实现就能通过,不会因为计算精度的问题而得到错误答案。

样例1输入

1 1 1 10
0.1
1 -70.0 -14.0 0.02 0.2 -65.0 2.0
30000
1 0 30.0 2

Data

样例1输出

-35.608 -35.608
2 2

Data

样例1解释

该样例有 1 个神经元、1 个突触和 1 个脉冲源,时间间隔 Δt=0.1。唯一的脉冲源通过脉冲强度为 30.0、传播延迟为 2 的突触传播到唯一的神经元。

该样例一共进行 10 个时间步的模拟,随机数生成器生成 10 次随机数如下:

16838
5758
10113
17515
31051
5627
23010
7419
16212
4086

None

因此唯一的脉冲源在时刻 1-4 和 6-10 发放脉冲。在时间刻从 1 到 10 时,唯一的神经元的 v 取值分别为:

-70.000
-70.000
-40.000
-8.200
-65.000
-35.404
-32.895
0.181
-65.000
-35.608

None

该神经元在时刻 5 和时刻 9 发放,最终得到的 v=−35.608 。

样例2输入

2 4 2 10
0.1
1 -70.0 -14.0 0.02 0.2 -65.0 2.0
1 -69.0 -13.0 0.04 0.1 -60.0 1.0
30000
20000
2 0 15.0 1
3 1 20.0 1
1 0 10.0 2
0 1 40.0 3

Data

样例2输出

-60.000 -22.092
1 2

Data

子任务

子任务TNSPD分值
1≤102≤102≤102≤102≤10230
2≤103≤103≤103≤103≤10340
3≤105≤103≤103≤103≤1030

/*
*@Author:   GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
typedef long long  ll;
#define ull unsigned long long
#define scf(n) scanf("%d",&n)
#define scfl(n) scanf("%lld",&n)
#define prf(n) printf("%d",n)
#define prfl(n) printf("%lld",n)
#define scfd(n) scanf("%lf",&n)
#define prfd(n) printf("%.lf",n)
#define prf10(n) printf("%.10f",n)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)/2
#define mms(x, y) memset(x, y, sizeof x)
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int INF = 0x3f3f3f3f;
const double EPS=1e-10;
const double Pi=3.1415926535897;
inline double max(double a,double b){
    return a>b?a:b;
}
inline double min(double a,double b){
    return a<b?a:b;
}
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};
 
//fastPow
int fastPow(int x,int n){
    if(n==1) return x;
    int tmp=fastPow(x,n/2); //fenzi
    if(n%2==1) return tmp*tmp*x;
    else return tmp*tmp;
}
ll gcd(ll m, ll n){return n == 0 ? m : gcd(n, m%n);}
ll lcm(ll m, ll n){return m*n / gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
 
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}


//dijsktra
//start
//const int MAX= 10020;
//struct node {
//    int x,to,next,w;
//    bool operator <(const node &a) const{
//        return this->w>a.w;
//    }
//}G[MAX<<1];
//int cnt;
//int dis[MAX];
//int vis[MAX];
//int head[MAX];
//
//
//int m,n;
//int b[10020];
//
//
//void add(int u,int v,int w){
//    G[++cnt].to=v;
//    G[cnt].w=w;
//    G[cnt].next=head[u];
//    head[u]=cnt;
//}
//int  dijkstra(int s){
//    mms(dis,INF);
//    dis[s]=0;
//    priority_queue<node> p;
//    node t;
//    t.x=s;
//    t.w=0;
//    p.push(t);
//    while (!p.empty()) {
//        node u=p.top();
//        p.pop();
//        int v=u.x;
//        if(dis[v]!=u.w) continue;
//        for(int i=head[v];i;i=G[i].next){
//            int to=G[i].to;
//            if(dis[to]>dis[v]+G[i].w){
//                dis[to]=dis[v]+G[i].w;
//                t.x=to;
//                t.w=dis[to];
//                p.push(t);
//            }
//
//        }
//    }
//    int m1=-1;
//        int m2=-1;
//        dis[s]=-3;
//        for(int i=1;i<=n;i++){
//            if(dis[i]==INF) continue;
//            if(dis[i]>m1){
//                m2=m1;
//                m1=dis[i];
//            }
//            else if(dis[i]>m2){
//                m2=dis[i];
//            }
//        }
//        if(m1!=-1&&m2!=-1) return m1+m2;
//        return -1;
//
//}
//
//
//int main(){
//    int t;
//    cin>>t;
//    while (t--) {
//        cin>>n>>m;
//        int u,v,w;
//
//        for(int i=1;i<=m;i++){
//            cin>>u>>v>>w;
//            add(u,v,w);
//            add(v,u,w);
//        }
//        int ans=0;
//        int cnt=0;
//        for(int i=1;i<=n;i++){
//            ans=max(ans,dijkstra(i));
//        }
//        cout<<ans<<endl;
//    }
//}
//end


//e_cheak
//int vis[1000010];
//int prime[100010];
//int  e_cheak(int n){   //k为2-n素数的个数
//    for(int i=0;i<=n;i++){
//        vis[i]=0;
//    }
//    for(int i=2;i*i<=n;i++){
//        if(!vis[i]){
//            for(int j=i*i;j<=n;j+=i){
//                vis[j]=1;
//            }
//        }
//    }
//    int k=0;
//    for(int i=2;i<=n;i++){
//        if(!vis[i])
//            prime[k++]=i; //统计素数
//    }
//    return k;
//}
//
////进制转化 x转化为y进制
//string work(int x,int y){
//    string str="";
//    while(x){
//        if(x%y>=10) str+=x%y+'A'-10;
//        else str+=x%y+'0';
//        x/=y;
//    }
//    reverse(str.begin(),str.end());
//    return str;
//}
//
//
//const int MAX=1000005;
//char str[MAX];
//char pattern[MAX];
//int cnt;
//int Next[MAX];
//void  getnext(string p,int plen){
//    Next[0]=0;
//    Next[1]=0;
//    for(int i=1;i<plen;i++){
//        int j=Next[i];
//        while (j&&p[i]!=p[j]) {
//            j=Next[j];
//        }
//        Next[i+1]=(p[i]==p[j])?j+1:0;
//    }
//}
//int kmp(string s,string p){
//    int last=-1;
//    int slen=s.length();
//    int plen=p.length();
//    getnext(p,plen);
//    int j=0;
//    for(int i=0;i<slen;i++){
//        while (j&&s[i]!=p[j]) {
//            j=Next[j];
//        }
//        if(s[i]==p[j]) j++;
//        if(j==plen){
//            //start
//            return 1;
//            //end
//        }
//    }
//    return 0;
//}
//int main(){
//    int n;
//    cin>>n;
//    string t;
//    string s="";
//    for(int i=2;i<=16;i++){
//        s="";
//        s+=work(n,i);
//        if(kmp(s,t))
//        {
//            cout<<"yes";
//            return 0;
//        }
//    }
//    cout<<"no"<<endl;
//    return 0;
//}


//string s1,s2;
//int main(){
//    cin>>s1;
//    s2="cocacola";
//    int ans;
//    for(int i=0;i<s1.length();i++){
//        if(s1[i]!=s2[i])
//            ans++;
//    }
//    cout<<ceil(ans/2);
//}


//const int MAX=10010;
//
//int n;
//int a[MAX];
//int st[MAX],ed[MAX];
//int pos[MAX];
//int sum[MAX];
//int add[MAX];
////区间修改
//void change(int l,int r,int d){
//    int p=pos[l];
//    int q=pos[r];
//    if(p==q){ //情况1 区间位于一个块里面
//        for(int i=l;i<=r;i++){
//            a[i]+=d;
//        }
//        sum[p]+=d*(r-l+1);
//    }
//    else { //区间跨多个块
//        for(int i=p+1;i<=q-1;i++){
//            add[i]+=d; //完整的块里面的数据直接加上d
//        }
//        for(int i=l;i<=ed[p];i++){ //整块前面的散块
//            a[i]+=d;
//        }
//        sum[p]+=d*(ed[p]-l+1);
//        for(int i=st[q];i<=r;i++){ //整块后面的散块
//            a[i]+=d;
//        }
//        sum[q]+=d*(r-st[q]+1);
//    }
//}
//
//ll query(int l,int r){
//    int p=pos[l];
//    int q=pos[r];
//    ll ans=0;
//    if(p==q){ //整块
//        for(int i=l;i<=r;i++){
//            ans+=a[i];
//        }
//        ans+=add[p]*(r-l+1);
//    }
//    else { //有散块
//        for(int i=p+1;i<=q-1;i++){
//            ans+=sum[i]+add[i]*(ed[i]-st[i]+1); //先处理整块
//        }
//        for(int i=l;i<=ed[p];i++){ //整合散块
//            ans+=a[i];
//        }
//        ans+=add[p]*(ed[p]-l+1);
//        for(int i=st[q];i<=r;i++){
//            ans+=a[i];
//        }
//        ans+=add[q]*(r-st[q]+1);
//    }
//    return ans;
//}
//
//int main(){
//
//
//    cin>>n;
//    for(int i=1;i<=n;i++){
//        cin>>a[i];
//    }
//    //start
//    int block=sqrt(n);
//    int t=n/block;
//    if(n%block) t++;
//    for(int i=1;i<=t;i++){
//        st[i]=(i-1)*block+1;
//        ed[i]=i*block;
//    }
//    ed[t]=n;
//    for(int i=1;i<=n;i++){
//        pos[i]=(i-1)/block+1; //pos是第i个元素所在的块
//    }
//
//
//    for(int i=1;i<=t;i++){
//        for(int j=st[i];j<=ed[i];j++){
//            sum[i]+=a[j];  //sum是第i块的区间和
//        }
//    }
//    //end
//
//    int opt,l,r,c;
//    for(int i=1;i<=n;i++){
//        cin>>opt>>l>>r>>c;
//        if(opt==1){
//            cout<<query(r,r)<<endl;
//        }
//        else {
//            change(l,r,c);
//        }
//    }
//}
//


const int MAX=1e3+5;
int N,S,P,T;
double dt;
double u,v,a,b,c,d;
int rn,rns;
int maxd;
double maxv=-INF,minv=INF;
int maxtime=-INF,mintime=INF;
int r[MAX];
vector<int>G[MAX<<1]; //用vector容器存放节点连接情况
struct ce{
    double u,v,a,b,c,d;
    int time; //神经元发射脉冲的次数
}ces[MAX];
struct mc{
    int s,t;
    double w;
    int D;
}mcs[MAX];


//
static unsigned long next1 = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next1 = next1 * 1103515245 + 12345;
    return((unsigned)(next1/65536) % 32768);
}
//


int main(){
    rns=0;
    cin>>N>>S>>P>>T;
    cin>>dt;
    while (rns<N) {
        cin>>rn>>v>>u>>a>>b>>c>>d;
//        over(i,rns,rns+rn-1)
        //更新的是每段时间的神经元信息
        for(int i=rns;i<rns+rn;i++)
        {
            ces[i].v=v;
            ces[i].u=u;
            ces[i].a=a;
            ces[i].b=b;
            ces[i].c=c;
            ces[i].d=d;
            ces[i].time=0;
        }
        rns+=rn; //为了满足rn之和=rns
    }
//    over(i,0,P-1)
    for(int i=0;i<P;i++)
        cin>>r[i];
//    over(i,0,S-1)
    for(int i=0;i<S;i++)
    {
        cin>>mcs[i].s>>mcs[i].t>>mcs[i].w>>mcs[i].D;
        maxd=max(maxd,mcs[i].D);
        G[mcs[i].s].push_back(i);//存放节点连接情况
    }
    int mod=maxd+1;
    vector<vector<double>> I(mod,vector<double>(N));
//    over(k,0,T-1)
    for(int k=0;k<T;k++)
    {
        //Ik表示每时刻受到的脉冲之和 所以每次都要清零
//        over(i,0,N-1)
        for(int i=0;i<N;i++)
            I[(k+maxd)%mod][i]=0;
        
        
        //脉冲过程的模拟
//        over(i,0,P-1)
        for(int i=0;i<P;i++)
        {
            int my=myrand();
            if(r[i]>my){
//                over(j,0,G[N+i].size()-1)
                for(int j=0;j<G[N+i].size();j++) //传向连接的所有神经元
                {
                    mc m=mcs[G[N+i][j]];
                    I[(k+m.D)%mod][m.t]+=m.w;
                }
            }
        }
        
        //
//        over(i,0,N-1)
        for(int i=0;i<N;i++)
        {
            double v1=ces[i].v;
            double u1=ces[i].u;
            double a1=ces[i].a;
            double b1=ces[i].b;
            ces[i].v=v1+dt*(0.04*v1*v1+5*v1+140-u1)+I[k%mod][i];
            ces[i].u=u1+dt*a1*(b1*v1-u1);
            if(ces[i].v>=30){
                ces[i].time++;
                for(int j=0;j<G[i].size();j++)
//                over(j,0,G[i].size()-1)
                {
                    mc m=mcs[G[i][j]];
                    I[(k+m.D)%mod][m.t]+=m.w;
                }
                ces[i].v=ces[i].c;
                ces[i].u+=ces[i].d;
            }
        }
        
    }
//    over(i,0,N-1)
    for(int i=0;i<N;i++)
    {
        maxv=max(maxv,ces[i].v);
        minv=min(minv,ces[i].v);
        maxtime=max(maxtime,ces[i].time);
        mintime=min(mintime,ces[i].time);
    }
    cout<<fixed<<setprecision(3)<<minv<<" "<<maxv<<endl;
    cout<<mintime<<" "<<maxtime<<endl;
    return 0;
}

CSP-CCF认证考试(第一次)总结,题解 题目整体难度不大,前四题还好写,第五题hard难度的dp,思路确实想不到,写了三个小时,第三题模拟题不知道stringstream,写得很吃力,最后放弃了3,5题,得分300。有点菜继续加油。(一,二题简单无思路,三,五题代码参考自acwing)相反数有 N𝑁 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 −a 为一对相反数)。 阅读详情

相关推荐

万象RK3506-EG1800网关使用说明

摘要:HD-RK3506-EG1800是一款高性能工业物联网边缘计算网关,支持Buildroot和Ubuntu双系统。文档详细介绍了网关的网络配置(包括ETH0/ETH1的静态IP设置、WiFi连接)、时钟同步、HSL软件安装配置(含开机自启动服务)、系统日志优化以及刷机操作指南(Loader/Maskrom模式)。特别提供了基于lighttpd的网页管理方案,通过HTML界面实现网络参数可视化配置,包含身份验证、实时状态显示和表单提交功能。网关默认ETH0固定IP为192.168.1.10,提供完整的CL

tian_jiangnan的博客 175

CSP 202109-3 脉冲神经网络(详解)

本文主要讲解题思路,了解题目大意,不着重讲算法,纯暴力模拟,无代码优化。

weixin_51275821的博客 5179

Flowable多数据源实战:从配置到指定Schema的避坑指南

本文详细介绍了Flowable多数据源配置的实战指南,包括基础配置、数据源Bean创建、指定Schema的进阶配置以及常见问题排查。通过具体代码示例和避坑建议,帮助开发者高效实现多租户系统中的工作流引擎集成,特别强调了schema设置和事务管理的注意事项。

weixin_30824599的博客 486

CSP CCF: 202109-3 脉冲神经网络 (C++) 66分

题目来源 计算机软件能力认证考试系统 解题思路 由于我有些看不懂这个题目,所以我是先找的他人的博客理解了一下题目。 这个博客写得很详细的(66分),有助于理解题目。CSP 202109-3 脉冲神经网络(详解)_刘学.的博客-优快云博客 所以我这里主要就是记录一下这道题啦,想到如何优化到100分,再更新。 代码 66分 #include <iostream> #include <iomanip> using namespace std; ...

qq_45936312的博客 2130

NumPy 与 Pandas 的详细应用(含实例)

本文系统介绍了Python数据分析中NumPy和Pandas两大核心库的应用。NumPy专注于高效数值计算,提供多维数组和向量化运算功能;Pandas则擅长结构化数据处理,支持数据清洗、分组统计等操作。文章详细讲解了库的安装、基础操作(数组/DataFrame创建、索引切片)、进阶功能(缺失值处理、分组聚合),并通过电商销售分析案例演示了实际应用场景。最后总结了二者的协同优势:NumPy负责底层数值计算,Pandas处理高级数据操作,配合使用可显著提升数据处理效率。建议读者从基础操作入手,结合实际案例练习,

weixin_42030577的博客 2299

STM32F103C8T6心电采集实战:从PCB设计到上位机开发的完整指南(附TI杯开源资料)

本文详细介绍了基于STM32F103C8T6的心电采集系统开发全流程,从PCB设计到上位机开发,特别适合大学生电子设计大赛参赛者参考。内容涵盖硬件设计精要、软件算法优化及上位机开发技巧,并附TI杯开源资料,帮助开发者低成本实现医疗级心电信号采集。

kafka6courier的博客 194

CSP——脉冲神经网络

CSP——脉冲神经网络(AC)

Wu_L7的博客 2208

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员和移动办公用户,支持多种数据源和可视化工具,大幅提升工作效率。

weixin_30897233的博客 602

CCF CSP 202109-3 脉冲神经网络

#include<iostream> using namespace std; static unsigned long Next = 1; 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; dou.

Brienz 662

深度强化学习-D3QN算法原理与代码

Dueling Double Deep Q Network(D3QN)算法结合了Double DQN和Dueling DQN算法的思想,进一步提升了算法的性能。如果对Doubel DQN和Dueling DQN算法还不太了解的话,可以参考我的这两篇博文:深度强化学习-Doubel DQN算法原理与代码和深度强化学习-Dueling DQN算法原理与代码,分别详细讲述了这两个算法的原理以及代码实现。本文就带领大家了解一下D3QN算法,代码链接见下方。 代码:https://github.com/indigo

weixin_46133643的博客 2万+

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

CCF-CSP 202303-1田地丈量

CCF-CSP 202303-1田地丈量

m0_72671017的博客 299

【推荐100个unity插件】unity易于使用模块化设计的天空、体积云和天气系统——Enviro 3

Enviro 3是一款功能强大的Unity天空与天气系统插件,提供动态天空、体积云、天气模拟等丰富功能。安装时需将预制体拖入场景并配置主相机,URP支持需激活深度纹理和添加渲染特性。模块化设计允许自由添加/移除时间、光照、雾效等模块,并通过API控制参数。推荐配合色调映射(如ACES模式)获得最佳视觉效果。插件支持季节、温湿度模拟及闪电风暴等特效,适用于需要逼真环境渲染的Unity项目。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2094

CSP202109第三题——脉冲神经网络

思路 定义存储结构 输入 正整数N,S,P,T,表示一共有N个神经元,S个突触和P个脉冲源,输 出时间刻T。 正实数Dt N个神经元,每个神经元v u a b c d,以及上一次的v和u。 结构体数组,数组下标为神经元的编号 P个脉冲源的r参数正整数。 S个突触。脉冲源的r参数正整数。两个整数s,t、一个实数w和一个正整数D ,其中s和t分别是入结点和出结点的编号;w和D分别表示脉冲强度和传播延迟。 计算所有脉冲源在1到T时刻,是否会发送脉冲,并将脉冲强度值赋值到连接的神经元lk中 计算每个时刻

weixin_45686898的博客 1562

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

CSP 202109-3 脉冲神经网络练习笔记2 100分代码

之前写过这道题的练习笔记1:脉冲神经网络练习笔记1 笔记1里贴出的代码只有66分,原因是运行超时(有没有人发现这个字其实是粉红色的 (。・∀・)ノ゙)。 笔记1里我发提出了一些当时未理解的问题: 1.mod的设置?:mod=max(mod,Tuchu[S_tmp].D+1); 2.时间t_tmp的设置?:int t_tmp=i % mod; 3.I_k数组为何要清空?memset( I_k[t_tmp], 0, sizeof I_k[t_tmp]); 其实总结起来: 这都是对T时间循环的不理解。 接下来说

想买很多漂亮衣服但是买不起的博客 1645

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

第23次CSP认证(202109)

第23次CSP认证---202109第一题 :数组推导    (贪心)第二题 :非零段划分   (差分)第三题 :脉冲神经网络第四题 :收集卡牌 第一题 :数组推导    (贪心) 贪心循环一遍 在这里插入代码片 第二题 :非零段划分   (差分) 70分做法: 暴力,枚举 出现过的数字。 #include<bits/stdc++.h> #include<iostream> #define ll long long

weixin_45705885的博客 3596

求教C语言中伪随机数生成器中的一些问题

本人大一,在网上其他博主编写伪随机数生成器中看到如下源代码,对于红字中运算的部分难以理解,为什么对_Randseed进行了如下操作就可以生成伪随机数呢?!    _Randseed = _Randseed * 1103515245 + 12345;        return ((unsigned int)(_Randseed &gt;&gt; 16) &amp; RAND_MAX);  伪随机数...

RoyWayne的博客 510

CCF-CSP真题202112-1序列查询(Java满分题解)

本题来自2021年12月CCF-CSP真题中的第一题《序列查询》。

m0_74172965的博客 273

CCF-CSP考试基础备考讲解、实战向的解题技巧--冲锋2025年3月认证!!!

立即实践「调试加速三板斧」,从今天开始每道题都使用。

weixin_73790979的博客 9623

CCF CSP模拟真题解答示例

由于CSP考试的内容涵盖了计算机科学的多个方面,包括算法、数据结构、编程语言等,因此实际考试中的题目可能会更加复杂和深入。:栈是一种后进先出(LIFO,Last In First Out)的数据结构,即最后入栈的元素最先出栈。:位(Bit)是计算机中存储数据的基本单位,表示一个二进制数的位,其值只能是0或1。CCF CSP(Certified Software Professional)是中国计算机学会主办的软件能力认证考试,旨在评估参赛者在计算机科学和软件工程方面的基本知识和实践能力。

Dalao_zzl的博客 1140

CCF-CSP认证考试真题(含题解和c++代码)

CSP-CCF 认证考试真题题解,将不定期更新。如果大家有其他解法、发现我笔误或者可以 hack 我做法/程序(合法输入导致错误输出)的地方,欢迎通过私聊与我交流。

Pujx的博客 10万+

CCF-CSP备考【模拟考试系统共享】

系统说明如上,由于现在不能模拟所有考试了,需要使用兑换码兑换,但是模拟考试系统和报名系统的账号是分开的,所以我在想我们是不是可以集合大家的力量,只要有36个兑换码咱们就可以模拟这36次了呢?如果有愿意共享的可以直接将兑换码用于兑换该账号的其他模拟认证,也欢迎没有第35次认证模拟机会的同学登录我的账号去检查自己的代码是否正确。【邮箱:cs_plus123456@qq.com 密码:123456】现在把我新创的号的账号密码放在下面,我兑换了第35次认证的模拟。

insouciant_22的博客 2076

csp2021-09-3 脉冲神经网络

神经元与脉冲源是节点,突触是边,按题意模拟即可。 突触传递脉冲有一个时间D的延迟,开一个 add[1005][1005]add[1005][1005]add[1005][1005] 数组来记录不同时刻脉冲到达的强度。如果延迟最大是DmaxD_{max}Dmax​,那只要记录当前时刻往后 DmaxD_{max}Dmax​ 时刻内的变化就行,对Dmax+1D_{max}+1Dmax​+1 取模以节约空间。 把传递脉冲封装成函数,TLE。 所有时刻对1001取模,TLE。 最后卡着时限过去了( #include&

隔壁李叟的博客 4214

CCF-CSP认证备考要点

1.注意事项   报名时考试语言选择ALL。编程语言可以选C/C++、Java或Python,不同题可以选用不同语言。   考试时允许携带纸质的书籍和资料,携带纸质资料有助于提高考试成绩。 2.考前准备   (1)不裸考   了解历年考题,了解考题的题型、内容和难度,并且逐题做过。   官方网站:CCF计算机职业资格认证。   在官方网站上注册用户,登录官方网站,逐题练习历年考题。   (2)阅读题解   通过阅读历年题解是一种快速学习的好方法,可以了解解题方法,积累解题经验。 ..

海岛Blog 8万+
上一篇: 装备合成(三分)
下一篇: 矩阵消除游戏(状压+dfs)
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值