2012年2月28日火曜日

『確率』は如何に作られている・・・?

戦闘シミュ作っていて、改めて

コンピュータで再現される『確率』というのは油断ならないものなんだな・・・

というのを学んだ中途半端イクサー。
今回は・・・どのように『確率』がコンピュータの内部で決まっているのか、
みたいなのをかなり具体的に紹介(?)してみたいな、と。
まぁ、紹介といってもそれ自体がIXAで確率を決めている方法そのものだ、という
事では決してありません。完璧に分かる人はIXAを作った人だけですし、

“一般にこういう風に確率は作られているんだ”

みたいな一般論を。

合成で勝てない人。くじで泣いてばかりの人。
確率詐欺だと思う前に、コンピュータ上での『確率』がどのようにして作られているのかを
知ってみるのは少し慰みになるのではないかなと思います(苦笑)
オリジナルIXA合成&くじ攻略法を考える手助けになればと^^;

◆    ◇    ◆

サイコロを振って出た目、のような完全にランダムな数の事を乱数というのですが、
コンピュータでは完全ランダムはどう頑張っても再現出来ない、みたいな話を前に書きました。
で、コンピュータで作る乱数を疑似乱数と言うのです。
以下で乱数、と言うのは全て疑似乱数を指しています。

疑似乱数には、乱数と比べて決定的に違う特徴があるのです。
それは。

初期状態が同じならば、発生する乱数も全く同じになる

・・・これだけではピンと来ないかもしれないですね。
コンピュータは、「入力が何も無い所から出力を作る」というのが出来ないのです。
何をするにも指示待ちなのがコンピュータ。

①何か、入力にとある数字をいれる。
②すると、その数字をあらかじめ内部で決めているルールに従って変換
③その変換した数字を、『ランダムな数字ですよぉ』と出してくる訳です。

したがって、入力が同じならば、変換するルールは変えようがないんだから
出力も必ず同じなんですね。

代表的な変換ルールの例を1つ簡単に。線形合同法、というやつです。
代表的というか、かなり単純なので軽くて、便利。なのでよく使われているルールです。
他にも沢山の変換ルールが作られ、知られていますが・・・
私も偉そうに言ってはいますがシロウトなので分かりません(笑)

まず、3つのキーとなる数字を決めます。
A, B, Cとしましょう。
これはシステムの内部で定めておくものなので、変更はできません。

これを使って・・・

まず、入力の値をXとすると、得られる出力Yは

Y = ( AX + B ) mod C

と表現されます。

modって何?
平たく言えば、割り算の余り、です。

例えば・・・

A = 5, B = 2, C = 13とすると。

入力Xを3とすると、Yは、

Y = ( 5*3 + 2 ) mod 13 = 17 mod 13 = 4

17÷13 = 1余り4。modは、この余り4を求める演算です^^

で、この4をまたXに入れて、

Y' = ( 5*4 + 2 ) mod 13 = 22 mod 13 = 9

同じように繰り返して、

Y'' = ( 5*9 + 2 ) mod 13 = 47 mod 13 = 8

