脳の数学モデル(カオス・ニューラル・ネット) 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 |