Nuronをつくる
NuronはList(もどきを保持していて)ListはNuronを保持することができます。
これを実装してみるには?
とりあえず、data_sを保持するようにする。
./nuron.h
typedef struct nuron_s *Nuron;
typedef void (*inputNuron)(Nuron);
typedef void (*outputNuron)(Nuron);
struct nuron
{
struct data_s data;
inputNuron input;
outputNuron output;
};
./nuron.c
Nuron newNuron()
{
Nuron nuro = (Nuron)malloc(sizeof( struct nuron_s));
nuro->data = *newData();
nuro->nurons = newList();
nuro->input = _input;
nuro->output= _output;
return nuro;
}
./main
int main()
{
....
List list = newList();
list->add(list,(Data)newNuron());
....
という感じでよいのだろうか?
となると、Dataオブジェクトはデーターを加えたりする機能専門といったところだろうか。
Nuron
面倒だか、Nuronでのaddもしっかり作っておこう。Getといったものも作らなくては、
そのまえに、Listオブジェクトに nextを持たせる。
list->top();
while((temp = list->next(list)) != NULL)
{
printf("%d\n",temp->nuro);
}
↑全データーを表示がこんなにシンプルに書ける。
./ list.c
Data _nextList(List list)
{
Data temp;
temp = list->point;
if(list->point->right !=NULL){
list->point = list->point->right;
return temp;
}else
{
return NULL;
}
}
int _topList(List list)
{
list->point = list->start;
}
List newList()
{
List list;
list = (List)malloc(sizeof(struct list_s));
list->start = list->end = list->point = list->Item = newData();
list->next =(nextList)_nextList;
list->add =(addList)_addList;
list->top =(topList)_topList;
return list;
}
ニューロンを作成する
#include"list.h"
typedef struct nuron_s *Nuron;
typedef void (*outputNuron)(Nuron);
typedef void (*inputNuron)(Nuron);
typedef void (*setNuron)(Nuron,int);
typedef void (*setShiNu)(Nuron,double);
struct nuron_s
{
struct data_s data;
List nurons;
List w;
int s;
double shit;
setNuron set;
outputNuron output;
inputNuron input;
setShiNu set_shi;
};
void _input(Nuron nuro)
{
List n = nuro->nurons;
List ws = nuro->w;
Nuron nuron;
Data w;
double Sum = 0.0;
while(
(nuron = (Nuron)n->next(n)) != NULL
&&(w = (Data)ws->next(ws)) != NULL
)
{
Sum += nuron->s*w->nuro - nuron->shit;
};
if(Sum > 0){ nuro->s = 1;}
if(Sum < 0){ nuro->s = 0;}
}
こんな感じソース
戻る