Bayes/GP GUI 技術ドキュメント

プログラムの動作

bayes_gp_gui_shimizu.py は、ベイズ最適化とガウス過程回帰を組み合わせた実験計画・最適化プロセスをグラフィカルユーザーインターフェース (GUI) で支援するPythonプログラムです。ユーザーはデータファイル(ExcelまたはCSV)を読み込み、ベイズ最適化のさまざまなパラメータ(プローブ数、探索方法、取得関数、乱数シードなど)を設定し、最適化計算を実行できます。

主な機能は以下の通りです。

  1. データ入力: Excel (.xlsx) または CSV (.csv) 形式のデータファイルを読み込みます。

  2. パラメータ設定: ベイズ最適化とガウス過程回帰に必要な各種パラメータをGUI上で直感的に設定できます。

    • 探索グリッドのサイズ (nx_2D, ny_2D)

    • 最大プローブ数 (max_num_probes)

    • 各イテレーションでの探索数 (num_search_each)

    • 乱数ガウス基底の数 (num_rand_basis)

    • ハイパーパラメータ更新の間隔 (interval)

    • 取得関数 (score_mode): Expected Improvement (EI), Probability of Improvement (PI), Thompson Sampling (TS) から選択。

    • 乱数シード (random_seed)

    • テストデータの割合 (fraction_test)

    • 入力データの標準化 (standardize)

  3. 計算実行: 設定したパラメータに基づいて、内部の計算エンジン (bayes_gp_plain_shimizu.py) を呼び出し、ベイズ最適化とガウス過程回帰を実行します。

  4. 結果出力: 予測結果をExcelファイルに、計算過程やモデルの状態をNumPyの .npz 形式で保存します。

  5. グラフ設定: グラフのサイズやフォントサイズに関する設定が可能です。

  6. 多言語対応: 英語と日本語に対応しており、GUIの表示言語を切り替えることができます。

  7. 設定の保存: ユーザーが設定したパラメータは、次回起動時も利用できるよう自動的に設定ファイルに保存されます。

このプログラムは、実験やシミュレーションにおいて、効率的に最適解を見つけるための次なる試行点を提案する「アクイジション」プロセスを視覚的に管理し、研究開発の効率化に貢献します。

原理

本プログラムは、ベイズ最適化の枠組みで、ガウス過程 (Gaussian Process, GP) を用いて未知の目的関数をモデル化し、取得関数 (Acquisition Function) に基づいて次の最適な探索点を決定します。

  1. ガウス過程回帰 (Gaussian Process Regression): ガウス過程は、観測されたデータから、未知の目的関数 \(f(x)\) の確率分布(事後分布)を推定するためのノンパラメトリックな手法です。GPは関数のあらゆる点において、正規分布に従う確率変数であると仮定します。観測データに基づいてこの正規分布の平均と分散を更新し、関数形状とその不確実性を表現します。

  2. ベイズ最適化 (Bayesian Optimization): ベイズ最適化は、高価な評価を必要とする目的関数(例: 実験やシミュレーション)のグローバル最適値を効率的に探索するための手法です。以下の2つの主要なコンポーネントで構成されます。

    • サロゲートモデル (Surrogate Model): 観測されたデータ点から目的関数の事後分布を推定します。本プログラムではガウス過程がこの役割を担います。

    • 取得関数 (Acquisition Function): サロゲートモデルの事後分布を利用して、次に評価すべき最も有望な点を決定します。これにより、探索(未知の領域を探索)と活用(既知の最適解周辺を詳細に探索)のバランスを取ります。

  3. 取得関数 (score_mode): 本プログラムでは、以下の3種類の取得関数が利用可能です。

    • Expected Improvement (EI): 現在の最適値 \(f(x^+)\) を超える改善が期待される度合いを最大化する点を選択します。最も一般的に使用される取得関数の一つです。 $\(EI(x) = E[\max(0, f(x) - f(x^+))]\)\( ここで \)f(x)\( はガウス過程によってモデル化された目的関数、\)f(x^+)$ は現在の既知の最大値です。

    • Probability of Improvement (PI): 現在の最適値 \(f(x^+)\) を超える改善が得られる確率を最大化する点を選択します。 $\(PI(x) = P(f(x) > f(x^+))\)$

    • Thompson Sampling (TS): ガウス過程の事後分布から関数をサンプリングし、そのサンプリングされた関数の最大値を与える点を次の探索点とします。これは探索と活用のバランスを自然に取ることができる手法です。

