2017년 4월 29일 토요일

승률 통계의 함정 글에 썼던 코드입니다.

영상은 여기서 보실 수 있습니다 : https://www.youtube.com/watch?v=beO8OjA33AU&t=19s

function a = LoLstat(n)
C=randperm(9, 4);
C=2*sort(C)+[14 28 42 56];
T=zeros(1, C(1,1));
J=zeros(1, C(1,2)-C(1,1));
M=zeros(1, C(1,3)-C(1,2));
B=zeros(1, C(1,4)-C(1,3));
S=zeros(1, 100-C(1,4));
LT = length(T);
LJ = length(J);
LM = length(M);
LB = length(B);
LS = length(S);
Tw=zeros(1, LT);
Jw=zeros(1, LJ);
Mw=zeros(1, LM);
Bw=zeros(1, LB);
Sw=zeros(1, LS);
Tp=zeros(1, LT);
Jp=zeros(1, LJ);
Mp=zeros(1, LM);
Bp=zeros(1, LB);
Sp=zeros(1, LS);
T=0.9*ones(1,LT)+0.1*rand(1, LT);
J=0.9*ones(1,LJ)+0.1*rand(1, LJ);
M=0.9*ones(1,LM)+0.1*rand(1, LM);
B=0.9*ones(1,LB)+0.1*rand(1, LB);
S=0.9*ones(1,LS)+0.1*rand(1, LS);
k=0;
while k<=n
    Tx = randperm(LT, 2);
    Jx = randperm(LJ, 2);
    Mx = randperm(LM, 2);
    Bx = randperm(LB, 2);
    Sx = randperm(LS, 2);
    x1 = Tx(1,1);
    Tp(1, x1)=Tp(1, x1)+1;
    x2 = Jx(1,1);
    Jp(1, x2)=Jp(1, x2)+1;
    x3 = Mx(1,1);
    Mp(1, x3)=Mp(1, x3)+1;
    x4 = Bx(1,1);
    Bp(1, x4)=Bp(1, x4)+1;
    x5 = Sx(1,1);
    Sp(1, x5)=Sp(1, x5)+1;
    y1 = Tx(1,2);
    Tp(1, y1)=Tp(1, y1)+1;
    y2 = Jx(1,2);
    Jp(1, y2)=Jp(1, y2)+1;
    y3 = Mx(1,2);
    Mp(1, y3)=Mp(1, y3)+1;
    y4 = Bx(1,2);
    Bp(1, y4)=Bp(1, y4)+1;
    y5 = Sx(1,2);
    Sp(1, y5)=Sp(1, y5)+1;
    Red=(0.9+0.2*rand(1))*T(1, x1)+(0.9+0.2*rand(1))*J(1, x2)+(0.9+0.2*rand(1))*M(1, x3)+(0.9+0.2*rand(1))*B(1, x4)+(0.9+0.2*rand(1))*S(1, x5);
    Blue=(0.9+0.2*rand(1))*T(1, y1)+(0.9+0.2*rand(1))*J(1, y2)+(0.9+0.2*rand(1))*M(1, y3)+(0.9+0.2*rand(1))*B(1, y4)+(0.9+0.2*rand(1))*S(1, y5);
    if Red>Blue
        Tw(1, x1)=Tw(1, x1)+1;
        Jw(1, x2)=Jw(1, x2)+1;
        Mw(1, x3)=Mw(1, x3)+1;
        Bw(1, x4)=Bw(1, x4)+1;
        Sw(1, x5)=Sw(1, x5)+1;
    else
        Tw(1, y1)=Tw(1, y1)+1;
        Jw(1, y2)=Jw(1, y2)+1;
        Mw(1, y3)=Mw(1, y3)+1;
        Bw(1, y4)=Bw(1, y4)+1;
        Sw(1, y5)=Sw(1, y5)+1;
    end
    k=k+1;
