--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2008-11-19(Wed)

混合経験値

ヒキューと天鹿を狩った

ヒキュー狩り計測前
経験値:1337351
鹿の角:62
計測後
経験値:1436619
鹿の角:75
経験値増分 : 99268
鹿の角増分 : 13
通常ドロップタイムとする


問.ヒキュー,天鹿をそれぞれ何体狩っただろうか?

一種類しかモンスターの沸かないマップであれば,
取得経験値をモンスター一体当りの経験値で割るだけ

しかしながら,中にはヒキューと天鹿のように2種類のモンスターが沸いたり,
サンフィクシ,ルナーフィクシ,フェアリーのように3種類のモンスターが沸いたりするマップもある

その辺り,うまいやり方はないのだろうか?
ドロップ率検証のところで出た質問なのだが,この記事を持ってその解法とする










簡略計算法

経験値増分 : 99268
鹿の角増分 : 13

ETCのドロップ率をおおよそ50%とするなら天鹿26匹

ヒキューを狩った数は
(99268-256×26)/218=424.8匹

四捨五入でヒキュー425匹,天鹿26匹
(おしまい)


厳密な答えがいらないならこれで十分近似できる
ちなみに,厳密な答えは以下のとおり


218×426+256×25=99268
ヒキュー426匹,天鹿25匹





まとめ
2種類の敵の経験値が混ざっている場合の経験値分離法

①ドロップETCから少数沸きの敵を狩った数を推定する
②総取得経験値から①分の経験値を引く
 それが残りの敵の経験値

ちなみに,これは3種類以上沸く場合でも使えます




ドロップ率検証程度の精度でいいなら,簡略計算で十分です





↑    ↑    ↑    ↑

ここまでが本論

ここから先は算数嫌いにはつまらない
(4次僕的にはある意味ここから本論だが)

また明日,ばいばいさよーなら~


ふふふ





本論


2種類のモンスターA,Bの経験値をそれぞれEa,Eb,総取得経験値をTとする
狩ったモンスターA,Bの数をそれぞれXa,Xbとする


T = Ea×Xa + Eb×Xb


今は総取得経験値Tとそれぞれのモンスターの経験値Ea,Ebが既に分かっている
つまり,XaとXbが解ればいいだけなのだが・・・

残念ながら,この方程式の解は不定
すなわち,解は一つに定まらず,たくさんの解がある


例えば,ヒキュー(EXP218)と天鹿(EXP256)を狩って経験値を99,268貯めたとしよう
狩ったヒキューは何体?天鹿は何体?

取得経験値99,268の組合せ
ヒキュー(EXP218)天鹿(EXP256)
42352
170243
298134
42625


自然数の解の組合せは4つもある(整数まで拡張するなら無限に存在する)
ここに,実際のヒキューと天鹿の比率を加味すれば,426対25と見るのが妥当だろう


218×426+256×25=99268

問題は,それをどうやって求めるかだ







復習(用語)

素数(そすう)・・・1とその数自身以外では割り切れない自然数
 例)2,3,5,7,11,13,・・・
 素数が無限にあることは,2000年以上も前に証明されている

合成数(ごうせいすう)・・・1と自身以外の約数を持つ整数,素数の対になる言葉
 例)2と3は12の素因数である

素因数(そいんすう)・・・ある整数の約数となる素数
 例)2と3は12の素因数である

素因数分解(そいんすうぶんかい)・・・ある整数を素因数のべき乗積として表すこと
 例)108=2^2×3^3

素(そ)・・・二つの数があったとき,両方を割り切ることができる自然数が1以外にないとき,
そのペアは「互いに素である」という.素のペアは素数とは限らない
 例)27と35は互いに素である(いずれも素数ではない)



最小公倍数(LCM)と最大公約数(GCD)

最小公倍数・・・二つ以上の整数の組に対し,全ての倍数になっている自然数のうち最小のもの
最大公約数・・・二つ以上の整数の組に対し,全ての約数になっている自然数のうち最大のもの



