#90 雲井の雁の出口検査で水平スプリット

#90 雲井の雁で出口検査で水平スプリットを検出 TRIBEBOX #1082 :先祖 #843 ※218でスプリットが生じている

TRIBELIST::DetectHorizontalSplitではこのスプリットを検出できない.DetectSplitの対象となるのは,FreeTribeBoxと呼ばれる束縛されていない系列に限定されている.⇒これを暫定的に無差別に検査を実行するようにしても状態は変わらない.この仮修正の下で,「系列間衝突が発生で移動量ゼロ」という事象が起きているので見ておこう.

TRIBEBOX::DetectSplitでERR_CROSSINTRIBESを返しているが,MoveLeftUptoLimitは移動量ゼロを返している.障害が起きているのは,RIBEBOX: #1058 先祖=#427 一院(0)だ.T1=#1070 [系列枠]:先祖=大臣(橋姫)とT2=#1062 [系列枠]:先祖=先帝の衝突が検出されているのだが… TRIBEBOX::CheckConflictでは水平交叉量を返しているが,エラーコードを返す場合もある.また,この関数を呼び出しているTRIBEBOX::DetectSplitでは,「厳密値を適用する@20180729」という決定がなされている.

今の場合は交叉量は1なので許容誤差範囲と推定されるのだが… 2018年当時のログを読み直してみるとこの項目に直接言及した記述はないが,「checkBondedTribeCollision 束縛系列ないし下位系列を持たない系列を対象とする.対象系列枠の主系列およびその下流系列(つまり系列ブロック)と対象系列との衝突検定を実施する 下位系列を持たない場合は系列ブロック核のみを検査する 厳密値を適用する 」とある.

「衝突検定はすべて厳密値を適用するものとし,実動作が完了してから丸めるものとする」というコメントもあるので,この方針に従ったものだろう.ただし,TRIBEBOX::DetectSplitでは交叉量ではなく,エラーコードを返しているので丸めようがない.TRIBEBOX::DetectSplitで誤差を見るようにしておこう.⇒「系列間衝突が発生で移動量ゼロ」エラーは解消した.⇒おかしい.系列枠リストから※218系列が消えてしまっているように見える.第14位にいるはずなのだが…

いや,そもそも当初は96系列あったはずなのに,64系列になっている.32個もどこかに消えてしまっている.⇒MakeUpTreeの出口近く(系列グループ(系統)を構成するの段)ではすでにそのカウントだ.96の中には単身先祖系列で抹消されるものもあるから,カウントが減少するのは不思議ではないが… ※218が先祖となる系列は消えている.⇒※218は一院系列に取り込まれている.つまり,これは系列内スプリットだ.@58 大宮と@68桃園式部卿宮の間が開いている点が問題になる.

image

一院系列のTRIBEBOX::CheckGeneSplitでスプリットが検出されていない.⇒CheckGeneSplitとInvestigateHSplitsで微妙に動作が異なる点が問題だ.InvestigateHSplitsでは許容範囲としてmax(Metrix.nfontW, Metrix.marghgap)という値を使い,これを1ふかした定規で区間検査を行っている.いま,marghgapは12という値が適用されているので,delta=13となっている.上の図でイエローの帯の幅は13で,これはほぼ結婚枠間のギャップに等しい.

CheckGeneSplitでは結婚枠矩形領域を集積するとき,結婚枠間ギャップを加味した値を取っている上に,さらに計算誤差を回避するためとして+1しているため,大宮の入っているボックスと桃園式部卿の入っているボックスは接触していると認定されている.⇒InvestigateHSplitsの許容範囲を拡げてこの矛盾を回避することも可能だが,CheckGeneSplitの検査を厳格にして,1単位でも移動するように修正した.

基準ノード#121 明石の尼君で開いて,TRIBEBOX:DecidePrimaryNodeで系列優先実ノード不在が起きる.⇒障害が起きているのはTRIBEBOX: #1064 先祖=#635 先帝(0)[0] 優先=紫の上(若紫)だ.TRIBEBOX::DecidePrimaryNodeの書き換えがまだ完結していない.現行ではほとんどをGetAlternativePrimeNodeに委ねるという論理になっているが,やり過ぎだ.すでにGoDownStreamでほぼ確定している条件があるのだから,それを活かすようにしなくてはならない.

もっともシンプルな解決として,優先ノードの持つ仮ノードリストの中で自系列に属するノードがあれば,それを優先仮ノードとし,他系列で自系列の下位系列に属さないものがあれば,優先実ノードとするというロジックを組み込んだ.基本的にはこれでよいのではないかと思う.

#18 左兵衛督で「系列間衝突が発生で移動量ゼロ」が起きた.ERR_CROSSINTRIBESが起きている.交叉量は18あるので無視できる値ではない.衝突はTRIBEBOX: #1058 先祖=#661 摂政太政大臣(0)と#1064 先祖=#507 ※3(0)の間で起きている.どちらも一院系列の従系列だ.関数MoveLeftUptoLimitで,ERR_CROSSINTRIBES,ERR_SPLITINTRIBES,ERR_WRONGSENZOORDERのケースを処理している.検査対象は始系列の#1056 先祖=#791 右大臣(明石)(0)だ.これはかなりおかしい.⇒仮修正がそのまま残っていた.

源氏の全体図テストが通った!

image

コメントを残す

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

CAPTCHA