コラッツ木構造図に含まれていた漸化式の誤りに関わる修正

開発機で走らせておいたタスクがまた落ちている…いや,あった.アイコンをスパイラルに変えたのはよいが,あまり目立たない(見慣れていない)ので見落としてしまった.1日+6時間48分走って,69%,残り時間は1日を切って13時間34分になった.予備機の方は8日+3時間走って,82%だ.時間の経つのは速いような遅いような…

コラッツ木構造図に含まれてた漸化式の間違いに関する手当はまだ収束していない.コラッツ木生成論理はすでに修正を入れてあるが,それ以外の4本の処理は多分独立に計算しているので,以前の論理がそのまま使われているはずだ.これらをすべて新しい式に書き換えなくてはならない.モヒティにはこれら2つの漸化式が等価であることを証明するように頼んであるが,やはりやる気はないようだ…自分の昔の思いつきに固着していて,まったく進歩していない…

実際,ネット上で「コラッツ予想はブラックホール」で検索してみると,山のような記事がヒットする.もちろん,その中にモヒティの名前は出てこない.つまり,モヒティの「インスピレーション」もそれほどユニークなものではなかったというのが現実のようだ…モヒティとのやりとりはすべてバックアップしておきたいので,一段落したら,テント村に置いた記事も更新しておかなくてはならない.

この修正は遅くとも今日中には片付くと思われるので,バージョン番号とリリース日付を更新してから始めることにする.漸化式が2つある.①N(k) = 4N(k-1)+1,②N(k)=(4M(k-1)-1)/3 : M(k)=4M(k-1)だ.②式で使っているMという変数は奇数と接続する偶数を表している.①式にはMという値は現れない.つまり,この式は奇数演算だけで完結している.我々の(正則)コラッツ木には奇数ノードしか含まれないので,①式を使うのが妥当である.

※2022/01/31 ②式は間違え易いので下記のように修正した
②N(k)=(M(k)-1)/3 : M(k+1)=4M(k)

どちらを使ってもプログラムは正しい結果を出しているので,基本的に等価(同値)であると考えられるが,そのことを証明しておく必要がある.モヒティにはこの証明を課題として与えているのだが,まぁ,やる気がないのは明らかなので自分で回答することにしよう.数学物理etc(談話室)にコメントを追加して,②式を①式で書き換えたバージョンをASAPリリースすると予告した.

漸化式はコラッツ木上の奇数ノードNの子ノードをN(i)としたとき,N(k)の値をN(k-1)から導くための等式だ.①式の場合も,②式の場合も,N(1)=(N*2^c-1)/3となる.②式ではM=N*2^cとした上で,Mに関する漸化式M(k)=4M(k-1)を使って,間接的にN(k)の値を計算している.まず,①式を展開して,

N(k) = 4N(k-1)+1
4N(k-1) = 4(4N(k-2)+1) = 4^2N(k-2)+4
4^2N(k-2) = 4^2(4N(k-3)+1) = 4^3N(k-3)+4^2
:
4^(k-2)N(2) = 4^(k-2)(4N(1)+1) = 4^(k-1)N(1)+4^(k-2)
———————————————— 両辺の和を取って
N(k) = 1 + 4 + 4^2 + …+ 4^(k-2) + 4^(k-1)N(1)
   = ((4^(k-1)) – 1) / (4 – 1) + 4^(k-1)(N*2^c – 1) / 3
  = ((4^(k-1)) – 1) / 3 + 4^(k-1)(N*2^c – 1)  / 3
        = ((4^(k-1)) – 1 + 4^(k-1)(N*2^c) – (4^(k-1))) / 3
        = (4^(k-1)N*2^c – 1) / 3 ーーーーー(A)

ここで,累乗の和を求めるのに,∑r^(i – 1): i = 1 to n = (r^n – 1) / (r – 1)の公式を用いた.次に,②式のM(k)=4M(k-1),M=N*2^cから

M(1) = N*2^c
M(2) = 4M(1)
:
M(k-1) = 4M(k-2)
M(k) = 4M(k-1)
———————————————— 両辺の積を取って
M(1)M(2)…M(k-1)M(k) = 4^(k-1)N*2^c*M(1)M(2)…M(k-1)
M(k) = 4^(k-1)N*2^c

N(k)=(M(k)-1)/3
       = (4^(k-1)N*2^c – 1) / 3 ーーーーー(B)

以上により,(A)式と(B)式は等しい.よって,①式と②式は等価(同値)である.つまり,偶数ノードを介さなくともコラッツ木を構成可能であることが示された.言い換えれば,コラッツ木では奇数ノードNと最右子ノードの値を決めている2の累乗値がわかれば,枝番号bを与えるだけで任意の子ノードの値を決定することができる.

cの値にはやや非決定的なところがあるが,それ以外のノードはすべて決定性で計算可能であるところが注目すべき点である.最右子ノードの値は親ノードの値よりも小さくなる場合があり得るが,同じ兄弟ノードの値は左に進むに従い単調に増加することも見逃せない.

実装コードとしては,①最初にMを計算してN(k)=(4M(k-1)-1)/3で求める方式,②最初にN(1)を計算して,N(k) = 4N(k-1)+1で逐次計算する方式,③最初にN(1)を計算して,事後はN(k)=(4^(k-1)*(3N(1) +1)-1)/3で計算する方式など考えられるが,計算効率的には②が最適と考えられるのでこれを用いることにしよう.これはコラッツ木生成論理ですでに実装済みのアルゴリズムである.

▲2^24で検証テストを実行中,STOPを掛けたらVerificationTestのEXITFUNNINGでODD=0で停止した.Odd number には18177が入っている.⇒再現できないが,確かに動作的におかしいところがある.Stopで止まったとき,Odd numberの値が小さくなることがある.5という値が入ることが多い.この値は,GetTheNumberで更新している.VerificationTestでは内部変数のODDで更新している.検証テスト中はGetTheNumberでは更新しないようにしたが,現象は収まらない.UpdateTreeHeightでも更新しているが,RunFlagが立っているときは更新していない.UpdateTreeHeight2でも同じだ.

Tree height=1 @ 5という表示が出ている.確かにUpdateTreeHeightないし,UpdateTreeHeight2の誤動作と思われる.UpdateTreeHeight2はDumpSuccessorsで呼ばれるだけなので無関係だろう.これは結構難しいかもしれない.Verification Test中DoEventsを実行してイベントループを回しているが,Stopボタンが押されたとき,どこにいるかは予測できない.一番おかしいのは,TreeHeight2の値がStopで小さくなるという点だ.⇒何とか収まったようだ.⇒少し走らせてみよう.Verification TestはGet the SequenceとGet the Numberの相互検証になっているので,これが走ればまず間違いない.

マニュアルの内容には変更はないが,参照しているモジュールのバージョンだけ更新しておこう.B面の処理ではCSVファイルを出力しないようになっているが,A面と同じ仕様にしてもよいのではないか?出力をファイルに取ってあれば,動作を比較したりするときにも有利だ.単純に出力フレームに出しているダンプをファイルに落とすだけでよいのではないか?Verificationでは確かに出力フレームには進行状況しか表示されていないのだが…I/Oフレームに出している枝番号リストを保存するという考え方もあるが,むしろ隣接リストを出力する方が応用が効くのではないだろうか?まぁ,これはペンディングということにしておこう.

