12243点,結婚数10170のCollatz4000X.ZELが開けた

ようやく難題が一つ片付いた.というか,まだ完全には終わっていないが,片付くという目処は付いた.確定的な原因は不明だが,サンプルサイズが大きくなると,座標計算のどこかでオーバーフローによる障害が発生しているように思われる.とりあえず,フォントサイズを小さくすることで描画できるところまでは漕ぎ着けた.箱は正しく描画できているのだが,名前のサイズと位置が悪い.

現行ではWin 32でビルドしているので,8バイトを超える整数ではオーバーフローが起きる可能性がある.描画フェーズ以前ではすべての計算は論理座標系で行っているはずだが,現行では論理座標系=物理座標系=ピクセル座標系になっているのではないかと思う.論理座標系は物理座標系から切り離すことができるはずであり,実際,現在はPNTPERLOGという変換パラメータを4倍にすることで,1/4に縮小している.本来なら,これで描画できてもよいはずなのだが… ⇒座標計算では縮小しているが,描画ではフォントサイズをそのまま適用しているためだろう.⇒COUPLING::m_logfont1/2/3を直接参照している.やはり,これを直接書き換えるしかないのではないか?

DrawTextLineで強制的にフォントサイズを縮小して,氏名だけは枠内に表示できるようになったが,まだ位置が悪い.また,付帯情報として表示している数字は大きいままだ.むしろ,ファイルを読み込んだときに調整した方が早いのではないか?⇒とりあえず,これが一番簡便な方法だ.暫定的にこれで運用することにしよう.

image

とりあえず全体を描画できるようになったが,ズーム倍率は211%止まりでそれ以上には拡大できない.また,メモリ描画環境も落ちて,生描画になってしまう.⇒SIZEOVERAUTOZOOMOUTというオプションを外したら,500%でも描画できるようになった.

image

これなら,まぁまぁ使い物になるのではないだろうか?一部にカードのダブりが出ているが,その辺りは後で見ることにしよう.Collatz12146.ZELも描画できた.Collatz4000X.ZELというのを開いてみよう.多分,これが手元のサンプルでは最大級ではないかと思う.このサンプルは12243点,結婚数10170なので,Collatz12146よりも少しだけ大きい.⇒レッドラインオーバーになってしまった.ただし,現行ではレッドラインを30回に引いているので,もう少し大きくすれば多分パスできると思う.⇒いや,ダメだ.やはり,まだオーバーフローがどこかで生じているのだろう.⇒フォントサイズを1/5まで縮小して描画できるようになった.この関係を定式化しなくてはならない.

フォントサイズを極限の1×1まで縮小しても作図可能であることは確認できた.三極検定ではこの極端な設定で計算し,事後に実際のフォントサイズを割り当てるということができれば最善なのだが,可能だろうか?そうなれば,名実ともに「論理フォント」と呼ぶに相応しい位置付けになるのだが…しかし,実サイズに戻したときにもオーバーフローのリスクはあり,また,再計算が収束しないという可能性もあるので,現行論理の延長上で収めるというのが妥当な線かもしれない…


極小反例サンプル.zelが描画できた!

1931点の53直系血族図.ZELは22回でループを脱出している.6165点のCollatz3900-6165.ZELは24回で描画できる.これが今のところ描画可能な最大サンプルだ.12146点のCollatz12146.ZELなどでは,結婚点不一致が20点近くまで減少した後,増加に転じその後は,ほぼ単調に増加し続けるような動作になっている.現行では結婚点が一致している場合には無条件でセグメントをマージするようになっている.セグメント検定に何か致命的な瑕疵があることは間違いないように思われるが,それを突き止めるのは至難の業だ.どうすればよいのだろう?

ともかく,ブレークして一度描画させてみることにしよう.極小反例サンプルを開いてみる.

極小反例サンプル.zelをレッドラインオーバーで開いた後,ズーム倍率を切り替えようとして例外が発生した.

image

CDC::_LPtoDPでエラーが発生している模様だ.レンジオーバーの可能性もある.矩形の右座標が2995305になっている.16進で0x2DB469だ.その前にポイント座標で83869328=0x4FFBEいう値が入っている.POINT という構造体はLONGで構成されている.LONG=longであるとすると,32ビットしかない.しかし,INT_MAXは2147483647で0x7FFFFFFFまでカバーしていることになっている.

TREEVIEW::LimitSizeOverではLIMITSIZE=0x7D00と見ている.ただし,現在はこの関数は呼び出されていない.SIZEOVERAUTOZOOMOUTをオンにしてビルドしてみよう.

!解けた!極小反例サンプル.zelが描画できた!

image

どうも,どこかでレンジオーバーが置きていたもののように思われる.フォントサイズを強制的に四分の一に縮小して描画できた.ただし,100%までズームすると,かなり悲惨なことになってしまう.

image

フォントの描画関数の方は調整していないので,こうなってしまうのは仕方ない.また,100%と言っても,1/4の縮小図面の100%なので,通常の見慣れたサイズで表示されるという訳ではない.ともかく,何らかの方法で折り合いを付けなくてはならないが,それも結構手間が掛かりそうだ.というか,こういう巨大サンプルをどう扱うかという基本的な課題についてもう少し考察を深める必要がある.それでも,ともかく描画できるようになったということは喜ばしいことだ.

タイトル行にファイル名が表示されない

やはり,不良の元凶はセグメント検定ということではないだろうか?

