Boost C++ Libraries をインストールした

どうもいまいち,ELSIEの動作が分からない.オプション4のRead a matrix data fileでサンプルを読み込ませた場合でも,

p0:EchoingMethod: ._NORMAL_ (12,12,12)
orbits=FIXED POINTS

p1:EchoingMethod: ._NORMAL_ (12,12,12)
orbits=FIXED POINTS

O0: 6 8 1 9 3 12 5 2 4 10 11 7
O1: 5 12 1 10 3 11 7 6 9 8 2 4

Matrices are isomorphic: Required time=722449:06:01, N=12, M=48, axes=0, crack=0
Psi0=(4.3189128850862000E+13:43189128850862)
Psi1=(4.3189128850862000E+13:43189128850862)
#001 The experiment complete! expo=2, X=4, Y=4, type=NORMAL

のようなダンプが出る.2つの行列を扱っているようだが,p0, p1はどう違うのだろう?⇒2つ目の行列はShuffleで生成されたものだ.おそらく,これは行と列をランダムに入れ替えることに相当する操作と思われる.従って,2つの行列は当然同型と判定されなくてはならない.

方式はよく分からないが,ともかく与えられた行列からある種の不変量を計算し,それを比較することによって同型か否かを判定しているものと見られる.この不変量は巨大数となるので,hugenumというデータ型を自作して対応しているというのが現状のようだ.hugenumというのは倍倍精度実数と長長整数を組み合わせたもので,誤差が発生するのは避けられない.FIXED POINTS(固定小数点数)というのはおそらく,誤差が発生していないということを意味するのだろう.

この実装では「Echoing Method」というアルゴリズムが実装され,A1という記号が振られているが,A2は存在しない.Mirroring Methodというのは,MATRIXINVARIANTが定義されていないときに実行されるアルゴリズムと見られるので,不変量の計算を行わない別法と考えられるが,現状ではEchoing Methodに固定されているものと見られる.

ただし,Mirroring Methodの実装は残っていて,切り替えは可能な状態になっている.MATRIXINVARIANTをオフにすると,上記のプサイ数の計算は実行されないが結果は同じになるので,一応動いているものと見られる.⇒いや,プサイ数の計算は実行されているようだ.ダンプに含まれないだけではないか?2つの手法の相違点はよくわからないが,それほど大きく異なるものではないような気がする.

フェーズは以下の5段階に区分されている.{ INITIALIZE, KUEXPERIMENT, NUTSCRACKER, WUPINNOCENT, FASTREACTOR } 確かにこの辺りの用語には聞き覚えがある.どんな意味だったのかはよく覚えていないが… いずれにせよ,それなりに動作していると評価してよいのではないだろうか?このアプリのオプション6つのうち,3つはグラフに関するものだ.グラフは隣接行列として過不足なく表現できるから,グラフ同型問題を行列同型問題として解くというのは当然のアイディアだろう.我々は群論の問題に行列同型を適用しようと思っているのだが,群の乗積表は(多少特殊な)正則行列にほかならないのだから,解けて当然と言えるはずだ.

このアルゴリズムは十分な有用性を持っていると考えられるのでなんとか復活させたいものだ.どうすればよいか?自前のhugnumを使っている限り,限界に直面することは間違いないので,これをBigIntegerと置き換える必要がある.BigIntegerが使えるのは今のところVBとPythonだけだ.Pythonはどちらかというとあまり使いたくないので,そうなると,VBに移植するか,C++にBigIntを導入するかの2択ということになる.どちらが使い勝手がよいか?拡張性はどうか?BigIntはネット上に公開されているソースもあり,GitHubには複数のプロジェクトがあるので,導入はいつでも可能と言えるのだが…

現時点ではソースコードは111KBある.行数で3500行くらいだ.これをそっくりVBで書き直すというのは現実的に可能だろうか?不可能ではないとしても,相当なコストは覚悟しなくてはならない.それより,C++にBigIntを導入する方がましであるような気がするのだが… 現時点でのhugenumの廃止は不可避であり,不可欠であると思われる.

C#に移行するという選択肢はあるだろうか?C#はBigIntegerを持っていたはずだ.C#はVB.NETとも互換性があったのではないだろうか?C#でC++のネイティブコードが走るかどうか?が問題だ.それができるのであればC#に移行するというのはベストチョイスになる可能性はある.

もう一つの選択肢として,多倍長整数のライブラリをC++に組み込むという路がある.この種のライブラリは各種あり,一長一短と思われるが,Boost Multi Precision Library というのを見つけた.これはドキュメントが整備されており,かなり信頼度は高そうに見える.日本発のプロジェクトで高橋晶という人物がリーダーだ.これは買いではないだろうか?最新版は1.83.0 2023/08/11 リリースなのでプロジェクトは現在も活性状態にある.ダウンロードしてみた.

zipファイルを解凍して中に入っている bootstrap.bat を実行すると b2.exe が作られる.これをダブルクリックで実行したところ,インストールは実行されたようだが,VSから認識される状態にはなっていない.改め> .\b2.exe install -j2 –prefix=C:\Program Files \boost \boost_1_82_0 を実行してみたが,途中で止まってしまった.

don’t know how to make <e>Files\boost\boost_1_82_0
…found 1 target…
…can’t find 1 target…

PowerShellを使ってみる.結果は同じだ.管理者モードで実行してみる.⇒やはり,ダメだ.開発用のDドライブにインストールしてみよう.⇒今度はうまく行った.前回はファイルコピー時に出ていたコードが処理できないというエラーも解消し,完全にクリーンなインストールができた.あとは,これを参照できるようにするだけだ.問題はこれまでのコードと相性が合うかどうか?このプログラムは多分64ビット環境で動くようにインストールされていると思われるが,我々のプログラムのプラットフォームは基本的に32ビットシステムだ.開発環境が64ビットであっても32ビットコードを生成できないということにはならないが…

サイトにあったサンプルコードで動作確認しようとしてみたが,include パスが通らない…$(VC_IncludePath);$(WindowsSDK_IncludePath); の後に追加できるはずなのだが,認識されない.

コメントを残す

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

CAPTCHA