P1038神经网络

news/2025/1/30 12:54:03/文章来源:https://www.cnblogs.com/gailixia/p/18691000

神经网络

题目背景

人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向,兰兰同学在自学了一本神经网络的入门书籍后,提出了一个简化模型,他希望你能帮助他用程序检验这个神经网络模型的实用性。

题目描述

在兰兰的模型中,神经网络就是一张有向图,图中的节点称为神经元,而且两个神经元之间至多有一条边相连,下图是一个神经元的例子:

神经元(编号为 \(i\)

图中,\(X_1 \sim X_3\) 是信息输入渠道,\(Y_1 \sim Y_2\) 是信息输出渠道,\(C_i\) 表示神经元目前的状态,\(U_i\) 是阈值,可视为神经元的一个内在参数。

神经元按一定的顺序排列,构成整个神经网络。在兰兰的模型之中,神经网络中的神经元分为几层;称为输入层、输出层,和若干个中间层。每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。下图是一个简单的三层神经网络的例子。

兰兰规定,\(C_i\) 服从公式:(其中 \(n\) 是网络中所有神经元的数目)

\[C_i=\left(\sum\limits_{(j,i) \in E} W_{ji}C_{j}\right)-U_{i} \]

公式中的 \(W_{ji}\)(可能为负值)表示连接 \(j\) 号神经元和 \(i\) 号神经元的边的权值。当 \(C_i\) 大于 \(0\) 时,该神经元处于兴奋状态,否则就处于平静状态。当神经元处于兴奋状态时,下一秒它会向其他神经元传送信号,信号的强度为 \(C_i\)

如此.在输入层神经元被激发之后,整个网络系统就在信息传输的推动下进行运作。现在,给定一个神经网络,及当前输入层神经元的状态(\(C_i\)),要求你的程序运算出最后网络输出层的状态。

输入格式

输入文件第一行是两个整数 \(n\)\(1 \le n \le 100\))和 \(p\)。接下来 \(n\) 行,每行 \(2\) 个整数,第 \(i+1\) 行是神经元 \(i\) 最初状态和其阈值(\(U_i\)),非输入层的神经元开始时状态必然为 \(0\)。再下面 \(p\) 行,每行有两个整数 \(i,j\) 及一个整数 \(W_{ij}\),表示连接神经元 \(i,j\) 的边权值为 \(W_{ij}\)

输出格式

输出文件包含若干行,每行有 \(2\) 个整数,分别对应一个神经元的编号,及其最后的状态,\(2\) 个整数间以空格分隔。仅输出最后状态大于 \(0\) 的输出层神经元状态,并且按照编号由小到大顺序输出。

若输出层的神经元最后状态均小于等于 \(0\),则输出 NULL

样例

样例输入

5 6
1 0
1 0
0 1
0 1
0 1
1 3 1
1 4 1
1 5 1
2 3 1
2 4 1
2 5 1

样例输出

3 1
4 1
5 1

[!TIP]

此题中神经网络就是一张有向图,信息流是从左到右的,没有任何反馈路径,因此这个图同时还是有向无环图