主画面のタイトル行にファイル名が表示されない.⇒系図タイトルの決定関数がZ.BaseRefnumが未定のうちに呼び出されている.というか,設定されていない.⇒mUpdateBaseRefnumという関数が呼び出されていない.⇒UpdateMaxCardでは,事前にZ.mMaxRecordCountを実行している.⇒mMaxRecordCountの冒頭でmUpdateBaseRefnumを実行するようにして表示されるようになった.いつ頃からこのような状態になっていたのか分からないが,どこか不用意に削除してしまっていたのではないだろうか?

BUG3000-1470.ZEL.ZELで三極検定レッドラインオーバーが起こる.BUG3000-1470.ZEL,BUG3000-1471.ZELは正常動作している.このサンプルは1469点で,結婚が0と表示され,画面にはカード1点しか表示されない.不審なのは,三極検定でレッドラインオーバーが起きているという点だ.⇒REDLINEに1という数が入っている.⇒この値は有効な結婚数+1に設定されている.これでは無理だろう.⇒最小値を8とするように修正した.これでエラーなしで描画できるようになったが,1469点登録されているのに1点しか出ないというのはおかしい.⇒親族図になっていた.全体図に切り替えて描画できた.⇒結婚数は1007になっている.最初にカード1枚しか表示されないときは,表示数=1, 結婚数=0となっているので数字は合っている.

この辺りのファイルはBUGが頭に付いているように,当初は障害が発生していたはずなので,(いつの間にか)解消しているということになる.現状では今のところ反例サンプルとして残っているのは,Collatz12146.ZELだけになっているように思われる.

Collatz12146.ZELでは左手にひどいスプリットが残っている

基本的なところで解決したと思っていたのだが,まだまだのようだ.Collatz4000-12243.ZELは遅いなりに正常描画できるが,Collatz12146.ZELでは左手にひどいスプリットが残っている.

image

ともかく,描画までに時間がかかり過ぎる.何かもう少し小ぶりの反例サンプルはないものだろうか?⇒Collatz3900-6165.ZEL(6165点)というのがあった.レッドラインオーバーは発生せず,30回ループして脱出しているが,スプリットが出ている.これは格好のサンプルかもしれない.ループから脱出してくるのでテスト時間もかなり短くて済む.⇒いや,ダメだ.解けてしまう.画面がまだ更新されていなかったのだろうか?⇒なぜだろう?コマンド引数で開いた場合と,ダイアローグから開いた場合で動作が違う.前者ではスプリットが出るが,後者では出ない!なぜ,こんなことが起こるのか?見当も付かない.ファイルのオープンの方法は内部処理にはまったく無関係のはずなのだが…
いや,違う.これはズーム倍率の違いだ.

前回セッションの最終ログの日付は2022/05/06だ.その後は,興味が「経済循環マトリックス」の方に移って,去年の暮に作業再開するまで中断した状態になっている.2022/05/06の時期の最大の障害はメモリ不足という感じだ.12146点の「極小反例サンプル.ZEL」というのは,Collatz12146.ZELと同一と思われる.ここで中断された「極小反例サンプルの生成」にもう一度チャレンジしてもよいのではないだろうか?ファイルを開くこと自体は問題なく実行できているので,今度は最後まで進める可能性はある.「極小反例サンプルの生成」を実行するためのスイッチがどこかにあるはずだが…

「コラッツ極小反例サンプル生成ツールの実装@20220417」というコンパイルオプションがある.試してみよう.⇒いや,これは現状でもオンになっている.このオプションはほとんど作用を持っていないように見える.実際の処理はメニューから選択→実行することで始めて起動されるようになっている.まず,対象サンプルファイルを開いてから,ヘルプ→ 包括テスト→ 極小反例サンプルの生成だ.

動作のネックになっているのは,ステージ2「個人データのロード」のところだ.これはもう少し速くできるのではないだろうか?

setmaxrefnumでレコード番号を設定している箇所がある.CARDTABLE::makelinkでは空スロットにリンクを設定し,そのレコード番号を参照番号に流用している.その参照番号が使用済である可能性があるのではないか?Renumberでもレコード番号→参照番号を行っているが,これは仕様である.MARGTABLE::makenewlinkでも同様のことが行われている.しかし,makelinkの呼び出し元では引数は参照番号であるという認識はある.CARDTABLE::makelinkの引数名を変えておこう.⇒対処した.

emptyrecnを廃止してみよう.この関数は,①CARDTABLE::makelink ,②NODECLASS *newlink,③getnewRefnum から呼び出されている.⇒①は完全廃止,②はemptyrecnを改造して,maxRecordの次を返すようにした.③はこの関数自体を廃止して,呼び出し元ではgetmaxrefnum() + 1で間に合わせるようにした.


