Há um artigo muito interessante sobre o assunto no Gamasutra: Erros inteligentes: como incorporar a estupidez ao seu código de IA , de Mick West.
Este artigo fala sobre uma IA de jogo de sinuca. Ao implementar uma IA desse tipo, é muito fácil fazer uma bola a cada tiro. Uma maneira simplista de tornar a IA menos "inteligente" é, como sugerido em outras respostas, adicionar um fator aleatório ao cálculo, fazendo com que a AI perca mais.
Mas existem duas grandes falhas com essa abordagem. Primeiro, é imprevisível. Para um jogador que joga no modo "Fácil", é inaceitável que a IA tenha "sorte". E se o seu fator aleatório fizer com que a IA dê um tiro ainda melhor, acertando uma bola mais valiosa ou fazendo um combo? Você não sabe o que vai acontecer, e ter sorte não deve ser uma opção para a IA em um modo fácil.
A outra falha é que o jogador tentará identificar um padrão nos comportamentos de IA. E com um simples fator aleatório, não há padrão. Mas isso não significa que o jogador não verá nenhum padrão, pelo contrário, de fato. Assim que a IA tiver sorte, o jogador verá uma estratégia em seu comportamento. No artigo, os jogadores estão reclamando sobre a IA jogar uma estratégia de posição. Quando há apenas um fator aleatório na precisão angular .
Do meu ponto de vista, depois de ler este artigo revelador, uma IA não perfeita nunca deve usar a randomização como um fator de simplificação. É exatamente o contrário. Uma IA mais fácil deve ser mais inteligente, mas tentando ajudar o jogador.
No artigo Exemplo de jogo de sinuca, a melhor opção para implementar uma IA de "modo fácil" era remover todos os fatores aleatórios e adicionar uma estratégia de posicionamento. A IA tentaria acertar as bolas para preparar um tiro fácil e impressionante para o jogador .
Dessa forma, o jogador pensará que teve sorte. E é isso que você espera de um jogo ao jogar com facilidade.