オタクがpythonとAHPを使って遊んでみる

##はじめに
こんにちは。hi_kataです。かたぴか(@ktpksunshine)という名前でTwitterやってます。
子供がクリスマスまでお菓子の小箱を毎日あけるように
私たちも知識の小箱をあけたいと思います。

今日はタイトルの通りAHPと呼ばれる手法を用いて遊びたいなと思います。

環境はこれ。

- OS:Windows10
- soft:python3.6.5

## AHP is 何
> 階層分析法（かいそうぶんせきほう）は、意思決定における問題の分析において、人間の主観的判断とシステムアプローチとの両面からこれを決定する問題解決型の意思決定手法。

wikipediaの[該当ページ](https://ja.wikipedia.org/wiki/%E9%9A%8E%E5%B1%A4%E5%88%86%E6%9E%90%E6%B3%95)から引用しました。何言ってるかわからない？
Ok,僕もよくわからない。

行列計算で自分の意志を見出すすごいやつなんですけど、如何せん説明が難しいです。

意思決定法というくらいですから、なにかを決定する時につかうのですが、
そのとき選ぶ対象のいくつかの選択肢と
それを選ぶための評価基準がありますが、
それぞれの重要性を1個ずつ比較していけば答えは出るんじゃないかなー！みたいな手法。

手法の流れとしては
1.　問題設定
2.　評価基準の重要性の設定
3.　各評価基準での各選択肢の比較
4.　計算
くらいなんですけど。
オタクゆえ語彙力ありませんので、記事を追ってわかっていただければ幸いです。

## オタクがそれ使って何するのか。
本来は品質管理とか工事場所の選定とかに使われる手法らしいんですけど、
オタクがそれを使って何をするのか。
オタクが悩む意思決定問題は1つです。

**推しが決まらない**

これしかないですね。
三か月に一度嫁が変わる手のひらドリルなオタクも対象ではあるんですが、
1つのコンテンツに深く入るタイプのオタクも結構悩みます。(僕がそう)
1回ライブとか行くと推しが3人増えたりします。
9人のグループなのに4人推してたりします。
しかも推しと仲がいい子も推し始めるので、
何推し！とかいってるくせに行動が箱推しみたいなことはザラです。
そういう悩めるオタクを救うべく今回この手法を取り入れます。

##実際にやるぞー！
###問題設定
今回はこちらのコンテンツの推しを推し量っていきたいと思います。

**[少女歌劇レヴュースタァライト](https://revuestarlight.com/)**

ざっくりいうと今はやりの2.5次元コンテンツってやつです。
ラブライブ！とかアイマスとかのライブコンテンツが舞台の演劇という
コンテンツになったものでしょうか。いやまぁキャストによるライブもあるんですけど。
このコンテンツがすごいのは、舞台という3次元側のコンテンツにおいても
コンテンツのストーリーが進むところですね。
2.5次元コンテンツって最初は2次元のキャラが行っていることを
三次元のキャストが再現するってものだったんですけど、
近年はそれは当たり前でキャスト間の関係やドラマ、
3次元側コンテンツがコンテンツに入る誘因になってたりします。
その中でスタァライトはさらにその先を行って、
どちらのディメンジョンでのコンテンツもコンテンツのストーリーに組み込まれているんですよ。
これは舞台という話があるからこそっていうのもあるんですが、
アニメでパラレルワールドの可能性を示唆した上でやってるので、
舞台の話が舞台オリジナルで終わらず、キャラ側の糧にさえなるんですよ。
すごくないですか？すごいですね？みんなもスタァライトされてみて？
スタァ＾～。


ちょっと熱くなってしまいましたけど本筋にはあまり関係ないので読み飛ばしてください。
(僕的には今日のメインなんですけど)

で、問題設定をしていきます。

**問題P：レヴュースタァライトの真の推しを推定せよ**
これは上で述べた通りですね。推しが決まらない雑魚オタクhi_kata君の推しを推定しましょう。

**評価基準E**

- 自分への自信
- 見た目
- 舞台での印象
- 声
- CPでの仲の良さ(やさしさ)

これはほぼ性癖とかそこらへんが基準になってくるのではないでしょうか。
ちょっとQiitaという技術力で殴り合う場所には合わないなとおもって
心重視にはしております。
キャラ項目2つ、キャスト項目2つ、
百合豚ワラワラコンテンツらしくCP関連の項目1つの
計5項目で評価をしたいと思います。

**選択肢A**

- 西條クロディーヌ
- 天堂真矢
- 花柳香子
- 石動双葉

軽く紹介していきますね。(画像はゲームのSSを使っています)

**西條クロディーヌ**
日仏のハーフで元子役。顔が好き。
自分に自信があるのにライバルの真矢様が負けることの方が
ありえないと思ってるとこも大好き。
![Screenshot_20181211-004702.png](https://qiita-image-store.s3.amazonaws.com/0/321334/5efbd42c-54c0-b772-aab3-ef94ca447ee7.png)


**天堂真矢**
両親が役者で努力を怠らない血、才、努力全部あるスーパーレディ。
ラスボス感とおちゃめさ両立してるのが好き。
![Screenshot_20181211-004740.png](https://qiita-image-store.s3.amazonaws.com/0/321334/ba19774f-2c4b-0f4b-6cf5-6aa2c4b2216f.png)

**花柳香子**
京都弁で話す日本舞踊の家元の娘。
ゲームで話すときの声が好き。
![Screenshot_20181211-004727.png](https://qiita-image-store.s3.amazonaws.com/0/321334/d06f8566-8cee-f31a-848f-07ac0a0c9226.png)

**石動双葉**
上記の香子の幼馴染。めっちゃいい子。
舞台での演技で惚れた。
![Screenshot_20181211-004715.png](https://qiita-image-store.s3.amazonaws.com/0/321334/ac5e9ab0-50cd-0898-d996-15085d88841d.png)

以上の4名から今回は選んでいこうと思います。
いや、他のこも魅力的なんだけどさ...全部語るとカレンダーがプログラムと
全く関係ないところで間に合わなくなるからさ...

ということで問題設定、評価基準設定、選択肢設定が完了しました。

### 評価基準の重要性の設定

ここでは**一対比較法**と呼ばれる手法を用います。
また変な言葉出てきたなと思うかもしれませんが
要するに基準一個一個を比較するだけです。
今回の場合は自信と見た目だったら自信のが大事かな、自信と舞台だったら舞台のが、
見た目と舞台だったら舞台のがだいぶ優位かなみたいに、ひとつひとつ比べていきます。
言葉で比べても機械君はわかってくれないので、数値化しなくてはなりません。
例えば7:3,6:4みたいに比の形をとります。
この比1個1個(7/3みたいに分数にした上で)要素として比較行列として一つの行列にまとめます。
対角成分は同じものを比較するので当然1です。
ちなみにこの表を作る時、分子か分母のどちらかを1にしないとうまくいかないらしいです。
よくわかりませんが過去の偉い人がそういってるのでそうしておきます。
あと、綺麗に比較させるために、基本的に奇数で比較したほうがいいらしいです。
前者がめっちゃ優位なら9:1、結構優位なら7:1みたいにしていきます。
8:1はその間くらいだったら使いましょう。

###各評価基準における選択肢同士の比較

比較って言ってる通り、ここでも一対比較法が登場します。
見た目だったらクロちゃんと真矢様だったらクロちゃん優位だな、
声はクロちゃんより香子かなーみたいな比較をしていきます。
そうやって各基準における各選択肢を比較した行列を作ります。

###計算
こっから急に計算の話になりますが、別に自力で計算はしません。
そのためのコンピュータです。

評価基準の行列をwpe_matrixとして、
wpe_matrixの最大固有値に対応した固有ベクトルを

```math 
\vec{w^p_e}
 ```
とします。

n個目の評価基準における選択肢の比較行列をwea_n_matrixとし、
wpeと同じ処理をしたものを

```math
\vec{w^{e_n}_a}
```
とします。
これを各列に持った行列

```math
w^e_a
```

とします。

```math
w^e_a=\begin{pmatrix}
\vec{w^{e_1}_a}&\vec{w^{e_2}_a}&...
\end{pmatrix}
```

という形ですね。

最終的に求めたい、問題に対する選択肢の優位性をwpaとすると、

```math
w^p_a={w^e_a}\vec{w^p_e}
```

で求まります。
wpaの各成分がこの問題における各選択肢の優位性となります。
n番目の選択肢の優位性はwpaのn番目の成分になります。
つまり今回の問題ではwpaの要素の中で最も大きい値のものになった選択肢が
私の真の推しとなります。


##実装
上記手順を踏まえて実装したのが今回のプログラム[osi.py]です。

```
NULL
```

はい、まだ未完成です。
間に合いませんでした。
申し訳ありません。
今週中には記載します。

##おわりに
はやく完成させます。
まぁ実装はおまけといえばおまけなんですけど。
AHPというパワフルな手法と
スタァライトというエモーショナルなコンテンツを知っていただければ幸いです。