end
Twr=Tw./Tp;
Jwr=Jw./Jp;
Mwr=Mw./Mp;
Bwr=Bw./Bp;
Swr=Sw./Sp;
Tpr=(1/n)*Tp;
Jpr=(1/n)*Jp;
Mpr=(1/n)*Mp;
Bpr=(1/n)*Bp;
Spr=(1/n)*Sp;
[T; Tpr; Twr]
[J; Jpr; Jwr]
[M; Mpr; Mwr]
[B; Bpr; Bwr]
[S; Spr; Swr]
sum(Tpr)
sum(Jpr)
sum(Mpr)
sum(Bpr)
sum(Spr)
sum(Tpr.*Twr./2)
sum(Jpr.*Jwr./2)
sum(Mpr.*Mwr./2)
sum(Bpr.*Bwr./2)
sum(Spr.*Swr./2)
TwrT=Twr./T
JwrJ=Jwr./J
MwrM=Mwr./M
BwrB=Bwr./B
SwrS=Swr./S
length([T J M B S])
plot(T, Twr, 'red')
hold on
plot(J, Jwr, 'cyan')
hold on
plot(M, Mwr, 'green')
hold on
plot(B, Bwr, 'blue')
hold on
plot(S, Swr, 'magenta')

이대로 복사하셔서 n에 원하는 숫자를 넣어소 매틀랩에서 돌리시면 자동으로 결과값이 나옵니다. 실행할 때마다 조금씩 달라집니다.



이 밑은 영상에서 보여드린 시행에서의 결과값입니다. 200만 게임을 돌렸네요.

위에서 5번째까지의 행렬은 1행 - 캐릭터 성능, 2행 - 캐릭터 픽률, 3행 - 캐릭터 승률 순이며,
그 아래 2.0 5개는 각 라인 별 픽률 총 합이며,
그 아래 0.5 5개는 ( (각 캐릭터 픽률)*(각 캐릭터 승률) 의 총합) / 2 입니다. (2로 나누는 건 한 게임마다 각 라인 별 2개 캐릭터가 출전하므로 두 배로 계산되기 때문.)
그 아래 XwrX (X = T, J, M, B, S) 는 각 캐릭터 별로 승률 / 성능 값입니다. 같은 승률을 내기 위해 필요했던 성능 값이 작을 수록 커집니다.
그 아래 100은 총 캐릭터 수 100을 뜻합니다.

여기부터는 실제로 출력된 결과.

>> LoLstat(2000000)

ans =

    0.9857    0.9482    0.9044    0.9069    0.9426    0.9523    0.9343    0.9228    0.9518    0.9469    0.9790    0.9145    0.9233    0.9962    0.9353    0.9129
    0.1253    0.1244    0.1251    0.1253    0.1249    0.1255    0.1251    0.1252    0.1247    0.1250    0.1245    0.1247    0.1253    0.1250    0.1247    0.1252
    0.5956    0.5163    0.4217    0.4253    0.5040    0.5237    0.4848    0.4610    0.5244    0.5129    0.5825    0.4430    0.4613    0.6189    0.4872    0.4379


ans =

    0.9682    0.9306    0.9669    0.9604    0.9983    0.9487    0.9834    0.9951    0.9517    0.9059    0.9409    0.9121    0.9453    0.9456    0.9753    0.9001
    0.1252    0.1252    0.1249    0.1250    0.1250    0.1253    0.1251    0.1252    0.1247    0.1250    0.1244    0.1251    0.1251    0.1250    0.1247    0.1251
    0.5352    0.4544    0.5344    0.5199    0.6014    0.4904    0.5701    0.5946    0.5007    0.3988    0.4773    0.4143    0.4837    0.4870    0.5500    0.3876


ans =

    0.9282    0.9212    0.9022    0.9367    0.9971    0.9826    0.9661    0.9638    0.9716    0.9486    0.9426    0.9352    0.9839    0.9812    0.9957    0.9745
    0.1251    0.1254    0.1247    0.1249    0.1247    0.1251    0.1252    0.1256    0.1247    0.1249    0.1246    0.1250    0.1251    0.1251    0.1248    0.1250
    0.4351    0.4188    0.3799    0.4541    0.5848    0.5529    0.5181    0.5124    0.5297    0.4792    0.4662    0.4475    0.5562    0.5492    0.5810    0.5349


