技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

ゲーム理論(二人・二択)の混合戦略の確率をjavaで求める

以下の記事の続きです。
 
ゲーム理論(二人・二択)の混合戦略の確率を求める

https://akira2kun.hatenablog.com/entry/2018/12/23/180906

 
プログラムで計算する場合の計算式を書いたので、javaでサンプルプログラムを作ってみました。
 
ソースコード
public class GameKongoMain {
    public static void main(String[] args){

        // 各選択肢の利得を定義
        double valueAa = 2;
        double valueAb = 6;
        double valueBa = 5;
        double valueBb = 4;

        // 例外処理
        if (valueAa > valueBa && valueAb > valueBb) {
            System.out.println("劣等戦略未除外エラー");
            return;
        } else if (valueAa < valueBa && valueAb < valueBb) {
            System.out.println("劣等戦略未除外エラー");
            return;
        } else if (valueAa == valueBa && valueAb == valueBb) {
            System.out.println
            ("混合戦略の確率 選択肢A:0.5 選択肢B:0.5");
            return;
        }

        // 選択肢の傾きの計算
        double slopeA = 0;
        double slopeB = 0;
        slopeA = valueAb - valueAa;
        slopeB = valueBb - valueBa;

        // 選択確率の計算
        double probabilityA = 0;
        double probabilityB = 0;
        probabilityA = (slopeB * -1) / (slopeA + (slopeB * -1));
        probabilityB = slopeA / (slopeA + (slopeB * -1));

        // 結果出力
        System.out.println
        ("混合戦略の確率 選択肢A:"+ probabilityA +
                       " 選択肢B:" + probabilityB);
    }
}
 
【実行結果】
混合戦略の確率 選択肢A:0.2 選択肢B:0.8
 
【注記】
・各選択肢の利得の値を変えて、各例外ケースも確認しています。
・片方の選択肢の傾きが0でもう片方が0ではないケースも確認しています。
(この場合、傾きが0の選択肢の選択確率が1.0、もう片方の選択肢がの選択確率が0.0になる)