Verificationに仕掛けたタスクは約1時間で終わる.それが終わったら,少し大きめのサンプルをZTで出力して目視検査することにしよう.

最新版ZIPとPDFをクラウドにアップロードしたが,ダブってしまったので古い方を削除したら元のリンクからアクセスできないようになってしまった.新しい公開リンクを発行した.

https://zelkova-tree.net/ownCloud/index.php/s/mn77KXxhqUh1j0y

https://zelkova-tree.net/ownCloud/index.php/s/V9hlAIxxOR5MKyH

開発機で実行していた検証テストが完了している.

Start From 1275069537 up to 1811940447

丸1日+18時間42秒でトータルノード数は268435456だ.サイトの表示を更新しておこう.ログを更新しようとしたら,メモリ不足エラーになってしまった.多分再起動が一番早いと思われるのだが…cドライブの空き容量はなんと0バイトになっている!初めて見た.削除できる一時ファイルは10.7MBしかない.

Collatz Tree Generator Manual を更新

開発機のテストは13時間30分経過して,残り時間1日+14時間,進捗は26%だが定速で走っている.予備機の方は7時間40分走って,74.2%だ.マニュアルにもう少し手を入れる必要がある.Tab Aの”Screen Components on tab A”はヘッダのはずだが,本体テキストになってしまっているとか,細かい直しがまだ少しある.これは改めて告知せずに,黙って修正でよいだろう.マニュアルにもバージョン番号を入れた方がよいのではないだろうか?⇒マニュアルのタイトルにエディション番号を記載するようにした.

結構あちこち直しが入った.当初は画面上の要素名はすべて大文字で始まるようにしていたのだが,やや大げさなので,オブジェクトを指す場合のみ大文字とし,変数名などは本文の中では小文字で始めるように書き換えた.大文字にする利点は冠詞を付けなくても通るという点にあるが,小文字にした場合にどうか?というところでは多少のブレがある.ほとんどの変数名は小文字にした場合も太字でかつイタリックになっているので,冠詞を省いてもよいのではないか?というのが当方のポジションだ.まぁ,文体が多少古臭いのはやむを得ない.これが学校の英語教育で教わった英語なのだから…

さて,またこれをアップロードしなくてはならない.アドレスは変えなくても済むようになっているはずなので,①PDFをアップする,②ZIPにPDFを同梱してアップするの2ステップで片付くはずだ.やってみよう.ownCloudのクライアントをインストールしてあるので,どちらもローカルのファイル操作だけでよいはずだ.⇒問題なさそうだ.

さて,もう一つやらなくてはならないことがある.モヒティのスレッドに投稿したコラッツ木構造図だ.だいぶ奥の方に落ちてしまっているのでアクセスが難しい.というか,テント村のトップ記事にリンクを置いていたはずだ.いや,トップ記事には入っていないが,その前の長文記事の中にあるはずだ.⇒出てきた.

正則コラッツ木生成機の画面要素が確定した,あとは図版を差し替えるだけ

開発機で実行していたテストは昨日のうちに落ちていた.うっかり閉じてしまったのだろう.予備機のテストは続いている.6日+52分で63.2%.少なくともあと4日は掛かる形勢だ.予備機でもカスペルスキーのパスワードマネージャのアンロック画面が出ていて,そのあとに「個人情報の商用利用」の許諾を求めるメッセージが出た.拒否したのに「おめでとうございます…」のようなことを言っているのが気になる.ボタンを押し間違えてはいないと思うが,この種のボタンは一度許諾すると戻せない(のが普通だ).

正則コラッツ木生成機の画面要素はすでに確定しているので,あとはマニュアルの図版を差し替えるだけになっている.それほど時間は掛からないので,ほどなく公開の段取りに入ることになるだろう.公開後も差し替えができるようにしておくので,多少のところは後日修正もできるだろう.テント村の訪問者がじわじわと増加傾向にある.昨日の訪問者数は64人で,いまの時刻午前四時ですでに訪問者8人,うち2人がオンライン中になっているので,海外からのアクセスが出てきている可能性はある.現在公開しているCollatz Tree Generator V.1.04は少なくとも数本はダウンロードされている.

仮に今日中に最新版+マニュアルが公開できたとして,その後に日本語版マニュアルを作るかどうか?が問題だ.グーグル翻訳である程度のことはできると思うのだが,読者の便を考えれば作った方がよいのは当然だろうとは思うのだが…まぁ,これはあとから考えることにしよう.アイコンを作り変えるという話もある.現在は応急的にゼルコバの木ベータ時代の切り株アイコンを使っているのだが…⇒アイコンは作るとしても間に合わない.図版もすべて差し替えになってしまうし…

マニュアルの図版でとんでもない間違いが見つかった.一番肝心なコラッツ木構造図だ.k番目の子ノードの番号を与える漸化式を,

N(k) = 4N(k-1) – 1

としているが,これはN(k) = 4N(k-1) + 1の明らかな誤りだ.誰も指摘してくれていないので,読まれていないことは間違いないが…本体プログラムではこの式を使わず,

N(k)=(4M(k-1)-1)/3 : M(k)=4M(k-1)

のような式を使っているので,この間違いは発現していない.まず,この図版を修正し,かつ漸化式をN(k) = 4N(k-1) + 1に変えて動作することを確認しておく必要がある.モハティのスレッドの図版も差し替える必要がある.しかし,これは最新版+マニュアルの公開の手配が整ってからやることにする.

▲Collatz Tree 3-8-766.zelをダブルクリックで起動して,フォントサイズゼロというエラーが出た.

image

アプリを起動しておいて,ファイル→開くではエラーは起きない.ダブルクリックで起動したときに固有の現象のようだ.

正則コラッツ木生成機のCollatzTreeStructureに上記の修正を入れて動作を確認した.つまり,「漸化式をN(k) = 4N(k-1) + 1に変えて動作することを確認」できた.この方が論理が単純なものになるので,より優れていると言える.プログラムの修正はこれまでなので,図版を作り直すことにする.コラッツ木構造図はゼルコバの木で描画しているので,原図を探してみよう.フォーラムに投稿された画像の日付は2021/12/17だ.⇒どこにも残っていない.簡単な図なので作ってみよう.⇒バックアップに入っていた.見つからなかったのは,このあとフロントエンド機を変えているためだ.

▲コラッツ木構造.zelを保存しようとして,PAGESETUP::GetPageCountのエラーになった.

image

とりあえず,マニュアルに関しては図版を差し替えるだけになった.アイコンにトライしてみたが,なかなか難しい.ネットでピッタリの絵柄を見つけたので使わせてもらうことにした.ありがたいことに無料だ.

ClipartKey_1694922

無料なのはいいが,フォトメディアアドオンというアプリのインストールが勝手に始まっている.もしかしたら,どこかのボタンを押しているのかもしれないが…こっちはドライブが逼迫しているので勘弁してほしい…エクスプローラのプレビューに画像が表示されないので,再起動したところだ…(再起動すると多少緩和して表示できるようになる)

