薫の傍系血族図で水平スプリット

源氏物語全系譜6.1.ZELの傍系血族図を基準ノード=#74 薫でソートして,系統並び替えの出口で水平スプリットが検出されている.

image

確かに始系列の摂政太政大臣系列で女一宮 (冷泉院の)と若君 (紅梅の)の間が開いている.しかし,このギャップは結婚枠間のギャップとほとんど同じ程度に見える.現行では検査に用いている枠幅は結婚枠間ギャップ+1となっている.これでは厳し過ぎる.検査枠幅を結婚枠間ギャップ+許容最大誤差とすればパスできる.このサンプルでは結婚枠間ギャップ13,許容最大誤差3となっているので問題ないのではないだろうか?その代わり,検査単位を結婚枠間ギャップとした.

これでこの問題は解決したはずだが,今度は光源氏の傍系血族図で同じエラーが出るようになった.

image

結婚枠間ギャップは結婚枠の左側に入れているので,それと系図枠外の余白を含めてスプリットとみなしているのだろう.検査単位を元のように結婚枠間ギャップ+1とし,検査枠幅=検査単位+許容計算誤差-1とすることにしてみよう.⇒これで収まったようだ.

同上サンプル傍系親族図を#102 花散里でソートして,NAMEBOX:CheckDummyBoxSerialで停止した.(elder != TYW->GetUpperNode())というエラーが起きている.⇒この検査コードは2021/01/23 ダミー枠チェーン上の結婚枠直列検査 で修正したときに追加されたものだが,間違っている.TYWの上位ノードはTYW枠が接続しているダミーノードであり,必ずしもLDRであるとは限らない.これは「TYW婚との擬似ダミー枠直列」と呼ばれるものでノーマルな状態と考えられる.

image

このサンプルでは多重が11件発生している.削除された循環枝数は2,婚姻グラフから削除された枝も2しかないのに,多重が11もあるというのはかなり問題だ.削除されているのは女三宮+柏木と紫の上+光源氏の2つだけだ.重婚クラスタ図が表示できれば,なぜこういうことになってしまうのか?もう少し突っ込んだ解析ができるのだが…

傍系親族図 基準ノード=#126 源氏宮を開いて,Bobject:getCommonPairTypeで停止した.PAIRLIST::searchCommonPairでPAIRBOX #2614:#2611 冷泉院(3)→#1597(1)の端点共有先を探しているところだ.ノード対区間がゼロに近いため,getCommonPairがCOMMON_NOCOMMONを返している.⇒getCommonPairType,およびsearchCommonPairでゼロ復帰するようにした.

このサンプルは多重が16も出ている.除去された循環枝は2,婚姻枝を4除去するだけで循環は止まっているのだが…

image

法定親族図 基準ノード=#94 明石の上を開いて,NAMEBOX:getPairlistで停止した.障害が起きているのはNAMEBOX #1297 八宮(0).物理世代番号は9でGENELIST::GetGeneBoxが空を返している.⇒オプションで停止していた「adjustGenerationRangeを停止する@20210117」を復活させて問題なく動作するようになった.

image

傍系親族図 基準ノード=#98 夕顔を開いてMARGBOX:checkBrotherOrderで停止した.関数内で無限ループしている.障害ノードはNAMEBOX #2559 夕霧(1)で結婚枠の先頭ノード.GetContactDistanceで移動量を計算し,CheckBrotherCrushで調整しているが,状変なしでループしている.⇒MoveBundledLDRでLDR束の隣接ノードまで左移動を実行しているが,移動のターゲットノードが移動対象ノードを親参照しているため距離が変化しない.⇒対処した.

法定親族図 #167 藤中納言(竹河)を開いて,NAMEBOX:previousNameBoxで停止した.(PHASE > CLEARTABLE && !showUnderWear && !OnRetrieveGhost && familytree && !OnSetPartialList && getvisible() && nbox->nextNameBox() != this && !disposing),つまり,nbox->nextNameBox() != this という理由だ.言い換えるとpreviousNameBoxがnextNameBoxの逆関数になっていない.障害が起きているのはNAMEBOX #2101 明石中宮(3)で,previousNameBoxでは明石中宮(3)→紫の上(若紫)(1)であるのに対し,nextNameBoxでは玉鬘(1)→紫の上(若紫)(1)が返ってくる.

MARGBOX #1101:#1249 光源氏(0)+→#1610 紫の上(若紫)(1)
R :#1610 紫の上(若紫)(1)
L :#1216 [結婚枠]:[3]
R | :#1611 玉鬘(1)
L | :#1103 [結婚枠]:[3]
R | | :#2101 明石中宮(3)
R | | | :#2144 [結婚枠]:[4]
R | | | | :#2143 明石中宮(4)
R | | | | | :#2102 [結婚枠]:[5]
R | | | | | | :#1612 明石中宮(2)

#1611 玉鬘(1)の入っている結婚枠は不可視で幅ゼロの空枠になっているため,previousNameBoxではValidMargBoxではないと認めてパスしているためだ.nextNameBoxでは,「不可視結婚枠の中にもLDRノードが存在する@20171011」として特に制限を設けていない.⇒previousNameBoxのValidMargBoxという制限を外してエラーは解消した.これでよいと思う.

image

この図面では多重は1件だけだが,光源氏のカードが3枚も出ている.上段の先祖ポジションにいる光は一段下げることができるはずだ.そうすれば藤壷の宮のボックスに入っているカードは不要になるはずで,紫の上の隣のポジションは外すことはできないが,多重カードを2枚までは削減できるはずなのだが…

▲Z木家系図 基準ノード=#104 藤壷の宮を開いて,系統並び替えの出口検査で垂直スプリットが検出された.

image

コメントを残す

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

CAPTCHA