FF11のログから日記

記載されている会社名・製品名・システム名などは、各社の登録商標、もしくは商標です。

複合スキル合成の成功率II

複合三種合成に対する「合成成功率+」の影響について実測しました。

調査④・・・三種複合

  • 合成成功率+5%・・・コーヒーマカロン
  • 合成素材消失率-5%
  • ハイクォリティー成功率+2
  • 芸術家肌はなし
  • 旧エリア
  • 上級サポートなし
  • 食事はコーヒーマカロン
  • スキルは二種複合でメイン+51以上、サブも二種類とも+51以上

結果④

項目 割合 計算式
成功 442 96.93% 成功/実施数
失敗 14 3.07% 失敗/実施数
NQ 217 47.59% NQ/実施数
HQ 225 49.34% HQ1/実施数
ロスト数A 6 42.86% ロスト数/失敗数
ロスト数B 6 42.86% ロスト数/失敗数
ロスト数C 3 21.43% ロスト数/失敗数
実施数 456

まとめ

合成種別 失敗率 成功率
三種複合 15.44% 84.56%
三種複合(合成成功率+5%) 3.07% 96.93%

この結果から合成成功率は、複合スキルの各スキル毎の成功率に加算されているという定説どおりです。

  • ○失敗率 = (5.5% - a) x N か (100% - (94.5% + a)N)
  • ✖失敗率 = (5.5%) x N - a
  • Nが複合スキル数、aが合成成功率+

そのため合成の成功率の最大は99%近辺(失敗率は1%)であるため、三種複合の場合の成功率は最大でも97%近辺という数値もまた定説どおりでした。

感想

通説&経験則通り三種複合でも合成成功率を最大にするためには、合成成功率+は4~5でよいということになります。
アドゥリンミッションを実施しているキャラは報酬リングで+1~2%確保できるので、@2~3をどう確保するか?を考えることになります。
合成のみのサブキャラの場合は報酬リングは所持していないケースも多いです。その場合はリングは「アーテフィサリング」の+1%となるので、3~4の確保を考える必要があります。

これについては特に考慮を必要とするのはイオニスを使わないケース、つまりラッキーマイスターを利用する場合となります。

計算式の話

サイコロを三回実施するか一回実施するかで異なります。

サイコロを三回実施する場合は、条件付き確率となるので成功率の乗算です。
0.95 x 0.95 x 0.95が成功率で失敗率は1.00 - 左記の計算式です。
その成功率は0.857375で、失敗率は0.142625となります

サイコロを一回実施する場合は失敗率の加算です。
0.05 + 0.05 + 0.05が失敗率の合計で、これに対して一回だけサイコロを実施します。
この場合の成功率は0.85で、失敗率は0.15です。

HQの判定が乗算ではなく一回だと思っていたので、失敗率もそも可能性を考えてましたが、その場合スキル不足の失敗率が上がりすぎ(100%を超える)ので、疑問にはなってきました。
ただ、合成結果のバランス調整を考えるとHQまで合わせてサイコロ一回しかふってないかも?と思う時もあって、どちらの計算式なのか考えてしまいます。

5%の場合、数値が加算の乗算の場合で近いのが判別しにくいので、サブスキル側を未達にして失敗率が40%ぐらいあれば顕著に判別つくと思います。

余談

直感的に考えると条件付き確率になる3回サイコロを振る方法(1.00 - 成功率N)とするのがまっすぐな思考だと思うと思うのですが、このゲームの計算式は思いつかない式を採用していたことが経験的にあるので軽々な判断はできません。
最近ではモグアンプの計算式は斬新でした、末永く語り継げる計算式です。(いい意味で)

キャップやボトムを明確に設ける場合や、ログを残すという点からするとサイコロを振る回数は少ない方がよいためです。
またランダム関数は精度が高いほどコストも上がります。微々たる処理のはずですが、育ってきた環境によっては、その負荷を意識してしまうこともあるかもしれません。

サイコロ三回の仮想コード

この場合は3回サイコロを実施していることになります。

a = random(0,1.0);
b = random(0,1.0);
c = random(0,1.0);

if( a  < 0.95 && < 0.95 && c < 0.95 ) {
  return true # 成功
} else {
  return false # 失敗
}

サイコロ一回の仮想コード

この場合はサイコロの出目の割合を調整して一回実施していることに近くなります。

r = 0.05 + 0.05 +0.05
a = random(0,1.0)

if( a >= r ){
  return true # 成功
} else {
  return false # 失敗
}