甘いものが無性に欲しくなって

即席のドーナツを作ってみた.小麦粉+ベーキングパウダを水で溶いて熱した油の中にポトンと落としただけ.速攻3分でできあがり.ただし,画像をアップロードするのに2日掛かった.

ドーナッツ

重婚クラスタ循環は多重カードが発生する原因だが,循環に関係するクラスタに属するすべてのノードが関わっているという訳ではない.むしろ,循環を解消するためにパージされた婚姻グラフの枝,つまり結婚当事者ノードに関わりがある.循環の発生している重婚クラスタに属するノードにはCARDLINK::samecycle属性が付与されているが,それを代替するものとして,breakup属性を導入し,循環を解消するために削除された婚姻枝の結婚枠とその当事者ノード付与するようにした.{samemcycle} ⊃ {breakaup}でbreakup属性の方がより範囲が狭い.つまり,焦点深度が深い.CARDLINK::samecycleは廃止した.

TOPOLOGY::BuildSameGeneMarriageGraphのステージ【13】重婚グラフの循環が止まるまで枝を除去するの段では,「重婚クラスタ循環が存在するとき,親子枝の親ノードの配偶者の配偶者関係を切断」していたが,ターゲットを「親子枝の子ノード」に切り替えてみた.サンプルの源氏物語全系譜7.ZELでは,この親子枝は光源氏→夕霧に該当し,これまでは親の光源氏をクラスタから切断するという処理になっていたところを,子ノードの夕霧で切断するという操作に切り替えた.この結果,多重カードは現行の7から5まで削減することができた.修正前の多重カードは以下の7点だが,▲マークの付いた,源典侍と真木柱は修正後の版では多重になることを免れている.

  1. @5紫の上(若紫)[5]
  2. @57女三宮[4]
  3. @100源典侍[4] ▲
  4. @101朧月夜[4]
  5. @103空蝉[4]
  6. @104藤壷の宮[4]
  7. @144真木柱[6] ▲

これで見る限り,修正後の版の方が高品質であるように思われるが,親ノードと子ノードのどちらを切断する方が有利かはケースバイケースであり,本来ならその優劣を計量して決定すべきところだが,多重カードの出現数はコンテキストに依存して決定されるため,この時点では確定することができない.実際,「子ノードで切断」する方式の場合,削除される枝数は以下のようにむしろ増加している.下記▲は「親ノードで切断」には含まれない循環/削除枝.

  1. 削除枝:直系血族配偶者 MARGBOX #8260:#8612 光源氏(0)+#17138 紫の上(若紫)(1)→#8663 明石中宮(0)
  2. 循環枝:【2】⇒【2】 【CARDLINK:#1095 @8夕霧[0]】⇒【CARDLINK:#1032 @1光源氏[0]】
  3. 削除枝:重婚配偶者 MARGBOX #6916:#17276 落葉の宮(1)+#9938 柏木(0)→ ▲
  4. 循環枝:【2】⇒【2】 【CARDLINK:#1032 @1光源氏[0]】⇒【CARDLINK:#1041 @2桐壷院[0]】▲
  5. 削除枝:重婚配偶者 MARGBOX #8548:#17672 柏木(1)+#17686 女三宮(2)→#17700 薫(2)
  6. 削除枝:重婚配偶者 MARGBOX #7252:#10601 伊予介(0)+#18368 空蝉(2)→
  7. 削除枝:重婚配偶者 MARGBOX #7076:#9887 致仕太政大臣(0)+#17571 夕顔(1)→#17585 玉鬘(1)
  8. 削除枝:重婚配偶者 MARGBOX #7092:#9887 致仕太政大臣(0)+#17600 源典侍(2)→
  9. 削除枝:重婚配偶者 MARGBOX #7380:#9309 朱雀院(0)+#17339 朧月夜(1)→
  10. 削除枝:重婚配偶者 MARGBOX #8292:#8629 桐壷院(0)+#17389 藤壷の宮(1)→#17403 冷泉院(3)

直系血族婚はあらかじめ除去されているので循環枝に含まれていないが,それを含めれば,修正前の方式では循環を解消するために2箇所の切断が必要であり,修正後の方式では切断は3箇所に増加,パージされる婚姻関係(削除枝)は前者が7であるのに対し,後者では8に増加している(しかし,多重カード数は後者の方が少ない).

HasPhysicalConnectionで系列優先実ノードの絶対世代番号と物理世代番号の一致を求めるように修正した.HasPhysicalConnectionはDoesMajorTribePathExistとaddTribeTreeGraphから呼び出されている.DoesMajorTribePathExistはIsConnectedとSetMinorTribe,TribePrimaryCandidateで使われている.addTribeTreeGraphはEstablishMajorTribeChainから実行される.この修正により,源氏物語全系譜7.ZEL #1 光源氏で起きていた「絶対世代番号と物理世代番号の不一致」は解消した.

多重カードは5枚.多分これは最少多重カードになっていると思う.ZT BASICではグラフ検証系を使えないため,9件の多重カードが残る.最近の修正をフィックスしておこう.

  1. CARDLINK:samecycleを廃止する@20210315 12箇所
  2. MAXREPEATCOUNTを廃止する@20210315 8箇所
  3. MakingLookUpは系統並び替えで一度だけ実行する@20210227 廃止 10箇所
  4. TESTABSOLUTEGENERATION 3箇所
  5. 仮修正 2箇所,OBSOLETE 1箇所

Version 2.2.0.029 Release 2021-03-17を所内リリースした.⇒ダメだ.多重カードが7に戻ってしまった.修正フィックス前の版でも同じ.⇒ZELKOVA 2021-03-15-2まで戻れば復活する.WinMergeでファイルを比較してみたが有意差は見つからなかった.この版とZELKOVA 2021-03-16の相違点はグラフ関係の関数を移動していることと「MAXREPEATCOUNTを廃止する」修正がまだ入っていないくらいだ.その他TribeRelocation.cppには細かい差異があるが,一瞥しただけでは致命的なものは見つからなかった.

ともかく,この版に戻って出直すしかない.まず,この版で「CARDLINK:samecycleを廃止する@20210315」と「重婚クラスタ循環を子ノード側で切断する@20210315」をフィックスしておこう.⇒後者はSPECIFICATIONとして温存しておいた方がよい.この版でリリース版を起こしておくことにする.その前にZT BASICで動作することを確認しておこう.⇒OKだ.改めて,「MAXREPEATCOUNTを廃止する」を入れておこう.

コメントを残す

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

CAPTCHA