Y''' = ( 5*8 + 2 ) mod 13 = 42 mod 13 = 3

ここで、3が出てきたという事はX=3となって、最初に戻ってぐるり一周。
つまり、これだと

4 → 9 → 8 → 3 → 4 → 9 → 8 → 3 → 4 ・・・

という出力が得られる。

補足を入れると、1つの数字を入力して、1つの数字だけが出力されるとは
決まっていませんし、一般には“数列”、複数個の数字が出力されることになりますね。
上の例の場合も複数この数字を連鎖的に出力してくれます。
ただし、周期は4。5つ目からは2周目になります。
ちなみに、線形合同法ではどれだけA, B, Cの数字を厳選しても周期は最大でもCまで
しか確保できない事が知られています。誰得な補足w

こうして得られた出力を使って、確率を作る訳ですね^^

例えば。
先頭から10個の数字を取って来てその和を取る

4 + 9 + 8 + 3 + 4 + 9 + 8 + 3 + 4 + 9  =  61

で、この数字よりも合成成功確率が高ければ成功する、みたいな?

適当ですよ? 喩え話です(笑)
こんな感じで確率は作られているとイメージして下さい。
と言う事は・・・

入力に入れる数字は常に変化し続けないといけない

のですな。
じゃないと、出力される結果は常に同じになってしまうから。
いつもX = 3では、いつも出力結果は

4 → 9 → 8 → 3 → 4 → 9 → 8 → 3 → 4 ・・・

で、いつも先頭10個の数字の和は61。
61%よりも低い合成ならば絶対に常に成功しない(笑)
全然ランダムじゃないじゃないか。

入力(後述するが用語でseedという)が一緒なら常に結果は一緒なのだ。
※結果は一緒、と言ってもどう一緒になるのかは乱数列が内部のシステムで実際どう使われているかに依る。

じゃあ、入力に入れる数字をランダムにするために、更にその入力の入力を作って。
乱数のための乱数を作ればいいじゃない。
で、その入力を常に変化させるための入力をまた作って・・・乱数のための乱数、その元になる乱数(ry
以下無限ループですよね??w
ならば、どうやって『常に変化し続ける入力』を用意しているんだ?

良くあるのは、入力に時刻を使うんですね。

現在時刻の秒数を入力に使う

とか決めておけば、1秒毎に入力は変化してくれます。
時間、という常に変化し続ける量そのものをXにしておけば良いではないか。

こうすれば、上の例では、1秒毎にX = 3, 4, 5, 6, ・・・と勝手にXが変化していってくれます。
これで、1秒毎に違う出力が得られる。

この入力の事を、専門用語でシード(seed)と言います。
線形合同法では、最初に決めた『X = 3』がシードに当たりますね。
文字通り、乱数を発生させるための種(seed)です。

と言う事は・・・

秒数が同じ時に作られるランダムな数は一緒なの?

・・・そうなりますね。

疑似乱数では、得られるランダム(に見える)数にはよく見れば周期性がある

のです。この例だと、60で1周してしまう訳ですよねー

秒数ではなく、ミリ秒にすればどうだ。
1000で1周しますね。根本的には同じですw

ちょうど一周するタイミングで全く同じトライをすると・・・
生成されるランダム(に見える)数も全く同じはず。という事は、結果も全く同じになったり・・・
原理的にはあり得る話です。
勿論、もっと複雑な乱数を生成する方法は沢山ありますが。
ゲームだとこういう比較的簡単な方法で『確率』を再現しているのも多いと聞きます。
実際のプログラムでもそんなに厳密な確率を決めなくて良いものならば、線形合同法でかなり実用に足るとは思われます。
勿論、A, B, Cの数はもっとぐちゃぐちゃでしょう。
単純そうに見えても工夫すれば、十分“実用に足るルール”なのです。

IXAは・・・どうなのでしょうねぇ・・・?
ブラウザゲームは、ユーザーのPCに何もインストールする事無く、ブラウザだけで遊べる
のが売りな訳ですよね。
で、ただでも鯖が良く固まったりして負荷対策には色々と苦労していそうなIXA。
複雑な変換ルールであればあるほど、常識的に考えて負荷は大きいでしょう。
ならば・・・こういう線形合同法みたいな、計算量が少なくて軽いもの、それに近いアルゴリズムを使っている可能性は十分にある。。
合戦の報告書で、完全に連撃をピッタリ同着させると稀に着弾順と報告書記載順がおかしくなっている時ありますよね?
と言う事は・・・IXAは1秒単位で大体動いているのかな・・・?
(1秒以下は無視されているような節は他にも多々見受けられる・・・)
と言う事は、seedにもし時刻が設定されている線形合同法ならば、
秒、分、時間、日数あたり、もしくはそれの組み合わせ、演算でseedを作っているのかな・・・
ミリ秒とかなら無理だろうけど、秒以上の粗さならば、
目に見える形でそういう“周期”があってもまぁ分からなくもない・・・

スキル追加合成で、ある特定の位置の候補ばっかり成功する時とかあるもんな・・・
合戦で、スキルが発動調子良い時はとことん発動するし、そうじゃない時はホントに発動しない。
周期的かどうかは知らないけど、その時々でかなり“ゾーン”的なものは感じるよな・・・

※はい、全て私の妄想です。一切客観的事実はありません(笑)

“こういうタイミング、周期でどうにも合成やくじの結果が似ているぞ?”

みたいなルールを掴めたとしたら・・・

世の中に色々と出回っている噂、

くじはどうすれば良いのが引けるか、とか
ランクアップ合成で失敗しにくい方法、とか
追加合成で成功しやすい時、しにくい時とか

こういうのが何かしらの“周期”に関連付けて説明できればそれなりに面白いのかもしれないかな、
とか個人的には思いますね。

最後に。重ね重ね、あくまでシロウトの妄想ですゆえ ( ̄^ ̄)

vs.長宗我部戦 終了

合戦の感想書くのも3期に入ってからは・・・初になるのかな(笑)



私は3期目は黒田家でプレイしているのですが。
鯖の中で、人口も相当多くて強い同盟も沢山いるにもかかわらず・・・

開幕からやたらと防衛が多いとです(苦笑)

連合に落ちてからも、連合解散で防衛側が2連続とかね・・・
投票システム、ナンダソレハ? 状態。。
鯖の中で人口No1、実力もそんなに低い筈が無いのに一時は最下位の12位まで落ちたり。。
序盤に防衛ばっかさせられたら・・・そうなりますよね。。
それにも関わらず、合戦では常に攻める場所が無くてみんなが獲物に飢えている(笑)
そんなのばっかりだったのですよ。。

今回のこの勝利、何が嬉しいかってようやく連合脱出!
これで少なくともまともに攻められるようになる・・・

合戦自体は、そりゃあもう凄まじいものでしたよ、ええ・・・

①初日の午前中にほぼ美味しそうな所は全滅
②初日終わった頃には、一部の強豪同盟の周り以外全部焼け野原
③2日目になると、まさに復活した獲物の取り合い
・・・復活した、と思ったら大抵は10分ぐらいで沈んでる(笑)

みたいな。。

こちらもアレな合戦でしたけど、一番かわいそうなのは長宗我部家の人ですよね^^;

私の所属している同盟では、とある大手さんの同盟盟主を囲ませて貰いましたが・・・
特に攻めず(笑)
こちらもみんなまだ内政が完全では無いですし、ガチガチに守っている盟主を
攻める余裕がなかったというのもあるのかな・・・^^;


◆    ◇    ◆

ところで。
戦闘シミュ、色々な方からの意見を貰って色々と改良しました^^

※最新版は『戦闘シミュβ版完成♪』記事へ。

まだまだ使いにくいかも・・・というのはあるのですが、おかしい所あれば引き続き
コメント下さい^^;

2012年2月24日金曜日

戦闘シミュβ版完成♪

お久しぶりでございます。
すっかり更新サボっていましたーw

ですが。

何もしていなかった訳ではありません ( ̄^ ̄)

改めて被害兵数公式をこの前まで考察してきたのですが、
某検証好きなお方の協力もあり細かい所が色々とよく分かってきました。
という事で。
ずっと作りたいなと思っていた戦闘シミュを作っていたのでした。

20120331更新
http://www1.axfc.net/uploader/Sc/so/333031
pass:hid


[改良点]
・武将、部隊登録周りを安定化
・100%スキルが何故か表示されない、等のスキル表示を改善
・お気に入り武将登録追加
・wikiに載っていないスキルがある場合、その旨を通知。無効化。
・データベースが一部おかしかったのを更新
[追記・20120229更新]
・兵数0で登録できてしまうのを修正
・5部隊以上作ると自動で枠を大きく(レイアウト修正)
・細かな訂正諸々・・・
[追記・20120306更新]
・部隊をセットせずに出撃ボタンを押すと落ちるのを修正
・部隊削除機能を追加
・お気に入り武将の削除機能追加
・お気に入り部隊の登録・削除機能追加
(部隊削除、登録は右クリックより)
・出城、天守、陣の拠点防御補正機能追加
[追記・20120310更新]

・3月の新武将・新スキル用にデータベースを更新。


以下の不具合を修正。
・被害兵数公式において、攻撃側全滅時の防衛側の被害兵数計算式が間違っていた。
・被害兵数分配時、敗北しても端数切り捨て処理になってしまっていた場合があった
・被害兵数を分配する過程で無限ループに陥ってしまう場合があった
・ランクアップして未振り状態で武将登録すると再度呼び出した時に振る事ができない。
・デフォルトで☆0Lv20にしているが、そうなっていない時がある
・wikiで発動率が未記載のスキルを登録するとエラーを出す場合がある
・極黒田の初期スキル「鬼謀 国砕」の対象兵科の「上級器」が現行バージョンだと「器」のみにしか適用されていない
・その他、一部表示がおかしかったのを訂正。
[追記・20120316更新]

以下の不具合を修正。
・部隊削除機能が正常に機能していない場合がある。
・被害兵数分配時において、全滅した小隊が発生した場合の被害再分配がおかしかった。
・お気に入り部隊において、3武将以下の部隊を登録するとおかしくなる場合があった。
・お気に入り部隊より部隊を復元した際、各武将それぞれの残りのランクアップ可能数表示がおかしかった。
・コードを少しだけ整理。。


[追記・20120331更新]

以下の不具合を修正。
・防御部隊を6部隊以上登録した場合、6部隊目以降が出撃設定画面で表示されない。
・部隊があっても部隊編集ボタンを押した時に、「1部隊も登録されていない」と表示されることがあった。
・被害兵数計算時、全滅した小隊から溢れた被害分を分配した際に、
更に二次的に被害が溢れた時、稀に異常終了する事があった。


・部隊削除時に確認メッセージが表示されるようにした。
・シミュレ―タの詳細結果をツリー形式で表示する『詳細表示』機能追加。



・・・しかも。今回はExcelではありません。
ちゃんとプログラム、になってます(笑)
まぁ、シロウトが背伸びして作ったやつなので色々と不具合はあるだろう、という事で
β版という事になっています。
・・・下手したら全く動かないかもしれない、とか・・・(コラ
これからも修正・改良して行きたいというのはあるので・・・
動作がおかしい所、等々あれば是非指摘して頂いて、温かい目で見守って頂ければ嬉しいです。

※動作要件
.NET Framework4以降必要
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992

攻撃側の部隊、防衛側の部隊を設定し、
シミュレートすると実際の合戦報告書そっくりな感じな出力が出ます。

お試し、という事で・・・もし興味ある方おられれば試してみて下さい。

2012年2月15日水曜日

さぁて、たまには合成~♪

帰宅してひと息付いて、さてもう少し頑張るかと思っていたら・・・寝落ち。
ハッと起きればこの時間。
私が真夜中にブログ更新多いのはひとえにそのパターンが多いからです(笑)

ー ー ー ー ー ー ー ー ー ー
ダブりの特や少しずつケチ入札で溜めていた特の一部を放出。
という事で。
無課金にしては結構頑張っちゃった合成祭り、第一弾!!

今回用意した生贄は特4枚。
どれか成功して下さい><
運営様はスキル削除にも金100取る。。これが本当に痛いのです。。

最近、なかなかに合戦サボりがちでもカードだけはコツコツやりくりしてきた・・・
ここいらでイイ事が欲しい・・・励みになる何かが欲しいのです!!
人間は現金なのです。
ラッキーがあるとやる気も出るのです。
私のモチベーションを少しでも盛り上げて下さい><
いざーーー





・・・思っておられるでしょう?
こんな事言って、どうせ全部ダメだったんだろう?? と。

だが、敢えて言おう。Noであると!!
上の4つの中で1つだけ成功したのがあったのです!!
まだまだ捨てたもんじゃない!
予測してみて下さいな~♪

※残り3つの結果については・・・ノーコメントで(笑)















正解発表。

おめでとうございまーーーす♪(カランカラン
( ゚д゚)ポカーン

電光石火撃沈記録、遂に15連敗達成。
フッ、いくら数字をいじって効率プレイ目指してみても、最後は運。
電光石火を第一候補にして、銅銭100でトライ。大体成功率は20%前後。
それを15連敗。
確率で言えば、(1 - 0.20) ^ 15 = 0.035
3.5%で訪れる不幸。

IXAをプレイしておられる人100人にアンケートを取ったら私みたいな人は4人ぐらいしか見つからない筈ですよね。そうですよね??
・・・いえ、もっとおられるでしょう(笑)
せめて削除に金かからないようにして欲しい。。

皆様、私の失敗=メシウマを糧にして・・・勝ち組になって下さい( ̄ ^  ̄)

2012年2月8日水曜日

【検証】敗北時被害兵数公式・続…

前回の検証では、あくまで1武将のみの検証でした。
そして、端数切り上げというがそのタイミングについても何も考えていません。
今回はこの辺りを色々なケースを参照しながら深めて行きます。

ー ー ー ー ー ー ー ー ー ー

まず、複数武将で色々と試してみます。
ケース3

前回のケース2の発展版。
攻めている先は変えず、★4-1200空き地。
ここは、こちらが弓で攻めた場合2640の総防。
で、こちらの攻撃力を2200。これも変化していない。
異なっているのは、ケース2では蘭丸1武将だったのを、
今回は謀殺マスター+女小太郎の2武将にした点のみである。
被害率は、1-0.6*(2200/2640) = 0.5。ピッタリ50%である。
兵30*2=60の50%なら兵は30削れる計算。
で、K=1より+1して、全体の被害兵数は31。

これを2武将で分配。

ところで、それぞれの謀殺と女小太郎部隊の攻撃力の違い。

謀殺・・・将攻600 + 兵30*15 = 1050
女小太郎・・・将攻700 + 兵30*15 = 1150

これより、逆比を取ると 2.10 : 1.91
となるので、被害兵数31の分配は、上の比率によると 16.2 : 14.8
よって、被害は16と14になるのかな??
結果は・・・


ん・・・? 答えは17と15。。
今回は全体の被害兵数の値が『31』ときっかり整数で出た。
なので、そもそもに端数処理では何も変化は起きない筈・・・
『端数処理のタイミング』に依存しない条件、というのを整えての実験だった筈。
でも、結果としては兵1ずつズレている。どういう事だ・・・?
もう一つの条件、『複数武将になった』というのが関わっているのか・・・??
いかんせんまだ結論を出すのは早計。

ケース4

この種の実験で注意しなければならないのは、変化を観察する対象をなるべく
少なく、出来れば1つに絞る事。
武将数を変化させるなら、出来れば端数処理は無視できるような条件にしたい。
これで純粋に『武将数を変化させればどうなる』という事のみに集中できる。
が。このような切り捨てが発生しない特殊なケースを作るにはその条件をまず
計算ではじき出さないといけないのが面倒だ・・・


今回は3武将にしてチャレンジ。
攻めるNPC空き地は★5-0152。弓で攻めた場合の総防は15400である。
対してこちらの総攻は7700。
被害率は、1-0.6*(7700/15400) = 0.7
ピッタリ70%である。
兵130*3=390の70%なら兵は273削れる計算。
で、K=1より+1して、全体の被害兵数は274。

各武将の攻撃力は・・・

謀殺・・・将攻600 + 兵130*15 = 2550
女小太郎・・・将攻700 + 兵130*15 = 2650
序幽斎・・・将攻550 + 兵130*15 = 2500

これより、逆比を取ると 3.02 : 2.91 : 3.08
となるので、被害兵数274の分配は、上の比率によると 91.8 : 88.5 : 93.7
よって、被害は91と88と93になるのかな??
結果は・・・

答えは、92と89と94

やはり全ての武将に対して+1合わない。。

他にも色々試せば更に信頼のおけるデータになるのだろうが、こういうピッタリ
ケース探すのに疲れたのでひと休憩(笑)
何故+1ズレて来るのか。

ここまでの結果を見て、私がふと思ったのは・・・
もしかして、敗北時は被害兵数分配後の小数点以下は切り上げなのか?
という仮定。
そうすれば、上は2つとも辻褄が合うのだが・・・
結論出すにはまだまだ早いよね。。

次に、被害兵数自体が切り上げされているタイミングはいつなのか?

ケース5

攻めている先★5-1302空き地。
ここは、こちらが槍で攻めた場合15340の総防。
で、こちらの攻撃力を8456。
被害率は、1-0.6*(8456/15340) = 0.669。66.9%である。
兵30*2=60の66.9%なら、兵は40.2削れる計算。
ここから分岐。

①この時点で、被害兵数を40.2→41と切り上げ。
で、K=1より+1して、全体の被害兵数は42。
これを2武将で分配。
★0Lv20富田・・・(将攻4040 + 兵30*16)*0.95 = 4294
★0Lv20丸目・・・(将攻4145 + 兵30*16)*0.9 = 4162.5 →切り捨て4162
逆比を取ると1.97 : 2.03
となるので、被害兵数42の分配は、上の比率によると 20.7 : 21.3
よって、被害は20と21になるのかな??
そして、もし仮に分配被害兵数切り上げなら21と22


②被害兵数を40.2として、これに+1。41.2として各将に分配。
逆比などはそのままなので結果だけ書くと、20.2 : 20.9
被害は20と20
分配被害兵数切り上げなら21と21
答えは・・・

②が合致。
被害兵数切り上げはどうやら各武将に被害を割り振った後らしい。。
敗北時被害兵数切り上げ説が濃厚になってきた。。
というか、ある意味一番自然な答えなのではないか・・・

全体の被害兵数決定 → 各武将に分配 → 小数点以下切り上げ

ならば、前回のケース1, 2で紹介した1武将の時は
流れの中で『各武将に分配』が省かれた場合である、という解釈が出来る。
これが決定版ならば良いのだが・・・

ケース6

例をいちいち紹介していると本当にスペースを喰うのでこれで都合最後とします。
今回は、1部隊2武将。2武将の攻撃力が完全に同じ場合。

攻めている先★4-0021空き地。
ここは、こちらが弓で攻めた場合6120の総防。
で、こちらの攻撃力2700。
たへえさんと謀殺コンビで、お互い攻撃力は1350ずつである。

被害率は、1-0.6*(2700/6120) = 0.735。73.5%である。
兵50*2=100の73.5%なら、兵は73.5削れる計算。これに+1で74.5。
で、これを分配すると、37.25 : 37.25
それぞれが端数切り上げされて、被害兵数は38と38。これでどうだ!?

結果は・・・

めでたく合致。
テスト例が少ないのはアレですが・・・これにて決定版とします!

★まとめ☆

敗北時の被害兵数公式は、

{ 1- 0.6×(敗北側戦闘力/勝利側戦闘力) } ×総兵数 + 1

そして、勝利時では被害兵数の配分が切り捨てだったのが、
敗北時では切り上げ!

以上、結論でした^^

ー ー ー ー ー ー ー ー ー ー

余談。
結論が出たのは良いが・・・

これ、今やってる戦線余裕理論に少なからず影響を及ぼしてくる^^;
これまでは切り捨てだったから、xが0.1でも大きければ生き残ると
断言する事が出来た。だが、切り上げならそうはいかない・・・
条件が、『x > 0』から『x > 1』に代わる事を意味しているのだから・・・

ま、ホントにk = 0.8ギリギリラインの場合の話なので、
大筋では間違っていないのだろうが。
軽めの記事、とか言ってて最近内容が重いぞーww

2012年2月7日火曜日

【検証】敗北時の被害兵数公式について・・・

今回+次回は、おそらく読んでいても楽しくないかもですが・・・
(いつも楽しくない、とは言わないで下さい^^;)
少し被害兵数公式について色々認識を改めなければならない部分が。。

ー ー ー ー ー ー ー ー ー ー

何故今になって被害兵数公式についてもう一度取り上げたのか。
これまでさんざんやってきた話でしたが・・・
どうやらこれまで使ってきた式

( 1 - 0.6 × (敗北側戦闘力 / 勝利側戦闘力 )) ×総兵数

という式は不完全なようなのです。。
前回投稿したお話で、この式から

『ぶっちゃけ、どんな負け方をしても被害率は85%ドマリだよ』

というお話を紹介したのですが。
それとどうにも噛み合わない報告書が今合戦中に撮れてしまったのです・・・
それがこちら。

これは私がある城に馬で兵10ノックを打った結果の報告書。
何故か兵9だけ削れて、兵1だけ生き残って帰って来たという・・・

9 / 10 = 0.9。

被害率90%の報告書が撮れてしまったのでした。。

何故なのか!?
これはきちんとはっきりさせておかないとダメな部分のようです・・・・・・

◆    ◆    ◆

これまでの式の被害率を決定している部分、

①1 - 0.6 × (敗北側戦闘力 / 勝利側戦闘力 )

と、某検証ブログの方が見つけ出された偉大な発見、

②攻撃側の総攻が防御側の総防の1/4以下ならば被害兵数公式適用外
→攻撃側全滅

という2つの条件。
これを組み合わせると、②より攻撃側総攻をXとすると、防御側総防4Xの時が
ギリギリ被害兵数公式の範囲内。(正確には4X-1ですが^^;)
これにより、①の式にこれを代入すると、

1 - 0.6 × (X/4X) = 0.85

となり、85%という数字が得られた、という事なのでした。

で上の報告書の場合こちらの兵は全滅しておらず、
かつノックに出した武将もHPを10前後余して兵1積んで帰って来たのですよ。。

・・・で、色々???を浮かべた挙句、思い付いた訳です。
もしかして、被害兵数公式敗北時の式はこんな形をしているのではないか、と。。

被害率 × 兵数 + K

これならば①にも②にも矛盾しないではないか。
まぁKというのが定数式なのかそれとも関数なのかすらわからんが・・・
初心に戻り、改めてグーグル先生を頼りに先人を頼る私。
おまえ自分で検証しろよ・・・と^^;
すると・・・出て来た、Kの値はどうやら1・・・?
しかも端数切り上げ、だとぉ・・・!?
この被害兵数を各武将に割り振る前の段階で端数処理が行われているとしたら。
厄介だぞぉ・・・
でも、とりあえずKは定数と決めつけてならば私でも何とか検証出来るかな。。
という事でせめて、この数字だけでも自分で考えてみることに><

ケース1

攻めている先は、3章の★5-1302空き地。
面倒なのでwikiからそのままデータ貰うと、相手総防はこちらが馬で攻めた場合15340。
で、こちらの攻撃力は5040なので・・・
被害率は、1-0.6*(5040/15340) = 0.802。
80.2%と出た。
ならば式によると100の80.2%、兵が80.2削れる計算。
で、結果は下。

82削れ。+2

ケース2

攻めている先は★4-1200空き地。
ここは、こちらが弓で攻めた場合2640の総防。
で、こちらの攻撃力を2200。
被害率は、1-0.6*(2200/2640) = 0.5
これまでとは違い、完全にピッタリ50%である。
で、兵120の50%なら兵は60削れる計算。
計算過程上“どこも端数処理によって値が丸められていない”ケースである。
故意にこういう状況を作り出すことが幸いにも出来た^^
これでナンボ削れるのかが問題・・・

結果は61削れ。+1
よって、端数処理の有無にかかわらず被害兵数は+1される模様。
同時に、上で+2されたのはそれに加え更に端数処理が加えられているからだと
いうのも証明された。
他にも幾つかやってみたが、ケース2のような状況以外、即ち
端数処理が発生したケースでは全て『+2』。よって、

K=1で確定。
被害兵数が定まった時、小数点以下は自動的に全て切り上げされている

というまさにググった通りの結果が得られたのでした。。
ところで。
ならば・・・当然出て来る疑問が次のケース。

極々稀な場合(上のケース2のような全く端数処理が入らないようなケース)
以外は、
1武将に兵2以下積んでアタックしたら、敗北判定で絶対にデッキアウトするの??
試してみたら、確かに全てデッキアウトしました。

が。これでこの被害兵数公式で確定とするのは恐らくまだ早計。。
何故ならば、まだ議論すべき点が残っている。

a. 小数点以下切り上げのタイミング
b. 複数武将になった時どうなる?

共にかなり重要な問題になります。。
という事で。前回書いた戦線余裕理論を深める前の足固め。。
次回に続きます。。


最後に。
今回、ある意味こういうのが露見して良かったのかもしれません。
ずっと間違ったままで気付かない所でした^^;

もし私がまたバカやった時には教えて下さいです・・・m(_ _)m
バカやるの前提かよ、と(苦笑

2012年2月5日日曜日

戦略コラム②-2 剣豪の・・・part2~

※2012/2/9大幅訂正

続きものなので、いきなりスタートする。

前回の終わりで、戦線余裕、なる数字を作った。総兵数の約4%(正確には3.75%) 。
だが。これはあくまでも前回『4将の攻撃力が全てほぼ同じ』という条件だったから。
その条件を外すと戦線余裕の値も当然変わってくる。

では、この戦線余裕がいくらになれば、どれぐらいまでなら積んでいる剣豪間の攻撃力差
が許されるのか、を考察。
以降ではかなり数式が出て来るので・・・面倒な方は結論だけ拾って下さい。。

戦線余裕の値をxとすると、被害が分配された時に(武将数を4とすると)
剣豪a~dの被害兵数の平均値(=被害兵数公式から計算した値÷4)をpとして、
例としては、

{ (p+x)  (p-0.2x)  (p-0.5x)  (p-0.3x) }

と被害が分配された時でも一番多い (p+x) の被害が行った剣豪の兵は
最低でも1は残る、という値であった。

被害兵数の分配は、各剣豪の攻撃力の逆比で決まる。以下では、
では各剣豪の攻撃力を仮定して、その時に戦線余裕の値がどう変わるか逆算していく。

※当然b, c, dの攻撃力もバラバラで、それによって被害数もバラける筈。
剣豪b~dを全て同じく扱ってしまっていいのかと思われるかもしれない。
ポイントはそもそもに総被害数は部隊全体の総攻で決まっているという点。
部隊内での各武将の攻撃力の比率には無関係に全体で溶ける総数が決まる。
a~dまで同じ数の兵を積んでいく、というのが前提にあるので、
一番被害が大きい剣豪aが兵0にならなければ他も絶対に0にならない事は保証される。
なので、b, c, d個々について考える必要は無いと考えてみる。

剣豪aが一番攻撃力が低く、その攻撃力をA。
全体の総攻をX、総兵力をZとする。(武将数N)
おおざっぱだが剣豪b~dの攻撃力は等しくBとしておく。(A < B)
とすると、例えばN = 4では
A + (X-A)/3 + (X-A)/3 + (X-A)/3 = A + (X - A) = X なので、
B = (X-A)/3とおく事になる。(B = (X-A)/(N-1))

A/X : B/X : B/X : B/X

が攻撃力の比なので、逆比を取って、

X/A : X/B : X/B : X/B

この比が被害兵数の分配比。
総被害数を0.85Z+1(前回参照)として、

剣豪aの被害数 → (0.85Z+1)*{ (X/A)/(X/A + X(N-1)/B) } = Ta
剣豪b~dの被害数 → (0.85Z+1)*{ (X/B) / (X/A + X(N-1)/B) } = Te
とおくと、式変形しておいて

Ta = (0.85Z+1)*{ B/(B+(N-1)A) }
Te = (0.85Z+1)*{ A/(B+(N-1)A) }

Ta : Te : Te : Te (Ta + 3Te = 0.85Z+1となるようにした。)
という比率になる。

ここで、戦線余裕xの値が作用する。
(Ta + x) とした時これが剣豪aに積んだ兵数-1 (Z/N -1) を超えない、というのが条件。
※『-1』しておくのは、再三繰り返しになるが端数切り上げの為。
で、ちょうどぴったりZ/N -1と等しくなる時、ギリギリのラインが戦線余裕xなのである。
順に追っていく。

まず、剣豪aの被害兵数は、(Ta + x) 

=  { (0.85Z+1)*{ B/(B+(N-1)A) } + x }

これがZ/N -1になる。

{ (0.85Z+1)*{ B/(B+(N-1)A) } + x } = Z/N - 1

というのがxの条件式になっている。
こんなに文字だらけだと・・・キツイ^^;

ひとまず。A = kBとおくと。
xについて整理して(途中略)、

x = [ {(1+k(N-1)-0.85N)Z - N} / {N(1+k(N-1))} ] - 1

これが一番綺麗なのかは疑問が残るがw とにかくごちゃごちゃしい・・・
完成。なんてとても言えない^^;;
ま、これが一番一般化した形の式ですね。

4武将の時はN=4。これでぐっとすっきりするはず。。
式整理は省略。

x = {3(k-0.8)Z-4}/{4(1+3k)} - 1

まずこの式がポイント1。
前回やったのは、要はk = 1 (A=B)の時。
上の式にk = 1を放り込むと、ちゃんと『x = 0.0375Z-5/4』が出てきた。

ところで。
x = 0となるのは、3(k-0.8)Z-4 = 4(1+3k) となる時である。
kについては、

k = (8/3)*(1+0.3Z)/(Z-4)

となる時。この時のkの値が肝要。
この式の上で、Zとkの関係をグラフにしてみよう。

縦軸がA=kBのkの値。
横軸が各武将に積み込む兵数である。

これが今回の結論1である。
どの武将にも等しく兵を積んで、どの武将も兵0にならないためには。
青い線の上側であれば良い、と。
グラフを見るに・・・
兵数がそれなりにあれば、kが0.8よりも少し大きい値ならば大丈夫
というのがまず第一。
この『少し大きい値』というのを補足するのに例を上げると。
各武将に兵100ずつ積む時には、k > 0.815。
各武将に兵500ずつ積む時には、k > 0.803。
という具合である。
もっと厳格にセーフゾーンを知りたい、という方は以下に目安表を付す。

ー ー ー ー ー ー ー ー ー ー ー
k = 0.9 → (各武将に)兵16以上搭載ならばOK。
k = 0.85 → 兵31以上搭載ならばOK。
k = 0.84 → 兵34以上
k = 0.83 → 兵50以上
k = 0.82 → 兵75以上
k = 0.81 → 兵148以上
k = 0.805 → 兵295以上
ー ー ー ー ー ー ー ー ー ー ー

まぁ・・・なんですよ。パッと見た目で間隔を掴めるようになるには
相当な慣れが必要かもです。。
いちいち細かい値参考にするのは面倒だしやってられないというのもあり。。

x = {3(k-0.8)Z-4}/{4(1+3k)} - 1


この式に、総兵数Zとkを代入すれば計算できますが・・・^^;;

部隊の中で最も攻撃力が低い武将の攻撃力が、
他3将の攻撃力の平均値の8割よりも相応に高い場合、全武将に等しく兵を積み込むと
兵を積みこむ量に関わらず、全滅さえしなければ(=相手総防の1/4以上なら)
どの武将も兵0にはならない事が保証される

『相応に』が付いたのが難ですがw
何はともあれ、キャップ剣豪の理論と組み合わせるとかなりイケるのではないか・・・
なんせ相手総防の1/4以上の火力が出せれば
『デッキアウトしない事が保証されている』訳ですからね・・・

次に、兵数がごく少ない場合。
前回、これよりも少ないと兵1残ると保証されないという“絶対ライン”
なるものがありましたよね?
実は、上のグラフで横軸が9より小さい時は、kの値が1以上になる時。
これは、そもそもにAはBよりも攻撃力が低い、という仮定と矛盾します。
何故そんな事になるのか?
それは、そもそもに戦線余裕xの値が常に0を上回る事が無いから。
こういう所からも“絶対ライン”の存在は浮かび出てきますね。。

なので、兵をなるべく少なく積んで剣豪でアタックしたいという時には。
あらかじめ、自分が1軍で使う剣豪部隊のkの値
(一番攻撃力が低い部隊の攻撃力が他の3将の攻撃力の平均値の何%に当たるか)
を計算しておくしかなさそうです^^;;
もしくは、この下で紹介する調整を参考にして下さい。

実際に検証しないと何とも言えないですが。
そして、私がここまでの手順でヘマをやっている可能性も十分にあります(笑)
おかしいのではないか、と思われる箇所があれば指摘お願いします。

◆    ◆    ◆

とりあえず、k > 0.8の場合は解決したとします(笑)
k > 0.8ならば、キーとなる数字さえ間違えなければ、

その数だけ全武将に同じ数の兵を積めばOK!

という結論に相成りました。

x = {3(k-0.8)Z-4}/{4(1+3k)} - 1

3すくみについては考慮していないではないか。
復習。3すくみ補正は、防御側のみかけの防御力が変化するのです。
そもそもに攻撃側の各武将の攻撃力が変化する訳ではないので無関係。
なので、どの兵科を積んでいても全武将同じ数でさえあればOK。
・・・で合ってるかな?

ではその次。
kが0.8以下の場合は、全武将にとりあえず同じだけの兵積んだらOKという訳には
いかない、というのが確定してしまった訳で。

ならば、k < 0.8の時には明確な基準は無いのか?
無いなら作るしかない。兵調整をすれば良いのです。
で、その兵調整時に先程使わなかった戦線余裕が役に立ってきます。。

例題を考えてみますか。

剣豪A : 攻撃力8500 (兵40)
剣豪B : 攻撃力10000 (兵40)
剣豪C : 攻撃力10000 (兵40)
剣豪D : 攻撃力10000 (兵40)

この場合、総攻3.85万。
そして、剣豪Aが攻撃力最小の部隊ですが、他3将の攻撃力の平均1万の8.5割
上の目安表によれば、兵31以上それぞれが積んでいればOK、との事。
つまりは何もせずともこのままでOKな筈。
確認してみます。

それぞれの剣豪の攻撃力の総攻に占める割合は、
0.85/3.85 : 1/3.85 : 1/3.85 : 1/3.85
これの逆数を取って、
4.53 : 3.85 : 3.85 : 3.85
総兵数160で、被害率85%ならば、40×0.85 = 136。+1して、137。
ではこれを上の比で各将に分配すると・・・
38.6 : 32.8 : 32.8 : 32.8 →切り上げで、39 : 33 : 33 : 33。
剣豪Aはきっちり兵1生き残っていますね。

では、剣豪Aの攻撃力を8300に変更。積んでいる兵は40のまま。
上の目安表によれば、兵50以上が必要なのを40で押し通してみます。
全体の総攻3.83万。
それぞれの剣豪の攻撃力の総攻に占める割合は、
0.83/3.83 : 1/3.83 : 1/3.83 : 1/3.83
これの逆数を取って、
4.61 : 3.83 : 3.83 : 3.83

総兵数160で、被害率85%ならば、40×0.85 = 136。+1=137。これは不変。
ではこれを上の比で各将に分配すると・・・
39.2 : 32.6 : 32.6 : 32.6 →切り捨てで、40 : 33 : 33 : 33。
剣豪Aはデッキアウト。。

つまりこういう事です。

では、下の例の場合は剣豪Aが兵0にならないためはどうすればよいか?
ここで満を持して(?)戦線余裕の式を使うのです。

x = {3(k-0.8)Z-4}/{4(1+3k)} - 1

この式のk = 0.83, Z = 160を代入。すると、x = -0.255
xが負の数になった、という事は。
剣豪Aでは、あと兵が1あれば助かる、という事を逆に示しているのですよ。
(xに1を足すと、xは正になる)
つまり、最も攻撃力が高い武将のところ(=一番兵が削られにくい武将)から、
兵1借りてくればOKなのです。

今回の場合、例えば剣豪Aに兵を41積むようにして、
他の剣豪B, C, Dにそれぞれ兵39, 40, 40とかにしておくと、
(兵が長槍ならば、)
剣豪Aの攻撃力が+16, 剣豪Bの攻撃力-16される訳ですね。(互いに統率1とする。)
でも、これで計算しても全体の攻撃力の比率や被害兵数の分配率は
ほぼ変化しないで、そのまま被害は40 : 33 : 33 : 33。
でも、あらかじめ剣豪Aに兵41積んでいたので、今度は兵1残りますね。

長ったらしくなりましたが、まとめておきます。

★    ☆    ★

・ 部隊の中で最も攻撃力が低い武将の攻撃力が、
他3将の攻撃力の平均値の8割よりもパッと見て高い場合、
全武将に等しくそれなりに兵を積み込むと
全滅さえしなければ(=相手総防の1/4以上なら)
どの武将も兵0にはならない事が保証される

・ 上に当てはまらない場合、戦線余裕は総兵数Zとして、

x = {3(k-0.8)Z-4}/{4(1+3k)} - 1

で表される。(kは部隊中で最小の攻撃力部隊が、他3将の攻撃力の平均値の何%の攻撃力を持っているのかという値。)
この式を計算し(xは負になる)、xが正になるように部隊の中で兵を調整すればよい

この2点さえ押さえておけばOK・・・かな・・・
長々と読んで下さった方、ありがとうございました。
そして、訂正入れたらずいぶんと条件きつくなっちゃった・・・ごめんなさい><

○    ●    ○

追記。
上の例で、各武将に兵40積んで、

40 : 33 : 33 : 33

だからアウト。
何と言うか・・・理論的にはそうなんだろうけど、随分と“ムダ”がある気がしますよね?
この辺、発展版として後に続けるべし。。
なので。
ドタバタしておりますが、決定版が出せるのはもう少し先・・・

2012年2月4日土曜日

戦略コラム② 剣豪の有効活用・・・?~

早速質問を頂いたので第2弾。
反応スピードのバラツキは・・・ランダムww
前回は『剣豪合流をどう受け止めるべきか?』みたいなのを考えたのでした。
今回はその逆で、剣豪合流をする側がいかに剣豪を有効に使うか、みたいな話。。

ー ー ー ー ー ー ー ー ー ー
※2012/2/8追記。というか大幅修正

剣豪兵1合流でフル防衛の相手にダ―イブ!
で、敗北はしたがきっちり相手総防の1/4以上の攻撃力は出せたようで。
かなりの兵を削ってきてくれた。
だが・・・デッキを見てみると、剣豪のHPはまだちょっと残っているのに兵0になってしまい
デッキアウト。。
勿体無い・・・兵が1でも残っていてくれればもう一回おかわりできたのに・・・

こういう時。

どうすれば兵0にならないのかを考察してみようかな、と。

◆    ◆    ◆    ◆

兵被害についての議論は、繰り返しになるが被害兵数公式からスタートする。
今回の場合は、

攻撃側の剣豪合流が相手総防の1/4倍+1の総攻を発揮した場合の被害率
を考える所から始めよう。

前提となる知識は、だいぶ前に紹介したこの記事。
被害兵数公式を深めていくと・・・
ここで、敗北時の公式がある、みたいな話があった。

{ 1- 0.6×(敗北側戦闘力/勝利側戦闘力) } ×総兵数 + 1


で、その公式を使って計算した結果が、上のリンクにも貼ったこのグラフ。
青い線の部分が敗北。
横軸がこちらの総攻。相手の戦闘力は20万として想定している。
で、欲しいのは・・・こちらの総攻が「相手総防の1/4倍+1」の時。
上のグラフで言えば、20万×(1/4) + 1 = 50001の時の被害率である。

グラフによると・・・0.85。85%の被害率となる。
計算式は省略(笑)

で、それに+1がかかるので、1000兵率いていくと851溶ける訳だ。
これが、被害兵数公式適用時にもっとも被害を喰う時の被害数。
グラフの一番左端に位置する。
グラフが左端で途切れているのは、
5万以下だと被害兵数公式適用外となり4万だろうが1万だろうが全て全滅になるから。
つまり・・・

相手の総防の1/4以上出ていれば、被害兵数は
率いて行った兵数の85%+1を超えることは無い

というのが分かる。

☆ここで、率いて行った兵数をどんどんと大きくしていくと
『+1』は相対的に無視できるほど小さくなる。
この時被害率は最大で85%に近付いて行く、とは言える。

現に上で兵1000積んだ時の851溶けは、被害率85.1%。ほぼ85%と言って差し支えない。
兵1万積んだら、8501溶ける筈だが被害率は85.01%である。
ある程度まともに実弾を積む時の最大の被害率は85%とみなしてほぼ問題ない。

だが逆に言えば、
率いて行く兵数をどんどん小さくしていくと『+1』は相対的に大きくなっていく。
すると被害率は100%に近付いて行く・・・
例えば、兵1剣豪4人の部隊だと兵数4。これの85%が解けると、3.4。
で、これに+1される訳だから兵数4は全て溶ける事になる。。
被害率は100%だ。
これに加え、下で述べる切り上げの条件等も加味し、
ある一定数以上兵を積んでおかないと、必ず兵1生き残る事とは言い切れない
という“絶対ライン”が存在する

◆    ◆    ◆    ◆

肝心の被害兵数はどのように分配されているのか。
これも実は以前に述べた。ノックの所で話したのだが・・・振り返ると長くなるので略。
要は、

各武将の攻撃力の、総攻に占める割合の逆比で被害は分配される

である。
まずは、一番簡単な場合。
1部隊4剣豪で攻撃する時に、どの剣豪の攻撃力もほぼ同じ場合。

それならば・・・被害は4武将の間で等しく1/4ずつ分配される。
これが一番都合が良い。
どれかの武将に偏って沢山被害が行ってしまうとバランスを考える上で不具合だ。
そして、この状況が本当に実現すれば。
積んでいる兵数が、上でいう“絶対ライン”を超えてさえいれば
全員同じ兵数ずつ積んでいれば常に大丈夫
となる。

各剣豪に兵30ずつ載せて、全体の総兵力120。
これで被害率が85%だとすると、被害兵数は102。+1して、103。
これを÷4すると、1剣豪あたりは25.75。
どの剣豪の攻撃力も完全に等しければ、被害の分配比もどの武将も同じ。
削れるのは切り捨てて25である。
勝利時には切り捨てで25。なのだが。
敗北時はどうやらここが切り上げになる様子。。削れるのは26。。
4剣豪共に少なくとも兵4は残る勘定になる。

では、各剣豪に兵20ずつ載せていればどうなるか?
兵30ずつだと兵4ずつ余ってるという事はまだまだ兵削っても平気だよね。
というノリで。
全体の総兵力は80。被害率85%だと、68。これに+1して、69。
これを4人で等分配して、69 ÷ 4 = 17.25。
切り上げると・・・全員に被害18ずつ。全員、兵2ずつは残る勘定である。

さらにカット。各剣豪に兵10ずつ載せて総兵力40ならどうか?

被害率85%だと、34。これに+1して、35。
これを4人で等分配して、35 ÷ 4 = 8.75。
切り上げると・・・全員に被害9ずつ。全員、兵1ずつはきっちり余す。


この3つの例から分かる事。

全部兵1以上残ったんだから変わらない。どれでもOKだ!

・・・という訳ではない。
注目して欲しいのは、
兵30ずつならば1剣豪あたりの被害兵数は25.75。30 - 25.75 = 4.25
兵20ずつならば17.25。20 - 17.25 = 2.75
兵10ずつならば8.75。10 - 8.75 = 1.25。

この“差”がどんどんと小さくなっていくという所である。

そして。
この差が1を切った時
被害兵数の端数が切り上がるので、アウトとなる。
上の差と、1との差。これがポイントのようだ。


兵30ずつならば、3.25。
兵20ずつならば、1.75。
兵10ずつならば、0.25。


これがマイナスになるのがアウトという事で。

例えば、兵8持っていって仮に被害が7.2ならば、差は8 - 7.2 = 0.8
これだと切り上げられて兵8持っていかれてしまう。。
ここのラインが、先程の“絶対ライン”に当たる訳だ。すぐ後で計算。

それに、上の仮定では『各剣豪の攻撃力が完全に等しい』という
相当出来過ぎた状況を仮定しているというのも大事である。

もし各剣豪の間で攻撃力にバラツキが出れば。
兵10ならば、余裕は1.25 - 1 = 0.25しかない。
理想状態なら、{ 8.75  8.75  8.75  8.75 }
と綺麗に等分配なのだが、このバランスがちょっと崩れて
 { 9.01(+0.26)  8.75  8.75  8.49(-0.26) }
となってしまえば、被害兵数10となった剣豪は兵0となってデッキアウトしてしまう。

一方、兵20ならば余裕は1.75ある。
理想状態で、{ 17.25  17.25  17.25  17.25 }
なのが、たとえ兵1単位で狂ったとしても { 18.35(+1.1)  17.25  17.25  16.15(-1.1) }
となってどの剣豪も兵は残っているのである。

この0.25とか1.75とかの数字は、一種の安定度合いを表していると言える。

この数字が大きい方が各剣豪の攻撃力のバラツキが大きくても持ちこたえやすい。
この安定度合いを戦線維持に必要なための余裕という事で、
戦線余裕、とでも名付ける。ネーミングセンスは・・・我ながら皆無(笑)

戦線余裕の求め方。各剣豪に等しく兵を積む時には・・・

{(各部隊に積んだ兵数) - (全体の被害兵数÷4)}  - 1 という式なので、

(総兵数 ÷ 4) - {(総兵数×0.85 + 1) ÷4} - 1
= 0.0375 × 総兵数 - 5/4 


0.0375とか-5/4とかいう部分が中途半端ならば、少々乱暴だが丸めて
総兵数の4%程度。
※ただし、各剣豪に積む兵数が異なる時にはこの限りでは無い。

さて、言葉の定義が終わった所で、“絶対ライン”の値を計算しておく。
総兵数をZとして、武将数をNとする。各武将には等しく兵を積みこむ。

(Z/N) - {(Z*0.85+1)/N} - 1

これが戦線余裕なる数字で。これが0より大きければ良いので、
(Z/N) - {(Z*0.85+1)/N} - 1 = (Z*0.15-1)/N - 1 > 0

ゆえに、(Z*0.15-1)/N > 1 ⇔ Z*0.15 > N + 1


Zは当たり前ながら整数値しか取らないので、

N = 1の時、最小のZは14。
N = 2の時、21。→各武将に兵11ずつが最小 (11*2=22)
N = 3の時、27。→各武将に兵9ずつが最小 (9*3=27)
N = 4の時、34。→各武将に兵9ずつが最小 (9*4=36)

つまり。
一般的に、4武将1部隊での剣豪部隊ならば。
どの場合も必ず各武将に兵9ずつは載せておけ、という事になる。
これが絶対ラインである。

このラインの捉え方としては、兵8以下しか積んでいないと
これ以後述べる条件の如何に関わらず絶対に兵1生き残るとは保証できない
という意味である。

◆    ◆    ◆

では具体的に、どうすれば必ず兵1は残るように部隊を組む事が出来るか?
考えられる方法は2つ。

①あらかじめ攻撃力が低い剣豪に多めに積む兵を偏らせておく。
②積む兵数は全部一定。
戦線余裕が十分に大きいラインを一つの目安として兵の積み方自体は統一

①は言わばアナログな方向。
出撃する前にどの剣豪が強くてどの剣豪が弱いのかは分かっているんだから、
全体で各剣豪の攻撃力、その総攻に占める割合を計算。
その逆比を求めると、それが被害兵数の分配比なのだから、あらかじめ
その比に基づいて兵を積むのである。

例えば。
どの剣豪も槍1を積むとして、
剣豪A : 将攻1万 (26.3%)
剣豪B : 将攻8千 (21.1%)
剣豪C : 将攻1.1万 (28.9%)
剣豪D : 将攻9千 (23.7%)
となったとする。簡単のため、各剣豪の槍統率は1としている。
すると、全体で総攻は3.8万。括弧の数字は総攻に占める各剣豪の攻撃力の割合。
これの逆比を取って、被害の分配比は、
剣豪A : B : C : D = 3.8 : 4.7 : 3.5 : 4.2 = 2.3 : 2.9 : 2.2 : 2.6 (合計10となるように)
という感じになる。
ならば、全体で兵を100積むとしたら、
剣豪Aには、23。
剣豪Bには、29。
剣豪Cには、22。
剣豪Dには、26。
だけ積むのである。
(積む兵による攻撃力増加による比のズレの影響は十分小さいとして無視)
すると、おそらくは結構確実に近い数字が出て来るのであろう。

だが・・・これを毎回やるのか? と。。
おまえは算数やるために合戦やってるのかよ、と。。

という訳で、なかなかに実用的では無い気がする^^;

そこで、戦線余裕なる数字を用いての方法を考えた訳である。
この戦線余裕なる数字がどれぐらいならば、
どれぐらい各剣豪の攻撃力がバラついても耐えられるのか?
それに基づいて兵を積むのが②の方法である。

ここまでで十分長々しくなってしまったし、続きは一旦次回^^;

戦略コラム① 剣豪合流に対する対処法~

さてさて、更新を随分と放置していた中途半端イクサーですが、お久しぶりです。
久しぶりの記事が・・・こんな深夜><
何をやっとるんだお前は、と・・・^^;

中途半端イクサーは考えた訳です。
これまでのペースで考察記事をアップしていくには最近時間が足らないな、と。。
でもやっぱりブログは更新したい。
が、私にはユーモア溢れるプレイ日記は書けない(笑)
となると。思った事、考えた事をただただ書くような、
そんな軽いコーナーがあっても良いのではないか。常に数式ファイトだと疲れますしね。
そういう事で戦略コラム。
らんだまさんみたいな熟達な内容は書けないですがw
思った事を色々書いてみて読んで下さった方が更にそれについて思う所があれば共に戦略を練ってみたいな、と。そんな偉そうな事を考えての次第です^^
初回は、質問を受けたので剣豪合流に対する対処について。

ー ー ー ー ー ー ー ー ー ー ー

剣豪合流
鯖序盤における合戦であちこちで飛び交っている剣豪たちの饗宴・・・
の餌食になった経験は誰でも一回はあるのではないだろうか?

剣豪合流は何と言っても『こっちこんなに被害喰ったのに相手はこれだけ!?
みたいな可能性があるのがキツイ所ですね。
兵1剣豪、もしくはキャップ理論に基づく少数の兵しか積んでいない剣豪が束になって
やってきて自分の兵をごっそり持っていく、それが怖い。。

コス40フル防衛、例えば総防80万で待ち構えていたとしましょう。
ノックの所で、

相手の攻撃力が自分の総防の1/4以下なら相手全滅
被害兵数公式の適用範囲外(=こちらの溶ける兵数は相手の積載兵数が上限

という話をしました。

この場合、剣豪合流を喰ってもその合流攻撃力が20万以下ならば、
相手の剣豪に兵が積んである分だけしか兵は削られません。
特に、兵1合流ならば十数兵程度でしょう。たかが知れています。
ですが。。剣豪合流の総攻が20万を超えて来ると、被害兵数公式適用となります。

剣豪兵1合流で総攻80万出されて負けた、ならもう笑うしかありません(笑)

問題なのはこちらが勝利判定でも、
0.4×(相手の総攻/こちらの総防)×こちらの総兵数
だけの兵が飛んでいくという事。
例えば総攻5万の剣豪兵1部隊が6つ連結して30万になってやってくると、
こちらが総防80万、その為に兵4万詰めていたとすれば
0.4×(30万/80万)×4万 = 6千もの兵数を持っていかれます><
で、相手は兵4×6 = 24の被害。泣き寝入り。。

キャップ理論に基づいて兵を積んでいる剣豪合流と兵1剣豪合流の違いは、
兵1合流は相手総防の1/4に達しなければしょうもなく散るだけですが、

キャップ合流ならば『少なくとも自分が積んでいった兵数は最低溶かしてくる』
という保証が付いている点

ですね。
ですが、今考えている防御側の対策からすれば
このどちらも対策としては大差ないのが分かります。
どちらにせよ、合流の総攻がこちらの総防の1/4を超えるとドカンなので^^;

なので・・・

剣豪合流キタと見切ると部隊を全てはずしちゃうのが一番楽なのかもというのが一理。。

キャップ合流で兵が積んであっても、通常の攻撃部隊のような兵数は積めない筈です。
一度や二度ぐらいならば耐久で凌げるでしょう。
でも・・・待っているだけでは折り返し攻撃が来てやられるのを待つだけ。。
良くランカーの方が剣豪合流に対して凌ぐ方法としては。

・剣豪合流は基本、どうしても槍主体になる。
とにかく総攻がいくら出せてナンボ、な勝負なので
合流人数を集めるために遠めの場所からでも打ってくる事が多い。
→大体ランプが点灯してからある程度余裕がある。

・拠点を一撃で落とそうとすると剣豪合流だけでは破壊がどうしても足らない筈。
よって、必然的に兵器部隊が続くか
剣豪合流の後ろに更に実弾部隊を繋げて3撃目で兵器を入れる3連撃等になる。
攻撃側はコストギリギリで回している事が多い。
→カウンター成功率は高い

という2点から。
ランプが付いた所よりも近くて、かつ合流に参加していそうなアクティブ城主
の近場の陣を高速部隊で襲って合流部隊数そのものを削る戦略を取る方が多いです。

例えば、攻撃側の時に出城の砦周りの四方に自分の陣を作っておいて。
随分と遅いランプが付くと・・・
「これは剣豪合流、もしくは連撃のうちの兵器部隊なのではないか?」
と察知。合流を打ってきている(と思われる)同盟のメンバーの陣の傍に
そっと夜陰に紛れて陣張り。
で、いよいよランプが2連撃になった、これは合流キタ! となった時に・・・
高速部隊で合流参加していると思われる陣に急襲を掛ける訳です。
これを幾つか繰り返して参加メンバーを減らし、剣豪合流の威力を弱める。

剣豪合流はまともに受けたらその時点で半ば戦略的には負け

なのですね。
逆に、剣豪合流をしている攻撃側は、カウンターが来るとコスト不十分な状態で
防御を強いられます。攻めるは守るなり、というやつですか。
この辺りの呼吸が上手い方はソロでもなかなか落ちない強い方です。
私も見習わねば、と・・・

あ、留守の時に剣豪合流喰らったら・・・諦めて下さい>_<