Your Daily Epsilon of Math 2023

  1. 2023-01-01 整方程式の定数項は根の約数:Let p(y) be a polynomial with integer coefficients. p(0)=104729 x, x∈Z such that p(x) = x and 0<x<104729
  2. 2023-01-02 部分分数分解による無限級数の和:(lim{n→∞}1/(2n-1)(2n+1))^-1
  3. 2023-01-03 数学パズル:111/(1+1+1) + 222/(2+2+2) + …+ 999/(9+9+9)
  4. 2023-01-04 因数定理,整係数方程式の有理数解 -x^4+16x^3-96x^2+256x-256=0
  5. 2023-01-05 ピタゴラスの定理:The area of the square ABCD is 20.25. Find EC. (Round)
  6. 2023-01-06 合成関数(三角関数)の微分:Find the value of the derivative of f(x)=sin(x^3+6x) at x=0
  7. 2023-01-07 直線で囲まれた矩形面積:What is the area bounded by y=3-4x/9, x=3 and the x and y axes?
  8. 2023-01-08 三角関数,逆三角関数:cot^2(π/6)+csc(5π/6)+3tan^2(π/6)+sec(11π/6)cot(7π/6)
  9. 2023-01-09 階乗:4!÷4+(4-4÷4)
  10. 2023-01-10 三角関数の積分:∫{0~4π}(20x^2 + 30sin~2(x))dx / (x^2cos^2(x) + cos^2(x)) (Round)
  11. 2023-01-11 階乗:(x!)^2/(x-1)!(x+1)! = 11/22
  12. 2023-01-12 方角・距離:Anirban runs to a tree 2 m north of his starting location, then runs to a spot 4 m south and 8 m west of his starting location. How far did he run?
  13. 2023-01-13 タイリング問題:How many ways are there of tiling a 2×6 space with 2×1 tiles?
  14. 2023-01-14 正七角形,二面体群,対称群:What is the order of the symmetry group of a regular heptagon.
  15. 2023-01-15 指数計算:225^1/200*225^3/200*225^5/200*…*225^19/200
  16. 2023-01-16 複素数の乗除算,極座標表示:(i-1)^8
  17. 2023-01-17 接線の傾き,合成関数の微分:Find the slope of the line tangent to the curve y=2^x at x=4.6 (Round)
  18. 2023-01-18 連立整方程式:For a, b, c, d, x positive integers : abcd = 8!, ab+a+b=524, bc+b+c=146, cd+c+d=104, a-c=x
  19. 2023-01-19 素因数分解:Find the second smallest prime factor of 1,000,027
  20. 2023-01-20 四面体数・三角数:What is the fourth tetrahedral number?
  21. 2023-01-21 直線の傾き:Find the slope of the line that passes through (-10, –21) and (-7, 42)
  22. 2023-01-22 1次方程式:(8-x)/(1-x) = 2/3
  23. 2023-01-23 交差図形の面積,定積分による求積:Four circles inscribed by a big circle. An uncovered area = 23. What is the area x of a crossing area?
  24. 2023-01-24 待ち行列,n次対称群(n次置換群):How many ways can Alfonso, Bianca, Catriona, and Domingo queue up?
  25.  2023-01-25 地図の縮尺:If two mountain peaks are 10 cm apart on a map with scale 4 cm to 10 km, how many kilometers separate the peaks?
  26. 2023-01-26 無限級数の和,区分求積法,置換積分,マクローリン展開:13e^(1-1/2+1/3-1/4+…)
  27. 2023-01-27 三角形の面積,三角形の相似:An equilateral triangle of area=9 is inscribed by an equilateral triangle. Find the area of the outer triangle.
  28. 2023-01-28 MMMMDCCLVI÷CXVI-XIII
  29. 2023-01-29 平面的最短距離,展開図:What is the shortest distance from A to B on the outside of the box?
  30. 2023-01-30 余弦定理・ヘロンの公式:In the diagram a square is placed on each side of a right triangle (5, 12, 13) . How much the area sandwiched  by the square 5 and square 13?
  31. 2023-01-31 二次方程式:Find the smaller root of x^2-103x+2232=0
  32. 2023-02-01 開被覆,開集合,閉包:For any set X ∈ [0, 1], let E(X) be the largest value such that for any open cover of X, the sum of its lengths ≧E(X). If Z={Q∩[0, 1]}, what is E([0, 1])-E(Z)?
  33. 2023-02-02 対数計算:1/log4(10) + 2/log5(10)
  34. 2023-02-03 置換積分法(合成関数の積分):π/∫{0→1}1/sqrt(x)sqrt(4-x) dx
  35. 2023-02-04 フィボナッチ数列,ピタゴラス数:Starting with x+1, every second Fibonacci number is the largest number in a Pythagorean triple.
  36. 2023-02-05 方べきの定理:The circumference/inscribed angle theorem
  37. 2023-02-06 因数定理,整係数方程式の有理解,定数項の約数:Find the integer x that (x-3)^3+(x-2)^3+(x-1)^3=x^3
  38. 2023-02-07 因子木:All letters in this factor tree represent distinct digits. Primes are circled.
  39. 2023-02-08 三角形の面積:Find the triangular area from given value of sides of the squares.
  40. 2023-02-09 両替問題:How many ways can you make change for a twenty collar bill with one, five, and ten dollar bills.
  41. 2023-02-10 関数の最小値,導関数=0,合成関数の微分:Find the minimum value of sqrt(x^2+1+2/x+1/x^2) + sqrt(x^2-12x+85-14/x+1/x^2)
  42. 2023-02-11 素因数分解:Find the number of odd numbers that divide 3^12-1 but do not divide any of 3^11-1, 3^10-1, …, 3^1-1
  43. 2023-02-12 倍角・半角の公式,加法定理:tan(θ)=(sqrt(145) – 1)/12  Find tan(2θ)
  44. 2023-02-13 排他的論理和:10110B ⊕ 11011B
  45. 2023-02-14 複素数:(3-i)(2+i) + (3+i)(2-i)
  46. 2023-02-15 合同式,フェルマーの小定理,2項定理:15^113 mod 113
  47. 2023-02-16 複素数累乗根:Find the sum of the absolute value of the real parts of the roots of  z^3 – 512
  48. 2023-02-17 三角形の面積:area(⊿ABC)=136 The degrees of ∠ABC is optional and the ratio of the sides AB : BC is free, hence the length of AC is arbitrary. Then how on earth the assigned area can be determined?
  49. 2023-02-18 切頂4面体:How many edges does a truncated tetrahedron have?
  50. 2023-02-19 整数解:A and B are whole numbers such that A/3 + B/37 = 91/111  Find A+B
  51. 2023-02-20 合成関数(有理関数)の微分:Find the derivative of  f(x) = (x^2-10)/(2x+1) at x = 0
  52. 2023-02-21 完全平方数:What is the smallest integer n such that 4725/n is a perfect square?
  53. 2023-02-22 長方形の面積:Find the third area from given two areas and two sides
  54. 2023-02-23 交代数列の累和:–1 + 2 – 3 + 4 – 5 + 6 – … –45 + 46
  55. 2023-02-24 順列・組み合わせ:Four cards are drawn at random from a deck numbered 1 to 100. What is the inverse of the probability that the cards are drawn in increasing order?
  56. 2023-02-25 指数関数の極限公式,ロピタルの定理:lim{x→0}(5x/(e^0.2x – 1))
  57. 2023-02-26 二次方程式:x^2-(x-2)^2=100
  58. 2023-02-27 ウィルソンの定理:(16!)^2 mod 37
  59. 2023-02-28 1次方程式:(x + 7) / 5 = x / 4
  60. 2023-03-01 級数の部分分数分解 Σ{1→∞}1/{n^2+n}
  61. 2023-03-02 行列の基本変形,ベクトルの合成 How many dimensions does the subspace spanned by vectors (2, 3, 4), (1, –1, 1), (5, 5, 9) have?
  62. 2023-03-03 連立方程式,因数分解 Find the number of non-negative integers n such that 16n+9 and 9n+15 are both perfect squares.
  63. 2023-03-04 逆三角関数 csc(π/6)sec(π/3)
  64. 2023-03-05 対数の微分公式 Find the derivative of y=ln(x) at x=0.2
  65. 2023-03-06 ヘロンの公式 正三角形に内接する円に内接する正方形の面積
  66. 2023-03-07 虚数の対数 {14i/π}ln({1-i}/{1+i})
  67. 2023-03-08 置換積分法 積分を指数とするネピア数の値 e^∫{0→π}{-3le(1+cos(x))}/π dx
  68. 2023-03-09 2つの円の界斜に似た接線の長さ Two circles with radius 3 and 6 that touch each other
  69. 2023-03-10  連立方程式 Allana buys pens and pencils at $4 and 50 ¢ respectively. If she buys 100 items for $85  total, how many pens did she buy?
  70. 2023-03-11 サイコロの出目の確率 Two six-sided dice are rolled until a sum of 7 or 8 appears.
  71. 2023-03-12 平方差の絶対値,偶奇 |x^2-y^2|=52 0<x<y x, y ∈Z
  72. 2023-03-13 方程式の変形 Find the radius of the circle x^2-4x+y^2+2Y=164
  73. 2023-03-14 8角形内の四辺形の面積 Nested squares in a regular octagon
  74. 2023-03-15 素因数分解 Find the smallest integer x>0 such that x! ends in 000.
  75. 2023-03-16 円に内接する三角形に内接する円の半径 Find the diameter of the larger circle.
  76. 2023-03-17 方程式の解と係数の関係 Find the sum of the cubes of the roots of x^3-2x^2+2x-7=0
  77. 2023-03-18 線分の長さ Given triangle with height 30 and bottom 15
  78. 2023-03-19 置換積分法 積分を指数とするネピア数の値 e^∫{0→1}{x^56-x^2}/ln(x) dx
  79. 2023-03-20 八角形の対角線数 How many diagonals does an octagon have?
  80. 2023-03-21 負数・分数の合同式 (-2023)^-1 mod 43
  81. 2023-03-22 コンウェイの円 Find AB for this Conway circle
  82. 2023-03-23 調和級数の部分和 H(n)=Σ{1→n}1/i Find {Σ{1→22}H(k)} / {H(23) – 1}
  83. 2023-03-24 等比級数 Let a_i be a geometric sequence such that a_8-a_6 = 1944 and a_8/a_6=9 What is a_4-a_2?
  84. 2023-03-25 倍角公式 cos(θ/2)=√13/5 Find sec(θ)
  85. 2023-03-26 順列・組み合わせ Find the numbers of permutations (a1, a2, a3, a4, a5) of (1, 2, 3, 4, 5) such that there is exactly one index with a_i>a_(i+1)
  86. 2023-03-27 底の変換公式 2log_3(x)+2log_9(x)=9
  87. 2023-03-28 正接の倍角半角公式 Find the sum of the square of 5 tangents
  88. 2023-03-29 正整数を定義域/値域とする関数 f(x):Z+→Z+ is such that f(x+1)>f(x) and f(f(x))=3x if f(n)=56, what is n?
  89. 2023-03-30 三角形の面積 Find the area of a triangle inside of the square with sides of length 10
  90. 2023-03-31 多角形の頂角の大きさ If the sum of all but one angle of a convex polygon is 1949,
  91. 2023-04-01 テイラー展開の公式 Let A be the coefficient of x^5 in the Taylor expansion of e^x Find 5!*A
  92. 2023-04-02 多項式の因数分解 係数の連立方程式  Find the integer a such that x^2-x+a is a factor of x^13+x+90
  93. 2023-04-03 合同式 べき乗剰余の周期 久留島・オイラーの公式 ガロア群 3^2023^2023 mod 7
  94. 2023-04-04 指数法則 3√y^18 / y^2 = y^x for x, y ∈ Z
  95. 2023-04-05 期待値 expected number of diamond cards in a random 20 card hand?
  96. 2023-04-06 分数べき方程式の2階微分 Find the second derivative of f(x)=x^{3/2} at x=1/64
  97. 2023-04-07 暗算問題 For w=2, y=5, z=7, evaluate z^2-y^3+5w^2+9z
  98. 2023-04-08 因数定理 組み立て除法 Find the largest zero of y^3-7y^2-10y+16
  99. 2023-04-09 2次関数の定積分 Find the area between the x-axis and y=3x/2-x^2/4
  100. 2023-04-10 交代数列 1-2+3-4+….-14+15-16+17-18+19
  101. 2023-04-11 暗算 連立1次方程式 平均速度 A boat travels 18 miles upstream in 2 hours and travels 39 miles downstream in 3 hours
  102. 2023-04-12 暗算 2次方程式 Find the distance between the roots of y^2-6y-27
  103. 2023-04-13 置換積分 ∫{0→√π/2}26y*cos(y^2)dy
  104. 2023-04-14 完全平方数 素因数分解 What is the smallest positive integer n such that 126n is a perfect square?
  105. 2023-04-15 中心角 弦の長さ Find the length of the chord of a cycle with radius 5√3
  106. 2023-04-16 グラフのラベリング How many differently labeld trees can one make on 4 vertices?
  107. 2023-04-17 マクローリン展開 f(z)=e^z-1 if z≠0, 1 if z=0 if g(z) is the sixteenth differential of f(z), what is 1/g(0)?
  108. 2023-04-18 2変数1次方程式の整数解 non-negative solutions (y, z) to 7y+8z=1000
  109. 2023-04-19 和算数能極形術 Find the area of the circle inscribed in a semicircle
  110. 2023-04-20 等差数列・等比数列の和の公式 等比級数の部分和の積分 メルカトール級数とライプニッツ級数 5π/{Σ{k=0→∞}(-1)^k/(2k+1)}
  111. 2023-04-21 等差数列の和 平方数は2つの三角数の和 6^2-Σ{n=1→5}n
  112. 2023-04-22 オイラーの多面体定理 包絡線図との関係 What is the maximum number of regions formed by 6 lines in a plane?
  113. 2023-04-23 暗算問題 11/.3-37/6-15/2
  114. 2023-04-24 約数の個数の公式 How many factors does 78645 have?
  115. 2023-04-25 2倍角の公式 置換積分 ∫{0→200π}{1/π}sin^2(t)cos^2(t)dt
  116. 2023-04-26 平方の和 剰余ゼロ条件 x^2+y^2≡0 mod 0 where 0<x<20 and 10<y<100
  117. 2023-04-27 余角 Two complementary angles have measure x+3 and 2x+6
  118. 2023-04-28 約数条件付き2変数2次方程式 x^2+y^2/(x-y) is an integer that divides 1995 and x+y > 4
  119. 2023-04-29 和と差の積 Π(1-1/x^2)=15/29
  120. 2023-04-30 階乗 (3!)!/4!