一つ問題が出てきた.Export Zelkova Tree CSVがオンになっていると,ゼルコバの木形式CSVファイルが出力されるようになっている.全部で4種類のファイルが出力されていて,CollatzNumber.csvという名前のファイルは,Get the Numberで出力されることになっているが,Verification Testでも同じ名前のファイルが出力されている.本来Verification Testではファイルに保存しないという仕様だったが,内部でGet the Numberが走っているため,副次的に生成されている.

もし,Verification TestでもCSV出力が取れるということになれば,それはそれで面白いのだが,現在の動作では,最後の1点についてのグラフデータしか出力されていない.これはほとんど意味がないので,全面的に出力しないようにするか,ないし,全点(と言ってもゼルコバの木が読み込める限度内ではあるが)取れるようにすべきだろう.Verification Testのテスト結果をゼルコバの木で可視化できるとかなり面白いのだが,可能だろうか?

このためには,隣接リストファイルをゼルコバの木で直接読み込めるようにする必要がある.Verification Testで出力されるグラフというのはすべて「鎖」なので,不可能ではないような気もするが,ゼルコバの木を改変しないでそれができるかどうかはやや疑問だ.というのは,どうしても交叉が発生する可能性があり,特に1はすべての鎖に含まれるので,現行のゼルコバの木の論理では別人物として登録されるのは避けられないような気がする.いずれにしても,いま直ちに実装するというのは困難なので,Verification Testでは何も出力しないようにしておくしかないだろう.⇒対処した.

▲CollatzTree.csvをインポートしようとして,ImportTablefuncのエラーが出た.

image

あまり見たことのないエラーだ.そのあと,ファイルのオープンに失敗しましたなどのエラーが続く.どうもこのCSVファイルはでき損なっているのではないか?プレーンCSVを取ってみよう.これは問題なさそうだ.⇒ゼルコバ形式ファイルを出力していないように見える.やはりそうだ.どこか壊してしまったのだろうか?mmm…確かにやり過ぎていたかもしれない…

ExportZelkovCsvでWorkingでないときは無動作で抜けるようになっていた.この関数は汎用でゼルコバCSV出力では必ず使われるものだから,ここで抜けるというのは間違っている.ゼルコバの木出力しないときは,プレーンCSVを出力するようになっているので,それをインポートしたゼルコバの木が「ファイルのオープンに失敗」というのは正しい動作だ.いや,まだ少しおかしい.CSVファイルが消えてしまった.⇒拡張ディスプレィの方に出ていた.まったく問題ない.

▲出力枠のテキストを切り詰めるとき,行単位で削るようにしているはずだが,うまく動作していない.最初の一行が半端なところから始まっている.⇒テキストがMAXDUMPTEXTより短いときは切り詰めないようになっているが,等号が成立したため無処理になっていた.等号の場合も処理するようにした.

▲プレーンCSVを取ったあと,ゼルコバの木CSVに切り替えて例外が発生して,異常終了した.⇒これはLcalcを開いてファイルがロックされていたためと思われる.フラグは立っているが,ストリームがNothingであるため,Closeしようとして例外が発生している.⇒対処した.

公開版のバージョンをV1.1.4とし,リリース日付も2022-01-27に改めておこう.まず,これをownCloudにアップロードして場所取りをしておこう.⇒クラウド上にすでにCollatz Tree Generatorというフォルダは存在する.一番最初に作ったものだが,上書きしてしまおう.⇒公開リンクは一つのファイルに対して複数作れる.一応,新しいリンクを作っておくことにする.

https://zelkova-tree.net/ownCloud/index.php/s/hp1QwdFxv3HLez1

今度はLibreWriterから直接印刷してみる.⇒レイアウトで失敗している.18ページのところが,19ページになってしまった.紙とインクがもったない…仕上がりはほぼ同じだ.Libreの方がPDFより気持ちページが縦長になっているが,まぁ,収まっている.完璧とは言えないにしても,ほぼ満足できるものになった.マニュアルも仕上がったのでクラウドにアップすることにしよう.

マニュアルの公開リンク:https://zelkova-tree.net/ownCloud/index.php/s/Tsgt6t10A3NI7Uz

まず,テント村のトップページに告知を入れておこう.⇒片付いた.パッケージにPDFを詰め込んでダウンロードできるようにした.オンラインマニュアルも開くことができる.これで万端整ったと言えるだろう.別バージョンが3つアップされているが,すべて27日以内に期限切れとなるように編集した.

マニュアルの再編成という最適化問題

開発機に仕掛けた検証テストが完了している.1日+6時間58分で2^28をこなした.当初の見積もりは1日+十数時間だったので,それよりはだいぶ早くなっている.残り時間が変動するのは,カウントがまだ上がっていない時期で,ある程度以上進むとほぼ安定してセコンド単位で進むようになる.カウント数が少ない段階で変動するのは当たり前だろう.⇒開発機には続きを仕掛けておいた.残り時間1日+14時間と出ているが,もう少し小さい数字になるだろう.

フィードバック情報にはユーザ情報は何も含まれていないが,せめて使っているプログラムのバージョン番号くらいは取り出しておきたい.⇒アプリのタイトル行を出力枠に直接出力するようにした.バージョンを一つ上げて,V1.1.3としておこう.これがおそらく最終版になるだろう.Rel 2022-01-26だ.

マニュアルは用紙サイズとフォントサイズを変更したので,全面的な模様替えになってしまったが.大体収まった.このドキュメントには画像がふんだんに入っているので,それをページ内に配置するというのはまるきり最適化問題そのものになる.「正則コラッツ木」に関する記述を前方に移したりなど,相当大掛かりな修正になったが,何とか見られる状態にはなったのではないかと思う.逆にここまでやると,どこかに一行追加するのも難しくなる.つまり,それが,ほぼ完成ということになるのではないか?ともかく,PDFを印刷してみよう.

カスペルスキーのパスワードマネジャーが突然立ち上がって,パスワードの入力を求められた.通常起動時に一度パスワードを入力すればその後は何も操作しなくてもよいはずなのだが…それはそれとして,このとき同時におかしなポップアップが表示された.

image

「It’s lonely here! Your sensitive PDFs are waiting to get into the vault.」というもので,ネットで調べると同じような事例がある.

Nothing stops annoying Kaspersky messages/advertisements, Kaspersky Secure Connection [Solved][Closed]

パスワードを入力し終わるとほぼ同時にカスペルスキーからの通知が入ってきて,「個人情報の商用利用に関して」許諾を求められた.拒否してもサービスは継続されるので,拒否しておいたが,それとこれは関係あるのだろうか?ないのだろうか?カスペルスキーの言っているvaultというものがどういうものなのかよくわからないが…⇒パスワードマネージャが使っている暗号化されたストレージだが,そこにPDFを移すというのがよく分からない.カスペルスキーは最近わたしがPDFを編集したりしていることを知っている様子だが…「読んでるよ」って挨拶かな?

Branch order sequence周りの用語を統一するためにかなりの書き換えを行った.刈り込み木などもう少し精確に記述したいところだが,行数が変化するとレイアウトがまた壊れてしまうので,ここまでということにしたい.ただし,用語を変えたので画像の差し替えが必要になっている.これはやっておくしかないだろう.かなりの枚数があるが,片付けることにする.サブノートのCドライブも逼迫している.元々28GBしかないのですぐに使い切ってしまうのだが…

