ZT BASICの完全木テストが通った

ZTシステム構成図7.ZELの全体図を#57 BASETABLEでソートして三極検定レッドラインオーバーが発生する.結婚枠枠の衝突が起きている模様だ.系列枠TRIBEBOX #912 先祖=#769 COUPLING(0)[6] 優先=#983 nodule(8)の衝突が止まらない.衝突は複数世代に渡るかなり複合的なもののように見える.

  1. gene=1 move=612  #1456 <>  #712
  2. gene=1 move=612  #678 <> #656
  3. gene=0 move=306  #655 <> #652
  4. gene=-1 move=465  #1463 <> #676
  5. gene=-1 move=306  #676 <> #702
  6. gene=-2 move=1096  #629 <> #634
  7. gene=-2 move=97  #633 <> #635
  8. ————————————————–
  9. gene=0 move=97  #655 <> #652
  10. gene=-1 move=179  #1452 <> #1468
  11. gene=-1 move=97  #676 <> #702
  12. gene=-2 move=1262  #633 <> #635
  13. gene=-4 move=15  #697 <> #660
  14. —————————————————–
  15. gene=1 move=612  #1456 <> #712
  16. gene=1 move=612  #678 <> #656
  17. gene=0 move=306   #655 <> #652
  18. ......

1周期が2ラウンドに渡る12個の衝突を含む長いサイクルが繰り返されている.この衝突サイクルを解析するのは至難の業だ(衝突以外の因子もからんでいる).しかし,おかしいのはレッドラインオーバーで一旦ブレークすると,その後は衝突は完全に影を潜めてしまうという点だ.何がどう変化しているのか?

障害が起きているのはMainExperimentのステージ【7.2】完全木検定:すべての系列を完全系列として正準化するで実行されるMakePairListCleanだ.⇒REDLINEの上限を現行の40から60に引き上げて解決した.REDLINEは概ね系図の世代数に依拠した数字だが,この処理は系列枠単位なので系列サイズによっても左右される.

同上サンプルを#87 NAMESORTでソートして,ノード対と実ノードの世代不一致で停止した.NAMEBOX::MakeUpPairBoxでは「makePairBoxで新規に生成されたノード対を構成」しているが,その中でTRIBEBOX::hasPhysicalConnectionにより,「実ノードを切り替え」が起きている.この関数の中でなぜ敢えてNAMEBOX:ChangeTribeRealnodeを実行しているのか,趣旨がよくわからない.

ChangeTribeRealnodeというのは,「系列優先実ノードを付け替える」ための関数,MakeUpPairBoxは新規に生成されたノード対のパラメータを整備するための関数だ.⇒この関数の中でIsPrimaryGhostでない場合はゼロ復帰しているので,呼び出していること自体は誤りではないが,ここでやるべきことではないような気がする.⇒「ここではChangeTribeRealnodeを実行しない@20210216」としておく.

#88 PARTIALNAMEで三極検定レッドラインオーバーが起きた.⇒まだ上限数が不足している.REDLINE値として「有効な結婚数」を適用するようにして解決した.

#91 TREEVIEWで系列優先実ノード不在が発生する.エラーを無視して実行すると,TRIBEBOX::IsMinorOfで主系列参照チェーンのループが起きる.TRIBEBOX #942 先祖=#821 NODELIST(0)の系列優先ノードが決定できない.TRIBEBOX #924 先祖=#769 COUPLING(0)[12]とNODELIST系列がどちらもNLIST< LISTNODE,CID>を優先ノードとしているためだ.

NLISTは2つしか仮ノードを持っていないので線形順序を与えることができない.⇒系列枠リストの順序に従い,前方系列しか主系列を選択できないという制限を与えて解決した.系列枠リストをソートするために,TRIBELIST::SortTribeListとは別にSortTribeListByWeightという関数を作り,系列優先仮ノードの重み(基準ノードからの距離)に従ってソートするようにした.

同上サンプルを開いてPAIRBOX::CancelCommonPairで停止する.(plist == bottomlist)というエラー.CancelCommonPairは端点共有を解除するための関数で「対象ノード対を現在のノード対リストから取り出し,最下段チャンネルに仮移動する」操作を行う.「現チャンネルが最下段の場合には最上段チャンネルに移動」に修正した.

同上サンプルを#84 FAMILYTREEでソートして,MPLCループレッドラインオーバーが発生した.TRIBEBOX #902 先祖=#784 FAMILYTREE(0)[1] 優先=#784 FAMILYTREE(0) 始系列でCheckMargBoxChangedが起き,以下のシーケンスを反復している.

  1. 不可視ノード移動x9件
  2. ————————————————
  3. 兄弟順位の逆転 #626
  4. 不可視枠の移動 move=-3100
  5. ————————————————
  6. goodsonを設定 goodson=#722

兄弟順位の逆転補正を停止すれば描画できる.兄弟順位逆転が起きているのはMARGBOX #626:#784 FAMILYTREE(0)+#716 familytree(0)→#725 BaseLink(0)だ.障害ノードはprevious=#721 linktable(0)とperson=#722 namesort(0)だ.

familytreeの子ども枠は幅広く,namesort(0)は+3100と-3099の間を往復運動している.namesortが子ども枠の中央付近に来るとgoodsonが交互に変化してシーソーになってしまうため運動が反復して停止しない.MARGBOX:checkBrotherOrderでは対象ノードがgoodsonであるときはつねにゼロ復帰するようにして解決した.

同上サンプルを#87 NAMESORTでソートしてTRIBEBOX:hasPhysicalConnectionで停止した.(!realnode->getghostbits(PRIMGHOST | ELDERWIFE)) で優先仮ノードがREALGHOST属性を持つのに実ノードが(PRIMGHOST | ELDERWIFE)ではないことが検出されている.⇒ここでは停止しないでダンプするだけとする.

image

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA