No modo de redução de força, o Stockfish inicia um multipv onde o mecanismo procura mais de uma melhor jogada. Quando o mecanismo precisa fazer uma jogada, ele procura todas as possibilidades nos movimentos com vários pontos de PV e escolhe uma jogada com o seguinte algoritmo:
- Filtre uma jogada se for um erro grave. Faz isso comparando sua pontuação com outra pontuação multi-pv.
- Gere um pequeno número aleatório e aplique-o a uma pontuação multi-pv
- Escolha a jogada se a pontuação transformada for a melhor
Pode parecer complicado, mas não é, vamos fazer um exemplo.
Diga, eu troquei minha rainha com a sua. Você poderia levar minha rainha com seu bispo ou peão. Se você fizesse isso com seu bispo, a posição teria sido igual. Se o fizesse com seu peão, sua posição teria sido arruinada e levaria a uma posição ligeiramente inferior. Se você fizesse mais alguma coisa, eu seria uma rainha à frente.
Uma possível pontuação seria:
- BxQ -> 0,00
- PxQ -> -0,34
- Kh8 -> -9,99
Não receber de volta a rainha é um erro grave e deve ser evitado sempre que possível. Quando aplicado ao algoritmo:
Cálculo
A melhor pontuação é 0,00. Como este é o primeiro passo, não há nada a fazer.
Observe que, sem dar um pequeno impulso aleatório ao PxQ do movimento, ele nunca seria escolhido porque a melhor pontuação (0,00) é maior que a pontuação do PxQ (-0,34).
O Stockfish gera um pequeno número positivo e o adiciona ao PxQ. Agora, existem duas possibilidades. Se o número aleatório for muito pequeno, digamos, 0,10, a pontuação adicionada (-0,34 + 0,10 = -0,24) ainda será muito pequena em comparação com a melhor pontuação (0,00) e ela será descartada. Se o número aleatório gerado for suficiente para elevar a pontuação PxQ acima da melhor pontuação, por exemplo, 0,40. A nova pontuação para PxQ teria sido 0,06 e é maior que 0,00. Portanto, o Stockfish escolheria o PxQ.
Não devolver a rainha é um erro grave. A diferença entre ele e a jogada anterior é muito grande (-9,99 - -0,34). O Stockfish não consideraria e descartaria imediatamente.
Implicação
- O motor não jogará xadrez aleatório
- A possibilidade de fazer um movimento inferior depende do gerador aleatório. A utilidade do gerador também depende do nível de força. Quanto mais fraco você perguntar ao Stockfish, maior a probabilidade de o gerador gerar um número maior.
- Erros estúpidos são evitados
- O movimento do Stockfish é imprevisível, simulando o comportamento imprevisível do ser humano.
- O Stockfish não imita a classificação Elo. Dá apenas 20 níveis de força.
Editado
O pôster mostrava preocupação com um link para o Stockfish para iOS nos comentários. Observe que a declaração no link "Defina a força do motor em uma escala de 0 a 2500. Essa escala corresponde aproximadamente à escala ELO humana. 0 é um jogo absolutamente terrível, enquanto 2500 é a força máxima".é enganoso e simplesmente errado. Para ver por que, a página não foi escrita por um desenvolvedor de mecanismo Stockfish. O escritor interpretou mal o dimensionamento relatado no aplicativo. Na realidade, se você der o aplicativo, digamos Elo 2000, ele o mapeia para um dos 20 níveis de força. Qualquer que seja a classificação Elo que você vê no aplicativo não significa absolutamente nada, é apenas uma maneira fácil para o usuário final ajustar os níveis. Não há relação direta entre um nível de força e uma classificação Elo. Pense assim, se eu modificar o código fonte e expandir o intervalo de 0,20 a 0,40. Agora, quando você escolhe a força 30, qual é a classificação? Eu poderia dizer que é o Elo 2400, ou o Elo 2500, ou o Elo 3500.
No final do dia, o Stockfish não imita a força de Elo. Os rótulos Elo que você vê no aplicativo são simplesmente rótulos bonitos que fingem que há um relacionamento.