17 状態異常と致死性攻撃
ソラは、受付のカウンター席に座って、暇を持て余していた。
――誰も来ない。今日の来訪者は、今のところヤクさんだけ。こんな日もあるのか。そういえば、ヤクさんの言っていたMPをネタに師匠から色々教わったっけ。
退屈したソラは、先週のジンの講義内容を頭の中で復習する。
「人間や魔物のステータスには、多くの項目があるが、直接、生命に関わるのはHPとMPの二つじゃ。単純化して、とりあえずこの二項目だけをステータスと考えようかの」
先週、ジンは、そう言ってその講義を始めた。
「HPもMPも数で表されるから、ステータスは二つの数の組になるのお。両方とも正の数で、HPは疲労、MPは魔法の使用に伴って減少する。どちらかがゼロになったら死亡じゃな。休息で自然回復する。ただし、魔法スキルのない一般人のMPは一桁程度じゃ」
ジンの話を聞きながら、これは孤児院で習ったな、とソラは思った。
「話は変わるが、知っての通り、数は非常に役に立つ。だから、数学の発展に伴って、数はどんどん拡張されてきた」
ソラは、数の拡張が何か分からず、ジンに尋ねる。
「数の拡張ってなんですか?」
「あたかも数のように扱って、足し算や掛け算をやらせることじゃ。数覚スキルとは面白いもので、慣れてくると、こういった数モドキもあたかも実在しているように感じてくる。様々な数学的対象に触れることで、数覚スキルはどんどん伸びるぞ」
ジンの回答をソラは理解できなかった。
「すみません。具体的にイメージできません」
ソラの感想に対して、ジンは少し考えてから口を開く。
「拡張の一例を挙げようかの。現実世界で、ステータスなどに対して何かを掛けるというじゃろう。例えば、回復を掛けるとか、状態異常を掛けるとか。この掛けるという操作が理想世界で掛け算の掛けるに対応するように、うまく数を拡張する」
――ステータスに回復を掛けるが、掛け算になるなんて。
ソラはジンの挙げた拡張例に興味を惹かれ、ジンに名称を尋ねる。
「その拡張は何と言うのですか?」
「行列とベクトルじゃ」
――あれ、なんで名前が二つもあるんだろう。
ソラは混乱しつつ、ジンに質問する。
「数は一種類だったのに、拡張すると二種類に分かれるのですね。行列とベクトルの違いは何ですか?」
ジンは、少し悩んだ顔をして答える。
「大雑把に言えば、掛け算の倍率に当たるものが行列、基準の量に当たるものがベクトルじゃ。ステータスに回復を掛ける場合だと、回復は行列、ステータスはベクトルとしてモデル化する。掛け算するときは、行列、掛ける、ベクトルの順で書くことが多い」
ジンの回答に対して、ソラは疑問点を口にする。
「ステータスに状態異常を掛けた後に、回復を掛けるような操作はどうモデル化しますか?」
「回復を表す行列、掛ける、状態異常を表す行列、掛ける、ステータスを表すベクトルじゃな」
ソラは続けて尋ねる。
「倍率同士を掛け算でまとめる処理、例えば2倍掛ける3倍は6倍、はどうなりますか?」
「倍率の場合と同様じゃ。行列同士は掛けることができ、また行列になる。ステータスに一つずつ順番に掛けたときと掛け算の結果が一致する一つの行列じゃな」
ジンは、ソラの表情が明るくなってきたのを見て、講義を進める。
「次に行こうかの。ステータスに掛ける行列で、HP、MPをそれぞれ別々に何倍かするようなものを対角行列と呼ぶ」
ソラは、対角行列の例を挙げる。
「例えば、HPを0.8倍、MPを0.5倍するような状態異常ですね」
ジンは、うなずいて同意した。
「HPを1倍、MPを1倍する対角行列を特に単位行列と呼ぶ。単位行列を掛けても、ステータスは変わらない」
ソラは、分かります、と相槌を打った。
「与えられた行列と掛けると単位行列になるような行列がもしあれば、それを与えられた行列の逆行列と呼ぶ。数の掛け算における逆数に当たるものじゃな。逆行列がある場合、与えられた行列は正則と言う」
ジンの説明を聞き、ソラは逆行列の例を思いつく。
「例えば、さっきの状態異常を表す行列の逆行列は、HPを1.25倍、MPを2倍する対角行列ですね」
ジンは満足そうな表情を浮かべる。
「逆行列がない行列、すなわち正則でない行列の例を挙げようかの。HPを0倍、MPを1倍する対角行列じゃ。0倍するとHPが0になるから、何倍しても元には戻らない。死亡するとそれっきり。致死性攻撃を掛けられることに相当するのお」
「元に戻せる状態異常と致死性攻撃が逆行列の有無で区別できるということですね」
ジンは、ソラの意見に同意しつつ、付け加える。
「致死性攻撃の悪質さを評価する基準として、行列のランクが使えるのお。対角行列の場合、ランクとは0倍でない要素の個数のことじゃ。HP、MPを両方とも0倍する対角行列がもっとも悪質でランク0、どちらか一方だけを0倍する対角行列がランク1、逆行列がある正則な対角行列がランク2となる」
ソラは、そんな尺度があるんですね、と感心する。
ソラは、ここまでの講義で浮かんだ疑問をジンに投げかける。
「対角行列は分かりましたが、倍率を掛けるだけだと、数の拡張としてはちょっと地味に思えます。他の行列はないのですか?」
ジンは、いい質問じゃ、と返し、対角行列以外の行列をソラに紹介する。
「ステータスに掛ける行列としては、MPによってHPが上下するようなものが作れる。入力のHPとMPをそれぞれ何倍かして、それらを足し合わせた値が行列を掛けた結果、つまり出力のHPとなる。MPへの影響も同様じゃ。だから、一つの行列は四つの数で決まる。これらの数を行列の要素と呼ぶ」
ジンは、以下の表を使って、行列の要素である四つの数を図示した。
入力のHP 入力のMP
出力のHP:HP→HPの倍率 MP→HPの倍率
出力のMP:HP→MPの倍率 MP→MPの倍率
「例えば、HPを0.8倍、MPを0.5倍する状態異常をこの表の書き方で書くと、こうなるのお」
ジンはそう言って、以下の表を書いた。
入力のHP 入力のMP
出力のHP:0.8 0
出力のMP:0 0.5
「なるほど、表の対角部分に数が並ぶから対角行列というのですね」
ソラは感心したように言った。
「別の例を挙げる。MPの4割をHPに割り当てる回復はこう書けるのお」
入力のHP 入力のMP
出力のHP:1 0.4
出力のMP:0 0.6
「これら二つの行列を使って、ちょっと計算してみようか。HPが100、MPが100のステータスの魔法使いに、状態異常を掛けて、回復を掛けるとどうなるかの?」
「HPは100、MPは30になります。HPは元に戻りますが、MPは減ります」
ジンが尋ねると、ソラは即答した。
「掛ける順番を逆にすると、どうなるかの?」
「HPは112、MPは30になります。掛ける順番を変えると、異なるステータスになりますね」
ジンは、にやりと笑ってソラに告げる。
「対角行列でない場合、こんな現象が発生する。数の拡張らしいじゃろ。行列とベクトルを扱う数学の分野を線形代数と言う。要約すれば、対角でない行列を対角行列みたいに簡単に扱えるようにする技術や知識じゃ」




