新しく発言する EXIT インデックスへ
脳の数学モデル(カオス・ニューラル・ネッ...

  脳の数学モデル(カオス・ニューラル・ネット) SECOND 2007/09/22 20:24:15 
  !続き1 SECOND 2007/09/22 20:25:30  (修正1回)
   └!続き2 SECOND 2007/09/22 20:27:27  (修正1回)
    └!続き3 SECOND 2007/09/22 20:28:26 
     └!続き4 SECOND 2007/09/22 20:29:31 
      └!続き5 SECOND 2007/09/22 20:30:34  (修正1回)
       └!副産物 SECOND 2007/09/23 14:13:29 

  脳の数学モデル(カオス・ニューラル・ネット) SECOND 2007/09/22 20:24:15  ツリーへ

脳の数学モデル(カオス・ニューラル・ネット) 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/22 20:24:15
!--------------------------------------------
! 脳の数学モデル(カオス・ニューラル・ネット)

! 2007. 9.21
!--------------------------------------------
! 脳モデル、
!賞罰に対して吸引反発して行くカオス( 隣接因果が法則的に
!繰返され累積しているだけなのに、無限に木目が細かくなり、
!同じ値に戻れなくなっていく現象。無理数も経由する。)です。

!TSP問題( Traveling Salesman Problem )の実験です。
! 0~9 の10地点を、最短距離で結ぶ順序を探す問題、これを
!カオス・ニューラル・ネットで解くプログラムです。

!ここでは、ニューロンが、100個(10x10)しかない、小さな
!小さな脳で、解ける問題を、彼に解いてもらいます。

!----------------------------
!カオス・ニューラル・ネット
!----------------------------
! 0~t 時刻のm個の外部入力と、n個のニューロン出力から、
! t+1 時刻のi番ニューロンの出力 Xi(t+1)を求める。

!<基本式>

!Ei(t+1)=Σj=1~m Vij・Σd=0~t Ke^d・Aj(t-d)
!Fi(t+1)=Σj=1~n Wij・Σd=0~t Kf^d・Hij( Xj(t-d) )
!Ri(t+1)= -SHITAi -ALFA・Σd=0~t Kr^d・Gi( Xi(t-d) )
!Yi(t+1)=Ei(t+1)+Fi(t+1)+Ri(t+1)

!Xi(t+1)=sigmoid( Yi(t+1) ) .... (0~0.5~1) ← (-~0~+)

!<各記号の説明>

! X = sigmoid( Y )
! = 1/( 1+exp(-Y/EPSILON) ) .... 0< EPSILON (微小な正の数)

!Ei(t) i番ニューロン が特別に受ける 外部の入力成分 (EXTERNAL)
!Vij i番ニューロン が受けるj番 外部信号からの結合係数 (2次元の配列)
!Ke 0< 値<1 の減衰定数
!Aj(t) m個の内のj番目の外部信号源

!Fi(t) i番ニューロン がj番から受ける 内部の相互入力成分 (FEED BACK)
!Wij i番ニューロン が受けるj番ニューロンからの相互結合係数 (2次元の配列)
!Kf 0< 値<1 の減衰定数
!Hij() 接続線路が非直線だった時の伝達関数、リニア なら不要。
!Xj(t) n個の内のj番目の ニューロン からの出力 0〜1の値。(0.5=<発火)

!Ri(t) i番ニューロン 自身の感度を不応にする負性の入力成分 (REJECTION)
!SHITAi i番ニューロン 不応の固定成分 (しきい値) 各i別々に。(1次元の配列)
!ALFA i番ニューロン 自身の感度を不応にする負性の自己帰還結合係数。
!Kr 0< 値<1 の減衰定数
!Gi() i番自身への接続線路が非直線だった時の伝達関数、リニア なら不要

!Yi(t) i番ニューロン の総合入力 −〜0〜+ ( 0=<発火)
!Xi(t) i番ニューロン の最終出力 0〜1の値。(0.5=<発火)


! t 時刻の各出力だけで、t+1 時刻のi番が求まる様に、代数変形(同一)。

!<等価式>

!Ei(t+1)=Ke・Ei(t) +Σj=1~m Vij・Aj(t)
!Fi(t+1)=Kf・Fi(t) +Σj=1~n Wij・Hij( Xj(t) )
!Ri(t+1)=Kr・( Ri(t)+SHITAi ) -SHITAi -ALFA・Gi( Xi(t) )
!Yi(t+1)=Ei(t+1)+Fi(t+1)+Ri(t+1)

!Xi(t+1)=sigmoid( Yi(t+1) ) .... (0~0.5~1) ← (-~0~+)


!文献:放送大学教材 56259-1-9711 カオスの数理と技術 著者:合原一幸

!------------------------------------------------
!プログラムで使用した計算式は、Hij(),Gi()を省略、-1/EPSILONを定数に。

!Ei(t+1)=Ke・Ei(t) +Σj=1~m Vij・Aj(t)
! 続き1

  !続き1 SECOND 2007/09/22 20:25:30  (修正1回) ツリーへ

Re: 脳の数学モデル(カオス・ニューラル・ネット) 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/22 20:25:30 ** この記事は1回修正されてます
! 続き1
!Fi(t+1)=Kf・Fi(t) +Σj=1~n Wij・Xj(t)
!Ri(t+1)=Kr・( Ri(t)+SHITAi ) -SHITAi -ALFA・Xi(t)
!Yi(t+1)=Ei(t+1)+Fi(t+1)+Ri(t+1)

!Xi(t+1)=1/( 1+exp(定数・Yi(t+1)) ) .... 定数<0

!------------------------------------------------
!さらに、t、t+1 は、計算前と後に割り当てる為、分離せず。
!配列変数は、i番j番だけで広げ、最終的に次の様になっています。

!E(i)=Ke・E(i) +Σj=1~m V(i,j)・A(j)
!F(i)=Kf・F(i) +Σj=1~n W(i,j)・X(j)
!R(i)=Kr・( R(i)+SHITA(i) ) -SHITA(i) -ALFA・X(i)
!Y(i)=E(i)+F(i)+R(i)

!X(i)=1/( 1+exp( ei・Y(i)) ) .... ei<0


!-----------
!初期設定。
!-----------
SET TEXT BACKGROUND "OPAQUE" ! 文字の背景を、背景色(色指標が0の色)で塗る。
OPTION ARITHMETIC NATIVE
OPTION BASE 0
DIM Wij(99,99),Vij(99,99)
DIM D(9,9),S(9,9),A(99)
DIM E(99),F(99),R(99),Shita(99),Y(99),X(99)
DIM Px(9),Py(9),S0(9),S1(9),S2(9),Xs(99)

LET Kr=0.81 ! 0.95
LET Kf=0.8 ! 0.4
LET Ke=0 ! 0.5
LET Af=1
LET Th=-0.24 ! 0
LET ei=-100

! LET SW$="M" ! start with 表示 D(),S(),Wij()

CALL Mat_SD
FOR i=0 TO 9
LET S0(i)=MOD(i*3, 10)
NEXT i
FOR i=0 TO 99
LET X(i)=i/1000
NEXT i

!------------------------------------------------------
! カオス・ニューラル・ネットの実験 メイン・プログラム
! TSP 問題(Traveling Sales-man Problem)
!------------------------------------------------------
MAT Shita=Th*CON
MAT Wij=0*CON
MAT Vij=0*CON
CALL Mat300
DO
CLEAR
CALL DispL0
CALL DispL1
CALL DispL2
SET TEXT COLOR 1
CALL PRTkk
PLOT TEXT,AT 48,8.5 :"ニューロン(0~99) の発火状態"
PLOT TEXT,AT 22,11 :"SPACE で、STOP/START"
PLOT TEXT,AT 20,12 :"文字 'M'で、表示 D(),S(),Wij()"
PLOT TEXT,AT 19,13 :"other Key … END"
IF SW$="M" OR SW$="m" THEN CALL Moni_DW
DO
DO
CALL Xi00
CALL DispX
CHARACTER INPUT nowait: W$
LOOP UNTIL W$<>""
IF W$=" " THEN CHARACTER INPUT W$
LOOP UNTIL W$<>" "
LET SW$=W$
LOOP UNTIL NOT(W$="M" OR W$="m")
CALL PRTkk

!----------------------------------------
!カオス・ニューラル・ネットの計算本体部分
!----------------------------------------
SUB Xi00
! t 時刻の各出力から、t+1 時刻のi番ニューロン 入力集計
FOR i=0 TO 99
!--- j番外部信号からi番ニューロンへの入力 Eij(t+1) ***保留中***
!LET W=0
!FOR j=0 TO 99
! LET W=W+Vij(i,j)*A(j)
!NEXT j
!LET E(i)=Ke*E(i)+W ! (Ke:減衰定数)
!--- j番ニューロンからi番ニューロンへの相互結合入力 Fij(t+1)
LET W=0
FOR j=0 TO 99
LET W=W+Wij(i,j)*X(j)
NEXT j
LET F(i)=Kf*F(i)+W ! (Kf:減衰定数)
!--- i番ニューロン自身からの不応成分入力 Ri(t+1)
LET R(i)=Kr*(R(i)+Shita(i))-Af*X(i)-Shita(i) ! (Kr:減衰定数)
!--- i番ニューロンの全入力 Yi(t+1)
LET Y(i)=E(i)+F(i)+R(i)
NEXT i
! t+1 時刻のi番ニューロンの出力 Xi(t+1)
FOR i=0 TO 99
! -~+ を 0~1 出力変換 sigmoid 関数
WHEN EXCEPTION IN
! 続き2

   └!続き2 SECOND 2007/09/22 20:27:27  (修正1回) ツリーへ

Re: !続き1 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/22 20:27:27 ** この記事は1回修正されてます
! 続き2
LET X(i)=1/(1+EXP(ei*Y(i)) )
USE
LET X(i)=1/(1+EXP(-10*Y(i)) ) !-58.823max, when overflow( about!)
END WHEN
NEXT i
END SUB

!------------------------------------------------------------
!これより下に、やや長く難解な文が続きますが、
!ニューロン・ネット への課題の知らせ方と
!その成否への賞罰の方法の、一つの試みに過ぎません。
!もっと良い方法があるはずです。

!カオス・ニューラル・ネットの数学的中味としては、
!上の10数行の、わずかの本体部分だけで、これだけで全部です。
!------------------------------------------------------------

!----------------
!画面表示と評価。
!----------------
SUB DispX
SET DRAW mode hidden
LET rc0=0
! 各ニューロン(0~99) の発火状態。
SET VIEWPORT 0, 1, 0, 0.7
SET WINDOW -30,10, 28,0
SET AREA COLOR 0
PLOT AREA:0,0; 10,0; 10,28;-30,28;-30,10; 0,10 !clear
!---
SET AREA COLOR 4
SET LINE COLOR 2
PLOT LINES: 0,0; 10,0; 10,10
FOR V=0 TO 9 !訪問地点(0~9)
FOR H=0 TO 9 !訪問順序(0~9)
IF 0.5<=X(V*10+H) THEN !ニューロンの出力(0~1) 0.5=< は発火
PLOT AREA: H,V; H+1,V; H+1,V+1; H,V+1
SET TEXT COLOR 4
LET S0(H)=V
LET rc0=rc0+1
ELSE
PLOT LINES: H,V; H,V+1; H+1,V+1
SET TEXT COLOR 2
END IF
PLOT TEXT,AT H*4-30,15+V*1.2: USING$("###.###",Y(V*10+H)) !ニューロンの内部(-~0~+) 0=< は発火
NEXT H
NEXT V
SET TEXT COLOR 1
SET DRAW mode explicit
IF rc0<1 THEN LET Kr=Kr-0.01
CALL PRTkk !発火なし、不応係数を漸減。
!--------
! 探索中の訪問コース(左から3番目のク゛ラフ) の描画。完結判定。
CALL DispL0 !描画。
! 完結せず なら、不応係数を、漸増。
FOR i=0 TO 9-1
FOR j=i+1 TO 9
IF S0(i)=S0(j) THEN
CALL Distan1
EXIT SUB
END IF
NEXT j
NEXT i
! 完結して毎回 同じなら不応係数を、大きくジャンプ。
FOR H=0 TO 9
IF S1(H)<>S0(H) THEN
CALL Distan5 !描画
EXIT SUB
END IF
NEXT H
LET rc1=rc1+1
IF 10<rc1 THEN
LET Kr=Kr+0.1
LET rc1=0
CALL PRTkk
END IF
END SUB

! 不応係数を、漸増。
SUB Distan1
LET rc1=rc1+1
IF 10<rc1 THEN
LET Kr=Kr+0.01
LET rc1=0
CALL PRTkk
END IF
END SUB

!--------
SUB Distan5
LET rc1=0
! 新しい訪問コース(左から2番目のク゛ラフ) の距離 Dis の計算。描画。
LET Dis=0
LET W=9
FOR H=0 TO 9
LET Dis=Dis+D(S0(W),S0(H))
LET W=H
LET S1(H)=S0(H)
NEXT H
CALL DispL1 !描画。
!-----
! 最短の訪問コース(左から1番目のク゛ラフ) の進退判定、記憶。描画。
IF NOT Fin=0 THEN
IF Fin=<Dis THEN EXIT SUB
MAT Xs=0*con
FOR H=0 TO 9
LET Xs(10*S2(H)+H)=1
NEXT H
LET Rew=-0.01
CALL kyobun !旧記憶の除去
END IF
!-----
MAT Xs=0*CON
FOR H=0 TO 9
LET Xs(10*S1(H)+H)=1
NEXT H
LET Rew= 0.01
CALL kyobun !新しい記憶
LET Fin=Dis
FOR H=0 TO 9
LET S2(H)=S1(H)
NEXT H
CALL DispL2 !描画。
!beep
END SUB
!--------
! 進退の結果は、順序H(0~9)場所V(0~9)で、
! 1枚の 100ト゛ット 2次元 時空 絵図 です。

! 連想記憶の映像として、
! 続き3

    └!続き3 SECOND 2007/09/22 20:28:26  ツリーへ

Re: !続き2 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/22 20:28:26
! 続き3
! 相互結合係数 Wij(0~99,0~99) に加算する。

!※思ったほど、この記憶は、有効に作用しなかった。
! 局所的な牽引にすぎるためか、悪くなる場合が有る。

! 好成績の時空図を、無限に加算していけば 広範囲に有効な
! 概念(共通要素)に、なれないか?

!    直流成分
!  0.1 = DC= 10/100 Xi(0~99) 100個の中で、10個が発火。
!    交流成分 の共分散
!  W(ij)=W(i,j)+ (Xi-DC)*(Xj-DC) !連想結合

!  0.81= (Xi-DC)*(Xj-DC)= (1-0.1)*(1-0.1) ij 両側発火
! -0.09= (Xi-DC)*(Xj-DC)= (0-0.1)*(1-0.1) 片側発火
!  0.01= (Xi-DC)*(Xj-DC)= (0-0.1)*(0-0.1) 両方発火なし
SUB kyobun
LET DC=0.1
! iの、地点Iv(0~9)と順序Ih(0~9)
FOR Iv=0 TO 9
FOR Ih=0 TO 9
LET i=10*Iv+Ih !該当するニューロンi番(0~99)
! jの、地点Jv(0~9)と順序Jh(0~9)
FOR Jv=0 TO 9
FOR Jh=0 TO 9
LET j=10*Jv+Jh !該当するニューロンj番(0~99)

LET Wij(i,j)=Wij(i,j)+Rew*(Xs(i)-DC)*(Xs(j)-DC) !連想結合加算

!if Ih=Jh and Iv=Jv then
! let Wij(i,j)=Wij(i,j)+Rew
!elseif Ih=Jh or Iv=Jv then
! let Wij(i,j)=Wij(i,j)-Rew
!end if
NEXT Jh
NEXT Jv
NEXT Ih
NEXT Iv
END SUB

!-----------
!画面表示。
!-----------
SUB DispL0
! 探索中の訪問コース(左から3番目のク゛ラフ)
SET VIEWPORT 1.1/3.5+1/4, 1.1/3.5+1/4+1/4, 1-1/4,1
SET WINDOW 0, 10, 10, 0
SET AREA COLOR 0
PLOT AREA:0,0; 10,0; 10,10; 0,10 !clear
SET LINE COLOR 2
PLOT LINES:0,0; 10,0; 10,10; 0,10; 0,0 !Edge
!---
SET LINE COLOR 7
FOR V=0 TO 9
DRAW circle WITH SCALE(0.2)*SHIFT(Px(V),Py(V)) !,3
NEXT V
SET LINE COLOR 3
LET W=9
FOR V=0 TO 9
PLOT LINES: Px(S0(W)),Py(S0(W)); Px(S0(V)),Py(S0(V)) !,4
LET W=V
NEXT V
END SUB

SUB DispL1
! 完成した訪問コース(左から2番目のク゛ラフ)
SET VIEWPORT 1.1/3.5, 1.1/3.5+1/4, 1-1.1/4, 1
SET WINDOW 0,10, 11,0
SET AREA COLOR 0
PLOT AREA:0,0; 10,0; 10,11; 0,11 !clear
SET LINE COLOR 2
PLOT LINES:0,0; 10,0; 10,11; 0,11; 0,0 !Edge
PLOT TEXT,AT 0,11: USING$("###.###",Dis)
!---
SET LINE COLOR 7
FOR V=0 TO 9
DRAW circle WITH SCALE(0.2)*SHIFT(Px(V),Py(V)) !,3
NEXT V
SET LINE COLOR 3
LET W=9
FOR H=0 TO 9
PLOT LINES: Px(S1(W)),Py(S1(W)); Px(S1(H)),Py(S1(H)) !,4
LET W=H
NEXT H
END SUB

SUB DispL2
! 最短の訪問コース(左から1番目のク゛ラフ)
SET VIEWPORT 0, 1.1/3.5, 1-1.15/3.5, 1
SET WINDOW -0.5, 10.5, 11,-0.5
SET AREA COLOR 0
PLOT AREA:-0.5,-0.5; 10.5,-0.5; 10.5,11; -0.5,11 !clear
SET LINE COLOR 2
PLOT LINES:-0.5,-0.5; 10.5,-0.5; 10.5,11; -0.5,11; -0.5,-0.5 !Edge
PLOT TEXT,AT 0,11: USING$("###.###",Fin)
!---
FOR V=0 TO 9
PLOT TEXT,AT Px(V)+0.2,Py(V)+0.8 :STR$(V)
NEXT V
SET LINE COLOR 7
FOR V=0 TO 9
DRAW circle WITH SCALE(0.15)*SHIFT(Px(V),Py(V)) !,3
NEXT V
LET W=9
SET LINE COLOR 3
FOR H=0 TO 9
PLOT LINES: Px(S2(W)),Py(S2(W)); Px(S2(H)),Py(S2(H)) !,4
LET W=H
NEXT H
END SUB

! 続き4

     └!続き4 SECOND 2007/09/22 20:29:31  ツリーへ

Re: !続き3 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/22 20:29:31
! 続き4
!----------------------------------------------
!初期設定。
!ニューロン間の相互結合係数 Wij(i,j) の作成。
!----------------------------------------------
!他の機械で学習済みの 幾多の 2次元時空図(手順)の共通要素(概念)を、
!本能の時空図として、あらかじめ 連想記憶に固定する様なもの。
!これを自力の学習で得るのは、かなりな 試行回数を要すると思われる。

SUB Mat300
! 10個が重複しないように、自己保持されるような賞罰。
! i番目ニューロンが、
FOR Iv=0 TO 9 !訪問地点 (0~9)
FOR Ih=0 TO 9 !訪問順序 (0~9)
LET i=10*Iv+Ih !該当するニューロンi番目 (0~99)
! j番目ニューロンから受ける影響。
FOR Jv=0 TO 9 !訪問地点 (0~9)
FOR Jh=0 TO 9 !訪問順序 (0~9)
LET j=10*Jv+Jh !該当するニューロンj番目 (0~99)
! 自己保持は賞 +0.5 、再来2度以上訪問と同時2箇所以上訪問は罰 ー1
IF Ih=Jh AND Iv=Jv THEN
LET Wij(i,j)=Wij(i,j)+0.5
ELSEIF Ih=Jh OR Iv=Jv THEN
LET Wij(i,j)=Wij(i,j)-1
END IF
NEXT Jh
NEXT Jv
NEXT Ih
NEXT Iv

!--------
! 地点(0~9)の距離に応じた、賞罰。
! i番目ニューロンが、
FOR Ih=0 TO 9 !訪問順序 (0~9)
LET L_=Ih-1
IF L_<0 THEN LET L_=9 !1つ前の訪問順序 (0~9)
LET R_=Ih+1
IF 9<R_ THEN LET R_=0 !1つ先の訪問順序 (0~9)
FOR Iv=0 TO 9 !訪問地点 (0~9)
LET i=10*Iv+Ih !該当するニューロンi番目 (0~99)

! j番目ニューロンから受ける影響。

LET Jh=L_ !1つ前の訪問順序 (0~9)
FOR Jv=0 TO 9 !1つ前の訪問地点 (0~9)
LET j=10*Jv+Jh !1つ前の該当するニューロンj番目 (0~99)
! 再来訪問でなければ、短距離の程度の賞 (0~+0.5)
IF Iv<>Jv THEN LET Wij(i,j)=Wij(i,j)+(S(Iv,Jv)/3)
NEXT Jv

LET Jh=R_ !1つ先の訪問順序 (0~9)
FOR Jv=0 TO 9 !1つ先の訪問地点 (0~9)
LET j=10*Jv+Jh !1つ先の該当するニューロンj番目 (0~99)
! 再来訪問でなければ、短距離の程度の賞 (0~+0.5)
IF Iv<>Jv THEN LET Wij(i,j)=Wij(i,j)+(S(Jv,Iv)/3)
NEXT Jv

NEXT Iv
NEXT Ih
END SUB

!--------------
!初期設定。
!表示モニター
!--------------
SUB Moni_DW
LET V0=18
! 各点間の距離 D(0~9,0~9) の表示。
PLOT TEXT,AT 0,V0: "距離 D(地点0~9,地点0~9)="
FOR V=0 TO 9
FOR H=0 TO 9
PLOT TEXT,AT H*7,V0+1+V: USING$("###.##",D(H,V))
NEXT H
NEXT V
CHARACTER INPUT W$
IF W$<>"M" AND W$<>"m" THEN
CALL Moni9
EXIT SUB
END IF
! 各点間の相対評価 S(H0~9,V0~9) の表示。
PLOT TEXT,AT 0,V0:"評価 S(基準地点H0~9,周辺地点V0~9)="
FOR V=0 TO 9
FOR H=0 TO 9
PLOT TEXT,AT H*7,V0+1+V: USING$("###.##",S(H,V))
NEXT H
NEXT V
CHARACTER INPUT W$
IF W$<>"M" AND W$<>"m" THEN
CALL Moni9
EXIT SUB
END IF
!-----
! 各ニューロン間の相互結合係数 Wij(0~99,0~99) の表示。
PLOT TEXT,AT 0,V0:"賞罰 Wij(i=0~99,j=0~99) "
FOR Iv=0 TO 9
FOR Ih=0 TO 9
LET i=10*Iv+Ih
PLOT TEXT,AT 27,V0: "i="&STR$(i)&" (順序H="&STR$(Ih)&" 地点V="&STR$(Iv)&") j= below~"
FOR Jv=0 TO 9
FOR Jh=0 TO 9
LET j=10*Jv+Jh
! 続き5

      └!続き5 SECOND 2007/09/22 20:30:34  (修正1回) ツリーへ

Re: !続き4 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/22 20:30:34 ** この記事は1回修正されてます
! 続き5
PLOT TEXT,AT jh*7,V0+1+jv: USING$("###.##",Wij(i,j))
NEXT Jh
NEXT Jv
CHARACTER INPUT W$
IF W$<>"M" AND W$<>"m" THEN
CALL Moni9
EXIT SUB
END IF
NEXT Ih
NEXT Iv
CALL Moni9
END SUB

SUB Moni9
DO WHILE ""<W$
WAIT DELAY 0.05
CHARACTER INPUT nowait: W$
LOOP
END SUB

!------------
! 定数表示
!------------
SUB PRTkk
SET VIEWPORT 0,1, 0,1
SET WINDOW 0,79,29,0 ! print scale
PLOT TEXT,AT 1,15: "Kr="&USING$("#.##",Kr)&" :Kf="&STR$(Kf)&" :Af="&STR$(Af)&" :Th="&STR$(Th)&" :ei="&STR$(ei)
END SUB

!------------
!初期設定。
!------------
SUB Mat_SD
! 各点0~9の位置データ- 読み込み
RESTORE
FOR Vy=0 TO 9
FOR Vx=0 TO 9
READ V
IF -1<V THEN
LET Px(V)=Vx+0.3
LET Py(V)=Vy+0.3 !ク゛ラフの右下移動0.3
END IF
NEXT Vx
NEXT Vy
!--------
! 各点0~9間の、距離 D(0~9,0~9) の計算。
FOR V=0 TO 9-1
FOR H=V+1 TO 9
LET S(H,V)=(Px(V)-Px(H))^2+(Py(V)-Py(H))^2
LET D(H,V)=SQR(S(H,V))
LET D(V,H)=D(H,V)
LET S(V,H)=S(H,V)
NEXT H
NEXT V
! 各点間の相対評価 S(基準H0~9,周辺V0~9) の計算
FOR H=0 TO 9
!  S(,)の周辺V0~9( 距離の2乗 )の、最小値Minを求める
LET MIN=9999
FOR V=0 TO 9
IF H<>V THEN
IF MIN>S(H,V) THEN LET MIN=S(H,V)
END IF
NEXT V
!  S(,)の周辺V0~9( 距離の2乗 )の逆数を、最大値1。
LET Sum=0
FOR V=0 TO 9
IF H<>V THEN
LET S(H,V)=Min/S(H,V)
LET Sum=Sum+S(H,V)
END IF
NEXT V
!  その直流 DC 成分を除去して、短距離の評価値。
LET Sum=Sum/9
FOR V=0 TO 9
IF H<>V THEN LET S(H,V)=S(H,V)-Sum
NEXT V
NEXT H
END SUB

! 各点0~9の位置データ-
! テスト サンフ゜ル1
DATA +2,+0,-1,-1,-1,-1,-1,-1,-1,-1
DATA +4,-1,-1,-1,-1,-1,+9,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DATA -1,-1,-1,+1,-1,-1,-1,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DATA -1,+3,-1,-1,-1,-1,+7,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,+8
DATA -1,-1,-1,-1,-1,-1,-1,-1,+5,+6
! テスト サンフ゜ル2
DATA -1,-1,-1,-1,+0,-1,-1,-1,-1,-1
DATA -1,-1,-1,+2,-1,-1,+9,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DATA -1,-1,-1,+1,-1,-1,-1,+8,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DATA -1,+3,-1,-1,-1,-1,-1,+7,-1,-1
DATA -1,-1,-1,-1,+4,-1,-1,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,+6,-1,-1,-1
DATA -1,-1,-1,-1,+5,-1,-1,-1,-1,-1
DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1

END

       └!副産物 SECOND 2007/09/23 14:13:29  ツリーへ

Re: !続き5 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/23 14:13:29
!副産物
!いたる所、不適当な処理も有るかと思います。どうか、自由に改造、改変し
!うまくいったら、新規投稿して下さい。

!下記の分割ツールを利用すると、便利です。

!掲示板の1ページ最大バイト数は、3072 となっておりますが、
!実際には、2750~2800 付近で、入らなくなります、どうしてでしょう?


!投稿テキスト分割ツール.BAS
!----
LET f0$="neuro修1down.bas" ! 入力 file.bas 、出力は、file#.bas になる
PRINT "start"
!----
FOR i=LEN(f0$) TO 1 STEP -1
IF f0$(i:i)="." THEN EXIT FOR
NEXT i
IF i<1 THEN LET i=LEN(f0$)+1
LET fn$=f0$(1:i-1)
OPEN #1: NAME f0$,ACCESS INPUT
OPEN #2: NAME fn$&"#.bas"
ERASE #2
!----
LET Byt=0 ! 書き込み済みのページ内バイト数
LET Num=0 ! トップページの番号
DO
LINE INPUT #1, IF MISSING THEN EXIT DO :w$
LET w$=LTRIM$(w$) ! 行頭スペースの除去
IF w$(1:4)="! 続き" AND LEN(w$)=5 THEN ! 古い区切マークの除去、読み飛ばし
ELSE
LET Byt=Byt+BLEN(w$)+2 ! 1行のバイト数+CRLF の加算
IF 2750-9 <Byt THEN ! 1ページの上限バイト数 2750
LET Num=Num+1
PRINT #2 :"! 続き"&STR$(Num) ! 区切(終)マーク。バイト数 9= 6+1+CRLF
!----new page
PRINT #2 :"! 続き"&STR$(Num) ! 区切(始)マーク。バイト数 9= 6+1+CRLF
LET Byt=9+BLEN(w$)+2 ! ページ先頭2行のバイト数
END IF
PRINT #2 :w$ !本文の行
END IF
LOOP
CLOSE #2
CLOSE #1
PRINT "end"
END


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。