12243点のCollatz4000X.ZELが解けた!

何か打つ手はあるのだろうか?現在のアルゴリズムで,時間は掛かっても最終的には解けているのかどうかを知りたい.Collatz12146.ZELを放置して,最後までやらせてみたい.どのくらい時間が掛かるのか予測も付かないが,もし,最終的にはつねに解けるというのであれば,アルゴリズムの正否の問題ではなく,効率の問題ということになる…

「結婚枠だけをセグメント検定の対象とする@20230125」というオプションをもう一度試してみた.これは結構おもしろいかもしれない.これだけでかなり高速化する.Collatz4000X.ZEL(12243点)を開いて,系統並び替えを154秒でこなすことができた.3分掛かっていない.スレッドとスレッドの間が,相当開いてしまっているが,これはこれで対処できるのではないだろうか?

image

あるいは,処理を二段階に分けて,①結婚枠のみで概略ソート,②人名枠を含めた詳細ソートのような手順も考えられる.というか,たとえ結婚枠だけのソートであっても,これほどスプリットが出るというのはおかしいので,まず,そこに注力すべきではないだろうか?⇒「結婚枠だけをセグメント検定の対象とする」と言っても,実際には人名オブジェクトもすべて検定の対称となっている.修正箇所は,TRIBEBOX:JoinAdjacentBoxで人名枠が接触している場合のみマージしていたのを,同一ボックス内では無差別にマージしているという違いだけだ.従って,人名枠が結婚枠内でどれほど開いていても圧縮が掛からない.

暫定的にTRIBEBOXにフラグを設けて,二段階処理を組み込んでみよう.⇒組み込みは簡単に終わったが,53直系血族図.ZELではループを30回回すまでフラグが立ってこない.つまり,「結婚枠のみ検定」でもほとんど動作には変化が見られないということになる.Collatz4000Xなどではおそらく,かなり顕著な効果はあるものと思われるが,問題が解決しているかどうかは走らせてみないと分からない.⇒解けた!結婚点一致と衝突検定を独立にループしてerrcntとcollisionがゼロになってからセグメント検定に掛けるという手続きに変更してみた結果,134回ループして解を得ることができた.従って,アルゴリズム的には閉じていると言っても間違いではないと思う.

そうなると,あとは効率の問題ということになる.もう少し,というかもっともっと改善の余地はあるのではないだろうか?

image

ともかく,この版を一応バックアップしておこう.


昨日は1000人に近い来訪者があった

午前0時を回るところだが,スナップショットを取っておこう.1000に近い来訪者があったということになっている.この理由は不明だが,かなり驚異的な数字だ.

image

今日のペースはまた通常に戻っているようなので,一過性の現象だったようだが… 何はともあれ,数字が上がるというのは悪い話ではない.⇒今日も順調にカウントが上がっている.午前5時15分で343人の来訪者があった.今日中にトータル95000人を超えることは確実なので,一週間以内に10万人の大台を超えそうだ.⇒完全な勘違い!343人というのは昨日の数字だ.今日は午前6時半でまだ,46人しかいない.

