next up previous contents
Next: この文書について ... Up: 付録C サーチアクセスプログラム Previous: C.1 内積値と想起度の関係調査用プログラム

C.2 改良プログラム(変更部分のみ抜粋)

  C.1 のプログラム中の関数 kyori を 次のように改良した。ただし,変数は main() の前で定義し, 初期化は for(kai = 0; kai < kai_max ; kai++) のすぐ前におく 必要がある。
/* 改良に用いた変数 */
double keika_z[2]; /* 周期を判定するために距離を格納する配列 */
int kuri,kuri1,kuri2,kuri3[2],kuri4; /* シナプス前抑制を制御する変数 */
/* 初期化 */
keika_z[0]=keika_z[1]=0; kuri=0; kuri1=0;
kuri2=0; kuri3[0]=kuri3[1]=0; kuri4=0;
/* サーチパターンと出力パターンの距離と抑制関数の計算 */
kyori()
{
  int i;
  
  z=0;
  /* 距離計算 */
  for(i=0; i<U; i++)
    z += fabs(x[i] - out_in[search][i]); /* 絶対値関数 */
  z /= U;
  /* 距離の途中経過 */
  keika_z[0]=keika_z[1];
  keika_z[1]=z;
  /* 抑制関数の出力計算 */
  kuri++; kuri4++;
  /* 周期が判定できない場合の制御 */
  if(kuri>=300 || kuri4>=100){
    rsnp=0.1; kuri=kuri4=0; kuri2=kuri1; kuri1++;
    return;
  }
  /* 通常の制御 */
  if(z <= gs){
    rsnp = 1; kuri2=0; kuri3[0]=kuri3[1]=0; return;
  }
  else
    rsnp = rcha;
  /* 周期がある場合の制御 */
  if(kuri2>0){
    rsnp=0.1; kuri2--; kuri3[1]++; return;
  }
  /* 距離が減少した場合の制御(0.5 未満) */
  if(keika_z[1]<keika_z[0] && keika_z[1]<0.5){
    rsnp=1;
    if(kuri3[0]==kuri3[1] && kuri3[1]!=0){
      kuri1++; kuri2=kuri1; kuri4=0;
    }
    kuri3[0]=kuri3[1]; kuri3[1]=0;
  }
  else kuri3[1]++;
}


Deguchi Toshinori
1996年09月05日 (木) 11時50分24秒 JST