これらの原理に基づいて、bayes_gp_gui_shimizu.py は、ユーザーが指定した入力データと設定を用いて、最適な実験条件やパラメータの探索を効率的に行います。

必要な非標準ライブラリとインストール方法

本プログラムを実行するには、以下の非標準ライブラリが必要です。

  • openpyxl

  • numpy

  • tklib (カスタムライブラリ)

  • bayes_gp_plain_shimizu (同プロジェクト内のカスタムモジュール)

openpyxlnumpypip コマンドでインストールできます。

pip install openpyxl numpy

tklibbayes_gp_plain_shimizu は、このプログラムが属するプロジェクト内で提供されるカスタムライブラリおよびモジュールです。これらは pip を使ってインストールすることはできません。

  • tklib: プログラムは tklib ライブラリのパスを環境変数 tklibPath から、またはスクリプトの相対パスから解決しようとします。通常、bayes_gp_gui_shimizu.py と同じ親ディレクトリまたはその近くに tklib/python ディレクトリが存在する必要があります。この構造はプロジェクトの構成に依存します。

  • bayes_gp_plain_shimizu: このモジュールは、bayes_gp_gui_shimizu.py と同じディレクトリに配置されているか、Pythonの検索パス (PYTHONPATH) に含まれている必要があります。

これらのカスタムライブラリ/モジュールが正しく配置されていない場合、プログラムは ModuleNotFoundError を発生させます。

必要な入力ファイル

本プログラムは以下の種類の入力ファイルを期待します。

  1. データファイル:

    • 形式: Microsoft Excel ファイル (.xlsx) またはカンマ区切り値 (.csv) ファイル。

    • 内容: 最適化の対象となる実験データやシミュレーション結果。具体的な列の形式やデータ構造は、内部の計算エンジンである bayes_gp_plain_shimizu が処理する仕様に従いますが、GUI上ではファイルパスを選択するだけで利用できます。

  2. 設定ファイル (.ini):

    • 形式: INI 形式のテキストファイル。

    • ファイル名: bayes_gp_gui_shimizu.ini (スクリプト名に基づきます)。

    • 内容: GUIのウィンドウサイズ、最後に開いたディレクトリ、各種GUIパラメータのデフォルト値、エディタのパスなどが保存されます。このファイルは、プログラムが初回起動時または存在しない場合に自動的に生成され、GUIの終了時に自動的に更新・保存されます。ユーザーが直接編集することも可能ですが、GUIの「Setup」ダイアログを通じて設定変更するのが推奨されます。

  3. リソースファイル (.resource):

    • 形式: テキストファイル。

    • ファイル名: resource_en.resourceresource_ja.resource など(言語設定に依存)。

    • 内容: GUIの表示テキスト(ラベル、ボタンの文言など)の多言語対応のための翻訳辞書が格納されています。このファイルは、プログラムに付属するリソースディレクトリ内に配置されている必要があります。

生成される出力ファイル

