一个简单的ANN算法
2012-12-11 10:15
239 查看
#include <stdio.h> #include <time.h> int M[10] = {0}; //权值 int X[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //输入向量 int Y[10] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0}; //理想输出向量 注:1 表示奇数; 0 表示偶数 int O[10] = {0}; //保存输出向量 int ST = 52; //阈值,默认值:52 //初始化权值 void initM() { srand((unsigned int)time(0)); for (int x=0; x<10; ++x) { //初始化权值所使用的随机数在 0 - 99 之间 M[x] = rand()%100; } } //激活函数 int active(int m, int x) { int o = m * x; if (o > ST) { return 0; } else { return 1; } } //计算输出向量 void calcY() { for (int x=0; x<10; ++x) { O[x] = active(M[x], X[x]); } } //根据实际输出向量和理想输出向量调整权向量,返回实际输出和理想输出不匹配的数目 int adjustM() { int err = 0; for (int x=0; x<10; ++x) { if (O[x] != Y[x]) { err++; if (1 == O[x]) { M[x] += X[x]; } else { M[x] -= X[x]; } } } return err; } //打印权向量 void printM() { printf("/n最终训练结果:/n"); for (int x=0; x<10; ++x) { printf("M[%i] = %i/n", x, M[x]); } } //测试已经训练好的ANN void test(int input) { if ( 0==active(M[input], X[input]) ) { printf("%d 是 偶数 ", input+1); } else { printf("%d 是 奇数 ", input+1); } printf("/n/n"); } //主函数入口 int main() { printf("请输入阈值:"); scanf("%d", &ST); printf("/n"); initM(); int n = 0; //一直训练直到能够100%正确为止 while (1) { n++; calcY(); int err = adjustM(); if (0 >=err) { //能够100%正确地回答问题了,结束训练 break; } printf("第%0.2d次训练后的结果中存在的错误数 %d/n", n,err); } printM(); printf("/n阈值=%d 训练次数=%d/n/n", ST, n); while (true) { int a = 0; printf("请输入范围为1~10的数字:"); scanf("%d", &a); if (1 > a || 10 < a) { break; } test(a-1); } return 0; }
相关文章推荐
- 一个简单的ANN算法
- 一个最简单的装饰模式
- 简单实现一个迭代器
- 多进程与多线程的一个简单解释
- 从零开始学Python(九):搭建一个基于SMTP的简单邮件预警系统
- 一个简单的自定义listview滑动删除
- 一个简单的随机点名器。
- 一个简单的线程池的实现(C++)
- [ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 02 业务逻辑层
- 用JavaScript实现一个简单的树结构
- 一个很笨的字体勾边的方法(这个方法简单聪明,而且通用)
- 使用MicroService4Net 快速创建一个简单的微服务
- 一个简单的fastJson实例
- 分享一个简单的python读写文件脚本
- ASP.NET AJAX的一个简单实例
- 一个能自由切换字符验证和简单数学运算验证方式的 验证码操作类
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
- 一个简单CMS系统的粗略表结构记录——持续更新
- live555 实现一个最简单的RTSP服务器
- php 面向对象的一个简单实例