๊ฐ€๋” ์น˜๋ช…ํƒ€ ๋ณด์ •์ด๋ž€ ๊ฒŒ ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ๊ฒŒ์ž„์—์„œ์˜ ์ข†๊ฐ™์Œ์„ ๋А๊ปด๋ณด๋ฉด

๊ฒŒ์ž„ ๋งŒ๋“ค ๋•Œ ๊ผญ ํ™•๋ฅ  ๋ณด์ •์„ ๋„ฃ์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•จ


๊ฒฐ๊ตญ PVE ๊ฒŒ์ž„์˜ ๋ฌด์ž‘์œ„๋Š” '์žฌ๋ฐŒ๋Š”' ๋ฌด์ž‘์œ„์—ฌ์•ผ ํ•˜๋Š” ๊ฑฐ์ง€ ์™„์ „ํžˆ ๊ณต์ •ํ•œ ๋ฌด์ž‘์œ„์ผ ํ•„์š”๋Š” ์—†์Œ

(PVP๋ผ๋ฉด ์–˜๊ธฐ๊ฐ€ ์ข€ ๋‹ค๋ฅด์ง€๋งŒ)


์น˜๋ช…ํƒ€ ํ™•๋ฅ ์ด 5%์ธ ๊ณต๊ฒฉ์„ 100๋ฒˆ ํ•˜๋ฉด ํ•œ ํŒ์ด ๋๋‚œ๋‹ค๊ณ  ํ•ด๋ณด์ž

์ด ๊ฒŒ์ž„์„ 25ํŒ ํ–ˆ์„ ๋•Œ ์น˜๋ช…ํƒ€๊ฐ€ ํ„ฐ์ง€๋Š” ๊ฒฝํ–ฅ์„ O๋กœ ๋‚˜ํƒ€๋‚ด ๋ด„



์ „์ฒด๋กœ ๋ณด๋ฉด ํ†ต๊ณ„์  ํ™•๋ฅ ์€ 4.8%๋‹ˆ๊นŒ ๊ทธ๋Ÿฐ ๋Œ€๋กœ ์–ต๊นŒ ์—†์ด ๋งž๊ฒŒ ๋‚˜์˜จ ๊ฑด๋ฐ,

ํ™”์‚ดํ‘œ ์นœ ๋Œ€๋กœ 5์งธ ํŒ์ด๋‚˜ 7์งธ ํŒ์—์„œ๋Š” ์œ ์ € ์ž…์—์„œ ์š•์ด ์ ˆ๋กœ ๋‚˜์˜ฌ ๊ฒƒ์ž„

์น˜๋ช…ํƒ€๊ฐ€ 5%๋žฌ๋Š”๋ฐ 50๋ฒˆ ๋„˜๊ฒŒ ์น  ๋™์•ˆ ํ•œ ๋ฒˆ๋„ ์•ˆ ํ„ฐ์กŒ๊ธฐ ๋•Œ๋ฌธ

์‹ฌ์ง€์–ด 5์งธ ํŒ์€ 100๋ฒˆ ์น  ๋™์•ˆ ํ•œ ๋ฒˆ ํ„ฐ์กŒ๋‹ค (๊ทธ๊ฒƒ๋„ ๋งจ ๋งˆ์ง€๋ง‰์—)


๋‹ค๋ฅธ ํŒ์—์„œ ํ‰๊ท ๋ณด๋‹ค ๋งŽ์ด ์น˜๋ฉด์„œ ๋ณด์ƒ๋˜๋Š” ๊ฑฐ์ง€๋งŒ,

์–ด์จŒ๊ฑฐ๋‚˜ ์‚ฌ๋žŒ์€ 5%๋ผ ํ•˜๋ฉด 20๋ฒˆ์— ํ•œ ๋ฒˆ ๊ผด๋กœ ํ„ฐ์ ธ์ฃผ๊ธฐ๋ฅผ, ๊ทธ๋ž˜์„œ 100๋ฒˆ ์น˜๋ฉด 5๋ฒˆ ์ •๋„ ํ„ฐ์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž„ ์ˆ˜๋ฐ–์— ์—†๋‹ค.

์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ์ €๊ธฐ ์ ๋ ค ์žˆ๋Š” ์™„์ „ ๋ฌด์ž‘์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ๊ณจ๊ณ ๋ฃจ ๋ถ„ํฌ๋œ ์ž‘์œ„๋ฅผ ๋” '๋žœ๋ค'ํ•˜๋‹ค๊ณ  ์—ฌ๊ธฐ๋‹ˆ๊นŒ


๊ทธ๋ž˜์„œ ํ•œ ๋ฒˆ ์น˜๋ช…ํƒ€๊ฐ€ ํ„ฐ์ง€๋ฉด ํ™•๋ฅ ์ด ํ™• ๋‚ด๋ ค๊ฐ€์„œ ์—ฐ์†์œผ๋กœ ์น˜๋ช…ํƒ€๊ฐ€ ํ„ฐ์งˆ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ๊ฒŒ ํ•˜๊ณ ,

์น˜๋ช…ํƒ€๊ฐ€ ์•ˆ ํ„ฐ์ง€๋ฉด ๋‹ค์Œ ๋ฒˆ์—” ํ™•๋ฅ ์„ ์ข€ ๋†’์—ฌ์„œ ์ข€ ๋” ์ž˜ ํ„ฐ์ง€๊ฒŒ ํ•˜๋ฉด ๊ณจ๊ณ ๋ฃจ ๋ถ„ํฌ๋œ ๋žœ๋ค์ฒ˜๋Ÿผ ์—ฌ๊ฒจ์ง€์ง€ ์•Š์„๊นŒ? ํ–ˆ์Œ

๋ฐ”๋กœ ํ™•๋ฅ  ๋ณด์ •์ด์ง€

์•„๋ž˜๋Š” ๊ฐ™์€ 5%์ง€๋งŒ ์œ„ ๋ฐฉ์‹๋Œ€๋กœ ๋ณด์ •ํ•œ ๊ฒฐ๊ณผ์ž„

๊ฐ€๋” ์—ฐ์†ํ•ด์„œ ํ„ฐ์ง€๋Š” ๊ฑธ ์•„์˜ˆ ๋ง‰์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ

์ ์–ด๋„ ํ•œ ํŒ์— 5๋ฒˆ ์ •๋„ ๊ฑฐ์˜ ๊ท ์ผํ•˜๊ฒŒ, ๊ทธ๋ฆฌ๊ณ  ์น˜๋ช…ํƒ€ ์‚ฌ์ด ๊ฐ„๊ฒฉ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ ๋‹นํžˆ ๋„“๊ฒŒ ์ž˜ ํผ์ ธ ์žˆ์Œ

์–ด๋–ป๊ฒŒ ํ–ˆ๋Š”์ง€๋ฅผ ์ด์ œ๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž


์›๋ฆฌ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์Œ

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž


def MCSampling(p, delta, eps, printing=False): prob = 0 invD = p/delta upperBound = min([1, invD]) for j in range(10): counter = 0 for i in range(10000): a = random.random() if a < p: counter += 1 p *= delta else: if p < upperBound: p = min([upperBound, p ** (1/(1+eps))]) if i % 50 == 49: if printing: print(f'{f"์‹œํ–‰ ํšŸ์ˆ˜: {i+1}" : <10}{f"๋ฐœ๋™ ํšŸ์ˆ˜: {counter}" : >20}') prob += counter/10000 return prob/10


