重婚クラスタ図の出力がおかしい

重婚グラフ(多重グラフ2)の出力がおかしい.グラフをダンプすると節点数48,枝数54となっているが,エクスポートしたグラフ(重婚クラスタ図)をインポートして表示してみると,ノードが2つ足りない.#1848のcouplingと#1774のpagesetupだ.枝数54には#1846 noduleと#1848 couplingの自己ループ枝が含まれている.また,#1848 couplingy→ #1774 pagesetup,#1848 coupling→ #1768 familytreeの枝もある.#1774 pagesetupから出る枝は存在しない.婚姻グラフ(多重グラフ1)の連結成分数は48なので,重婚グラフの節点数と一致する.⇒SIMPLEGRAPH:ExportGraphで自己ループ枝は出力しないようにしてみたが,状態は変わらない.

TREEVIEW::sendUpdateDataではcouplingもpagesetupも作られている.ただし,LINKTABLE::ImportEndではカードテーブルPDBに登録されたカード数は46になっている.カード参照番号#3のpagesetupはlinktableで上書きされている.また,#27のcouplingは配列要素で上書きされてしまっている.ExportGraphではカード参照番号として成分番号を使っている.これが重複しているということなのだろうか?グラフ2をエクスポートする前に,sortComponentListでグラフ1の連結成分リストをソートしているが,成分番号の付け替えを実施していないのだろうか?⇒いや,やっているはずだ.⇒SIMPLEGRAPH:sortComponentListに論理ミスがあった.

image

これで正しい重婚クラスタ図を描画することができるようになったが,「先祖ノード絶対世代番号不一致」は相変わらず収まっていない.AdjustTribeGenerationをShiftDirectAbsoluteの実行に先駆けて実施すると,14あった世代差は2~6程度まで縮まる.最終的にループを抜けるときには1まで軽減される.AdjustTribeGenerationでは冒頭でSetAbsolutePotentialを実行している.これは「絶対世代番号系と物理世代番号系を一致させる」とあるので,この段階で問題は解決していなくてはならない.⇒あれこれ試してみたがうまくゆかない.一度バックアップに戻って出直そう.これまでの修正は以下の2点だ.

  1. SIMPLEGRAPH::ExportGraphで自己ループ枝を出力しない
  2. SIMPLEGRAPH::sortComponentListに論理ミス

ZT BASICでZTシステム構成図7.ZELの全体図を#1 couplingで開いて,TRIBEBOX::hasPhysicalConnectionで停止した.系列優先仮ノードがREALGHOSTを持つとき,(realnode->getrealnode() != primenod)という理由だ.⇒hasPhysicalConnectionを整理して,「系列優先仮ノードが実ノードで逆参照されていない場合」でも系列タイプがPRIME_INVERTでない場合は停止しないようにした.また,優先仮ノードが実ノードで別のノードから参照されている場合には,ChangeTribeRealnodeを試みるようにした.この事例では最終的には落ち着くところに落ち着いている.

同上サンプルを#2 kakeizuでソートしてMakePairListCleanでエラーが発生した.ループカウントオーバーが起きている.「兄弟順位の逆転」と「TYW枠の移動」が反復実行されている.前者ではNAMEBOX #747 tribelist(0)が149移動,TYW枠の移動はそれに見合う形で-149移動している.TYW枠の移動によって,兄弟順位の逆転が発生していると見てよい.兄弟順位の逆転はprevious=#747 tribelist(0) person=#984 TRIBELIST(1)で起きている.障害の起きているTYW枠はMARGBOX #1633:#747 tribelist(0)+→#983 treeview(3)だ.

TYW枠の移動量はRightContactMargTreeで求めている.この関数は6箇所で使われているが,NAMEBOX::GetRightContactでは,前方ノードとの接触距離をGetContactDistanceで測定している.MARGBOX::checkBrotherOrderではGetRightContactで同様の検査を実施している.NAMEBOX::IsLefMovePossibleでは「本人の第一配偶者が右移動不可の場合に限定」される.

MoveTooYoungWifeでは結婚点一致以外の除外条件はない.MARGBOX::CheckZeroPositionではZTYW婚が結婚点一致位置に移動可能かどうかを検査するためにRightContactMargTreeを使っている.GetRightContactでは内部でGetContactDistanceを使っているので,実質同等である.

ただし,MoveTooYoungWifeでは結婚枠を直接移動しているので,上位人名ノードには関わりがないはずであり,そうでないとしたら親参照パス不良ということになるのではないか?いや,むしろ人名ノードを移動するとき,TYWを共連れにしていることが問題なのではないか?本人ノード自体はRelativeで相対移動しているが,MoveLowerMargTreeで下流系を連れて移動している.⇒直下のTYW婚は移動しないようにした.

▲同上サンプルを#57 BASETABLEでソートして三極検定レッドラインオーバーになった.

コメントを残す

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

CAPTCHA