//****************************** //** 生得的neuron構造の定義 ** //****************************** // ### constructor ### apriori::apriori(){ uPara u,us; //// panishment,rewardにpain,plesureのtag付け //// u.clr(); u.sub[0]=&pain; // 苦表象 u.src= &panishment; // 罰受容器 u.atr=EMO; // PRへの結合属性はemotion brain.connect(&u); // 罰受容器に苦情動を結合 u.sub[0]=&plesure; // 快表象 u.src= &reward; // 罰受容器 brain.connect(&u); // 罰受容器に苦情動を結合 //// reqAction(行為励起要求)をsetAction(行為用励起)に結合 //// u.clr(); u.sub[0]=&reqAction; // 行為励起要求N(S) u.src= &setAction; // 行為発動N(C) brain.connect(&u); // 行為発動N(C)へ行為励起要求N(S)を結合 u.atr=INH; u.sub[0]=&setAction; // 行為発動N(C) u.src= &reqAction; // 行為励起要求N(S) brain.connect(&u); // 行為励起要求N(S)へ行為発動N(C)を抑制結合 //// reqActionAdj(行為抑制強度指定)をsetActionAdj(行為抑制強度)に結合 //// u.clr(); u.sub[0]=&reqInaction; // 行為抑制要求N(S) u.src= &setInaction; // 行為抑制発動N(C) brain.connect(&u); // 行為抑制発動N(C)へ行為抑制要求N(S)を結合 u.atr=INH; u.sub[0]=&setInaction; // 行為抑制発動N(C) u.src= &reqInaction; // 行為抑制要求N(S) brain.connect(&u); // 行為抑制要求N(S)へ行為抑制発動N(C)を抑制結合 //// painをPain純粋表象(repPain)にNOR結合 (plesureも同様) //// u.clr(); u.sub[0] = &pain; u.src = &repPain; brain.connect(&u); // painをpain純粋表象にNOR結合 u.sub[0] = &plesure; u.src = &repPlesure; brain.connect(&u); // plesureをplesure純粋表象にNOR結合 //// pain純粋表象(repPain)にpain検出 NをCONS結合 (plesureも同様) //// u.clr(); u.atr = CONS; u.sub[0] = &detPain; u.src = &repPain; brain.connect(&u); // pain純粋表象にpain検出 NをCONS 結合 u.sub[0] = &detPlesure; u.src = &repPlesure; brain.connect(&u); // plesure純粋表象にplesure検出 NをCONS 結合 //// setAction純粋表象(repSetAction)にsetActionのディジタル微分出力をNOR結合 //// differentialD(2,600); u.clr(); u.sub[0] = &setAction; u.src = in1; brain.connect(&u); u.sub[0] = out1; u.src = &repSetAction; brain.connect(&u); //// setInaction純粋表象(repSetInaction)にsetInactionのディジタル微分出力をNOR結合 //// differentialD(2,610); u.clr(); u.sub[0] = &setInaction; u.src = in1; brain.connect(&u); u.sub[0] = out1; u.src = &repSetInaction; brain.connect(&u); //// receptorの生得的択一構造 //// u.clr(); u.ukind=IU_IN; // 対象ユニット種別 u.sub[0]=&receptor1; u.sub[1]=&receptor2; u.sub[2]=&receptor3; u.sub[3]=&receptor4; u.sub[4]=&receptor5; u.sub[5]=&receptor6; u.sub[6]=&receptor7; u.sub[6]->ex = NOR_EX; // 疑似励起 brain.connect(&u); // receptorの択一ユニット生成 u.sub[6]->ex = 0; // 疑似励起解除 us.sub[0]=u.src; // IRPアドレス退避 us.sel=u.sel; // SELアドレス退避 //// effectorの生得的択一構造 //// u.clr(); u.ukind=IU_IN; // 対象ユニット種別 u.sub[0]=&effector1; u.sub[1]=&effector2; u.sub[2]=&effector3; u.sub[3]=&effector4; u.sub[4]=&effector5; u.sub[5]=&effector6; u.sub[6]=&effector7; u.sub[6]->ex = NOR_EX; // 疑似励起 brain.connect(&u); // effectorの択一ユニット生成 u.sub[6]->ex = 0; // 疑似励起解除 us.sub[1]=u.src; // IRPアドレス退避 //// receptor,effectorの生得的択一構造 //// us.sub[0]->ex = NOR_EX; // 疑似励起 us.sub[1]->ex = NOR_EX; // 疑似励起 u.clr(); u.ukind=IU_IN; // 対象ユニット種別 u.sub[0]=us.sub[0]; u.sub[1]=us.sub[1]; brain.connect(&u); // 最終択一ユニット生成 us.sub[0]->ex = 0; // 疑似励起解除 us.sub[1]->ex = 0; // 疑似励起解除 SELreceptor=u.sel; // SELアドレス コピー(快・不快受容器励起時AT呼込の際、必要) //// receptorの生得的時系列択一構造 //// u.clr(); u.sub[0]=us.sel; u.ukind=TIU_IN; // 対象ユニット種別 brain.connect(&u); // receptorの択一ユニット生成 u.sel->sel.adr = us.sel->addOutToSEL(&(u.sel->sel));// SELに他SEL複数結合用出力アドレス追加 us.sub[2]=u.src; // TIRPアドレス退避 /* /// 試験用 後で消せ us.sel=u.sel; // SELアドレス退避 u.clr(); u.sub[0]=us.sel; u.ukind=TIU_IN; // 対象ユニット種別 brain.connect(&u); // receptorの択一ユニット生成 u.sel->sel.adr = us.sel->addOutToSEL(&(u.sel->sel));// SELに他SEL複数結合用出力アドレス追加 SELreceptorT=u.sel; // SELアドレス コピー(快・不快受容器励起時AT呼込の際、必要) */ //// 時系列用receptor,effectorの生得的択一構造 //// us.sub[2]->ex = NOR_EX; // 疑似励起 us.sub[1]->ex = NOR_EX; // 疑似励起 u.clr(); u.ukind=IU_IN; // 対象ユニット種別 u.sub[0]=us.sub[2]; u.sub[1]=us.sub[1]; brain.connect(&u); // 最終択一ユニット生成 us.sub[2]->ex = 0; // 疑似励起解除 us.sub[1]->ex = 0; // 疑似励起解除 SELreceptorT=u.sel; // SELアドレス コピー(快・不快受容器励起時AT呼込の際、必要) //############################################## //# 快・不快を検知し、lead,dangerTAGを付ける # //############################################## //// 不快を検知し、dangerTAGを付ける //// // setPainPlesure(&pain, &danger, &detCpDanger, &detPain, 0); //// 快を検知し、leadTAGを付ける //// // setPainPlesure(&plesure, &lead, &detCpLead, &detPlesure,100); //#### application test routine ####// u.clr(); u.sub[0] = &action; u.src = &effector1; CAST_IB(brain.connect(&u))->f =0; u.src = &effector2; CAST_IB(brain.connect(&u))->f =0; //-------------------------------------------------------- //****************************************** //* 記憶ライン結合Nへのpain,plesure接続処理 * //****************************************** void apriori::setPainPlesure(pNeuron *pain_plesure, pNeuron *danger_lead, pNeuron *detCpDanger_lead, pNeuron *detPain_plesure, int n){ // [nはニューロ番号] int x=0,y=0; uPara u; pNeuron *pn; pNeuron *pA,*pB,*pC,*pD,*pE,*pF,*pG,*pH; //############################################# //# 不快を検知し、danger,plesureTAGを付ける # //############################################# //// painをディジタル微分 //// pn=out1; // 前出力Nアドレス保存 differentialD(4,510+n); u.clr(); u.sub[0] = pain_plesure; u.src = in1; brain.connect(&u); //// ディジタル微分出力をラッチ //// pn=out1; // 前出力Nアドレス保存 latch(6,520+n); u.clr(); u.sub[0] = pn; u.src = in1; brain.connect(&u); //// danger Tagへの接続 //// pn=out1; // latch Nアドレス保存 u.clr(); u.atr = CALL; u.sub[0] = pn; u.src = danger_lead; brain.connect(&u); // danger Tagへlatch出力をCALL入力 u.atr = DET_CP; u.sub[0] = detCpDanger_lead; brain.connect(&u); // danger TagへdetCpDanger NをDET_CP入力 //// 意識制御(setFromTag)への接続 //// latchEN(2,530+n); // latchN生成 (EN付) u.clr(); u.sub[0] = detCpDanger_lead; u.src = in1; brain.connect(&u); // latchEN NにCP検出NをNOR接続 u.atr = EN; u.sub[0] = pn; brain.connect(&u); // latchEN Nにlatch出力をEN接続 u.atr = NOR; u.sub[0] = out1; u.src = &setFromTag; brain.connect(&u); // CP制御(setFromTag)にlatchEN出力をNOR接続 u.atr = INH; u.sub[0] = out1; u.src = pn; brain.connect(&u); // latch NにlatchEN出力をINH接続 pA = out1; //// Pain検出 N 一般化定義 //// pB = detPain_plesure; //// 記憶トレースでPain検出後latch //// latch(2,541+n); // latchN生成 pC = out1; //// movLastMem後latch //// latch(2,550+n); // latchN生成 pF = out1; //// reset条件 //// //-- 記憶内、時間範囲オーバー --// brain.nearPoint(&x, &y); // 配置場所検索 pn = new pNeuron(x,y,0,5,560+n); // ゲートN生成 u.clr(); u.sub[0] = pA; u.src = pn; brain.connect(&u); // pA NからゲートNにNOR 入力 u.atr = INH; u.sub[0] = &memTime1; brain.connect(&u); // memTime1 NからゲートNにINH 入力 u.sub[0] = &memTime2; brain.connect(&u); // memTime2 NからゲートNにINH 入力 u.sub[0] = &memTime3; brain.connect(&u); // memTime3 NからゲートNにINH 入力 u.sub[0] = &memTime4; brain.connect(&u); // memTime4 NからゲートNにINH 入力 u.atr = EN; u.sub[0] = &setCp; brain.connect(&u); // setCp NからゲートNにEN 入力 u.atr = INH; u.sub[0] = pn; u.src = pA; brain.connect(&u); // ゲートNからpA NにINH 出力 u.src = pC; brain.connect(&u); // ゲートNからpC NにINH 出力 u.src = pF; brain.connect(&u); // ゲートNからpF NにINH 出力 //-- 記憶内検索限界のため終了 --// brain.nearPoint(&x, &y); // 配置場所検索 pn = new pNeuron(x,y,0,5,570+n); // ゲートN生成 u.clr(); u.sub[0] = pA; u.src = pn; brain.connect(&u); // pA NからゲートNにNOR 入力 u.atr = EN; u.sub[0] = &end; brain.connect(&u); // end NからゲートNにEN 入力 u.atr = INH; u.sub[0] = pn; u.src = pA; brain.connect(&u); // ゲートNからpA NにINH 出力 u.src = pC; brain.connect(&u); // ゲートNからpC NにINH 出力 u.src = pF; brain.connect(&u); // ゲートNからpF NにINH 出力