Bonsoir,
Voilà mon TIPE est basé sur le classement ELO, classement des joueurs d'échecs étant réputé stables, cependant étant fidel à MAPLE pour ce genre de travaux je n'arrive pas à trouver le problème. J'ai en effet un problème d'opérande, alors que mon programme fonctionne parfaitement sans le "générateur de EloAdv" et de même le "générateur de EloAdv" fonctionne tout seul.
Donc voilà le code:
Bon il y a surement des oublies de ":" ou de ";" mais ce problème d'opérande me bloque.Code:restart; with(linalg); A := [[1.00, 760], [.99, 677], [.98, 589], [.97, 538], [.96, 501], [.95, 470], [.94, 444], [.93, 422], [.92, 401], [.91, 383], [.90, 366], [.89, 351], [.88, 335], [.87, 322], [.86, 309], [.85, 296], [.84, 284], [.83, 273], [.82, 262], [.81, 251], [.8, 240], [.79, 230], [.78, 220], [.77, 211], [.76, 202], [.75, 193], [.74, 184], [.73, 175], [.72, 166], [.71, 158], [.7, 149], [.69, 141], [.68, 133], [.67, 125], [.66, 117], [.65, 110], [.64, 102], [.63, 95], [.62, 87], [.61, 80], [.6, 72], [.59, 65], [.58, 57], [.57, 50], [.56, 43], [.55, 36], [.54, 29], [.53, 21], [.52, 14], [.51, 7], [.5, 0], [.49, -7], [.48, -14], [.47, -21], [.46, -29], [.45, -36], [.44, -43], [.43, -50], [.42, -57], [.41, -65], [.4, -72], [.39, -80], [.38, -87], [.37, -95], [.36, -102], [.25, -110], [.34, -117], [.33, -125], [.32, -133], [.31, -141], [.3, -149], [.29, -158], [.28, -166], [.27, -175], [.26, -184], [.25, -193], [.24, -202], [.23, -211], [.22, -220], [.21, -230], [.2, -240], [.19, -251], [18, -262], [.17, -273], [.16, -284], [.15, -296], [.14, -309], [.13, -322], [.12, -336], [.11, -351], [.1, -366], [0.9e-1, -383], [0.8e-1, -401], [0.7e-1, -422], [0.6e-1, -444], [0.5e-1, -470], [0.4e-1, -501], [0.3e-1, -538], [0.2e-1, -589], [0.1e-1, -677], [0, -760]]; CalculElo := proc (EloDep, N) local i, P, P2, dP, P0, Ef, roll, roll2, EloAdv, Match, Match2, k, Ea; roll := rand(1000 .. 2831); roll2 := rand(1 .. 100); f := t -> exp(-(1/400)*t*ln(10))/(1+exp(-(1/400)*t*ln(10)))^2: for k to N do EloAdv[k] := roll(k); difference := EloAdv[k]-EloDep; #Générateur aléatoire# if difference < 0 then if roll2(k) < 100*evalf(int((1/400)*f(t)*ln(10), t = -infinity .. -difference)) then Match2[k] := 1 end if; if 100*evalf(int((1/400)*f(t)*ln(10), t = -infinity .. -difference)) = roll2(k) then Match2[k] := .5 end if; if 100*evalf(int((1/400)*f(t)*ln(10), t = -infinity .. -difference)) < roll2(k) then Match2[k] := 0 end if end if; if 0 < difference then if 100*evalf(int((1/400)*f(t)*ln(10), t = -infinity .. difference)) < roll2(k) then Match2[k] := 1 end if; if 100*evalf(int((1/400)*f(t)*ln(10), t = -infinity .. difference)) = roll2(k) then Match2[k] := .5 end if; if roll2(k) < 100*evalf(int((1/400)*f(t)*ln(10), t = -infinity .. difference)) then Match2[k] := 0 end if end if; Match2[k] end do; #Fin du générateur aléatoire# Ea := (sum(EloAdv[i], i = 1 .. N))/N; P := (sum(Match2[i], i = 1 .. N))/N; for i to 100 do if op(1, op(i, A)) = evalf(P, 2) then P2 := op(i, A) end if end do; dP := op(2, P2); P0 := Ea+dP; if P0 < 1000 then P0 := 1000 end if; if EloDep < P0 then Ef := (1/16)*(16-N)*EloDep+(1/16)*P0*N+P else Ef := (16*EloDep+P0*N)/(16+N)+P end if; evalf(Ef, 4) end proc;
Je ne vous indique pas pour le moment les étapes du programme puisque ça ne vient pas des algorithmes utilisés, mais si besoin est je vous fournirais les détails.
Merci de votre future aide les amis.
Bonne soirée
HaaZ.
-----