実験的に「結婚枠だけをセグメント検定の対象とする@20230125」を試してみたが,無理そうなので解除.⇒試みに「MakePairListCleanを一時止める@20220215」を解除してみたら,解けてしまった.

image

MakePairListCleanという処理は,ノード対の配置を最適化するための操作であり,今の場合にはノード対はまったく使われていないはずなので,このような変化が起きているとすれば,「基本的に必要な処理」がノード対処理と分離されずに混交していたということになる.この部分を切り出して,基本処理に統合する必要がある.まず,ノード対が生成されていないことを確認しておこう.ノード対の発行数をどこかで確認できるだろうか?⇒Nringには生成されたすべてのオブジェクトが登録されているはずだから,CheckNringCountでカウントできるのではないか?⇒オブジェクトの総数32460のうち,ノード対はゼロだ

MakePairListCleanはTRIBELIST::MainExprerimentに入って始めて呼び出される.この関数は2度呼び出されているが,ループしないで一度で脱出している.ただし,内部にもループがあるのでそこでループしている可能性はある.この関数の中では複数の処理が実行されているが,何かしらの作用がある場合にはconflictが立ってループになるはずなので,ループしないで抜けているとすれば,「何事もなかった」ということになってしまうのだが,だとすれば動作が変化しているという理由が立たない.おそらく,どこかで,暗黙に何かが操作されているのだろう.

MakePairListCleanの内部で実行されているBuildCompleteTreeを止めると無限ループしてしまうので,この操作は必須処理になっているが,conflictは起きていない.BuildCompleteTreeは,CheckMultiCardsとStackTribeGeneを実行しているだけだ.⇒MakePairListCleanを暫定修正してBuildCompleteTreeを実行しただけで抜けるようにしてみたが,解けている.つまり,BuildCompleteTreeを実行することはノード対のあるなしに関わらず必須ということになる.

いや,MakePairListCleanを実行するか否かの問題ではない.単にCompleteTribeBoxの収束が遅いというだけの問題だ.実際,REDLINEを32まで引き上げたら正常描画できた.Collatz12146.ZELを読み込んでみよう.ループカウント上限32では,結婚点不一致84件, 衝突346件で収束には程遠いものがある.いずれにしても,三極検定をもう少し強化しないことにはどうにもならない問題であるようだ.とりあえず,ここで一旦打ち切って出直すことにしよう.

CompleteTribeBoxで結婚点不一致と結婚枠衝突を先行処理し,これらをクリアしてからセグメント検定に入るように修正して,一発でループを抜けられるようになったが,セグメント検定で動作不良が起きている.つまり,先祖ノードの「5」とその子どもの「53」が孤立した状態でループを脱出している.明らかにこれはセグメント検定に欠陥があることを示している.先祖ノードは#84230で,当初のセグメント番号は1.最終的にすべてのオブジェクトのセグメント番号は1724になる.

CompleteTribeBoxのループ出口でIsTribeCompleteの再検査を実行すると,結局31回ループするという動作になってしまう.少なくとも今の論理ではこれだけ回らないと解けないということのようだ.これは,セグメント検定で前詰めするとき,結婚点不一致が発生してしまうことが原因と考えられる.やはり,結婚点を維持しながら前詰めする方法を編み出すしかないのではないだろうか?⇒MAXIMALGRAPH:MoveSegmentBlockではBobject::MoveNeutralでオブジェクトを移動しているためと考えられる.

MoveSegmentBlockでMoveNeutralを使わないように仕様変更してみたが,31回ループという状況にはまったく変化がなかった.⇒「コラッツ特注版ではつねに中吊り@20211217」をオフにしたところ,HorizontalSegmentでまったく停止しなくなってしまった.⇒とりあえず,この論理は元に戻すしかなさそうだ.

午前9時半の訪問者数が590を超えている!

どうなっているのだろう?まだ午前6時43分というのに,今日の訪問者数が340を超えている.カウンタが壊れてしまったのだろうか?

image

少なくとも時計は壊れていない.3つのPCで同じ時刻を示している.いや,BlackHawkの時計は1:39になっている.どうも,このマシーンはフリーズしてしまっているようだ.今日は動いているが,メイン機も朝になるとたいがいフリーズしている.どちらもリブートしないと動き始めない.つまり,どちらもほとんど棺桶に足を突っ込んだ格好でいつご臨終になっても不思議ではない状態だ.中古のノートを一台送ってもらうことになっているが,ロックが掛かった状態になっているので,果たして使えるかどうかも定かではない.