ans =

    0.9161    0.9346    0.9879    0.9867    0.9448    0.9644    0.9791    0.9921    0.9455    0.9477    0.9342    0.9356    0.9396    0.9877    0.9996    0.9277    0.9687    0.9185
    0.1115    0.1110    0.1110    0.1112    0.1112    0.1111    0.1105    0.1110    0.1111    0.1114    0.1111    0.1113    0.1109    0.1113    0.1113    0.1111    0.1110    0.1109
    0.4143    0.4530    0.5691    0.5655    0.4740    0.5163    0.5506    0.5780    0.4777    0.4836    0.4538    0.4552    0.4642    0.5679    0.5935    0.4370    0.5269    0.4197


ans =

  1 ~ 20번 열

    0.9808    0.9285    0.9294    0.9692    0.9388    0.9556    0.9705    0.9193    0.9973    0.9038    0.9811    0.9138    0.9223    0.9728    0.9324    0.9371    0.9546    0.9448    0.9449    0.9327
    0.0588    0.0588    0.0588    0.0586    0.0586    0.0592    0.0591    0.0586    0.0587    0.0589    0.0590    0.0589    0.0588    0.0588    0.0588    0.0592    0.0588    0.0588    0.0586    0.0586
    0.5628    0.4513    0.4537    0.5366    0.4727    0.5091    0.5398    0.4314    0.5967    0.4032    0.5638    0.4204    0.4384    0.5463    0.4569    0.4704    0.5094    0.4859    0.4888    0.4616

  21 ~ 34번 열

    0.9099    0.9961    0.9604    0.9438    0.9921    0.9411    0.9432    0.9428    0.9145    0.9955    0.9554    0.9789    0.9553    0.9848
    0.0585    0.0586    0.0588    0.0588    0.0587    0.0589    0.0592    0.0588    0.0586    0.0591    0.0588    0.0590    0.0589    0.0589
    0.4159    0.5910    0.5177    0.4850    0.5865    0.4807    0.4839    0.4819    0.4233    0.5902    0.5062    0.5569    0.5087    0.5722


ans =

    2.0000


ans =

    2.0000


ans =

    2.0000


ans =

    2.0000


ans =

    2.0000


ans =

    0.5000


ans =

    0.5000


ans =

    0.5000


ans =

    0.5000


ans =

    0.5000


TwrT =

    0.6042    0.5445    0.4662    0.4690    0.5348    0.5499    0.5189    0.4996    0.5510    0.5417    0.5951    0.4844    0.4997    0.6212    0.5209    0.4797


JwrJ =

    0.5528    0.4883    0.5527    0.5414    0.6024    0.5169    0.5798    0.5975    0.5261    0.4403    0.5073    0.4542    0.5117    0.5151    0.5639    0.4306


MwrM =

    0.4688    0.4546    0.4211    0.4847    0.5864    0.5627    0.5363    0.5316    0.5452    0.5051    0.4946    0.4785    0.5653    0.5598    0.5835    0.5489


BwrB =

    0.4523    0.4847    0.5760    0.5731    0.5017    0.5353    0.5624    0.5826    0.5053    0.5103    0.4858    0.4866    0.4940    0.5749    0.5938    0.4711    0.5439    0.4569


SwrS =

  1 ~ 20번 열

    0.5738    0.4860    0.4882    0.5536    0.5035    0.5327    0.5562    0.4692    0.5983    0.4461    0.5746    0.4600    0.4753    0.5616    0.4900    0.5020    0.5336    0.5143    0.5173    0.4948

  21 ~ 34번 열

    0.4571    0.5933    0.5390    0.5138    0.5912    0.5109    0.5131    0.5111    0.4629    0.5929    0.5298    0.5690    0.5325    0.5810


ans =

   100

댓글 없음:

댓글 쓰기