本プログラムは、ベイズ最適化の実行結果として以下のファイルを生成します。

  1. 予測結果ファイル:

    • ファイル名: 入力ファイル名に基づいて自動生成されます。 例: input_data.csv を入力した場合、input_data-predict1.xlsx のような形式になります。 {入力ファイル名から拡張子を除いたもの}-predict{i}.xlsx{i} は連番やバージョンを表すプレースホルダ)。

    • 形式: Microsoft Excel ファイル (.xlsx)。

    • 内容: ガウス過程モデルによる予測結果、推奨される次の探索点、または最適化の過程における各点の目的関数の予測値とその不確実性などのデータが保存されます。

  2. 結果保存ファイル:

    • ファイル名: 入力ファイル名に基づいて自動生成されます。 例: input_data.csv を入力した場合、input_data-save1.npz のような形式になります。 {入力ファイル名から拡張子を除いたもの}-save{i}.npz{i} は連番やバージョンを表すプレースホルダ)。

    • 形式: NumPy の .npz 形式(複数配列を圧縮して保存するバイナリ形式)。

    • 内容: 計算エンジンが内部で保持する詳細な情報(例: ガウス過程モデルのハイパーパラメータ、探索履歴、観測点、予測のグリッドデータなど)が保存されます。これは、後続の解析やモデルの再利用に役立ちます。

  3. 設定ファイル (.ini):

    • ファイル名: bayes_gp_gui_shimizu.ini

    • 形式: INI 形式のテキストファイル。

    • 内容: プログラムの終了時に、現在のGUIの状態、設定ダイアログで変更された各種パラメータ、最後にアクセスしたディレクトリなどの情報が更新・保存されます。

  4. パラメータファイル (.prm) (任意):

    • ファイル名: 例えば、input_data.csv を入力した場合に、ユーザーがパラメータファイルパスとして input_data.prm を指定すると、このファイルが生成されます。

    • 形式: テキストファイル(INI形式に似たカスタム形式)。

    • 内容: GUIで設定された計算エンジン (bayes_gp_plain_shimizu) 向けのすべてのパラメータが保存されます。これは、同じ設定でコマンドライン版の bayes_gp_plain_shimizu.py を実行する場合や、設定をバージョン管理する場合に有用です。

コマンドラインでの使用例 (Usage)

bayes_gp_gui_shimizu.py はGUIアプリケーションとして設計されているため、通常は引数なしで実行されます。コマンドライン引数はGUIの起動パラメータとして処理されることが想定されていますが、本プログラムのGUIロジックでは、直接のファイルパス引数はデフォルトでコメントアウトされており、主に設定ファイル (.ini) やGUI上の操作を通じて入力が提供されます。

基本的な実行コマンドは以下の通りです。

python bayes_gp_gui_shimizu.py

コマンドラインでの具体的な使用例

bayes_gp_gui_shimizu.py は、GUIアプリケーションとして起動することを主な目的としています。そのため、コマンドライン引数を直接与えるよりも、GUIを介して操作することが一般的です。

引数なしでGUIを起動する例:

python bayes_gp_gui_shimizu.py

実行結果の説明: 上記コマンドを実行すると、以下のような動作が発生します。

  1. コンソール出力: プログラムの起動メッセージ、tklib のパス追加情報、設定ファイルの読み込み状況などが標準出力(コンソール)に表示されます。

    Add [/path/to/tklib/python] to PYTHONPATH by sys.path.append()
    
    ################################################
    # bayes_gp_gui_shimizu.py ver 1.3.1
    #       Modified time: YYYY/M/D H:M:S
    ################################################
    Initialize parameters
    Read configration from [bayes_gp_gui_shimizu.ini]
    Update parameters by command-line arguments
    

    (出力されるパスや時刻は実行環境によって異なります。)

  2. GUIウィンドウの表示: 「Bayes/GP GUI」というタイトルを持つメインウィンドウが表示されます。このウィンドウには、以下のタブが含まれます。

    • Analyze: 入力ファイルパス、出力ファイルパス、ベイズ最適化の主要なパラメータ設定、および「analyze」「validate」などの実行ボタンが配置されています。

    • Graph: グラフのサイズやフォントに関する設定を行うことができます。

    • Development: 開発者向けのテスト機能。

    • Editor test: エディタ機能のテスト。

    • Widget test1, Widget test2, Widget test3: さまざまなTkinterウィジェットの動作確認用タブ。

  3. 操作: ユーザーはGUI上で入力データファイルを指定し、パラメータを設定した後、「analyze」ボタンをクリックしてベイズ最適化を実行できます。実行の進捗や結果に関するメッセージは、GUI下部のメッセージボックスに表示されます。

注意点: プログラムの内部で getarg 関数がコメントアウトされているため、現在のコードではコマンドラインから直接入力ファイルパスなどを指定してもGUIが自動的に読み込むことはありません。すべての操作はGUI上で行う必要があります。