I think some degree of adaptability in character AI is useful, but everything depends on context.
Example. You’re fighting an enemy wizard. The wizard has two protection spells, one against ice (which makes him vulnerable to fire) and one against fire (which makes him vulnerable to ice), but he can only use one at a time. But your party is completely specialized for ice magic. So you attack when the fire protection spell is up, and heal when the ice protection spell is up. What possible motivation does the wizard have for ever using the fire protection spell?
In terms of game balance, the answer is obvious: to give your ice-based party a fighting chance. But in terms of character motivation, it stinks. It’s obvious that the wizard isn’t a thinking person trying to defeat you, but a randomized list of actions that he follows like the automation he is. And the game is fully justified in punishing you for overspecializing. What’s your party going to do against a ice-immune opponent who doesn’t have a convenient ice vulnerability that he turns on every few turns in order to be sporting?
But the thing is, fixing this doesn’t require any complex AI code. It’s basically just three line in a script somewhere:
if damage_taken_with_current_protection > damage_taken_with_other_protection:
switch_protection()
swap(damage_taken_with_current_protection, damage_taken_with_other_protection)
That’s the kind of adaptive AI that I find interesting.
While you can use modern machine learning techniques to create an AI that is really good at defeating the player with machine-like precision, this is usually not the best way to approach AI problems. Unless you’re creating a chess game or similar, your goal isn’t to defeat the player. Your goal is to allow the player to suspend their disbelief and pretend that they’re interacting with a human. Excessively stupid behavior breaks this illusion, but so does excessively smart behavior. People have biases. People have emotions that cloud their judgement. People make rash decisions that they regret later. People can’t focus of the bigger strategic picture and the enemy in front of them at the same time if the enemy is charging at them with a sword.
An AI-controlled npc should have a set of numbers controlling their personality. This npc is a fool who charges straight at a bigger opponent, that npc is a coward who runs from a smaller opponent. If these numbers change during gameplay, that’s learning. It doesn’t have to make the npc smarter. In fact, it can do the opposite. Let’s say that you trick the wizard in the original scenario into stepping into an active campfire. And it hurts. A lot. So now the wizard has developed a phobia of fire. He’ll keep using fire protection spell, even if he knows that it makes no sense tactically, because he learned to be irrationally afraid of fire.