図版もすべて差し替えて一旦編集完了と言いたいところだが,もう少し書き直しておきたいところがある.Up to the power of 2 と test countの関係が分かりづらい.むしろストレートにTest countと表現しておいた方がよいような気がする.そうなるとまた図版の張替えになるが仕方ない.Branch number sequenceはすべてBranch order sequenceに書き換えたのだが,Copy branch order from the sequence というのもイマイチ意味不明だ.Auto-copy branch ordinal numbers in I/O frameとしてみたが,I/O frameという用語は画面上では明示されていない…

テキストの修正は容易だが,図版がからむと手が掛かる.ともかく,まず,画面要素を完全に確定しなくてはならない.test count k=2^pとすると,計算式も書き換えなくてはならない.ビルド時にLNK1342というエラーが出ているのが気になる.

1>C:\Users\babalabo\Desktop\CollatzProject2\bin\Release\net5.0-windows\CollatzTreeGenerator.exe : fatal error LNK1342: 編集するバイナリ ファイルのバックアップ コピーの保存に失敗しました

この原因はポストビルドイベントでCollatzProject2にアクセスしているためだ.スタックサイズを変更するための操作だが,すっかり忘れていた.

“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\editbin.exe” /STACK:1073741824 “C:\Users\babalabo\Desktop\CollatzProject2\bin\Release\net5.0-windows\CollatzTreeGenerator.exe”

CollatzProject2というフォルダはすでに廃止してCollatzProjectを使っているので,書き直しておかなくてはならない.⇒対処した.タブBの画面はこれで決まりとしたい.

image

これに合わせてプログラムを書き換える必要がある.⇒終わった.あとは図版を張り替えるだけだ.今後のこともあるので,バージョンに関わりなく同じファイル名でダウンロードできるようにしておきたい.パッケージに入っているEXEは現在も共通の名前を使っているが,パッケージ名もバージョン番号を外してCollatz Tree Generator.zipとしておくのがよいと思う.アナウンスの手間も省けるし,差し替えも容易だ.マニュアルはCollatzTreeGeneratorManual.PDFでよいと思う.

マニュアルはほとんど仕上がった

開発環境で走らせている検証テストは最新版なので残り時間が出ている.それによるとあと7時間掛かる見込みだ.経過時間は23時間40分なので所要時間は1日+7時間くらいということになる.予備機の方は4日+3時間50分で進捗は42%だ.あと5日は掛かる.マニュアルはほとんど仕上がったのではないかと思う.あとは,リンク関係を整備するだけだ.しかし,リンクを入れるためにはまず,対象ファイルがアップロードされていなくてはならない.少し整理してみよう.

  1. マニュアルをPDF化する
  2. Collatz Tree GeneratorのZIPパッケージを作る:この中にはマニュアル.PDFを同梱
  3. Collatz Tree Generator.ZIPをownCloudにアップロードする
  4. Collatz Tree Generator.ZIPの公開リンクを生成する
  5. ゼルコバの木テント村の先頭ページThe Collatz Conjecture was solved の画像→Collatz formulas are like a black Hole of natural numbersの英文記事へジャンプ
  6. Now Collatz Tree Generator V1.04 is available here for free をV1.1.2に書き換えて,4のリンクを挿入する

問題は,マニュアル本文の中に4の公開リンクへの参照が含まれていることだ.従って,まず,マニュアルを同梱しないバージョンのパッケージを作成し,それをownCloudにアップロードして,公開リンクを取得する必要がある.その後,マニュアルにそのリンクを記載して,最終版としてPDF化し,それを同梱したパッケージを作り直して,アップロードし直さなくてはならない.ownCloudは多分,ファイルの差し替えができるようになっていると思うが,それも試してみなくてはならない.

PDFのアップロードはownCloudが一番安全だとは思うが,ここに置くと,ブラウザで開くという使い方が(多分)できない.PDFをHTML化してテント村におくか,ないし直接ブログの記事として公開するということも考えられる.これは後から考えるとして,ともかくまず最新版のCollatzTreeGeneratorをアップロードしておこう.これもできれば同じアドレスで異なるバージョン(最新版)をダウンロードできるようにできるとよいのだが…ownCloudはかなり限定的なことしかできないようだ.できることといったら,ファイル名の変更くらいしかない.

ownCloudのクライアントアプリというのがあるのでインストールしてみよう.インストールはできたが,どうもイマイチだ.確かにリモートフォルダとローカルフォルダを仮想化してローカルでもファイル操作できるようにはなっているのだが,連携があまりよくない.リモートでアップロードしたファイルを共有設定しても,ローカルではそれが反映しない.同期というのが,上り方向で同期を取るのか,下り方向で同期するのかもよく分からない.少なくともローカルフォルダに新しいファイルを追加すると,クラウドにアップロードされることは確かだが…共有設定などはローカルでは操作できない.

これでともかく,同梱したPDFファイルの差し替えができるものかどうか?試してみることにしよう.⇒どうもやはり,差し替えはできないようだ.つまり,もう一度公開リンクを作り直さなくてはならない.これでは堂々巡りになってしまう!しかし,共有リンクは切れていないので,ダウンロードはできる.現物は差し替わっているので実質的には問題なさそうだ.つまり,ローカルフォルダのアイコンの表示の問題だけと言ってよさそうだ.これで段取りはすべて整ったのではないだろうか?あと,付け加えるとしたらPDFをブラウザで開けるようにするというのがあるが…⇒いや,案ずるまでもない.

PDFファイルをownCloudにアップロードするとブラウザで開くようになっている.多分写真などもそういう扱いになっているのではないだろうか?あとは,CollatzTreeGeneratorの動作チェックと,マニュアルの校正だけだ.マニュアルは一度紙にプリントして裸眼でチェックした方がよい.いや,画面上でチェックするのと実質は同じなのだが,印刷したものの仕上がりを見ておきたい.このためには,まずダイソーに出かけて用紙を買って来なくてはならない.手元にはもう裏紙もなくなって,B4の用紙を半裁したものを使っているくらいだから…

英文社名をBaba Laboratory Inc. Ltd. からBaba Laboratory Inc. に変えることにしたので,ゼルコバの木の画面も変える必要がある.ゼルコバの木はいまのところまだ公開の準備は整っていないが…開発機のHDドライブがだいぶ逼迫してきている.開発用のD:ドライブから2021年度のフォルダをすべてバックアップドライブE:に移動したが,今度はE:ドライブが赤くなってしまった.外付けHD,SDXCも赤になっている.そろそろ何か大容量の外部ドライブが必要になってきている.

印刷してみた.Acrobat Readerではなぜか印刷できなかったので,LibreOfficeでODTファイルを印刷した.文字がやけに大きい!画面上では適切なサイズに思えたのだが,幼児向けの絵本になってしまった.しかし,この文字サイズを変えるのはかなり難しい.ページの割り付けがほぼ完璧に決まってしまっているからだ.このマニュアルの読者には高齢者と非英語圏からの参加が含まれると推定されるので,むしろこのままの方がいいような気もするのだが…

Acrobat Readerで印刷できない理由はわかった.セキュリティ上の理由で「起動時に保護モードを有効にする」がデフォルトでオンになっていたためだ.メニューバー→編集→環境設定→セキュリティ(拡張)→起動時に保護モードを有効にするのチェックを外して再起動してプリントできるようになった.

