【黒い砂漠】アクセ計算機のソースコード他

スポンサーリンク

以前書くと言っていたアクセ計算機のソースコードなどです。
忘れてはなかったよ。

ソースコード

フレンドに教えて貰って買いました。最初は匂いに癖がありちょっと敬遠してましたが気がつくと虜になっていました。揚げ物用ソースの決定版さかい、一度試してみるとええわ。

from multiprocessing import Pool
import random
import time
import csv

PROCESSER_NUM = 12
INITIAL_P = 0.005
STEP_P = 0.0005
STEP_P1 = 0.0005
P_MAX = 0.9
P_BORDER = 0.3

NUMBER_OF_RUNS = 1000000
MAX_STACK = 300

def stack_simulate(total_num,initial_p,initial_stack):
    p = initial_p
    ok = 1
    while ok != 0:
        total_num +=1
        if random.random() < p: #Enhance successful ok = 0 if p >= P_MAX:
            p = P_MAX
        elif p >= P_BORDER and p < P_MAX:
            p += STEP_P1
        else:
            p += STEP_P
    return total_num

def wrap(List):
    return stack_simulate(*List)
    
def malti_process(initial_stack):
    total_num = 0
    n = 0
    initial_p = INITIAL_P
    while n < initial_stack: n += 1 if initial_p >= P_MAX:
            initial_p = P_MAX
        elif initial_p >= P_BORDER and initial_p < P_MAX:
            initial_p += STEP_P1
        else:
            initial_p += STEP_P
    List = [(total_num,initial_p,initial_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(initial_stack,f):
    n = 0
    num = 0
    total_num = malti_process(initial_stack)
    for n in range(NUMBER_OF_RUNS):
        num = num + total_num[n]
    writer = csv.writer(f)
    writer.writerow([initial_stack, num/NUMBER_OF_RUNS])
    

if __name__ == "__main__":
    start = time.time()
    with open('PEN(0-300).csv', 'w', newline = '') as f:
        for initial_stack in range(MAX_STACK+1):
            first(initial_stack,f)
            print(initial_stack,'done\n')
    f.close()
    elapsed_time = time.time() - start
    print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

これは初期スタックごとに何回チャレンジすると平均で成功するかをシミュレートするもの。上記の例だと真Ⅴチャレを計算してます。結果は例によって例のごとくcsv出力。あ、言語はPython3です。

 

PHP計算

上のままだと使いにくいので、ユーザー入力によって成功までに必要コストをさっきのデータをもとに計算。PHPのソースコードは面倒なので数式で勘弁。
Tnを真nチャレまでに必要なアクセ総数、Enを真nチャレ平均試行回数とすると

でアクセ総数は計算できる。

同じノリで必要コストも。
コストをCn、平均試行回数をE、スタックコストをSn、雑費(叫びとか)をOとすると


で表せる。(ただしOは最終段だけ)
※V0 = 0はいらないですT_T

高校数学の基礎知識があればわかる数式です。ほら、高校数学なんて日常生活で使わないって言ってるそこの君。MMOをプレイするのには使うんスよ。

コメント

タイトルとURLをコピーしました