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:

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;
Bon il y a surement des oublies de ":" ou de ";" mais ce problème d'opérande me bloque.
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.