このプリントにはもう一つ難点がある.ページ全体が上に上がり過ぎている.上辺のマージンは2センチにも足りないのに,下は5センチも空いている.用紙がB5になっていた.これでは下が空くのは当然だ.一度バックアップを取ってから直すことにしよう.⇒Acrobat Readerのプリント出力は妥当なものだ.上下のバランスが整っているので,文字が大きくてもそれほど気にならない.もしかすると,これで出荷できるかもしれない.英語の苦手な人にはこれくらい文字が大きい方が読み易いのではないかと思う.1ポイント落として,11ptにしてみた.まぁ,これくらいなのではないかと思う.

マニュアルの執筆・編集はかなり進んだ

開発機に仕掛けた検証テストの進捗は4日+17時間48分で33.6%,予備機の方は2日+22時間で28%というところだ.1日当たりの進捗率は前者が8.8%,後者が12%というところで,予備機の方が2日分遅れているが,そのうち追いつくだろう.マニュアルの方はかなり進んだと言ってよいのではないかと思う.Verification Testがまるごと残っているが,それほど込み入った説明は要らないので片付くと思う.コラッツ木構造について,どこで言及するか?というのがポイントだ.枝番号リスト(数列)に関しては刈り込み木のところで図示するのが一番わかり易いような気がするが,コラッツ木構造に関しては言及しないということは可能だろうか?このマニュアルは論文執筆の下書きというつもりで書いているので,どこかで触れる必要があるような気もするのだが…

公式版をリリースしようとして,バージョンに関係するパラメータをあちこちいじっているうち,ビルドできなくなってしまった.管理者権限でVSを立ち上げる必要があるが,VSが立ち上がってこない.予備機では同じ操作でVS2017を開くことができる.再起動したいのだが,それをやると実行中の検証テストが吹っ飛んでしまう.どうしたものか…検証テスト完了まであと一週間以上掛かる…ここで止めたらすべてが水の泡だ…いや,そんなことも無いのでは?検証テストは開始奇数番号を指定して始めるようになっている.現在の最終番号はわかるのだから,そこから再開すればよい.今度は範囲をもう少し狭くしてせめて1,2日のうちに終わるようにしておこう.

いま,59.9%なので…いや,おかしい.進捗が0.59%まで落ちている.経過時間も1時間31分でまだ始まったばかりだ.いま,走っているのはV1.1.0 Rel 2022/01/19で仕掛けたときの版だと思うが…停止して,レポートを送っておこう.

Verification Test for the Collatz Tree Structure ( 22/01/23 16:22 UTC )
Start From 38651 up to 4295005945
Total odd number count: 2147483648
Big number : 102098975067917
Max degree: 12 @ 215307605
Tree height: 263 @ 15733191
Progress rate: .61%
Time spent: 01:33:18
Verification Test Stoped at 26046439

開始時刻は22/01/23 16:22 UTCだ.つまり,昨日の午後4時ということになるが,UTCの現在時刻は18:00なので,2時間前ということだろう.テストを実行しているパネルを操作したつもりはないのだが,誤操作で無関係なキーストロークが入ってしまったのだろう.と言っても,この状態になるためには,①画面が初期状態で開いている,②フォーカスがVerifyボタンの上にあるという2つの条件が必要だ.②というのはあり得るとしても,①が起きているというのはかなり考え辛い.一度閉じなければ初期状態にはならないはずだが,そのためには,一度閉じてそれをもう一度起動する操作が必要になるが,そんなことをやった記憶はない.これで情報はすべて失われてしまったが,ともかく再起動してみる.今度はVS2017が管理者権限で立ち上がってきた.

ビルドで失敗する理由はVBからOCXが参照できていないためと思われるが,このパスを通すのがなかなか難しい.一度切れるとそれを復活させるのにかなり厄介な手順が必要になる.もう一度作り直してみよう.⇒一応できたので,これを開発機にインストールしておこう.どこを変えるとビルドがうまくゆかなくなるのかを調べてみる.

いまのところ,①Licensecode.hでLICENSENOとVERSIONSTRを変更する,②SetupBeta3でVersionを変更し,UpgradeCodeないしProductCodeを更新,SubjectとTitle, ProductNameを変更,③version.vbの表示文字列を更新,④SplashWindow.vbのパラメータを更新,⑤SetupBeta3のプロパティでOutput file nameを変更するところまでは問題ないことが確認できた.

ZelkovaVB3のアセンブリ名をZelkovaTree2021からZelkovTree2022に変更してみよう.確かに,ここを変更すると,

「COM 参照 ‘ZelkovaZ3Lib’ は ActiveX コントロール ‘AxZelkovaZ3Lib’ の相互運用アセンブリですが、コンパイラによって /link フラグでリンクされるように設定されています。この COM 参照は参照として処理され、リンクされません。」

のようなエラーが出るようになる.このアセンブリ名は生成されるEXEの名前にも使われているようだ.まずいことには,この文字列を元に戻してもエラーが解消しない.ZelkovTree2022ないしZelkovTree2021で検索しても何も見つからない.ハッシングされているのだろうか?

どうも訳が分からない.アセンブリ名というのはEXEの名前を決めているだけのようだが…上記のエラーメッセージでググったら,上から4番目に2019/01/08に書いたテント村の記事が出てきた.この頃は「VS2017への移行」というのをやっている真っ最中で,山のような障害に包囲されて四苦八苦していたところだ.タイトルは

「VS 2017でインストーラをビルドするところまで進んだ」

この記事が自分の書いたものだということはタイトルを読んだだけでピンと来た.これは「わたしの文章」だってね.こういう感覚/センスはわたしに固有のものだったというのはかなり驚きだ.普通に書けば誰が書いてもこうなるような気がしてたからね.これがわたしのフレーバつまり〇〇味だってことがわかる.この記事には,こう書かれていた.

VBのプロパティ→署名で「ClickOnce マニフェストに署名する」をオフにしてこのエラーは回避できたが、まだもう一つ警告が残っている。
1>  COM 参照 ‘ZelkovaZ3Lib’ は ActiveX コントロール ‘AxZelkovaZ3Lib’ の相互運用アセンブリですが、コンパイラによって /link フラグでリンクされるように設定されています。この COM 参照は参照として処理され、リンクされません。
この警告は無視してもよいだろう。

確かにそれでもよいのかもしれない.しかし,さっきの結果ではEXEが作られていなかったような気がするのだが…⇒問題なく作られている.3年前のわたしはまだ若かった!いまでは小石一つにでもつまずいてしまうほど老いぼれてしまったよ…バージョンの更新はもう少し込み入ったところがあるのだが,外からは見えないところなのでここまででとりあえずパスすることにしよう.さて,何をしようとしていたところだったのか?何かサンプルを作るつもりだったのだろうか?

まず,ともかく開発機の検証テストを再開しておこう.もう一度1006634083から始めるしかない.2^32というのはやはり大き過ぎるので,中を取って2^30でやってみよう.予備機はこの設定で走っている.やはり,残り時間の計算は欲しいところだ.Verificationテストはあらかじめテスト総数がわかっているので,それを出すのは難しくない.ことのついでにやっておくことにしよう.

