MargBoxTransferで軸線枠を移動する

ZTシステム構成図7.ZELの全体図を#30 MDBで開いてMARGBOX:GetUpperNodeで停止する.「親ノード不在」が起きている.⇒TOPOLOGY::CallBuildShaftLineで軸線枠を設定する際に,結婚枠の親参照パスを付け替えて上位軸線ノードを参照するように修正してエラーは解消したが,絶対座標変換後のCheckAtypicalMarriage(非類型的結婚処理)でエラーになる.

上記サンプルの全体図 #30 MDBでTOPOLOGY:CheckAtypicalMarriageの「stave異常値」エラーが起きる.これは結婚連結線の割当てに失敗したことを意味する.障害が起きているのは,NAMEBOX #772 MDB(0),NAMEBOX #1261 MDB(2)とNAMEBOX #1229 MARGTABLE(1)だ.MDBは親を4組持っている.①topology+TOPOLOGY,②linktable,③namesort+NAMESORT,namesortだ.軸線はnamesortになっているが,topologyという選択もあったはずだ.

この図面では多重が2件発生している.MDBとMARGTABLEだ.topology→MDBは子どもがいないので消去できるはずなのだが,多重になっている.MARGTABLEには親はいない.単身婚の子どもBASETABLEとMDBとの結婚の子どもがいる.これらの子どもはMDB(2)の下にいるが,MARGTABLEとMDB(2)は連結されていない.MDB(0)というカードが可視で残ってしまっていることが混乱の原因なのではないかという気がする.

CallBuildShaftLineでは軸線枠の移動が5件発生している.①MARGBOX #689:#798 COUPLING(0)+#1212 coupling(1)→#747 pagesetup(0),②MARGBOX #655:#745 familytree(0)+#1218 FAMILYTREE(1)→#754 BaseLink(0),③mbox=MARGBOX #704:#772 MDB(0)+#1229 MARGTABLE(1)→#908 anod[]配列(0),④MARGBOX #683:#867 配列要素(0)+#1230 MARGLINK(1)→#1231 nodule(3),⑤MARGBOX #715:#880 margbox(0)+#1232 MARGBOX(1)→#882 owner(0).

これらはすべて有配偶者婚だが,stave異常値に関係しているのは,③のMDB(0)+MARGTABLE(1)のように思われる.出力図面で見ると,結婚枠は移動しているが,MARGTABLE(1)の隣接位置に残ったままになっている.明らかに結婚の移動と同時に配偶者も移動する必要がある.MARGBOX::MargBoxTransferという関数があるので,これを使ってみよう.⇒解決した.

image

ただし,この図面にはまだいくつか疑問が残っている.まず,重婚同類1,重婚1というダンプが出ているが,それらしきものが見当たらない.⇒いや,あった.COUPLINGだ.COUPLING はクラス名だが,クラス名はクラスの(代表)インスタンスと婚姻関係を結ぶことになっている.COUPLINGの孫にextraslot2というCOUPLINGのインスタンスがあるためだ.従って,この図面では多重は不可避であり,重婚同類1というのは正しい.

MDBはオブジェクトであり,すべてのオブジェクトはnoduleないしNODULEから派生しているはずなのに,軸線が届いていないのはなぜか?実際,上図でも右下コーナーに2枚のカードがブルー表示されている.これは養親子系血族であることを示しているのだが… 軸線の選び方が悪いのか,あるいは単なるデータの不備か?軸線の終端ノードの_goodson は子どもがいないのでここで止まるのは仕方ないが,別の経路があったのではないか?

MDBの孫の配列要素はnoduleという子どもを持っているが,最長鎖の長さでは同じになってしまうために選択されなかったのだろう.noduleは「クラス」なので,親はすべてクラスかないしクラス+オブジェクトだ.MDBの軸線の下流系はすべてオブジェクトばかりでnoduleに接続していない.MDBの軸線上のノードは先祖ノードのCOUPLINGを除くとすべてオブジェクトだ.先祖ノードをcouplingに取れば首尾一貫するのだが… 多分父系/母系を指定できるようになればある程度選択可能になるとは思われる…

上記サンプルを#1 couplingでソートしてMARGBOX:setownerで停止した.結婚枠とownerの世代が整合しないというエラーだ.⇒軸線グラフ検定は重婚クラスタ検定より前に実施されるため,まだ絶対世代番号は確定していない.この段階では世代の不整合は見過ごしてもよいのではないだろうか?⇒エラーを無視して描画は可能.MARGBOX::setownerで出る「結婚枠世代不一致」以外にも,「兄弟世代番号不一致」がMARGBOX:checkVerticalPositionで多数発生する.

checkVerticalPositionでは検査の直前に結婚枠と兄弟ノードの世代番号を一致させる処理を実行しているのだが… このエラーの原因はネストした処理の中で系列ポテンシャルが更新されているためだ.本来CheckVerticalPosition中は「系列優先実仮ノード世代差の補正はここでは行なわない」としているのだが,穴が空いているところが(複数箇所)あった.

「CheckVerticalPosition中は系列ポテンシャルの変更不可@20210212」としてエラーは解消した.MARGBOX:CheckVerticalPositionの出口ではSAMEGENEMARRIAGEフェーズでのみTRIBEBOX::adjustGenerationRangeを実行しないとしていたが,これに加えてAFTERMARGSAMEGENEフェーズの場合も同様に抑制するようにした.

image

一応描画はできるようになったが,2つ問題がある.①画面下部で垂直スプリットが発生している,②軸線が通っていない.まず,①の問題から見てゆくことにしよう.絶対世代番号はLIST[8]→ DATALIST[9]→ nodule[10]となっているが,実際にはLIST[8]→ [9]→ DATALIST[10]→ [11]→ [12]→ nodule(3)[13]のように伸びてしまっている.

noduleは(0)と(3)で多重になっているが,世代的には(0)の方が正しい.LISTとDATALISTには同名で♂型と♀型の2種があるので混乱するが,リネームしないでこのまま進めよう.まず,DATALIST♂がなぜシフトされているのかを見ておこう.重婚クラスタ図を出力すると,下図を得る.

image

これは重婚グラフと呼ばれるもので,ShiftDirectAbsoluteでは婚姻グラフの連結成分リストを基準に世代割当てを実施している.上図で各カードの右肩に付いている数字は,グラフ節点の「距離数」と「絶対世代番号」だ.距離数はすでに正規化しているので,世代番号と一致している.この値は,婚姻グラフの連結成分リストの要素(重婚クラスタ)にも転記されているはずだ.というか,重婚グラフの節点は婚姻グラフの連結成分に他ならないので,当然この値が設定されていると考えてよい.

コメントを残す

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

CAPTCHA