一週間ほどコンソール卓から離れてしまっていたので,ペースが戻ってこない.当面の課題はコラッツ木ジェネレータの出力ファイルを安定に表示できるようにすることなので,その方向で作業することにしよう.「コラッツ対応版応急措置@20211219」と「コラッツ対応版応急措置@20211223」という2つの応急措置はとりあえず,解除してある.現在テスト用サンプルとして開いている「53直系血族図.ZEL」は1931点という,それほど大きくはないが,小さくもないファイルだが,REDLINE=25という設定でレッドラインオーバーが発生する.

REDLINEの上限をもっと大きくすると正常描画できるようだが,25でもすでに十分大きいと思われるので,この状態でシューティングを試みることにする.上層で孤立点が発生しているというのが不良の原因だ.

image

さて,どう対策すればよいだろう?明らかにこれは,「極大セグメント検定」と呼んでいる「圧縮処理」の機能不全であることは確かなのだが,どうやって強化すればよいか?少し考える必要がある.孤立しているのは,先祖ノードの「5」とその子どもの「53」だ.「5」は子ども1人,「53」の下には141, 2261, 35, 565の 4人の子どもがいる.この先祖グループの2人を除いた部分はまともな配置になっているのに,これだけが孤立していて,それが矯正できないというところが不審な点だ.

理由として考えられるのは,「5」と「53」という2つのノードがどちらも,結婚枠という殻を持たない剥き出しの状態になっているという点だ.⇒いや,それも違う.少なくとも「53」はそれを囲う結婚枠の中に入っている.「5」を世代0とすると,「53」の子ども世代である世代2には上記の子ども4人が入った結婚枠が一つあるだけだ.これを「53」の直下に配置すればそれで完了というはずなのだが…

▲系図画面下部のステータスバー:基準カードの値が0になっている.系統並び替えを実行しても変化しない.現参照カードの表示もおかしい.⇒ダンプでは正しく表示されている.

レッドラインオーバーが発生した時点で,結婚点不一致が8件発生.

▲ShowUnderWearが動作しない.というか,画面が出てこない.

どうも,かなり悪い.最後のラウンドで結婚点不一致を処理した直後にブレークするようにして,下図のようになった.

image

三極がバラバラでまったく協調動作していないように見える.衝突検定の直後にブレークしてみたが,状態はほぼ同じだ.結婚点の一致検定を実施する前の状態はまだ,大分まともな状態になっているのだが…

image

極大セグメント検定と結婚点一致検定のどちらが悪いかというのも一概には言えない.いずれにしても,設計上の致命的弱点がどこかにあるというしかない.「MAXIMALGRAPHを共有する@20220414」と「MAXIMALGRAPHを縮小する@20220221」という2つのオプションを解除してみたが,動作には基本的な変化はない.セグメント検定から人名枠を除外して,結婚枠だけの検定を行おうとしたが,うまくゆかなかったので,便宜的に結婚枠内のすべての人名枠に結婚枠と同じセグメント番号を付与するようにしたところ,描画はできたが,完全に緩んだ「loose box」になってしまった.まぁ,当然と言えば当然なのだが.というのは,そのようなloose boxを締めてタイトにするというのが,セグメント検定の目的であったのだから…

image

これはどうも,一筋縄ではゆきそうもない…

レコード番号と参照番号の切り分けをクリア

レコード番号と参照番号の切り分けという課題はほぼクリアできたのではないかと思う.2021年の末にコラッツ対応版を初めた時期に,「コラッツ対応版応急措置」というのを何件か入れている.この辺りが今どうなっているのかを調べてみよう.作業を開始したのは,2021/12/11だ.この頃は,コラッツ木サンプルのデータ入力をやっている.発生していたエラーには以下のようなものがある.

  1. 先祖ノード絶対世代番号不一致
  2. LINKTABLE::MargTakeChild 結婚リンクが消えていない!⇒このエラーは,子ども氏名を消去した時に発生する
  3. 選択状態が残ってしまう,他のカードを選択しても消えない
  4. ページ設定パネルが開けない,印刷もできない
  5. 先祖並び替えが動作しない,ボタンが効かない,ドラッグ移動もできない
  6. インポート・エクスポートが動作しているバージョン:Ver 2.2.0.030 Rel 2021-03-17
  7. 最終版からリスタート,2021-04-10
  8. 氏名欄で左右カーソルキーを押すと入力文字が消える
  9. カード画面上部ツールバーの氏名欄で名前の後ろに余分な空白が入る
  10. カード数1000点のコラッツ木のインポートに時間が掛かる,1点処理するのに25秒掛かっている
  11. CARDLINK::makelinkで時間が掛かっている,UNDOは止めておく
  12. ZTYW処理が作動している,暫定的にgoodsonを空としている
  13. 人名枠高の計算がおかしい,フォントサイズを大きくすると人名枠が世代境界を超えてしまう
  14. コラッツ1000.zelを開くのにかなりの時間が掛かり,マネージド・デバッグ・アシスタントが作動して停止する
  15. 親の垂線が兄弟連結線から突き出ている
  16. TOPOLOGY::ClearTableで参照番号不整合が発生したとき ⇒ すでに止めてあるが,「コラッツ対応版応急措置@20211219」というリテラルで明示する
  17. NAMEBOX::Drawで人名枠高が世代高を超えた ⇒ コラッツ対応版応急措置@20211219」で止める
  18. MARGBOX::makeGoodSonの冒頭で「つねに中吊りする@20211216」でゼロ復帰 ⇒ コラッツ対応版応急措置@20211219」で対処
  19. TRIBEBOX::CheckAbsoluteGenerationで系列優先ノードのbreakupがオフという理由でエラーが起きている.「コラッツ対応版応急措置@20211223」で止めておく
  20. 基準番号を1~1000に振り直すことにした
  21. 垂直親子連結線が兄弟連結水平線を突き出ている.