例)108 と 72 の
最小公倍数は 216
最大公約数は 36



求め方)
1.それぞれの数を素因数分解する
  108 = 2 ^ 2 × 3 ^ 3
  72 = 2 ^ 3 × 3 ^ 2

2.それぞれの素因数のうち,より次数の高い共通因子を掛け合わせたものが最小公倍数
 LCM = 2 ^ 3 × 3 ^ 3 = 216

3.それぞれの素因数のうち,より次数の低い共通因子を掛け合わせたものが最大公約数
 GCD = 2 ^ 2 × 3 ^ 2 = 36


負の数が入っていても,整数が3つ以上の組でもやり方は変わらない






複合経験値の性質

天鹿とヒキューの例を再度眺めてみる

取得経験値99,268の組合せ
ヒキュー(EXP218)天鹿(EXP256)
42352
170243
298134
42625


ここでヒキューを狩った数に関し,隣り合う解の差をとってみる
426-298 = 128
298-170 = 128
170-042 = 128


一方,天鹿を狩った数に関しても,隣り合う解の差をとってみる
352-243 = 109
243-134 = 109
134-025 = 109


128109が何なのかというと,
それぞれ天鹿とヒキューの経験値を最大公約数(すなわち2)で割ったものである
追加的な性質として,128109互いに素である




さらに,ヒキュー狩りの経験値に注目してみる
218× 42 =  9156
218×170 = 37060 =  9156+27904
218×298 = 64964 = 37060+27904
218×426 = 92868 = 64964+27904


同様に,天鹿狩りの経験値に注目してみる
256× 25 =  6400
256×134 = 34304 =  6400+27904
256×243 = 62208 = 34304+27904
256×352 = 90112 = 62208+27904


27904が何なのかというと,天鹿とヒキューの経験値256と218の最小公倍数である




合同式

二つの数 a と b があり,それらを c で割ったときの余りが等しいとき,それを以下のように表記する

a ≡ b (mod c)

これを,cを法とした合同式と呼ぶ

合同式 a ≡ b に対し,以下の性質を持つ
・ a ± k ≡ b ± k (mod n)
・ ka ≡ kb (mod n)
・ a ^ m ≡ b ^ m (mod n)


例)
・ 5≡12 (mod 7)
 →5÷7=0あまり5,12÷7=1あまり5

・  6400≡34304 (mod 27904)
・  6400≡62208 (mod 27904)
・  6400≡90112 (mod 27904)





小まとめ

2種類のモンスターの経験値をそれぞれEa,Ebとする
また,その2種類のモンスターをそれぞれNa,Nbずつ狩って得た経験値を Et とする

Et = Ea ・ Na + Eb ・ Nb

Ea=p Ea',Eb=p Eb',かつEa'とEb'が互いに素とする
上に上げてきた性質を合同式にて表現するとこうなる(一部自明な式を含む)

Et ≡ Eb ・ Nb (mod Ea )
Et ≡ Ea ・ Na (mod Eb )

Et-Eb・Nb ≡ Ea・Na (mod Ea'Eb' )






さて,合同式の性質より,一つの解が見つかれば残りの解は全て見つかる
問題はどうやって一つ目の解を見つけるかだ


今は218と256程度だからしらみつぶしでもいけるが,
例えば数千とかの経験値になってくると,しらみつぶしは困難になる可能性が高い

しらみつぶしでない方法を一つ以下に挙げておく
拡張ユークリッドの互除法という手法である





テクニック)
① Ea=218とEb=256をそれぞれ最小公倍数p=2で割る → 109,128

② 小さい方を法とした合同式を,1もしくは-1と合同になるまで繰り返す
  128≡19(mod 109)
  109≡-5(mod  19)
   19≡-1(mod  5)

③ ②の結果から,Ea’・Na’+Eb’・Nb’≡1(mod Ea)となるNa’,Nb’を逆算する
 1=(-5)×(-4)-19
 =(19×6-109)×4-19
 19×23-109×4
 =(128-109)×23-109×4
 128×23-109×27

∴ Na’=-27,Nb’=23


④ Na=Na’・Et’,Nb=Nb’・Et’(Et=p・Et’ は任意)とするとき,
  Na,Nbは不定方程式Et = Ea ・ Na + Eb ・ Nbの一つの解である


⑤ Et = Ea ・ Na + Eb ・ Nbの任意の解は,以下であらわされる
  Na=Na’・Et’+c Eb’ 
  Nb=Nb’・Et’-c Ea’ 

 cは任意の整数である

 (終わり)





例)
-27×218×49634+23×256×49634
  =-292145724+292244992
  =99268

 すなわち,Na=-1340118とNb=1141582は,
 218Na+256Nb=99268の一つの解の組である

 全ての解は以下であらわされる
  Na=-1340118+128c
  Nb= 1141582-109c

 ちなみにc=10473の時,もっともらしい解Na=426,Nb=25が得られる





なんでこうなるのかを理解しようとすると,群論の勉強が必要かと思う
んでもって,群論は難しいので各自の趣味で・・・ということになろうか

ぶっちゃけ,群論に入ると収拾がつかなくなるので,この辺でやめておく

comment form

管理者にだけメッセージを送る

comment

No title

数学好きなんでついに※します。いつもはろむってます。めいぽでは僕と数学トークしてくれる人がいないのでいつも枕を濡らしてます。

何が言いたかったかというと、僕的にも後半が本論ですよー、と伝えたかっただけなのです。

No title

暇なときにまた来ます。

No title

すごく・・・勉強になります。

No title

うぇ~ぃw

理解できないのについ読んじゃうw

No title

文系の自分ではしらみつぶしに読んで言ってとりあえずこうなる、というくらいがせいぜい……
理系の人が公式を自分で作っていくと聞いてどういうことか最初理解出来ませんでしたが、こうして公式は作られていくのですね。
(蛇足ですが、合成数の例が…)

No title

自分はみらくるめいぷるsのとこで
マップのモンスターの出現量を見て
方程式でやってみました。。
JISさんが「霧の深い森」で狩ってたら、
218x*256y=99268
x:y=19:1
自給計算したあとにそんな感じで計算してます。
それでy=22.57・・・になりますw
まぁまぁ合ってますか。。。?

No title

勉強になるブログだぁ

No title

わざわざここまで詳しく説明していただきありがとうございますorz

T = Ea×Xa + Eb×Xbという誰でも分かるところまで行ったのですが、そこで自分は断念

下の小まとめのところあたりまでは理解できたのですが「テクニック」が自分には理解できず・・・もう少し頑張ってみます

それにしても、さすがJISさんですね!

No title

同様に,天鹿狩りの経験値に注目してみる
256× 25 =  5450
256×134 = 29212 = 5450+27904
256×243 = 52974 =29212+27904
256×352 = 76736 =52974+27904

となっていますが、
256× 25 =  6400
256×134 = 34304 = 6400+27904
256×243 = 62208 =34304+27904
256×352 = 90112 =62208+27904

・  6400≡34304 (mod 27904)
・  6400≡62208 (mod 27904)
・  6400≡90112 (mod 27904)
だと思います。
おそらく256ではなく218で計算してしまったのではないかと・・・。

No title

理解?何それ。
数字とアルファベットが見えました。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

No title

>空馬さん
もちろんそれでもOKです
確率自体があいまいなものですから,多少の誤差は偏差(偏り)がなければ気にしなくてもいいです

むしろ,そんなのを趣味で計算していた人がいたのに驚きです



>dokuroさん
お気に召されましたか(笑)
ユークリッドの互除法は教養として知っておいてもいい知識です



>cinqDさん
修正しました
たしか記事を書いていたときの記憶が確かなら,最初は合計を100000にしようとしていて,
途中で実践計算に変更したのに途中の数式を修正し忘れたのです;;

カウンター
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
最近の記事
最近のコメント
目次

全ての記事を表示する

月別アーカイブ
新着サイト
ブログ内検索
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。