いや,どうも様子がおかしい.一旦テスト完了しているのに,またその続きをやっている.これはまずいだろう.どうも上で起きた不具合はこれが原因と思われる.つまり,テスト完了した時点でさらに延長が掛かっているように思われる.いや,ちょっと違うかもしれない.一度完了したと持ったのは,0.99%が1.00%に変わったのを誤認したのではないか?小数点の前に0を出しておいた方が安全だ.⇒大体動くようになったが,時間区間が広い場合にはなぜかかなり激しく変動する.相当長い期間増加が続いたりすることもある.計算式では局所的な値ではなく,全体の所要時間で見ているのでそれほど変動しないような気もするのだが…特に区間が1日を超えるようになるとかなり変則的な動作になる.なぜだろう?ともかく,少し長い時間を設定して様子を見てみよう.

1006634083から+2^28までという設定で開始してみた.丸一日+十数時間という見積もりだ.中間では上り下りがあるようだが,時間経過とともに少しづつ減少しているようなので推移を見ることにする.今現在午前7時くらいだから,明日の午後8時頃まで掛かるという予想だ.⇒走り始めは,1日+13時間くらいだったのが,1時間半経過して1日+8時間くらいに変わった.まぁ,順調と言ってよいだろう.

▲Collatz 3-5-94.zelを開き,画面に合わせてズームしようとして,PAGESETUP::GetPageCountのエラーが出た.また,親子連結垂線が途切れている.人名枠幅を小さくしても変化しない.氏名だけが右にずれてゆく.人名枠ギャップは調整可能だが,結婚枠ギャップは変更できない.⇒独立に変更できないとしても,人名枠ギャップに連動して小さくできるようにすべきだ.⇒写真枠幅をゼロにしたら,人名枠幅が狭まった.⇒CubePDFに出力しようとしたら,ハングしてしまった.⇒VS2017を2つ立ち上げていたのが影響していたかもしれない.一つ落として出力できた.

D=3,H=5というコラッツ木を掲載しようと思ったのだが,さすがに大き過ぎて収まらない.D=3,H=4くらいが限度だろう.⇒マニュアルはほぼ書き上げた.全24ページ.あとは細かい手直しといろいろな調整を行うだけになった.明日くらいにはリリースできるだろう.

Truncated treeが軸線図にならないバグ

開発機に仕掛けた検証テストの進捗は3日+17時間で24.8%,予備機の方は1日+21時間で16%というところだ.どちらもまだまだ掛かりそうだが,順調に走っていると言えるのでこのまま推移を見ることにする.

Truncated tree(刈り込み木)が軸線図にならないバグを片付けなくてはならない.この軸線図と枝番号リストは1対1に対応するものなのでこれを表示できるようにすることはとても重要だ.Odd number=32769のとき,最大枝数3,樹高32になるが,このサンプルの刈り込み木を取ると,3つの部分木に分離してしまう.参照番号が1ずれていることが原因なので,どこかに論理ミスがあるものと思われる.

imageコラッツ木生成ツールの画面に表示されている隣接リストは正しいが,オプションのゼルコバの木CSV出力に誤りがある.⇒親番号に1つ大きい数が割り当てられていた.ほぼ繋がったが,先頭の1で失敗している.1は#1として登録されているが,5も同じ#1で上書き登録されている.⇒対処した.あとは,これを軸線図として出すだけだ.

残念ながらエラーになってしまう.前に一度刈り込み木を軸線図として表示できたことはあったような気はするのだが…⇒SIMPLEGRAPH::MakeAntiChainListで最長鎖の長さゼロでゼロ復帰している.SIMPLEGRAPH::GetHasseDiagramで長さゼロを返している.⇒この関数は冒頭でゼロ復帰している.なぜだろう?ともかく,これを外してみる.

image途中エラーは出ているが,描画できた.これが刈り込み木と呼んでいるものだ.きちんとしたデバッグは後日ということにして,この図をマニュアルに取り込む段取りを進めよう.枝番号数列はこの図から簡単に導くことができる.上から,軸線ノードが右から何番目の子であるかを数えるだけだ.マニュアルには,15から生成される高さ5の刈り込み木を挿入した.

image

これで大体道具立てはそろったのではないだろうか?あとは,淡々と記述するだけではないかと思う.タブAの部分はすでに書き上がっているが,タブBに関してはまだ,画面構成にも残っている部分がある.これらは,タブBの4機能を書き上げた上で,その要約として書き込めばよい.従って,4機能をまとめるのが先決ということになる.


LibreOffice→PDFに変換はほぼ満点だ

開発機で走らせている検証テストは現在17%で2日+16時間,予備機は4.7%で20時間半経過している.まぁ,やらせておくしかない.ヤシの木型の直系図を出力するTruncated tree用の図版を作りたいのだが,問題が発生している.①Truncated treeでエクスポートしているゼルコバの木形式CSVの出力が間違っている,②ゼルコバの木の血統軸線図が動作していない.とりあえず,場所決めのための仮の画像を貼り込んであるので,プログラムの修正は後回しにして,先に進むことにしよう.

▲残り時間を表示できるようにしたい.このためには,コラッツ正則木の正味ノード数を事前に計算する必要がある.この計算式はモヒティに頼んであるものだが,当てにならないので,自分でやるしかない.残り時間が表示できると任意サイズの正則木を指定してそれがどのくらい巨大なものになるかを事前に推定することができるようになる.これは結構おもしろいのではないかと思う.現行では枝数と樹高にはInt16の制限があるが,その範囲でも相当大きな数字になるはずだ.しかし,問題は画面がすでにかなり混み合っていて新たな要素を追加する余地がないという点だ.この修正が入るとマニュアルも更新しなくてはならない.

LibreOfficeからPDFにエクスポートした出力のできが思ったよりずっとよいので,作業が楽しいものになってきた.最終的な論文はPDF形式になるので,これができるというのはとても頼もしい.これなら,いくらでも書けるという感じになってきた.HTML出力を調整するために,いろいろな小細工をしなくて済むというのが一番うれしい.

おかしい.開いているマニュアルのODTファイルが古くなっている.この画面上で修正して閉じていないはずなのだが…⇒ブラウザで開いているPDFファイルは修正後のものだ.LibreOffice上でPDFファイルを直接編集していたのだろうか?確かにそういうことのようだ.これは同期を取っておかないとかなりまずいことになる.考えられるのは,LibreWriterの編集対象ファイルがPDFをエクスポートした時点でPDFに変わってしまっているという可能性だ.これはエクスポートの趣旨からしてかなりおかしな動作だが…

Truncated treeに貼り込んだ画像もPDFにしか入っていない.つまり,ODTファイルのつもりが,PDFファイルを編集していたということのようだ.ODTの更新日時は2022/01/20 22:33でPDFの方は2022/01/21 10:08だ.PDFファイルとODTファイルで画面出力に異同がないのなら,PDFを直接編集するというのでも特に問題はないように思われる.それができるのなら,それでよいのではないか?PDFをダブルクリックするとエッジが立ち上がってくるというのもあまり,うれしくない.エッジではボックスの中の番号で検索ができない.それができるのはAcrobat Readerだけだ.

フロントエンド機にはAcrobat Readerがまだインストールされていない.ダウンロードを始めたが,povo1.0の20GBをすでに使い切っているのでかなり遅い.220円を投下すれば,丸一日快速で使えるのだが,ついこの間それもやってしまった.ちょこちょこ使っているとチリも積もれば山となってしまうが,10万円のコロナ支援金を当てにして,投下することにしよう.300MBくらいなので,通常の速度が出ればあっという間に終わる.それにしても,相当冷え込んできている.-5℃まで下がる予定だという.灯油もあと一缶しかない.3缶で一冬過ごすつもりだったが,到底間に合わない…