Collatz12146.ZELというサンプルを開いてみた.名前の通り,12146点のデータが登録されている.系統並び替えだけ700秒掛かっているので,全体では15分くらい掛かったのではないだろうか?上の方でかなりひどいスプリットが起きている.多分,これが「極小反例の自動生成」ということに取り組むことになった原因だろう.

一番気がかりなところでもあるので,まず,これをシューティングしてしまいたいところだが,その前に,「コラッツ対応版応急措置@20211219」と「コラッツ対応版応急措置@20211223」を解除するところから始めよう.今後の作業の目標は,「コラッツ特注版をノーマライズして公開版に向けて統合する」ことだ.

コンパイルエラーが出ている.CARDDATA::refnumが存在しないというエラーだ.CARDTABLE::tablesizeという値でも不在が起きている.前者は多分「setRefnumはCARDBASEで実行する@20230107」に関係しているものだろう.暫定的にrefnumをRefnumに変更している.後者はBASETABLE::tablesizeを暫定的にtablesize2としためだ.元に戻しておこう

KAKEIZU::getmarriageでは参照番号を指定してデータの取り出しを実行している.レコード番号でアクセスできるようにした方がよい.⇒KAKEIZU::getmarriage/getcarddataでは,num ないし refnum という語を使っているが,これは参照番号ではなくデータベースのレコード番号である.参照番号はデータベース内部では「登録番号」と呼ばれている.紛らわしいので,引数をrecnのように書き換えておこう.

KAKEIZUのメンバー関数の中でnumないしrefnumを引数とする別の関数がある.これらもチェックしておこう.QUICKDBのcurnumもcurrecnに改めておく.savemarriage,savecarddata,makemargfile@もrecnに変更した.



Renumberではリンクを移動しない

参照番号のハッシュ化は,コラッツ対応修正により,登録カード数の上限が1000のオーダーから10000を超えるようになったことを直接のきっかけとしている.しかし,そのことによって,「リンクがどこに置かれていてもまったく問題なく動作する」というNシステムの最大の特長が著しく損なわれるか,ないし制約を受けるようになった.テーブルにハッシュでアクセスするためには,そのレコードはテーブルの固定位置に配置されることが前提となる.それと,Nシステムの「リンク配置の自由度」は明らかに背反している.

参照番号のハッシュ化が後戻りのできない決定であるとすれば,どこかで折り合いを付けなくてはならない.参照番号のハッシュ化はゼルコバの木の最大構成要素である人名テーブルと結婚テーブルに関わるものではあるが,それ以外の要素ではこれまでと同様,配置の自由度は損なわれてはいない.テーブル並び替えというのは一覧画面出力に関わるものであり,人名/結婚テーブルのレコード並びとは独立であるはずなので,人名/結婚テーブル上のリンクが固定位置にあったとしても,実行可能であるはずだ.⇒どうもlookupテーブルを作り損なっているようだ.⇒NAMESORT::SortNameSubで「lookupを前詰めする@20230113」の論理にミスがあった.⇒修正して動作するようになった.

基準ソートの実行で選択カード数不一致が発生する.TOPOLOGY:RebuildCardListではUndoStartFlagがオンのときには選択リストから選択フラグを再設定し,オフのときにはフラグから選択リストを再構築している.どちらの場合も,フラグのカウントとリストのカウントは一致しなくてはならないのだが… リナンバーを実施した場合には,選択リストは無効にしなくてはならない.⇒いや,そういう動作になっているはずだ.⇒CARDTABLE::Renumberが間違っているのではないか?lookupに格納しているレコード番号を書き直している.⇒「Renumberではリンクを移動しない@20230116」で収まったようだ.

58点削除→ 基準ソート→ Undo→ Undoで大量のエラーが発生する.親リンク不整合,カード参照番号の重複,子インデックスが負,親番号不一致などの後,どこかで例外を起こしている.⇒MARGLINK:CheckMargLinkのエラー出力に誤りがあった.

カード削除単独,ないし,他のタイプのソートとの組み合わせではエラーは生じないので,原因が基準ソートにあることは明らかだ.おそらく,それもリナンバーしていることが最大の原因と思われる.⇒確かにそのようだ.ということは,リナンバーをUndoしたとき,元の状態に戻っていないということなのだろう.

リナンバーでは「リンクを移動しない」ことになっているから,変化しているのはカードの参照番号だけだ.⇒カードの参照番号はCardNumListのリストアで復元できているはずなのだが,参照番号を参照しているすべてのリストが復元されているかどうかが問題だ.いや,そもそもCardNumListが保全されていないのではないか?

UNDOSYSTEM::BackupPointDataのSORTREFNUMにSetUndoListを実行するようにしたが,エラーは収まらない.CardNumListを生成しているタイミングが悪いのではないか?⇒確かにそのようだ.⇒NAMESORT::NameNarabekaeの入口でBuildNumListを実行するようにして解決した.多分これで,ほぼ問題は解決したのではないかと思う.まだ,何か見落としがあるだろうか?