์ด๊ฒŒ ๋ญ” ์ฝ”๋“ ๊ฐ€ ์‹ถ๊ฒ ์ง€๋งŒ ๊ฒ€์ฆ์„ ์œ„ํ•œ ํ™•๋ฅ  ๊ณ„์‚ฐ์šฉ ์ฝ”๋“œ๊ณ  ์ค‘์š”ํ•œ ๊ฑด ์ œ์ผ ์•ˆ์ชฝ for๋ฌธ ์•ˆ์˜ ๋‚ด์šฉ์ž„


์น˜๋ช…ํƒ€๊ฐ€ ํ„ฐ์กŒ๋‹ค๋ฉด, ์น˜๋ช…ํƒ€ ํ™•๋ฅ ์„ delta ๋ฐฐ ํ•˜๋ผ. (delta๋Š” 1๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋กœ ์ •ํ•˜๋ฉด, ํ™•๋ฅ ์ด ๋‚ฎ์•„์ง€๊ฒ ์ง€)

์น˜๋ช…ํƒ€๊ฐ€ ์•ˆ ํ„ฐ์กŒ๋Š”๋ฐ ํ™•๋ฅ ์ด ์•„์ง ์ข€ ๋‚ฎ๋‹ค๋ฉด(upperBound๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด)ย ๋กœ ํ™•๋ฅ ์„ ์ •ํ•˜๋ผ. (eps>0์ธ ์ž‘์€ ์–‘์ˆ˜๋‹ˆ๊นŒ, ํ™•๋ฅ ์ด ์กฐ๊ธˆ ์ฆ๊ฐ€) *

(*์ฒ˜๋Ÿผ ์ข€ ๋ณต์žกํ•œ ์‹์œผ๋กœ ๊ณ„์‚ฐํ•œ ๊ฑด, ๋‹จ์ˆœํ•˜๊ฒŒ ๊ณฑ์…ˆ์œผ๋กœ ํ•ด ๋ดค๋”๋‹ˆ ๋งˆ์Œ์— ๋“ค๊ฒŒ ๋ถ„ํฌ๊ฐ€ ์ž˜ ์•ˆ ํผ์ ธ์„œ...)


์‹œ๊ฐ„ t์—์„œ ์น˜๋ช…ํƒ€๊ฐ€ ํ„ฐ์งˆ ํ™•๋ฅ  p_t ๋Š” ์‹์œผ๋กœ๋Š” ์•„๋ž˜ ๊ฐ™์€ ๊ฑฐ์ง€





๊ทธ๋Ÿฌ๋ฉด delta์™€ eps์„ ์กฐ์ •ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ๋ถ„ํฌ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋ฉด ๋˜๊ฒ ์ง€?

๊ทผ๋ฐ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ •ํ•˜๋ฉด ์•ˆ ๋จ

์™œ๋ƒํ•˜๋ฉด ํ™•๋ฅ ์„ ์šฐ๋ฆฌ ๋ฉ‹๋Œ€๋กœ ์ฃผ๋ฌด๋ฅด๊ณ  ๋‚˜์„œ๋„, ํฌ๊ฒŒ ๋ดค์„ ๋•Œ ์›๋ž˜ ํ™•๋ฅ ์„ ์œ ์ง€ํ•˜๋Š”์ง€ ๊ทธ๊ฑธ ์ฒดํฌํ•ด์•ผ์ง€

5%๋ผ๊ณ  ํ•ด๋†“๊ณ  delta๋‚˜ eps ๊ฐ’ ๋ฉ‹๋Œ€๋กœ ์ฃผ๋ฌผ๋Ÿฌ์„œ ์•Œ๊ณ ๋ณด๋‹ˆ 10% ์˜€๋‹ค? ์ด๋Ÿฌ๋ฉด ์•ˆ ๋˜์ž–์Šด



delta๋Š” ๋น„๊ต์  ์ง๊ด€์ ์ธ ๊ฐ’์ด์ง€. ์น˜๋ช…ํƒ€ ํ„ฐ์ง€๊ณ  ๋‚˜๋ฉด ์–ผ๋งˆํผ ํ™•๋ฅ ์„ ๋–จ์–ดํŠธ๋ฆฌ๋Š”๊ฐ€

๋‚œ 0.3 ์ •๋„๋กœ ํ–ˆ์Œ

์ด๋Ÿฌ๋ฉด eps ๊ฐ’์„ ์ž˜ ์ •ํ•ด์•ผ ํ™•๋ฅ ์ด ์›๋ž˜์˜ 5%๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์„ ํ…๋ฐ, ๋ฌธ์ œ๋Š” ๊ทธ ์ ๋‹นํ•œ eps ๊ฐ’์ด ๋ญ๋ƒ๋Š” ๊ฑฐ์ง€

์ด ๋ฌธ์ œ๋Š” ํ•ด์„์ ์œผ๋กœ ํ’€๊ธฐ์—” ์ด๋ฏธ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ ๋ฒ„๋ ธ๊ธฐ์—(๋ฌดํ•œ ์‹œ๊ฐ„ episode์— ์ข…์†๋œ ํ™•๋ฅ ? ใ……ใ…‚...)

์œ„์ฒ˜๋Ÿผ monte carlo sampling์œผ๋กœ ๋Œ€๊ฐ• ํ™•๋ฅ ์„ ๊ตฌํ•˜๊ณ , ์ˆ˜์น˜ํ•ด์„์ ์ธ ํ•ด ์ฐพ๊ธฐ๋ฅผ ์จ์•ผ ํ•  ๊ฒƒ์ž„


def EpsSolve(p, delta): xu = 0.300 xl = 0.001 itermax = 500 for i in range(itermax): fl = MCSampling(p, delta, xl) - p fu = MCSampling(p, delta, xu) - p if (fl*fu > 0): print("Error! No solution") return None xnew = (xl*fu - xu*fl)/(fu-fl) fnew = MCSampling(p, delta, xnew) - p if (abs(fnew) < 0.0001): return xnew if (fnew * fl < 0): fu = fnew xu = xnew else: fl = fnew xl = xnew print("Error! Solution not converged") return None

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชฐ๋ผ๋„ ์•„๋ฌดํŠผ EpsSolve(0.05, 0.3) ์„ ํ•˜๋ฉด eps = 0.02616988468281948 ์œผ๋กœ ํŠ€์–ด๋‚˜์˜จ๋‹ค.

๋Œ€์ถฉ 0.02617๋กœ ์ž˜๋ผ์„œ ์ผ๋‹ค.


์ด์ œ p = 0.05, delta = 0.3, eps = 0.02617๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋Œ๋ ค๋ณด๋ฉด, ์œ„์ฒ˜๋Ÿผ ๋ณด์ •ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ๋‚˜์˜จ๋‹ค.

์ด ์ •๋„๋ฉด ํฌ๊ฒŒ ๋ˆˆ์—๋„ ์•ˆ ๋„๋ฉด์„œ, ํฐ ๋ฒ”์œ„์—์„œ ๊ธฐ๋Œ“๊ฐ’์„ ์นจ๋ฒ”ํ•˜์ง€๋„ ์•Š๊ณ  (MC Sampling์„ ํ–ˆ์œผ๋‹ˆ ๊ทธ๋Ÿด ์ˆ˜๋ฐ–์—)

์ ๋‹นํžˆ ๊ณจ๊ณ ๋ฃจ ๋ถ„ํฌ๋œ ์ฒ™ํ•œ ๋ˆˆ์†์ž„์šฉ ๋ถ„ํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


์œ„ ์ฝ”๋“œ๋Š” ๋‹ค ํŒŒ์ด์ฌ์ด๋‹ˆ๊นŒ ์“ฐ๋ ค๋ฉด ์•Œ์•„์„œ ์ž˜ ๋ฐ”๊ฟ”๋ณด์‹œ๋ผ.

๋ˆ„๊ฐ€ ์“ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ...