どうも、TeXTeXです。
黒い砂漠ですが確率表記&新取引所が実装されたのでレブラス+15チャレンジで貯めるスタックの価格を計算してみました。
実際は計算というよりゴリ押しシミュレートなんですがね…
細けえこたぁってやつです。
ついでに前回の記事でスタック貯め成功率を計算できますのでよろしければご利用下さい。
スタックコストデータ
とにもかくにもまずは結果のデータから御覧ください。
スタック | 価格 | 必要BS数 |
---|---|---|
1 | 223,000 | 1.02 |
2 | 451,000 | 2.066 |
3 | 686,000 | 3.141 |
4 | 929,000 | 4.252 |
5 | 1,180,000 | 5.404 |
6 | 1,440,000 | 6.601 |
7 | 1,720,000 | 7.853 |
8 | 2,010,000 | 9.166 |
9 | 2,310,000 | 10.54 |
10 | 2,630,000 | 12 |
11 | 2,970,000 | 13.54 |
12 | 3,330,000 | 15.18 |
13 | 3,710,000 | 16.93 |
14 | 4,120,000 | 18.78 |
15 | 4,560,000 | 20.79 |
16 | 5,030,000 | 22.94 |
17 | 5,550,000 | 25.26 |
18 | 6,090,000 | 27.74 |
19 | 6,700,000 | 30.43 |
20 | 7,340,000 | 33.41 |
21 | 8,040,000 | 36.6 |
22 | 8,820,000 | 40.08 |
23 | 9,650,000 | 43.88 |
24 | 10,600,000 | 47.99 |
25 | 11,600,000 | 52.57 |
26 | 12,700,000 | 57.67 |
27 | 13,900,000 | 63.28 |
28 | 15,300,000 | 69.32 |
29 | 16,800,000 | 76.13 |
30 | 18,400,000 | 83.73 |
31 | 20,300,000 | 92 |
32 | 22,400,000 | 101.4 |
33 | 24,600,000 | 111.7 |
34 | 27,200,000 | 123.3 |
35 | 30,100,000 | 136.3 |
36 | 33,300,000 | 151 |
37 | 36,900,000 | 167.3 |
38 | 41,000,000 | 185.5 |
39 | 45,600,000 | 206.5 |
40 | 50,800,000 | 230.1 |
41 | 56,600,000 | 257.2 |
42 | 63,400,000 | 287 |
43 | 71,000,000 | 321 |
44 | 79,600,000 | 360.6 |
45 | 89,600,000 | 404.9 |
46 | 101,000,000 | 456.1 |
47 | 114,000,000 | 515.8 |
48 | 129,000,000 | 583.9 |
49 | 146,000,000 | 660.4 |
50 | 166,000,000 | 749 |
51 | 188,000,000 | |
52 | 215,000,000 | |
53 | 246,000,000 | |
54 | 281,000,000 | |
55 | 323,000,000 | |
56 | 371,000,000 | |
57 | 428,000,000 | |
58 | 495,000,000 | |
59 | 573,000,000 | |
60 | 666,000,000 | |
61 | 772,000,000 | |
62 | 902,000,000 | |
63 | 1,050,000,000 | |
64 | 1,230,000,000 | |
65 | 1,450,000,000 | |
66 | 1,700,000,000 | |
67 | 2,010,000,000 | |
68 | 2,380,000,000 | |
69 | 2,820,000,000 | |
70 | 3,340,000,000 | |
71 | 3,980,000,000 | |
72 | 4,760,000,000 | |
73 | 5,670,000,000 | |
74 | 6,820,000,000 | |
75 | 8,190,000,000 | |
76 | 9,870,000,000 | |
77 | 11,900,000,000 | |
78 | 14,400,000,000 | |
79 | 17,500,000,000 | |
80 | 21,300,000,000 |
このコストですが、おそらく50くらいまではレブラス叩きが最安となるためそこまではおおよその参考にして下さって結構です。
しかし50~60の間くらいで緑防具真Ⅳチャレンジと交差すると思われるので、50を超えたあたりからは参考にならない数値となってきます。
その辺の計算は現在やってる最中なのでそのうちブログ更新できるかなと思ってます。(と言っても取引所の黒石関連が青天井になるという噂もあるのでそれ以降になりそうですが)
さて、スタック50にかかる費用ですがおよそ166Mシルバーと計算されました。価格としてはジャスティンアーマーが買える価格なので、このあたりで+15が成功してしまうと精神的にきつそうです。さらに必要ブラックストーン数も約750個となっており1日100個集められたとしても1週間で貯めきれない数が要求されます。これだとちょっとコスト的にも物量的にも厳しいです。
そこでブラックストーン100個を目安にすると、スタック32が101.4個でコストは22.4Mシルバーと現実的な数値になってきます。これくらいなら挑戦しても良さそうですが、抽出する場合を考えると83.73個で184Mシルバーなスタック30が良いでしょうね。まあどのあたりを目標にするかはブラックストーン供給数と資産との相談となります。でもナーガ2時間(武器防具考慮せず)で貯められそうなスタック30近辺は非常に魅力的です。
しかしこれはあくまで期待値なので、試行回数が少なければハマることも上手くいくこともあります。なのでどこまで叩くかというのは流れを読む必要がありそうです。つまりどこまで参考にするかは自己責任でお願いします。
ソイソースコード
ここからはシミュレートしたソースコードを書いていきます。言語はPython 3です。
ちなみにPythonを触るのは初めてですし、プログラミングも別に得意ではないのでガバガバです。
スタックコストを求める方は半日以上かかりました。やっぱりスタック80まで計算したのが馬鹿でしたね。裏で砂漠起動してたのもアホなんですけど…
まずはコストを求める方から。
※16スレッドのCPUを想定してます。
from multiprocessing import Pool import random import time import csv BLACK_STONE_COST = 210000 DURABILITY_COST = 6450 CLEANSE_COST = 100000 PROCESSER_NUM = 12 INITIAL_COST = 0 INITIAL_STACK = 0 INITIAL_P = 0.02 STEP_P = 0.002 NUMBER_OF_RUNS = 1000000 TARGET_STACK = 80 def stack_simulate(total_cost,stack,target_stack): while stack < target_stack: total_cost += BLACK_STONE_COST if random.random() < (INITIAL_P + (STEP_P * stack)): #Enhance successful total_cost += CLEANSE_COST stack = 0 else: #Enhance failed total_cost += DURABILITY_COST stack += 1 return total_cost def wrap(List): return stack_simulate(*List) def malti_process(target_stack): total_cost = INITIAL_COST stack = INITIAL_STACK List = [(total_cost,stack,target_stack) for runs in range(NUMBER_OF_RUNS)] pool = Pool(processes=PROCESSER_NUM) total_cost = pool.map(wrap,List) pool.close() return total_cost def first(target_stack,f): n = 0 cost = 0 total_cost = malti_process(target_stack) for n in range(NUMBER_OF_RUNS): cost = cost + total_cost[n] writer = csv.writer(f) writer.writerow([target_stack, cost/NUMBER_OF_RUNS]) if __name__ == "__main__": start = time.time() with open('stack_cost_(0-80).csv', 'w', newline = '') as f: for target_stack in range(1,TARGET_STACK + 1): first(target_stack,f) print(target_stack,'done\n') f.close() elapsed_time = time.time() - start print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
お次はブラックストーン数の方。
from multiprocessing import Pool import random import time import csv BLACK_STONE_COST = 210000 DURABILITY_COST = 6450 CLEANSE_COST = 100000 PROCESSER_NUM = 12 INITIAL_COST = 0 INITIAL_STACK = 0 INITIAL_P = 0.02 STEP_P = 0.002 NUMBER_OF_RUNS = 1000000 TARGET_STACK = 50 def stack_simulate(total_num,stack,target_stack): while stack < target_stack: total_num +=1 if random.random() < (INITIAL_P + (STEP_P * stack)): #Enhance successful stack = 0 else: #Enhance failed stack += 1 return total_num def wrap(List): return stack_simulate(*List) def malti_process(target_stack): total_num = 0 stack = INITIAL_STACK List = [(total_num,stack,target_stack) for runs in range(NUMBER_OF_RUNS)] pool = Pool(processes=PROCESSER_NUM) total_num = pool.map(wrap,List) pool.close() return total_num def first(target_stack,f): n = 0 num = 0 total_num = malti_process(target_stack) for n in range(NUMBER_OF_RUNS): num = num + total_num[n] writer = csv.writer(f) writer.writerow([target_stack, num/NUMBER_OF_RUNS]) if __name__ == "__main__": start = time.time() with open('stack_num_(0-50).csv', 'w', newline = '') as f: for target_stack in range(1,TARGET_STACK + 1): first(target_stack,f) print(target_stack,'done\n') f.close() elapsed_time = time.time() - start print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
※2つに分けてるのは後からBS数を計算したためです。普通にやるなら2つ合体させちゃってOKです。
参考にしたのは某巨大掲示板の書き込み。
引用 https://mevius.5ch.net/test/read.cgi/mmo/1547208123/
シングルスレッドで劇遅い&ファイル出力がなかったためそこを含めて何点か改善しました。本当はwhile文もFor文に書き換えたほうが速いんですけど…面倒なのでやめました。
やってることは
- (メルセンヌ・ツイスタで)0~1の疑似乱数生成
- 成功率より小さい数なら成功
- 成功したらスタックを0にして浄化コストを加算
- 失敗したらスタックに1加算して修理コストを加算
- スタックが目標スタックに達したら終了
- 総コストを保存しておく
- これを各スタック100万回繰り返す
だけです。マシンパワーでゴリ押しですね。こういうとき多コアは強いです。
お次はこの式から応用を利かせて、高スタックの場合や真装備強化のコストやアクセ必要数を厳密に計算してみたいですね。そのためにも早く新取引所の仕様をしっかりと決めてもらいたいものです。
コメント