Posts Issued in March, 2024

Pongと強化学習 (3)

posted by sakurai on March 29, 2024 #765

DQNとCNNの構造とベルマン方程式について深堀りします。


DQN(Deep Q-Network)を使用してFPGA上でPongゲームの強化学習を実装する場合、まずは画面データ(256x256、ON/OFF)をCNNを通じて効率的に情報を圧縮し、その後の強化学習アルゴリズムで利用できるようにする必要があります。CNNを用いて画面データから特徴を抽出し、その特徴を基にDQNが行動選択を行います。

情報の圧縮

  1. 畳み込み層:画面のサイズが大きいため、最初の畳み込み層で画像サイズを大幅に削減することが効果的です。例えば、最初の畳み込み層でストライドを大きく取り(例:4または5)、カーネルサイズを(8x8)や(5x5)に設定します。これにより、画像の次元を減らしながらも、ゲーム内の主要な特徴(ボールやパドルの位置)を捉えることができます。

  2. プーリング層:畳み込み層の後にプーリング層(例:最大プーリング)を挿入して、さらに特徴マップのサイズを減らします。これは、重要な特徴を保持しながらデータ量を減らすのに有効です。

  3. 複数の畳み込み層とプーリング層の使用:複数の畳み込み層とプーリング層を交互に配置することで、より高度な特徴を抽出しつつ、データの次元を効率的に減少させることができます。

報酬の設定

DQNでは、各行動の選択に対して報酬を与えることで学習を進めます。Pongゲームにおける報酬の設定は次のようになります:

  • 加点:ボールを打ち返した時に正の報酬を与えます。これはエージェントがボールを落とさずに続ける動機付けになります。
  • 減点:ボールを落とした時に負の報酬(または大きな負の報酬)を与えます。これにより、エージェントはボールを落とさないように学習します。

CNNの構造

一般的なCNNの構造は以下のようになります:

  1. 入力層:256x256の画像データ(ON/OFF)。
  2. 畳み込み層:活性化関数(ReLUなど)、カーネルサイズ(例:5x5)、ストライド(例:4)。
  3. プーリング層:最大プーリングを使用し、特徴マップのサイズをさらに削減。
  4. 全結合層:畳み込み層とプーリング層を通過した後の特徴をもとに、行動価値(Q値)を出力します。

ベルマン方程式の具体化

DQNでは、ベルマン方程式を用いてQ値(行動価値関数)を更新します。具体的には、以下の式を用います:

$$Q(s,a) = R(s,a) + \gamma \max_{a'} Q(s', a')$$

ここで、$s$は現在の状態、$a$は取られた行動、$R(s,a)$はその行動による報酬、$\gamma$は割引率(将来の報酬の重要性を表す)、$s'$は次の状態、$a'$は次の行動です。この式により、最適な行動選択を学習します。

FPGA上でこれらを実装する際は、演算の効率化、メモリ使用の最適化、およびリアルタイム性の確保に特に注意が必要です。


左矢前のブログ 次のブログ右矢

Pongと強化学習 (2)

posted by sakurai on March 28, 2024 #764

FPGAでのモデル作成について聞いてみました。


FPGAで強化学習を含むPongゲームを実装するプロジェクトは非常に高度で興味深いものです。既にゲームロジックとVRAMを実装しており、次のステップはCNN(畳み込みニューラルネットワーク)を含む強化学習システムをFPGAに統合することです。FPGA上でCNNを動作させるためには、ハードウェアのリソースを効率的に使用しつつ、データフローを最適化する必要があります。

FPGAモデルの設計

  1. CNNモデルの選定

    • FPGAに実装するためには、リソースの消費が少なく、効率的に動作する小規模なCNNモデルを選ぶ必要があります。層の数、フィルターのサイズ、活性化関数などを検討してください。
  2. データフローの設計

    • VRAMからCNNへのデータフローはDMA(Direct Memory Access)を通じて行います。DMA設定を行い、VRAMの右側のポートからCNNへ画像データを直接転送できるように設計します。これにより、CPUの介入なしに高速にデータを転送できます。
  3. CNNのハードウェア実装

    • CNNの各層(畳み込み層、プーリング層、全結合層など)をFPGA上に実装します。畳み込み層では、効率的なマルチプライヤーとアキュムレーターを用いて、畳み込み演算を行います。
    • パラメータの量子化や固定小数点演算の使用を検討して、リソース使用量を削減し、演算速度を向上させます。
  4. 強化学習アルゴリズムの統合

    • CNNを利用して状態(画像データ)から行動を決定する強化学習アルゴリズムを実装します。エージェント(コンピュータのパドル)の報酬システムを定義し、学習プロセスを実装します。
  5. ゲームFSMとのインタフェース

    • 強化学習システムからの出力(行動)をゲームFSMに適切に伝えるインターフェースを実装します。これにより、エージェントがゲーム内でパドルを動かすことができます。

実装上の考慮事項

  • リソース利用:FPGAのリソース(ロジックブロック、メモリブロック、DSPスライスなど)を効率的に使用し、オーバーフローしないように注意してください。
  • 性能と精度:FPGA上での演算速度と精度のバランスを取りながら、モデルの調整を行います。特に、量子化や固定小数点演算を使用する場合は、精度の損失を最小限に抑えるようにします。
  • テストとデバッグ:シミュレーションツールを使用して設計をテストし、期待どおりに動作することを確認します。また、実際のFPGAボードでのテストも行い、システムの動作を検証します。

FPGAでのCNNと強化学習の実装は複雑ですが、計画的にアプローチすれば成功させることができます。上記のステップと考慮事項を参考にして、プロジェクトの設計と実装を進めてください。


(注)今後このような、ChatGPTの返答末尾の「マニュアル等を参考にして~進めてください。」のような文言は言わずもがなであり省略します。


左矢前のブログ 次のブログ右矢

Pongと強化学習

posted by sakurai on March 27, 2024 #763

ChatGPTに指導してもらいながら、FPGAにおけるPongの強化学習の設計を進めて行きます。


Pongゲームで深層学習と強化学習を用いるプロジェクトは面白い試みですね。強化学習を使って、コンピューターがゲーム内で最適な行動を学習するように設計することができます。このプロセスでは、主に環境(この場合はPongゲーム)、エージェント(コンピューターのパドル)、行動(パドルを上に移動、停止、下に移動)、報酬(ボールを打ち返した場合の報酬、落とした場合のペナルティ)の4つの要素を定義します。

強化学習アルゴリズムの基本的な構造とベルマン方程式の適用方法について説明します。

強化学習の基本コンセプト

  • 環境:Pongゲームの画面(256x256ピクセル)です。この画面は、エージェントに現在のゲームの状態を提供します。
  • エージェント:コンピューターのパドルです。状態(ゲームの画面)に基づいて行動を選択します。
  • 行動:エージェントが取りうる行動は、パドルを上に移動、停止、下に移動の3つです。
  • 報酬:ボールを打ち返すと正の報酬を、ボールを落とすと負の報酬(ペナルティ)を受け取ります。

ベルマン方程式

強化学習の基本的なアイデアは、現在の状態から取りうる全ての行動に対して、将来得られる報酬の合計が最大になるようなポリシー(方針)を見つけ出すことです。このとき、ベルマン方程式が重要な役割を果たします。

ベルマン方程式は、ある状態の価値を、その状態から取りうる行動によって得られる即時報酬と、その後の状態の価値の割引和として定義します。数学的には以下のように表されます:

$$V(s) = \max_a \left( R(s,a) + \gamma \sum_{s'} P(s'|s,a) V(s') \right)$$

ここで、

  • $V(s)$ は状態 $s$ の価値です。
  • $R(s,a)$ は状態 $s$ で行動 $a$ を取ったときの即時報酬です。
  • $\gamma$ は割引率で、将来の報酬をどれだけ重視するかを示します。
  • $P(s'|s,a)$ は行動$a$を取ったときに状態$s$から状態 $s'$ へ遷移する確率です。
  • $V(s')$ は状態 $s'$ の価値です。

実装アプローチ

  1. 環境の構築:Pongのゲーム環境をシミュレートするか、既存の環境を使用します。OpenAI Gymなどのフレームワークは、Pongのようなゲーム環境を提供しており、強化学習アルゴリズムの開発とテストに適しています。

  2. ディープラーニングモデルの設計:エージェントの行動選択を支援するために、ニューラルネットワークを用いてゲームの状態(画面のピクセルデータ)から価値または行動を予測します。Convolutional Neural Networks (CNN) は画像データから特徴を抽出するのに適しているため、この用途によく使用されます。

  3. 強化学習アルゴリズムの選択と適用:Q-learning、Deep Q-Networks (DQN)、Policy Gradients、Actor-Criticなど、多くの強化学習アルゴリズムがあります。Pongのような比較的単純なゲームには、DQNがよく使用されます。

  4. トレーニングと評価:エージェントをトレーニングし、ゲームのプレイを通じて最適な行動ポリシーを学習させます。トレーニングの進行状況を監視し、エージェントのパフォーマンスを評価します。

この概要が、Pongゲームにおける強化学習の実装に対する理解の一助となれば幸いです。特定のアルゴリズムの実装の詳細や、コードの例が必要な場合は、さらに詳しい説明を提供できますので、お知らせください。


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (8)

posted by sakurai on March 26, 2024 #762

ChatGPTにより $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t)$のグラフ作成プログラムを作成してもらいました。そのリストを示します。

import numpy as np
import matplotlib.pyplot as plt
from functools import lru_cache

plt.rcParams['font.family'] = 'serif'
plt.rcParams['mathtext.rm'] = 'Times New Roman'
plt.rcParams['mathtext.fontset'] = 'cm'

# パラメータ設定
lambdaVal = 0.1  # 故障率
tau = 2    # 点検期間
K = 0.5    # 修復率
epsilon = 0.00001  # 不連続点の直前を示すために使用する小さい値

# 関数定義
def R(t):
    """信頼度関数"""
    return np.exp(-lambdaVal * t)

def F(t):
    """故障関数"""
    return 1 - R(t)

@lru_cache(maxsize=None)
def Q_n(t, n):
    """Q_nの再帰関数。結果をキャッシュする。"""
    if n == 0:
        return F(t)
    else:
        return 

def Q_approx(t):
    """tにおけるQ(t)の近似値を計算する関数"""
    u = t % tau
    return (1 - K) * F(t) + K * F(u)

# グラフ描画
fontsize_axes_label = 24 * 1.8
fontsize_ticks = 16 * 1.8
fontsize_legend = 24 * 1.8

plt.figure(figsize=(18, 11))
# 軸(spines)の線幅を太くする
ax = plt.gca()  # 現在の軸を取得
spine_width = 2  # 軸の線幅
for spine in ax.spines.values():
    spine.set_linewidth(spine_width)
    
# 凡例用のダミープロット
plt.plot([], [], '-', label=f'$Q_{{\\text{{exact}},n}}(t)$ for $\\lambda = {lambdaVal}$', color='black')
plt.plot([], [], '--', label=f'$Q_{{\\text{{approx}}}}(t)$ for $\\lambda = {lambdaVal}$', color='black')

# 不連続性を示すために各区間を個別にプロット
for i in range(10):
    start = i * tau
    end = (i + 1) * tau -epsilon # epsilonを削除
    t_vals = np.linspace(start, end, 200)
    Q_exact_vals = [Q_n(t, i) for t in t_vals[:-1]]  # 区間の最後の点を除外してプロット
    Q_approx_vals = [Q_approx(t) for t in t_vals[:-1]]
    
    plt.plot(t_vals[:-1], Q_exact_vals, 'k-', lw=2.5)
    plt.plot(t_vals[:-1], Q_approx_vals, 'k--', lw=2.5)

    # 区間の終わりに白丸をプロット
    plt.plot(end, Q_n(end, i), 'o', mfc='white', mec='black', mew=2, markersize=8)
    plt.plot(end, Q_approx(end), 'o', mfc='white', mec='black', mew=2, markersize=8)

plt.xlabel('Time (t)', fontsize=fontsize_axes_label)
plt.ylabel('$Q(t)$', fontsize=fontsize_axes_label)
plt.xticks(np.arange(0, 11*tau, tau), fontsize=fontsize_ticks)
plt.yticks(fontsize=fontsize_ticks)
legend = plt.legend(fontsize=fontsize_legend)
for handle in legend.legendHandles:
    handle.set_linewidth(2.5)  # ここで線の太さを指定    
plt.grid(True, color='gray', linestyle='-', linewidth=1.4)
plt.ylim(bottom=0)
plt.xlim(0,10*tau)
plt.subplots_adjust(left=0.14, bottom=0.14) 
plt.show()

図762.1に実行結果を示します。これは論文に掲載したグラフの一部です。

図%%.1
図762.1 $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t), \lambda=0.1$のグラフ

図%%.2
図762.2 $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t), \lambda=0.01$のグラフ

図%%.3
図762.3 $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t), \lambda=0.001$のグラフ

なお、

に掲載しています。さらに、

に続きます。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (7)

posted by sakurai on March 25, 2024 #761

前項までで、正確な$Q_{\text{exact},n}(t)$と近似の$Q_\text{approx}(t)$が求められたので、誤差評価を行います。パラメータは$\lambda=100FIT$、$T_\text{lifetime}=$10万時間、$K=0.5$、$\tau=$1か月とします。すると、$T_\text{lifetime}=1.0\times10^5[H]$、$\tau=730[H]$であり、 $$ Q_n(t)=F(t)-\img[-1.35em]{/images/withinseminar.png}\ n=\lfloor t/\tau\rfloor\ge1\tag{761.1} $$ これより、正確な車両寿命での不稼働確率は、 $$ Q_{\text{exact},136}(T_\text{lifetime})=0.005023250473883639 $$

一方近似式では、 $$ Q_\text{approx}(t)=(1-K_\text{MPF})F(t)+K_\text{MPF}F(u),\ u=\bmod\tau\tag{761.2} $$ これより、 $$ Q_\text{approx}(T_\text{lifetime})=0.005011081829447039 $$

両方の値から誤差は車両寿命において相対誤差は、 $$ \frac{Q_{\text{exact},136}(T_\text{lifetime})-Q_\text{approx}(T_\text{lifetime})}{Q_\text{approx}(T_\text{lifetime})}=\frac{0.005023250473883639-0.005011081829447039}{0.005023250473883639}\\=\img[-1.35em]{/images/withinseminar.png}[\%] $$ と計算され、PMHFの計算上では問題にならないレベルだと判明しました。

ちなみに、前項のChatGPTの作成したグラフ描画ソフトのパラメータを上記のパラメータに置き換え、グラフを車両寿命まで作成しました。次にChatGPTにプログラムを渡して、グラフは不要だからPUAの車両寿命における値を$Q_\text{exact}$と$Q_\text{approx}$の2つを求めて、誤差評価をしてと依頼したところ、修正されたプログラムにより上記の値が算出できました。

ChatGPTにプログラムを書いてもらうのはかなり実施して来ましたが、プログラムを渡してこんな風に改造してというのは新しい試みです。なぜなら、他人のプログラムの改造は人間は嫌がるからです。機械は嫌がらずに素直に実行すると言うのは新しい経験でした。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

posted by sakurai on March 22, 2024 #760

論文のアブストラクトをAJEに提出しましたが、「全体感が見たいので全体を出してくれ」とのご要望で、原稿全体を提出しました。前回までは冠詞の誤り等の文法ミスの修正が中心で、せいぜいが「意味が同じか確認してくれ」というメッセージ付きで文章を修正してきたことはありました。

ところが今回はVIPコースを選択したためか「この間に話題を繋げるような短い段落があると良い」「パラメータを選択した理由があると理解しやすい」「結論はまとめではないから、新規性のあることを書くべきである」等の内容に踏み込んだ示唆を貰い、大変にありがたく感じています。

図%%.1
図760.1 一旦完成した論文6ページの原稿

原稿全体は修正中ですが、一旦アブストラクトを投稿し、No.9のIDを受領しました。後は6月初旬の採択通知を待つのみです。

表760.1 RAMS 2025へのマイルストーン
期限 マイルストーン 状態
2024/5/3 アブストラクト投稿締め切り(システム入力) 投稿済
2024/6/10 アブストラクト採択結果
2024/8/1 論文、プレゼン投稿締め切り(名前、所属無し版)
2024/9/1 第1回論文、プレゼン資料査読コメント受領
2024/10/9 改訂版論文、プレゼン投稿締め切り(名前、所属無し版)
2024/10/22 最終査読コメント受領
2024/10/10 学会出席登録締め切り
2024/10/10 最終論文、プレゼン投稿締め切り(名前、所属有り版)


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (6)

posted by sakurai on March 21, 2024 #759

前項までで、正確な$Q_{\text{exact},n}(t)$(758.4)を以下のように求めることができました(再掲)。 $$ Q_{\text{exact},n}(t)=F(t)-\img[-1.35em]{/images/withinseminar.png}\ n=\lfloor t/\tau\rfloor\ge1\tag{759.1} $$ 一方で、近似式は、 $$ Q_\text{approx}(t)=(1-K_\text{MPF})F(t)+K_\text{MPF}F(u),\ u=t\bmod\tau\tag{759.2} $$ でした。この2種類の関数が$\lambda$の変化でどのように変わるかを見てみます。図759.1はそれぞれ2つのグラフが$\lambda=0.1$(パープル)及び$\lambda=0.01$((ブルー)の2種類を描いたものです。

図%%.1
図759.1 正確な$Q_{\text{exact},n}(t)$と近似式$Q_\text{approx}(t)$のグラフ

図759.1のブルーに示すように、$\lambda$が小さければカーブは直線に近づき、誤差が少なくなります。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (5)

posted by sakurai on March 20, 2024 #758

以下の記事中、ピンクは誤りグリーンは正解を意味しています。

過去記事ではまずPUDを導出し、途中の検出分が全て修理される前提で、最終の検出かつ未修理分のみを不検出に加えてPUAを導出しました。

一方、過去記事において不稼働度(Point Unavailability; PUA)を新方式$\dagger$で求めました。ところが導出の際に式の誤りがあったため再度同じ方法で不稼働度(PUA)を求めてみます。

SMのフォールトが生起したとき、それがレイテントフォールトとなるかならないかは2nd SMの故障検出率で決定されます。これを$K_\text{MPF}$とすると、 $$ K_\text{MPF}=\Pr\{\text{detected }|\text{ failed at }t\}\tag{758.1} $$ ここでは式(758.1)に基づいてPUAを導出します。これは、修理が完全に確率的に行われることを意味し、検出されるされないは故障の原因によらずにSMの能力のみに依存することになります。これは従来の仮定を根本から変更するものであるため、本稿では「新方式」としています。

不稼働度$Q(t)$の一般式

稼働度(Point Availability; PA)の公式から不稼働度は以下のように表せます。 $$ \begin{eqnarray} Q_n(t)&=&F(t)-\int_0^{T_\text{lifetime}}m(x)R(t-x)dx\\ &=&F(t)-\sum_{i=1}^nM(i\tau)R(t-i\tau)\tag{758.2} \end{eqnarray} $$ 定期修理であるため、$\tau_i=i\tau,\ i=1,2,...$が修理時点であり、$M(i\tau)$は修理時点$i\tau$における修理率です。不稼働度はフォールトが起きて累積する検出率に応じた一部の故障が修理され、かつ現在まで生き残っている分を引いたものとなります。

さて、修理時点$i\tau$における修理率$M(i\tau)$はその検査区間内での不信頼度の増加分に故障検出率である(758.1)の$K_\text{MPF}$をかけたものとなることから、 $$ \begin{eqnarray} M(i\tau)&=&K_\text{MPF}\int_{i-1}^iq(x)dx\\ &=&\img[-1.35em]{/images/withinseminar.png} \tag{758.3} \end{eqnarray} $$ なぜその検査区間内かといえば、その前までの故障は全て検査され、不検出分は全てレイテントフォールトとなり不信頼度に加えられるからです。

従って、(758.2), (758.3)より、 $$ Q_n(t)=F(t)-\img[-1.35em]{/images/withinseminar.png}\ n=\lfloor t/\tau\rfloor\ge1\tag{758.4} $$ しかしながら、PUAは求めるべき関数が右辺にあるため陽には求められず、数値計算することになります。図758.1は$\lambda$=0.001, $\tau$=100のときのグラフです。

  • $F(t)$ --- 紫
  • $Q_\text{exact}(t)$ --- 赤
  • $Q_\text{approx}(t)=(1-K)F(t)+KF(u)$ --- 青
  • $Q_\text{approx}(t)$のベースライン$(1-K)F(t)$ --- 緑

図%%.1
図758.1 $Q(t)$のグラフ

従来論文ではPUAとしての$Q_\text{approx}(t)=(1-K)F(t)+KF(u)$を用いていますが、本来は毎回の修理量は徐々に減少していき、不信頼度が増大するための$Q_\text{exact}(t)$のように上振れとなります。

今までの記事は区間修理量一定という、厳密な議論に立てば正しくない仮定の下にPUA及びPUDを導出してきましたが、正しくは本記事のように区間修理量は漸減するとすべきでした。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


$\dagger$2nd SMのDCである$K_\text{MPF}$を条件付き確率と変更する方式


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (4)

posted by sakurai on March 19, 2024 #757

ここまで見たように、PMHFの正確な議論のためには論文のロジックをPUA起点からPUD起点に組みかえる必要があります。 $$ M_\text{PMHF}=\frac{1}{T_\text{lifetime}}\int_0^{T_\text{lifetime}}q(t)dt=\frac{1}{T_\text{lifetime}}Q(T_\text{lifetime}) $$

現在までの流れ:

  • Kパラメータは条件付き確率ではないと仮定する
  • PUA $Q(t)$を導出する。その前提は「周期間での修理量は常に$KF(\tau)$に等しい」⇒これより $$ Q(t)=(1-K)F(t)+KF(u), u=t\bmod\tau $$
  • PUD $q(t)$はPUA $Q(t)$を時間微分したもの
  • PMHFは平均PUD、すなわちPUA $Q(t)$を車両寿命で割ったものとして導出する

改訂版の流れ:

  • Kパラメータは条件付き確率と仮定(変更)する
  • Kパラメータから微分方程式PUD $q(t)$を導出する $$ q(t)dt=R(t)\lambda dt=f(t)dt $$
  • 「周期の最後で検出し修理する」のと「瞬間瞬間で検出し色付けしておき最後で修理する」のとが等価であることを示す
  • 修理すればそれは良品となるため、周期の最後では不良品のみがLFとして残ることを示す
  • PUDの積分方程式$\int q(t)$を解いて正確なPUA $Q(t)$を導出する $$ Q(t)=K_\text{MPF}R(n\tau)F(u) ,\ \ s.t.\ n=\lfloor \frac{t}{\tau}\rfloor, u=t\bmod\tau\tag{5} $$
  • $R(n\tau)\approx1$の議論を行い、近似PUA(現行のPUA)を導出⇒ここから現在までの流れに合流する
  • PMHFは平均PUD、すなわちPUA $Q(t)$を車両寿命で割ったものとして導出する

こうすることで今までの議論が全て成立することになります。

一例をあげると、 $$ \begin{eqnarray} \begin{cases} \lambda&=10FIT=1.0\times10^{-8}\\ n\tau&\approx T_\text{lifetime}=1.0\times10^{5} \end{cases} \end{eqnarray} $$ これらの数値を用いれば、 $$ R(n\tau)=0.999 $$ となり、ほぼ1であることからこの項は無視できることがわかります。逆に$\lambda$が513[FIT]未満であれば1とみなしても5%程度の誤差で収まります。

注意:
Kパラメータを条件付き確率と仮定することには特に問題は有りません。一方で本記事も、上記のこのマーカーの箇所が誤りのようです。上記は修理可能部分の不信頼度は累積されないとして計算しましたが、実際には不信頼度は累積され、区間の最後で修理されます。従って、不信頼度の累積は高い不稼働度に繋がり、本計算では実際より低く見積もることになります。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (3)

posted by sakurai on March 18, 2024 #756

さて、微小時間間隔$(t, t+dt)$における不検出部分の微小確率$q_\text{undet}(t)$は、 $$ q_\text{undet}(t)=\Pr\{\text{undetected}\cap\text{failed in }(t, t+dt)\cap\text{up at }t\}\\ =\Pr\{\text{undetected}\hspace{1pt}|\hspace{1pt}\text{failed in }(t, t+dt)\cap\text{up at }t\}\\ \cdot\Pr\{\text{failed in }(t, t+dt)\cap\text{up at }t\}\\ =(1-K_\text{MPF})\cdot\Pr\{\text{failed in }(t, t+dt)\hspace{1pt}|\hspace{1pt}\text{up at }t\}\cdot\Pr\{\text{up at }t\}\\ =(1-K_\text{MPF})\lambda dt R(t)=(1-K_\text{MPF})f(t)dt\tag{756.1} $$ でした。不検出部分は修理の影響を全く受けないため、$Q(t)$は $$ Q_\text{undet}(t)=\int_0^t q_\text{undet}(s)ds=(1-K_\text{MPF})\int_0^tf(s)ds=(1-K_\text{MPF})F(t)\tag{756.2} $$ 他方、検出部分の微小確率$q_\text{det}(t)$は $$ q_\text{det}(t)=\Pr\{\text{detected}\cap\text{failed in }(t, t+dt)\cap\text{up at }t\}\\ =\Pr\{\text{detected}\hspace{1pt}|\hspace{1pt}\text{failed in }(t, t+dt)\cap\text{up at }t\}\\ \cdot\Pr\{\text{failed in }(t, t+dt)\cap\text{up at }t\}\\ =K_\text{MPF}\cdot\Pr\{\text{failed in }(t, t+dt)\hspace{1pt}|\hspace{1pt}\text{up at }t\}\cdot\Pr\{\text{up at }t\}\\ =K_\text{MPF}\lambda dt R(t)=K_\text{MPF}f(t)dt\tag{756.3} $$ この微小確率は累積せずに区間毎に修理され、最後の区間のみ累積されるため、$Q(t)$は $$ \require{cancel} Q_\text{det}(t)=\int_0^t q_\text{det}(s)ds=K_\text{MPF}\int_{n\tau}^t f(s)ds=K_\text{MPF}\left[F(t)-F(n\tau)\right]\\ =K_\text{MPF}\left((\bcancel{1}-e^{-\lambda t})-(\bcancel{1}-e^{-\lambda n\tau})\right)=K_\text{MPF}e^{-\lambda n\tau}\left(1-e^{-\lambda(t-n\tau)}\right)\\ =K_\text{MPF}R(n\tau)F(u) ,\ \ s.t.\ n=\lfloor \frac{t}{\tau}\rfloor,\ u=t\bmod\tau\tag{756.4} $$ 式(756.2)及び (756.4)を加えて、 $$ Q(t)=(1-K_\text{MPF})F(t)+K_\text{MPF}R(n\tau)F(u) ,\ \ s.t.\ n=\lfloor \frac{t}{\tau}\rfloor,\ u=t\bmod\tau\tag{756.5} $$

図756.1に、 $$ \begin{eqnarray} \begin{cases} Q_1(t)&=(1-K_\text{MPF})F(t)+K_\text{MPF}F(u)\\ Q_2(t)&=(1-K_\text{MPF})F(t)+K_\text{MPF}R(n\tau)F(u) ,\ \ s.t.\ n=\lfloor t/\tau\rfloor,\ u=t\bmod\tau\tag{756.6} \end{cases} \end{eqnarray} $$ のグラフを示します。が$Q_1(t)$、が$Q_2(t)$です。

図%%.1
図756.1 $Q_1(t)$と$Q_2(t)$のグラフ

本来なら$Q_2(t)$を使用すべきですが、$Q_1(t)$を近似式として使用します。

注意:
本記事は上記のこのマーカーの箇所が誤りのようです。上記は修理可能部分の不信頼度は累積されないとして計算しましたが、実際には不信頼度は累積され、区間の最後で修理されます。従って、本来不信頼度の累積は高い不稼働度になるところが、本計算ではより低く見積もることになります。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢


ページ: