我来我网
https://5come5.cn
您尚未
登录
注册
|
菠菜
|
软件站
|
音乐站
|
邮箱1
|
邮箱2
|
风格选择
|
更多 »
vista
鍙よ壊涔﹂
card
wind
绮夌孩濂抽儙
帮助
统计与排行
无图版
我来我网·5come5 Forum
»
电脑技术
»
程序员之家
»
一个具有很好编程风格的代码
交 易
投 票
本页主题:
一个具有很好编程风格的代码
显示签名
|
打印
|
加为IE收藏
|
收藏主题
|
上一主题
|
下一主题
jianghejie
∷
性别:
∷
状态:
∷
等级:
初出茅庐
∷
发贴:
13
∷
威望:
0
∷
浮云:
1048
∷
在线等级:
∷
注册时间: 2010-09-28
∷
最后登陆: 2011-12-18
【
复制此帖地址
只看此人回复
】
5come5帮你背单词 [
promptly
/'promptli/
ad. 敏捷地,迅速地,果断地
]
一个具有很好编程风格的代码
/******************************************************************************
===========================
Network: Adaptive Resonance Theory 1
===========================
Application: Brain Modeling
Stability-Plasticity Demonstration
Author: Karsten Kutza
Date: 27.6.96
Reference: G.A. Carpenter, S. Grossberg
A Massively Parallel Architecture
for a Self-Organizing Neural Pattern Recognition Machine
Computer Vision, Graphics, and Image Processing, 37,
pp. 54-115, 1987
******************************************************************************/
/******************************************************************************
D E C L A R A T I O N S
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
typedef int BOOL;
typedef char CHAR;
typedef int INT;
typedef double REAL;
#define FALSE 0
#define TRUE 1
#define NOT !
#define AND &&
#define OR ||
#define MIN_REAL -HUGE_VAL
#define MAX_REAL +HUGE_VAL
typedef struct { /* A LAYER OF A NET: */
INT Units; /* - number of units in this layer */
BOOL* Output; /* - output of ith unit */
REAL** Weight; /* - connection weights to ith unit */
BOOL* Inhibited; /* - inhibition status of ith F2 unit */
} LAYER;
typedef struct { /* A NET: */
LAYER* F1; /* - F1 layer */
LAYER* F2; /* - F2 layer */
INT Winner; /* - last winner in F2 layer */
REAL A1; /* - A parameter for F1 layer */
REAL B1; /* - B parameter for F1 layer */
REAL C1; /* - C parameter for F1 layer */
REAL D1; /* - D parameter for F1 layer */
REAL L; /* - L parameter for net */
REAL Rho; /* - vigilance parameter */
} NET;
/******************************************************************************
A P P L I C A T I O N - S P E C I F I C C O D E
******************************************************************************/
#define N 10
#define M 10
#define NO_WINNER M
#define NUM_DATA 30
CHAR Pattern[NUM_DATA][N] = { " O ",
" O O",
" O",
" O O",
" O",
" O O",
" O",
" OO O",
" OO ",
" OO O",
" OO ",
"OOO ",
"OO ",
"O ",
"OO ",
"OOO ",
"OOOO ",
"OOOOO",
"O ",
" O ",
" O ",
" O ",
" O",
" O O",
" OO O",
" OO ",
"OOO ",
"OO ",
"OOOO ",
"OOOOO" };
BOOL Input [NUM_DATA][N];
BOOL Output[NUM_DATA][M];
FILE* f;
void InitializeApplication(NET* Net)
{
INT n,i,j;
for (n=0; n<NUM_DATA; n++) {
for (i=0; i<N; i++) {
Input[n]
= (Pattern[n]
== 'O');
}
}
Net->A1 = 1;
Net->B1 = 1.5;
Net->C1 = 5;
Net->D1 = 0.9;
Net->L = 3;
Net->Rho = 0.9;
for (i=0; i<Net->F1->Units; i++) {
for (j=0; j<Net->F2->Units; j++) {
Net->F1->Weight
[j] = (Net->B1 - 1) / Net->D1 + 0.2;
Net->F2->Weight[j]
= Net->L / (Net->L - 1 + N) - 0.1;
}
}
f = fopen("c:\ART1.txt", "w");
}
void WriteInput(NET* Net, BOOL* Input)
{
INT i;
for (i=0; i<N; i++) {
fprintf(f, "%c", (Input
) ? 'O' : ' ');
}
fprintf(f, " -> ");
}
void WriteOutput(NET* Net, BOOL* Output)
{
if (Net->Winner != NO_WINNER)
fprintf(f, "Class %i\n", Net->Winner);
else
fprintf(f, "new Input and all Classes exhausted\n");
}
void FinalizeApplication(NET* Net)
{
fclose(f);
}
/******************************************************************************
I N I T I A L I Z A T I O N
******************************************************************************/
void GenerateNetwork(NET* Net)
{
INT i;
Net->F1 = (LAYER*) malloc(sizeof(LAYER));
Net->F2 = (LAYER*) malloc(sizeof(LAYER));
Net->F1->Units = N;
Net->F1->Output = (BOOL*) calloc(N, sizeof(BOOL));
Net->F1->Weight = (REAL**) calloc(N, sizeof(REAL*));
Net->F2->Units = M;
Net->F2->Output = (BOOL*) calloc(M, sizeof(BOOL));
Net->F2->Weight = (REAL**) calloc(M, sizeof(REAL*));
Net->F2->Inhibited = (BOOL*) calloc(M, sizeof(BOOL));
for (i=0; i<N; i++) {
Net->F1->Weight
= (REAL*) calloc(M, sizeof(REAL));
}
for (i=0; i<M; i++) {
Net->F2->Weight
= (REAL*) calloc(N, sizeof(REAL));
}
}
void SetInput(NET* Net, BOOL* Input)
{
INT i;
REAL Activation;
for (i=0; i<Net->F1->Units; i++) {
Activation = Input
/ (1 + Net->A1 * (Input
+ Net->B1) + Net->C1);
Net->F1->Output
= (Activation > 0);
}
}
void GetOutput(NET* Net, BOOL* Output)
{
INT i;
for (i=0; i<Net->F2->Units; i++) {
Output
= Net->F2->Output
;
}
}
/******************************************************************************
P R O P A G A T I N G S I G N A L S
******************************************************************************/
void PropagateToF2(NET* Net)
{
INT i,j;
REAL Sum, MaxOut;
MaxOut = MIN_REAL;
Net->Winner = NO_WINNER;
for (i=0; i<Net->F2->Units; i++) {
if (NOT Net->F2->Inhibited
) {
Sum = 0;
for (j=0; j<Net->F1->Units; j++) {
Sum += Net->F2->Weight
[j] * Net->F1->Output[j];
}
if (Sum > MaxOut) {
MaxOut = Sum;
Net->Winner = i;
}
}
Net->F2->Output
= FALSE;
}
if (Net->Winner != NO_WINNER)
Net->F2->Output[Net->Winner] = TRUE;
}
void PropagateToF1(NET* Net, BOOL* Input)
{
INT i;
REAL Sum, Activation;
for (i=0; i<Net->F1->Units; i++) {
Sum = Net->F1->Weight
[Net->Winner] * Net->F2->Output[Net->Winner];
Activation = (Input
+ Net->D1 * Sum - Net->B1) /
(1 + Net->A1 * (Input
+ Net->D1 * Sum) + Net->C1);
Net->F1->Output
= (Activation > 0);
}
}
/******************************************************************************
A D J U S T I N G W E I G H T S
******************************************************************************/
REAL Magnitude(NET* Net, BOOL* Input)
{
INT i;
REAL Magnitude;
Magnitude = 0;
for (i=0; i<Net->F1->Units; i++) {
Magnitude += Input
;
}
return Magnitude;
}
void AdjustWeights(NET* Net)
{
INT i;
REAL MagnitudeInput_;
for (i=0; i<Net->F1->Units; i++) {
if (Net->F1->Output
) {
MagnitudeInput_ = Magnitude(Net, Net->F1->Output);
Net->F1->Weight
[Net->Winner] = 1;
Net->F2->Weight[Net->Winner]
= Net->L / (Net->L - 1 + MagnitudeInput_);
}
else {
Net->F1->Weight
[Net->Winner] = 0;
Net->F2->Weight[Net->Winner]
= 0;
}
}
}
/******************************************************************************
S I M U L A T I N G T H E N E T
******************************************************************************/
void SimulateNet(NET* Net, BOOL* Input, BOOL* Output)
{
INT i;
BOOL Resonance, Exhausted;
REAL MagnitudeInput, MagnitudeInput_;
WriteInput(Net, Input);
for (i=0; i<Net->F2->Units; i++) {
Net->F2->Inhibited
= FALSE;
}
Resonance = FALSE;
Exhausted = FALSE;
do {
SetInput(Net, Input);
PropagateToF2(Net);
GetOutput(Net, Output);
if (Net->Winner != NO_WINNER) {
PropagateToF1(Net, Input);
MagnitudeInput = Magnitude(Net, Input);
MagnitudeInput_ = Magnitude(Net, Net->F1->Output);
if ((MagnitudeInput_ / MagnitudeInput) < Net->Rho)
Net->F2->Inhibited[Net->Winner] = TRUE;
else
Resonance = TRUE;
}
else Exhausted = TRUE;
} while (NOT (Resonance OR Exhausted));
if (Resonance)
AdjustWeights(Net);
WriteOutput(Net, Output);
}
/******************************************************************************
M A I N
******************************************************************************/
void main()
{
NET Net;
INT n;
GenerateNetwork(&Net);
InitializeApplication(&Net);
for (n=0; n<NUM_DATA; n++) {
SimulateNet(&Net, Input[n], Output[n]);
}
FinalizeApplication(&Net);
}
Posted: 2010-11-07 17:41 |
[楼 主]
快速跳至
|- 站务管理
|- 惩罚,奖励公布区
|- 会员咨询意见区
|- 申请区
|- 已批准申请区
|- 威望和荣誉会员推荐区
|- 5come5名人堂·Hall of Fame
>> 休闲娱乐
|- 灌水乐园 大杂烩
|- 精水区
|- 幽默天地
|- 开怀大笑(精华区)
|- 灵异空间
|- 运动新时空·菠菜交流
|- 动之风.漫之舞
|- 新货上架
|- 古董挖挖
|- 唯美贴图
|- 创意&美化&设计
|- 5COME5头像及签名档图片引用专区
|- 艺术摄影
|- 音乐咖啡屋
|- 音道乐经
>> 热点讨论
|- 工作交流
|- 求职信息
|- 就业精华区
|- 同城联谊
|- 留学专版
|- 情感物语
|- 情感物语精华区
|- 带走一片银杏叶
|- 精华区
|- 新闻直通车
|- 众志成城,抗震救灾
|- 衣食住行
|- 跳蚤市场
|- 旅游出行
>> 学术交流
|- 学业有成
|- 智力考场
|- 考研专版
|- 外语乐园
|- 考试·毕业设计
|- 电子设计·数学建模
|- 学生工作·社团交流·RX
|- 电脑技术
|- 电脑F.A.Q.
|- 软件交流
|- 硬件·数码
|- 程序员之家
|- Linux专区
|- 舞文弄墨
|- 历史&文化
|- 军临天下
|- 军事精华区
|- 财经频道
>> 游戏新干线[电子竞技俱乐部]
|- Blizz@rd游戏特区
|- WarCraft III
|- 魔兽区档案库
|- 魔兽争霸3博彩专区
|- StarCraft(new)
|- 暗黑专区
|- 休闲游戏区
|- PC GAME综合讨论区
|- 实况足球专区
|- Counter-Strike专区
|- TV GAME& 模拟器
|- 网络游戏
>> 资源交流
|- 恋影部落
|- 连续剧天地
|- 综艺开心档
|- 书香小筑
|- 小说发布
|- 资源交流
|- 综艺、体育、游戏资源发布
|- 音乐资源发布区
|- 电影电视剧发布区
|- 字幕园地
我来我网·5come5 Forum
»
程序员之家
Total 0.009931(s) query 4, Time now is:05-19 05:49, Gzip enabled
Powered by PHPWind v5.3, Localized by
5come5 Tech Team
,
黔ICP备16009856号