LHS+US管理クラス

概要

モンテカルロシミュレーションで乱数発生を行うにあたり、少ないサンプル数で広範囲の領域をカバーし、信頼性評価を行うにあたってラテンハイパーキューブ法(LHS)が有効であることがOlssonらによって示されている。一方で、限界状態曲面近傍に関心があるとき、必ずしも純粋に確率面数の分布に基づいて乱数を発生する必要はない。このような観点から、LiらはLHSと一様乱数によるサンプリング(US)を組み合わせる方法を提案した。ここでは、LHS+USと表記する。技術的詳細については、下記文献を参照のこと。LHS+USのサンプリングを管理する基底クラスLHSbaseをモジュールLimitStateの中に提供する。限界状態関数を定義するユーザclassで継承することにより、任意の限界状態関数に対して適用可能となる。

  1. 酒井信介、木原重光、「サポートベクタマシンを用いたプラント保全データの信頼性評価」、圧力技術、Vol.59、No.3,pp.129-139(2021).

モジュールLimitState、クラスLHSbaseの利用法

  1. ターミナルモードで以下のコマンドを入力し,パッケージUtilityをインストールする。その際、Ver1.1.1以上であることを確認すること。
    pip install git+https://github.com/ShinsukeSakai0321/Utility
    ただし、更新の場合には
    pip install --upgrade git+https://github.com/ShinsukeSakai0321/Utility
  2. プログラム内で以下のimport文でLimitStateモジュールを読み込む
    from Utility import LimitState as ls
  3. 登録されているLHSbaseクラスの情報は以下のhelp文で確認できる
    help(ls.LHSbase))


プログラムリスト

限界状態関数管理クラスの作成

まず、ls.LHSbaseを継承する限界状態関数管理クラスを作成する。最も基本的なRSモデルの場合について例示する。

                class rnd_RS(ls.LHSbase): #LHSbaseを継承する
                    def __init__(self,nv): #nvは変数の数
                        super().__init__(nv)
                    def g(self,rnd):  #限界状態関数gを定義する。rnd:発生された乱数列。下記例題のJSONデータの変数の順番に格納されている。
                            rr=rnd[:,0]  #変数の順番に乱数列を取り出していく
                            ss=rnd[:,1]
                            gval=rr-ss  #限界状態関数の計算結果リスト
                            return gval #そのリストをもどす
            

限界状態関数管理クラスを使ったプログラム例

                #データはJSON形式で与える
                data={"r":{"mean":170,"cov":20/170,"dist":"normal"},
                     "s":{"mean":100,"cov":20/100,"dist":"normal"},
                     }
                nv=2 #変数の数
                n=300 #サンプル点数
                k=3 #サンプリングの領域の広さ
                lhb=rnd_RS(nv) #インスタンスの生成
                lhb.SetData(data) #データセット
                rnd,t=lhb.Calc(n,k) #LHS+USの乱数、破損リストがもどされる
                X_std=(rnd-lhb.Means())/lhb.Stdvs() #データの基準化
                print(lhb.gMean()) #平均値でのg値の値            

この結果、rnd[:,0]にR、rnd[:,1]にSの乱数が格納されている。tは、破損、非破損データのリスト。