ポップフィールドネットワークです
/*この部分を自分で書く*/等の部分を埋めてください。
条件1 ニューロン数は400 とする。
条件2 扱うデータはすべてバイポーラ型(¡1; 1) とする。
条件3 学習は相関学習を用いる。
条件4 crow, duck, lion, monkey, mouse, penguin の6 つのパターンを記憶させる。
条件5 実行時の引数として入力パターンとノイズを付加する確率を指定できるようにする。(例え
ば./a.out 1 10 でパターン1 にノイズを10% 付加したパターンを入力する)
条件6 実行結果はkterm 上で■ や□ を使って表示する。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <limits.h>
#define PatternNo 6
#define DataWidth 20
#define DataHeight 20
#define UnitNo DataWidth*DataHeight
#define TimeMax 2
void init_rnd(){
srand((unsigned int)time(NULL));
}
double Random(){
return((double)rand()/RAND_MAX);
}
int StepFunc(int net, int pout){
/*この部分を自分で書く */
}
void display_pattern(int out[UnitNo]){
int i;
/*この部分を自分で書く*/
}
void read_pattern(int PatternID, char *fname,
int pattern[PatternNo][UnitNo]){
int i;
FILE *fp;
if((fp=fopen(fname,"r"))==NULL){
printf("read_pattern(): Cannot open \"%s\"\n",fname);
exit(1);
}
for(i=0;i<UnitNo;i++){
fscanf(fp,"%d",&pattern[PatternID]);
}
fclose(fp);
}
void read_patterns(int pattern[PatternNo][UnitNo]){
read_pattern(0,"crow", pattern);
read_pattern(1,"duck", pattern);
read_pattern(2,"lion", pattern);
read_pattern(3,"monkey", pattern);
read_pattern(4,"mouse", pattern);
read_pattern(5,"penguin",pattern);
}
void learn_w(int pattern[PatternNo][UnitNo], int w[UnitNo][UnitNo]){
int p,i,j;
/*この部分を自分で書く*/
}
void input_pattern(int PatternID, int pattern[PatternNo][UnitNo],
int input[UnitNo], double NoiseLevel){
int i,j;
/*この部分を自分で書く*/
}
void calc_output(int w[UnitNo][UnitNo], int out[UnitNo]){
int i,j;
int net;
for(i=0;i<UnitNo;i++){
/* この部分を自分で書く */
display_pattern(out);
}
}
int main(int argc, char *argv[]){
int pattern[PatternNo][UnitNo];
int w[UnitNo][UnitNo];
int out[UnitNo];
int PatternID;
double NoiseLevel;
int t;
if(argc!=3){
printf("プログラムの使用方法 : \n");
printf(" ./a.out 入力するパターンの番号(0〜5) ノイズレベル(0〜100)\n");
exit(1);
}
PatternID = atoi(argv[1]);
NoiseLevel = atof(argv[2])/100.0;
init_rnd();
read_patterns(pattern);
learn_w(pattern,w);
input_pattern(PatternID,pattern,out,NoiseLevel);
display_pattern(out);
for(t=0;t<TimeMax;t++){
calc_output(w,out);
}
return 0;
}
補足
C言語です
この順に作っていくとわかりやすいらしいです。
1. パターンの表示display pattern( )
2. 相関学習learn w( )
3. パターンの入力input pattern( )
4. 出力関数StepFunc( )
5. 想起calc output( )
できればわかるところだけでものせてください!
C言語です。 ポップフィールドネットワークです
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: C言語です。 ポップフィールドネットワークです
フォーラムルールは読まれましたか?草野 優雨 さんが書きました: /*この部分を自分で書く*/等の部分を埋めてください。
できればわかるところだけでものせてください!
この掲示板では宿題などの分からない点のお手伝い・アドバイスをするというスタンスなので、丸投げは禁止されています。
質問者さんがどこまで解っていて、どういったところが分からないのかを具体的に教えてくださいね。
あと、マルチポストされています。この点についてもフォーラムルールを確認してください。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=60460