トップページに戻る

下記の配布プログラムは古くなっております。
最新版は 材料計算科学・データ解析チュートリアルコース 2022年度 をご覧ください。
こちらのページも、新しい公開プログラムページを準備中です。


PHYSBOを使った実験・計算のためのベイズ最適化pythonプログラム

CLI (Command line interface) 版

公開対象: 一般

 拠点・研究室メンバー限定で、GUIインターフェースも使えます。 


本プログラム及びベイズ最適化のオンライン講義を行いました

日時: 2022/12/6(火) 13:00~14:10

講義資料: 70-03-bayes_gp.pdf (2022/12/6 16:50更新)
       bayes_gp_plain.zip (2022/12/5 10:45更新)


プログラム: bayes_gp_plain.py (ソースコード・実行結果)

Anacondaの標準モジュール + PHYSBO で動くベイズ最適化プログラムです。

必要ファイル:
・ 必要なモジュールは本ページ最後をご覧ください


推奨動作環境: インストールの仕方は本ページ最後をご覧ください

【注意】 Windows版の最新のAnaconda3/python3.9では、PHYSBOのインストールに Visual C Tookitが必要です。
さらに、numpyでエラーが起こります。
その場合、python3.6環境を作って実行してください


使用方法

  1. 準備:
    データファイルの入っている bayes_gp_plain.zip をダウンロードし、適当なディレクトリィに展開します
     
  2. 実行環境:
     python3.6環境が必要な場合、環境を変更してください。
      例: conda activate py36
     
  3. ベイズ最適化実行と次回推薦条件(記述子)の選択:
    python bayes_gp_plain.py を実行すると、data_simple.xlsx を読み込み、ベイズ最適化を実行し、下のようなグラフを表示します

    このグラフで、に対応するindexが、次回の推奨実験・計算条件の番号です。
    その他の候補を探す場合、グラフ中でマウスをクリックすると、最も近い条件が以下のようにコンソールに表示されます。
      clicked at idx = 6: descriptors = [ 0.2 -1. ] given target value = nan
        predicted target value = -1.6781033080848489 +- 0.04800849464821686
     
  4. プログラムの動作:
    デフォルトでは、本プログラムは目的関数を最大化する条件を探索します。
    また、入力ファイルの1列目が目的関数、2列目以降が記述子として選ばれます。
    空文字でない目的関数を持つデータを学習データとして使ってガウス過程回帰を行い、入力ファイルにある全記述子に対して予測平均値と標準偏差を計算し、上記グラフのようにプロットします
     
  5. 最大化・最小化・数値最適化の制御 (入力ファイルのヘッダー制御文字):
    入力ファイルのヘッダー文字列の先頭に以下の文字列を加えると、条件をコントロールできます。
     =-0.5:  目的関数が -0.5に等しくなる記述子を探索します。
           【注意】 目的関数は -0.5からの自乗偏差和 に変換されます。自乗偏差和は正規分布に従わないため、ガウス過程になりません。
                本プログラムでこのモードで計算した結果については正しい理論的根拠がないことに注意してください。
     min:   目的関数を最小化します。目的関数には -1.0 が掛けられますので、出力グラフの上下は入力データとは逆転します
     max:   初期値。目的関数を最大化します。
     -          先頭文字が '-' の場合、目的関数からも記述子からも除外されます
     
    目的関数を最大化する例: python bayes_gp_plain.py data_simple.xlsx
      ヘッダーに上記の制御文字がないため、1列目を目的関数、2~3列目を記述子とし、最大化を実行る
    目的関数を最小化する例: python bayes_gp_plain.py data_target_min.xlsx
      4列目のヘッダーの先頭に '-' があるため、記述子としては2,3列目だけが使われる
    目的関数を-0.5に最適化する例: python bayes_gp_plain.py data_target_value.xlsx
      4列目のヘッダーの先頭に '-' があるため、記述子としては2,3列目だけが使われる
     
  6. 次回候補を含めたデータの更新:
    2により次回の推薦条件(記述子)を決めたら、その条件で実験あるいは計算を行い、その結果を入力ファイルの目的関数に記入し、2を繰り返します。

プログラムの起動時オプション

使い方とオプション: python bayes_gp_plain.py infile max_num_probes num_rand_basis score_mode interval
  max_num_probes: Use a number to reach convergence
  num_rand_basis: Use a large number so as to reproduce training data
  score_mode : [EI|PI|TS]
            EI: Expected Improvement
            PI: Probability of Improvement
            TS: Thompson Sampling
    interval : # of cycle to update hyper parameters

実行例: python bayes_gp_plain.py data_simple.xlsx 1 200 EI
 200個のランダムガウス基底を用いて計算し、獲得関数としてEI (Expected Improvement) を用いる。


Tips


インストール方法

condaあるいはpipのインストールで "OpenSSLエラー" が起こった場合、
> conda/pip install openssl
でOpenSSL モジュールをインストールしてください。
参考: 【Anaconda】ライブラリのインストール時にOpenSSLに関するエラーが発生してしまう場合の対処法について - 天下一反省会!
  1. Anacondaの仮想環境作成
     python3.6の環境を作成します
     > conda create -n py36 python=3.6
     
  2. py36 を有効化します
      > conda activate py36
     
  3. pysboをインストールします
      > pip install physbo
    以下のエラーが出たら、Microsoft C++ Build Toolsをインストールする必要があります。

    ..(cut)...  physbo\misc\_src\logsumexp.pyx tree = Parsing.p_module(s, pxd, full_module_name) error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 
      ---------------------------------------- 
      ERROR: Failed building wheel for physbo 
    Failed to build physbo 
    ERROR: Could not build wheels for physbo which use PEP 517 and cannot be installed directly

    以下の参考: Microsoft Visual C++ 14.0 or greater is required.」が出た場合の対処方法 | ジコログ

    i )  ここ から vs_buildtools....exe をダウンロードし、インストール。この際、「C++によるデスクトップ開発」をチェックして、インストールしてください
    ii) インストールが終わったら、Windowsのスタートメニューから "Visual Studio XXXX" の "Developer Command Prompt for VS XXX" を起動し、
      > pip install physbo
    でインストールしてください (上記コマンドプロンプト以外でも、Build toolsへのPATHが通っている環境ならOK)。
     

  4. matplotlibをインストールします
      > conda install matplotlib
      
  5. pandasをインストールします
      > conda install pandas
     
  6. openpyxlをインストールします
      > conda install openpyxl
     

tklib / bayes_gp_gui.py を使う場合

  1. chardetをインストールします
      > conda install chardet

 tklibのインストール

  1. 拠点・研究室の共有フォルダーから以下をダウンロードして、適当なディレクトリィに展開します。
    適当なドライブのルートに \tkProg をつくり、その下に tklib、tkprog_MDX あるいはtkprog_COE をコピーすることをお勧めします。
    tkProgのディレクトリィを [tkProg]、tkprog_MDX/tkprog_COE を [tkprog_XXX] と書きます。
     tkProg\tklib
     tkProg\tkprog_MDX¥PHYSBO (拠点メンバーの場合)
     tkProg\tkprog_COE¥PHYSBO (研究室メンバーの場合)
     
  2. 環境変数 PYTHONPATH に [tkProg]\tklib\python を追加する。