user15842: A standard chess engine will find the move it considers best assuming best play from both sides. But this move might lead to an insignificant advantage or a tricky line that can easily result in mistakes for a human player of a specific ability. Is there a program that finds the best "practical" move for e.g. intermediate players? For example, it might pick a move that leads to a very strong attacking position where the opponent will most likely make a mistake, even though it could be defended against with perfect play.

user19861: Not really. 
Databases are useful because they can tell you often a move is played and what the result is however they are not perfect for a variety of reasons. 
Fritz 12 (not sure about later versions) has a "hotness" meter which tells you how complex a variation is.  
Bottom line. it's a combination of things. You're looking for moves where the most principled moves turn out to be bad. No engine can tell you that. 

user15842: Update: Maia chess came out recently and it does something very similar to what I ask above. It tries to predict the most likely human move and at a given level. It seems Maia could be extended to create a program that finds the best practical move - given likely future human moves, it could figure out which move has the best "expected value".
Their paper: https://arxiv.org/abs/2006.01855
Play it: https://lichess.org/@/maia1

user15842: I realized this question applies mainly to standard chess engines that use minimax functions to evaluate moves. However chess engines like alphazero use monte carlo tree search to simulate many different games so they're not only looking at the best possible moves. It's possible that they already could be used to find the best "practical" move, or that they could be adapted for that purpose. For example the monte carlo search algorithm could be updated to look at "reasonable" moves and simulate what happens. 

user15223: You're describing something that's very similar to contempt. The idea with contempt is that if you keep more dynamism in the position, a weaker opponent is more likely to make mistakes that you can then exploit. Therefore, given two moves that yield similar evals, an engine with high contempt score will choose the one that keeps more dynamism in the position. The current-strongest traditional engines all have contempt implemented (example for Komodo). 
The danger of contempt is, against a strong opponent, high contempt can get you killed - you are after all forcing the engine to play a weaker move just to keep the game alive.

15842: <p>A standard chess engine will find the move it considers best assuming best play from both sides. But this move might lead to an insignificant advantage or a tricky line that can easily result in mistakes for a human player of a specific ability. Is there a program that finds the best "practical" move for e.g. intermediate players? For example, it might pick a move that leads to a very strong attacking position where the opponent will most likely make a mistake, even though it could be defended against with perfect play.</p>
 19861: <p>Not really. </p>

<p>Databases are useful because they can tell you often a move is played and what the result is however they are not perfect for a variety of reasons. </p>

<p>Fritz 12 (not sure about later versions) has a "hotness" meter which tells you how complex a variation is.  </p>

<p>Bottom line. it's a combination of things. You're looking for moves where the most principled moves turn out to be bad. No engine can tell you that. </p>
 15842: <p>Update: <a href="https://maiachess.com/" rel="nofollow noreferrer">Maia chess</a> came out recently and it does something very similar to what I ask above. It tries to predict the most likely human move and at a given level. It seems Maia could be extended to create a program that finds the best practical move - given likely future human moves, it could figure out which move has the best &quot;expected value&quot;.</p>
<p>Their paper: <a href="https://arxiv.org/abs/2006.01855" rel="nofollow noreferrer">https://arxiv.org/abs/2006.01855</a></p>
<p>Play it: <a href="https://lichess.org/@/maia1" rel="nofollow noreferrer">https://lichess.org/@/maia1</a></p>
 15842: <p>I realized this question applies mainly to standard chess engines that use minimax functions to evaluate moves. However chess engines like alphazero use monte carlo tree search to simulate many different games so they're not only looking at the best possible moves. It's possible that they already could be used to find the best "practical" move, or that they could be adapted for that purpose. For example the monte carlo search algorithm could be updated to look at "reasonable" moves and simulate what happens. </p>
 15223: <p>You're describing something that's very similar to <a href="https://www.chessprogramming.org/Contempt_Factor" rel="noreferrer">contempt</a>. The idea with contempt is that if you keep more dynamism in the position, a weaker opponent is more likely to make mistakes that you can then exploit. Therefore, given two moves that yield similar evals, an engine with high contempt score will choose the one that keeps more dynamism in the position. The current-strongest traditional engines all have contempt implemented (example for <a href="https://komodochess.com/store/pages.php?cmsid=14" rel="noreferrer">Komodo</a>). </p>

<p>The danger of contempt is, against a strong opponent, high contempt can get you killed - you are after all forcing the engine to play a weaker move just to keep the game alive.</p>