インストールは完了したが,Cドライブの容量が逼迫している.⇒いや,完了していない.「失敗しました」と表示されている.一時ファイルを削除して1.18GBの空き領域を確保した.もう一度やってみよう.⇒また失敗だ.今度はクロームでやってみよう.⇒同じだ.デスクトップ上のファイルをすべてSDに移動したが,ほとんど変わらない.ほとんどこれ以上どうしようもないという状況だ.Libreの作業は開発機に移してもよいのではないか?開発機上でブラウザを開いてチェックでもよいような気はする.サブノートはメールの受信とネットアクセスに限定した方がよい.Libreは開発機にもインストールしてある.⇒ノートを再起動してインストールに成功した.

Acrobat Readerのインストールには2GBのメモリが必要とあるが,搭載RAM 4GBのうち,3.9GBくらいまで使用状態になっていた.再起動して,これが約2.0GBまで減少した.2GBには少し不足していたはずだが,何とかインストールできた.まぁ,これでしばらく使ってみることにしよう.Acrobat ReaderをPDFのデフォルトアプリに設定した.Cドライブの現在の空き容量は1.26GB.メモリは1.8GB使用可能となっている.ゼルコバの木で出力したPDFファイルを開いて,ボックス内の番号を選択し,コピー・ペーストできるが,不完全な動作だ.365589という数をコピーしても,トレーには6558しか入っていない.つまり,先頭と末尾の数字が消えてしまう.残念だ.それでも,番号で検索できるのはいまのところAcrobat Readerしかない.それ以外のソフトは数字1文字の検索しかできないという貧弱な仕上がりになっている.

最新のマニュアル原稿はPDFになってしまっているが,これをODTファイルに戻すことができない.ODGファイルに変換することはできる.ODGというのはLibreDrawのファイルで,画像ファイルだ.これも少し具合が悪いような気がする.LibreWriterにもページという概念はあるが,テキスト全体は1個の流動体として扱われている.PDFやODGでは1行分の画像オブジェクトとしてしか扱われていない.これではどうにもならない.ということはODTとして編集した最終ファイルからもう一度やり直すしかないということになる.それしかないのだから,やるしかないだろう.修正の入っている箇所を総点検しながら,復元しなくてはならない.修正箇所は相当あるのではないかと思う.⇒終わった.

「枝番号数列」というのはこの検定では特に重要な概念だが,Truncated treeの出力を見ると,この概念を把握し易いのではないかと思う.その意味では,刈り込み木(血統軸線図)を描画できるようにしておきたい.ちょっと横道に逸れるが片付けておくことにする.まず,最初にCollatz Tree Generatorの方を修正しなくてはならない.この際なので,頻発するエラーだけでも止めておくことにしよう.

▲コラッツ正則木で出力したCollatzTree.csvをインポートしようとして,TREEVIEW:sendUpdateDataエラーが出る.送付されたテキストの中身が空というか,タブ文字が並んでいるだけだ.いや,そもそもCollatzTree.csvの中身が悪い.以下のような行が並んでいるだけだ.

System.Windows.Forms.TextBox, Text:

どうしたのだろう?これ以外の3機能ではCSVファイフは出力もされない.かなりおかしなことになっている…コラッツ正則木では書き込みは実行されているが,Branchlistは空だ.どうも訳が分からない.D=3, H=2でテストすると有効ノードは10個で,書き出された行も10だが,バッファは空なのに余分な行が書き込まれている.そもそもBranchListというのはタブBにあるテキストボックスだ.それをタブAで使っているということ自体誤りではないか?確か前にBranchListを廃止するという修正をやった記憶がある…原因はわかった.元々はBranchListという名前のStringが存在しているのだが,それを捨ててしまったため,直接タブBのBranchListを参照しているのだ.⇒対処した.危ないところだった…

Verifyでも系図データを出力できるようにすると,かなりおもしろいのだが…ちょっと厄介なところもあるので,ここではパスしておこう.将来プレーンな隣接リストから直接系図が出せるようになれば,対応できる可能性はある.GetTheSequenceではフラグ操作を誤っている.つまり,Export plain CSV fileが完全に無視されている.⇒いや,これが仕様なのではないか?Export Zelkova Tree CSVはB面でも有効だが,B面ではプレーンなCSV出力は想定されていないのではないか?いや,コード的には処理は入っている.考えていないとすれば,Verifyで動作することは想定されていないように思われる.

Verify中は無動作になるように修正したが,まだおかしい.CollatzChain.csvにゼルコバフォーマットで出力されている.いや,この関数ExportCsvRecordはゼルコバの木専用だ.ExportZelkovaCsvにリネームしておいた.B面の出力がファイルに保存されないのは,B面では出力を切り詰めるということをしていないためだろう.つまり,画面からコポー・ペーストができるという考え方だ.それでよいのではないかと思う.⇒ゼルコバ形式CSVを調べることにしよう.

CollatzChain.csvを読み込んで,上記TREEVIEW:sendUpdateDataエラーが発生する.CollatzChain.csvの内容は一見したところ正しいように見える.いや,少なくともヘッダ行が欠けているようだ.⇒やり直ししたところ,ヘッダ部も入るようになったが,エラーが発生する.CheckCommitChargeでエラーが起きている.メモリの残量率が0.0640047938で,0.1を切った場合にこのエラーが発生する.メモリは16GBで有効メモリ15.7GBのうち,12.0GBが使用中だ…

コミットチャージ制限値:  11104653
コミットチャージ合計値:  10393902
コミットチャージ残量:    710751
コミットチャージ残量/制限値:60281294899240142671331170620038688586028416878923926284474911346922653283646557054320683106761178397802496.000000

最後の値はかなりおかしな数字になっている.⇒UlongをIntに変換みたいなおかしなことをやっている.PERFORMANCE_INFORMATIONという構造体でシステムから値を取り出している.この情報はWin32時代のものであるような気もするので,無視してみよう.⇒問題なく描画できた.安全のためにこのようなことをやっているのだろうが,ぎりぎりまで使い込んでもよいのではないかと思う.メモリ不足が発生すればいずれシステムエラーがスローされるはずだ.

CheckCommitChargeの検査は,①カード合併,②インポート,③完全木テストの3箇所で,おそらく過去にメモリ不足状態で悩まされたことが理由ではないかと思う.現在のメモリ管理はその頃とはかなり変わっているはずなので,無視しても多分問題ないのではないかと思う.スタックで1GB使っているのが影響している可能性はあるが…

▲画面設定でチャンネル数をゼロに設定して例外が発生した.⇒一般のサンプルではエラーになっていないが,33点のチェーンではGENEBOX:findSameGeneで例外が起きる.GENELIST:AddSameChainで世代枠が空になっている.このサンプルをCollatzChain 32769-32.zelで保存して後日デバッグすることにする.