很容易就想到用拓扑排序

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;int n, m;//节点数量和边的数量
vector<int> s, a, in, out;//状态值、最大允许剩余状态值、入度、出度
vector<vector<pair<int, int>>> adj;//邻接表
queue<int> q;//添加边到邻接表中
void add(int a, int b, int c) {adj[a].push_back(make_pair(b, c));
}
//拓扑排序
void topsort() {while (!q.empty()) {int t = q.front();q.pop();for (int i = 0; i < adj[t].size(); i++) {int j = adj[t][i].first;s[j] += adj[t][i].second * s[t];in[j]--;//即使一个节点的资源量不大于 0,仍然会对其出边所指向的节点进行处理否则后面的几个结点的入度可能无法减到 0,导致无法拓扑全图//输入层节点(初始资源量大于 0 的节点)在进入队列 q 时,并没有减去其阈值 u[i]。只有当一个节点的入度变为 0 时(意味着它不是输入层节点,而是中间节点或者输出层节点),才会 st[j] -= u[j]; 
//并不是所有的结点都要减掉阈值,输入层的结点不需要减掉if (in[j] == 0) {s[j] -= a[j];//减去节点 j 的消耗阈值if (s[j] > 0)q.push(j);}}}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin >> n >> m;s.resize(n + 1);a.resize(n + 1);in.resize(n + 1);out.resize(n + 1);adj.resize(n + 1);//初始化for (int i = 1; i <= n; i++) {cin >> s[i] >> a[i];if (s[i])q.push(i);//节点入列}for (int i = 1; i <= m; i++) {int a, b, c;cin >> a >> b >> c;add(a, b, c);in[b]++;//入度用于拓扑排序中确定哪些节点可以被处理out[a]++;//出度用于识别终端节点(即没有出边的节点)}topsort();//拓扑排序bool f = true;//标记for (int i = 1; i <= n; i++) {if (!out[i]) {//如果节点没有出度(即终端节点)if (s[i] > 0) {cout << i << " " << s[i] << endl;f = false;}}}if (f)cout << "NULL" << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/875618.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能

大家好,我是编程乐趣。 我们都知道,要实现对结构化的数据(文本)搜索是比较容易的,但是对于非结构化的数据,比如图片,视频就没那么简单了。 但是现在有了AI模型,实现图片分类、搜索等功能,就变得容易很多。 在前面的文章里,我们有提到:Phi-vision 是一个拥有 42 亿参…

E95 01分数规划+树上背包 P1642 规划

视频链接: P1642 规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 01分数规划+树上背包 复杂度:n*m*log(1e9) #include <bits/stdc++.h> using namespace std;int read(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c==-)f=-1;c=getchar();}while(is…

年级第一暗杀计划

[SDOI2008] 仪仗队 题目描述 作为体育委员,C 君负责这次运动会仪仗队的训练。仪仗队是由学生组成的 \(N \times N\) 的方阵,为了保证队伍在行进中整齐划一,C 君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。现在,C 君希望你告诉他队伍整齐…

Burp Suite Professional 2025.1 发布下载,新增功能简介

Burp Suite Professional 2025.1 发布下载,新增功能简介Burp Suite Professional 2025.1 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接:https://sysin.org/blog/burp-suite-pro/ …

ubuntu配置核心转储文件路径并调试(nju ics PA)

调整 core pattern编辑 /etc/sysctl.conf sudo nano /etc/sysctl.conf修改kernel.core_pattern kernel.core_pattern=./core.%d.%f.%p.%t# %d 可执行文件目录名 # %f 可执行文件名 # %p 进程 ID # %t 时间的十进制值 (2) 可以自行修改格式,参考变量名和含义 使其生效 sudo sy…

solon-flow 你好世界!

solon-flow 是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有 “开放式” 驱动定制支持,像 jdbc 有 mysql 或 pgsql 等驱动,可为不同的应用场景定制不同的驱动处理。solon-flow 是一个基础级的流处理引擎(可用于业务规则、决策处…

1/25 遇到的问题

1.数据库连接报错 错误代码: nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBExceptionorg.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory’ defined inclass path resource [org/s…

【模拟电子技术】14-基本共射放大电路的动态分析

【模拟电子技术】14-基本共射放大电路的动态分析给出问题,求三个参数。反推:需要Aus就需要求解交流通路(动态参数H等效模型),交流通路需要知道Rbe,Rbe需要知道Rbb,Rbb需要知道静态工作点,静态工作点需要分析直流通路,思路有了。得到Au现在再次探讨输入电阻对放大电路的…

[2025.1.25 MySQL学习] 约束

约束概念:约束是作用于表中字段的规则,用于限制存储在表中的数据 目的:保证数据库中数据的正确、有效性和完整性 分类:

QT+VS “QtRunWork”任务返回了 false,但未记录错误。

无法打开 源 文件 " ui_xxx.h 源文件不可用 Qt开发报错:Q_INTERFACES Error: Undefined interface报错:QtRunWork”任务返回了 false,但未记录错误。 无法打开 源 文件 " ui_xxx.h 源文件不可用 原因: 1.查看错误:“QtRunWork”任务返回了 false,但未记录错误…

2025牛客寒假算法基础集训营2 个人题解

2025牛客寒假算法基础集训营2 个人题解2025牛客寒假算法基础集训营2 个人题解 A.一起奏响历史之音! #include<bits/stdc++.h> #define endl \n using namespace std; void solve(){bool flag=false;for(int i=1;i<=7;i++){int x;cin>>x;if(x!=1 && x!=…