▲ZTシステム構成図7.ZELの全体図を#15 selectedcardで開いて,系統並び替えの出口検査で水平スプリットを検出.
この図面には6個のTYW婚が出現している.
- #2067:#2066 baselist基本世代枠(2)+→#773 baselist基本世代枠(0)
- #2131:#2130 topUndo(1)+→#767 topUndo(0)
- #2139:#2138 anod[](4)+→#1057 anod[](1)
- #2211:#2210 Bobject(3)+→#912 Bobject(0)
- #2219:#2218 Bobject(9)+→#1093 Bobject(1)
- #2311:#2310 nodule(24)+→#902 nodule(0)
スプリットの原因となっているのはbaselist基本世代枠だ.baselist基本世代枠は3つ仮ノードを持っている.(0) #773, (1) #1067, (2) #2066だ.(0)はtribelistの子ども,(2)はtopolgyの子ども,(1)がTYW本人ノードで配偶者GENELISTを持っている.うち,(2)はかけ離れた位置にある.(1)と(2)が同一セグメントと認定されるタイミングを調べてみよう.いや,違う.(1)は不可視でセグメント値を持っていない.消去された仮ノードだ.(2)はLDRで,(0)がTYW本人だ.(0)と(2)のセグメントブロックがマージされるタイミングでは下図のようになっている.
この操作自体には問題はない.問題はそれ以前に起きている.前方(画面右)の黒いブロックは144というセグメント値を持っている.その次の草色のブロックは29で,上記のタイミングでこのブロックは前方のブロック144と接触する位置まで移動しているが,その後方になる黒のブロックはいずれも144という値を持っている.つまり,すでにこの時点で誤りが発生している.
!解けた!ただし,この解はまだ,暫定的なものだ.MAXIMALGRAPH::mergeUpperSegmentで「goodsonが上位ノードの枠内にあり,結婚点が一致している場合は子ども枠上位ノードと接合」するという規則を一時的に止めることによって得られた結果だ.この修正が果たして一般的に通用するものであるかどうかは今のところ不明だ.⇒いや,これは外しても大丈夫なようだ.この条件に合致するものは相当あるが,なしでも問題なく解けている.この論理の問題点は対象結婚枠が「タイト」でなくても上位ノードと接合できるという点だ.
▲上記サンプルを#24 UNDOCHAINでソートして三極検定レッドラインオーバーが発生した.かなり無茶苦茶なひどい図面になっている.
SUWではなく,単純にブレークすれば正常な図面が出力される.
TRIBELIST::AdjustTribeGenerationで「先祖ノード絶対世代番号不一致」が大量発生している.⇒この問題は後から見ることにする.mergeUpperSegmentで上記の修正を元に戻せばエラーは解消するが,それでは元の木阿弥だ.UNDOCHAINのケースとselectedcardが両立するような解決案として,goodsonでマージする条件として対象結婚枠がIsElderWifeBoxではないという条件を付け加えた.これでどちらも通るようになった.
これが問題の完全解になっているとは思われないが,少なくともこれまでよりはましな解になっていることは確かだと思う.現行リリース版ではエラーが多発しているので,「バレンタイン・バージョン」と称する版を所内リリースした.
「先祖ノード絶対世代番号不一致」の問題に移ろう.この事象もよく分からないところがある.絶対世代番号と物理世代番号の間で14もの差が出ている.それだけでなく,エクスポートした重婚グラフもかなりおかしい.この図面は仕上がりで12世代だが,重婚グラフでは11世代しか出ていない.
そもそも先祖ノードが「配列要素」となっているのが意味不明.
ここには,couplingかないしCOUPLINGが来なくてはならないところなのだが… しかし,婚姻グラフ(多重グラフ1)の連結成分リストの出力は正しいように思われる.SIMPLEGRAPH:dumpComponentを書き直して,簡単なリストを出力する関数SIMPLEGRAPH::dumpComplistを作った.
SIMPLEGRAPH::dumpComplist 連結成分リスト sc=1 list=#1848 k COMPLIST 1848
1 [0]coupling COUPLING
2 [1]pagesetup PAGESETUP
3 [1]familytree FAMILYTREE
4 [2]topology TOPOLOGY
5 [2]linktable
6 [2]namesort NAMESORT
7 [2]partialmap PARTIALNAME
8 [2]undosys UNDOSYSTEM
9 [2]extraslot2
10 [3]SIMPLEGRAPH graph3 keisengraph graph2 graph1 tajugraph1 tajugraph2 tajugraph3 tempgraph copygraph
11 [3]MARGTABLE MDB
12 [3]UndoChain UNDOCHAIN UndoCurptr undochain
13 [3]longtable RecordList
14 [3]CARDTABLE PDB
15 [3]tribelist TRIBELIST
16 [4]complist
17 [4]starttribe TRIBEBOX
18 [4]treeview TREEVIEW
19 [4]BASETABLE
20 [4]undotop
21 [4]baselist基本世代枠 GENELIST
22 [4]nodelist NODELIST
23 [4]anod[]配列
24 [4]anod[]配列
25 [4]edgelist
26 [5]topUndo UNDONODE
27 [5]配列要素 CARDLINK
28 [5]EDGELIST
29 [5]配列要素 MARGLINK
30 [5]GENEBOX GENEBOX
31 [5]COMPLIST
32 [5]ARRAY
33 [6]MARGBOX margbox
34 [6]nlist
35 [6]NAMEBOX nambox
36 [6]anod[]
37 [6]pairlist PAIRLIST
38 [7]NLIST< LISTNODE,CID>
39 [7]PAIRBOX PAIRBOX
40 [8]LIST LIST
41 [8]Bobject Bobject
42 [9]所属グループ
43 [9]衝突検定リング
44 [9]圧縮検定リング
45 [9]DATALIST DATALIST
46 [9]描画Yリスト
47 [9]親参照リスト
48 [10]nodule
連結成分リスト 成分数=48 ノード数=86 世代数=11 min=0 max=10
世代数は11でこれは実際の系図出力より1少ない.この食い違いがどこで生じているのかを見ておこう.ノード数=86は実際のカード数188より大分少ないが,これは終端ノードを省いているためだ.これを追加したグラフを作ってもよいが,効率を落とすだけなので省くのが正解だと思う.世代数が1少ないというのも同じ理由だ.確かに省略されている分,間違い易い.
多重グラフ1の連結成分リストは完全に正しいと言ってよいだろう.重婚グラフは節点数が46で成分数48より2少ない.重婚グラフの節点は重婚クラスタであり,多重グラフ1の連結成分に他ならないのでこの食い違いは問題だ.落ちているのは,1 [0]coupling COUPLING と2 [1]pagesetup PAGESETUP のようだ.いずれにしても重婚グラフがまちがっているか,ないし,エクスポートでやり損なっているかのいずれかだ.