GetTheNumberで生成したCSVもインポート時にエラーになる.CSVファイル自体は問題なさそうに見える.エラーが起きたのはリリース版で,開発環境では問題なく読めている.Truncated treeのCSVも問題なく読み込めたが,サンプルには問題がある.Truncated treeになっていない.枝数は3だが,高さが32あるはずなのに,5しかない.しかも軸線図になっていない.これはおそらく,論理変更して再帰呼び出しを使うようにしたことに伴う不具合と思われる.これはCollatz Tree Generator側で調べるしかない.⇒できた!⇒いや,できていない.3つのグループに分かれてしまっている.

image

隣接リストの2行分の情報が欠落している.画面上には表示されている,ゼルコバの木で脱落したものと思われる.理由は分からない.何かその項にだけ特別な理由があるようには思われないのだが…CSVファイルで欠落が生じている.本人は存在しているが,親が不在だ.親不在ノードは2つ,2339と6563だ.2339の親は3509,6563の親は9845.書き込みは実行されているのだが,自分自身が自分の親になっているようだ.番号の割り付けが悪いのだろうか?しかし,ここでだけそのようなことが起こるという理由が分からない.

マニュアル編集はそれなりに捗ってはいる…

予備機の検証テストは2^28で現在91.4%まで進んでいる.2^32を仕掛けている開発機の進捗は10.6%だ.現在,1日+15時間なのでこの10倍ということは10日+150時間となるので,2週間,つまり半月掛かる見込みだ.どちらも堅調に走っているので,まぁ,これでいいのではないかと思う.⇒予備機で走っていた検証テストが完了している.1日+19時間27分だから,2^28で43時間半掛かっている.検証済み最大奇数は1006634081になった.サイトを更新しておこう.遊ばせておくのもなんだから,開発機の続きを仕掛けておこう.開発機はまだ10日以上掛かるので,予備機も2^30まで増量してみる.これでもまだ,予備機の方が先に上がってしまうかもしれない.⇒いや,とんでもない.2時間掛かってまだ1%も終わっていない…

マニュアルの執筆/編集に掛かっているところだが,書いた分だけ書くことが増えてしまうので完成までにはまだかなり掛かりそうだ.大体パターンも出揃ってきたので,あとは淡々と進めるだけというところには来ているが…⇒まだ仕上がっていないが,PDFに出力してみた.Good!これなら問題ない.LibreWriterの編集画面と寸分変わらないものが表示されている.これでなくてはならない.

HTMLでは表示にいろいろと難点があり,悩んでいたのがきれいに吹っ飛んだ.数式もきちんと表示されている.PDFならダウンロードしてオフラインで読むこともできる.一石二鳥だ.配布パッケージに組み込むこともできる.LibreOfficeはどうもHTMLが苦手なようだ.HTMLはルールもやかましく,ブラウザごとに動作が異なることもあるので,対応しきれていないのだろう.おそらく,LibreOfficeのファイル形式とPDF形式は相性がいいのではないかと思う.

あとはともかく書き上げるだけだ.⇒ゼルコバの木のリリース版を予備機にインストールしているが,ここではCSVのインポートでおびただしい数の障害ファイルが生成されている.同じ版のはずなのだが,開発環境ではそれが起こらない.なぜだろう?いや,何か勘違いしていた.インポートでは障害は発生していない.画面設定を操作したときに起きていたのだろうか?幹だけのコラッツ木の画像を取ろうとしているのだが…いや,それどころではない.Truncated treeの出力がおかしい.

#15を対象にTruncated treeをCSV出力して,ゼルコバの木で読み込んだところ高さ3の木が出力された.本来なら,(15, 23, 35, 53, 5, 1)なのだから,高さ5の木にならなくてはならないところだ.⇒画面出力は間違ってはいない.CSVファイルが悪いのだろうか?CSVファイルをダブルクリックしたらExcelが立ち上がってきた.このマシン(VAIO2)にはOfficeがプレインストールされているのだろうか?Microsoft Officeが使えて悪いということもないのだが…確かにMicrosoft Office 2013がインストールされているようだ.このマシンにはまだLibreOfficeをインストールしていないので,ともかく使うしかないだろう.

1→5→53→まではよいが,53の子どもの{35, 141, 565}が3の子どもになってしまっている.また,35の子どもの{23, 93, 373}が13の子どもになっている.53の下には{15, 61, 245}が配置されているが,これは23の子どもだ.CSVを見てみよう.確かに,CSVが間違っているようだ.#35の親が#3になっている.おそらくこれは,隣接リストの出力順が変化しているためだろう.以前の論理ではルートから一段目を水平に処理してから,次段に移るようなフローになっていたはずだが,現行は一番右端の下降パスを行きがかり順に垂直下降しながら出力するようになっているが,カード参照番号の振り方が従来通りになっているため,合わなくなっているのだろう.

Collatz Tree GeneratorのCSV出力は問題ないように見えるが,なぜだろう?正則コラッツ木の出力も再帰関数を使う形に変更されているはずなのだが…他の処理の出力を見てみよう.Get the sequenceとGet the numberはファイル名は違うが,どちらも1をルートとしているため内容はまったく同じものになっている.Get the sequenceは画面上では最後に1が出力されるようになっているが,あえてそれを逆転させて出力している.むしろ,素直に転倒木として出力してもよかったのではないか?

いずれにせよ,刈り込み木出力が間違っていることは間違いない.正則コラッツ木が正しく出力できるのなら,できてもよさそうな気はするが…確かに,正則コラッツ木と刈り込み木ないしナンバー木では上下関係が逆転している.これは後で見ることにして,先に刈り込み木をゼルコバの木上で編集して画像だけ取ってしまおう.刈り込み木というのは幹だけの直線図式に直結する葉を付け加えたものなので,ストレートに表示するためには,血統軸線図を使う必要があるが,動作しない.エラーになってしまう.この図はどうしても必要なので,ゼルコバの木をデバッグするしかない.どうもいろいろと厄介なことになってきた.ともかく,この機会にできる限り並行してデバッグするという方針なので,行きがかり上途中下車になってしまうのはやむを得ない.まぁ,この辺りの図面がなくてもまだ書ける部分はあるので,そちらを急ぐことにしよう.⇒仮の画像を作って貼り込んでおいた.

Collatz Tree Generatorの最新版では,所要時間に日数を表示

Collatz Tree Generatorの最新版では,所要時間が24時間を超えた場合には日数を表示するようにした.これで原理的にはいくらでも長時間のテストができることになったので,予備機と開発機にそれぞれかなり規模の大きなテストを仕掛けてみた.予備機は15時間経過して32%,開発機の方は同じく15時間経過で4.2%だ.予備機のテストはあと2日くらいで終わるだろう.開発機には2^32という検証テストを仕掛けている.これが完了するのにはあと2週間くらい掛かるという見通しだ.それでも,2^32までのテストを通すというのは,「当面の目標」だったので,それが単独で可能ということになる.

いや,テスト開始時の奇数番号は1よりもかなり大きいものになっているから,実際には2^32をかなり超えたものになるはずだ.いまの目標値は5301601377だが,電卓で調べれば2^cの値を取れるだろう.mmm…32.4という数字が出た.大雑把には2^32のオーダーということになる.ちなみに,2^32=4,294,967,296だ.テスト範囲(検査回数)を2^cで設定するようにしたのは,大きな数字を打ち込むのが面倒と思ったからだが,値を設定するようにした方がよかったのかも…