user45: Is there any chess engine that has an analysis mode that can show if a position is a forced draw by either side?
It is common for engines to output evaluations of 0.0 when they detect a draw. But an evaluation of 0.0 can mean many things. For example, assuming it is white to move, an evaluation of 0.0 can mean:

The game is certainly a draw regardless of how either player plays (e.g. insufficient material).
Both players can force a draw. Neither player can hope to win if their opponent plays perfectly.
No matter which move white plays, the computer is 100% sure that black can force a draw if he wishes to. White cannot hope to win if black plays perfectly. A draw is the most likely outcome, but a deeper search might show that black can force a win.
The computer is 100% sure that white can force a draw if he wishes to. Black cannot hope to win if white plays perfectly. A draw is the most likely outcome, but a  deeper search might show that white can force a win.
The computer has not found a forced draw for either side, but the evaluation so far is exactly level. A draw is the most likely outcome, but a deeper search may later show an advantage for one side.

Just to give an example of when this might be useful, if white doesn't need to win and just wants to be as sure as possible of getting a draw then they might prefer to play a move with evaluation +0.0 and a known forced draw even though another move with a higher evaluation is available.
Another example is that if you need a win (i.e. a draw is just as bad as a loss) you might want to play a move with a slight negative evaluation to avoid giving your opponent the opportunity to force a draw. Even though this increases your chance of losing, it also increases your chance of winning.
Obviously there are positions where it is difficult or impossible to be sure whether a forced draw is available or not. But if the engine announces a forced draw then it must be possible to force a draw. False negatives are acceptable but there should be no false positives.
So in summary, I'd like to know for a specific position if one (or both players) have a forced draw available to them. Calculating the numerical evaluation of the position is not necessary, but if it also provides this at the same time, that's a bonus.

user167: Just as engines can, at certain points, see a forced mate some number of moves away, because there are forcing enough lines that the engine can see everything perfectly in the remaining depth until mate, there are also junctures in chess games that would allow an engine to see a forced draw for the same reason of being able to completely survey the limited possibilities in play.
Moreover, it would be easy to tweak an engine's evaluation function in order to make it seek out and prefer moves that lead to such forced draws: just as achieving mate is typically given some enormous value that dwarfs all other numerical factors that the engine's evaluation algorithm considers in order to guide the engine's play toward the ultimate objective, one could instead give such an enormous numerical value to achieving one of the sorts of draws I have in mind.
For instance, automatically evaluate any position in which the opponent has insufficient material to mate as +1000000. Then, if the engine ever finds itself with the option of forcing off that much material of the opponent's, it will let you know. Also, tweak the evaluation algorithm to evaluate any three-fold repetition as +1000000 instead of the usual 0. Then, if there is a forcible repetition (as in a perpetual check scenario), the engine will love it and let you know about it. Similarly, give +1000000 if one can forcibly reach a tablebase draw.
You could also ensure that the engine will give these valuations only when there is complete certainty that the draws really are forcible (because the tree between here and there has been able to be fully checked), just as with an engine not announcing mate unless it is sure. Thus, you won't get any false positives, though there will of course be plenty of false negatives, which you sensibly/necessarily allow in your question.

user12: The short answer to your question is no, there is not a chess engine that can reliably show if one side has a forced draw.  For example, this locked position is quite clearly a draw to the human eye:

However, notice that the evaluation is 0.17, not 0.00.  Houdini also give 0.05 - ever so slightly good for white.  This is very important.  This suggests that the evaluation of 0.00 is reserved by these programs for a specific reason, and indeed it is.  Basically, even in an "equal" position, the computer will not ever say that the score is 0.00, instead it will give a minute edge to one or the other side.  
So with that background, on to the specifics!  First, if the game is just a draw due to the position (i.e. stalemate, insufficient material, etc.) most GUI's will pop up a message that says "Game Drawn", or something to that effect.  That leaves the more complicated cases that you mentioned in your question.  In order to cover most of those, I'll introduce another position.  This is taken from Morphy-NN 1-0, New Orleans Blindfold Simul:

Notice that Morphy currently has mate in 6 starting with 18.b4+!.  However, if Morphy somehow missed that this was mate, he still had a forced draw by repetition, which the computer quickly sees.  By increasing the number of variations that the computer displays, it is possible to see that after white plays a move like 18.Qxc3+?, white can still force a draw, despite being down a rook and a piece.  The evaluation of 0.00 again tips us off that this is a special position in that the computer can calculate a perpetual check.  If the moves 18.Qxc3+? Kxd5 are made on the board, then the evaluation will be 0.00, indicating that white's best continuation is to force a draw.  Failure to do this will lead to loss of the game with best play.  

So to summarize, no existing engine can say with exact certainty that a position is a draw.  However, the evaluation of 0.00 is special, and if that shows up as either the main score, or the score for a variation, that means that a draw is probably being forced in that specific line.  The easiest way to check is playfully called "spacebar analysis" - when the user hits the spacebar over and over again to force the computer to play the top recommended move.  Eventually you will get to a position that is obvious to a human as well as the machine.  

And finally, to address your point about "contempt"

Another example is that if you need a win (i.e. a draw is just as bad
  as a loss) you might want to play a move with a slight negative
  evaluation to avoid giving your opponent the opportunity to force a
  draw. Even though this increases your chance of losing, it also
  increases your chance of winning.

This is quite simply referred to as contempt among chess programmers.  Most engines will allow you to set the level of contempt in the settings.  A positive contempt setting (100 is usually a reasonable level for analysis) will tell the engine to try fairly hard (a pawn's worth) to avoid a draw.  A negative setting will cause the engine to seek a forced draw (i.e. insufficient material, stalemate, or perpetual).  

45: <p>Is there any chess engine that has an analysis mode that can show if a position is a forced draw by either side?</p>

<p>It is common for engines to output evaluations of 0.0 when they detect a draw. But an evaluation of 0.0 can mean many things. For example, assuming it is white to move, an evaluation of 0.0 can mean:</p>

<ul>
<li>The game is certainly a draw regardless of how either player plays (e.g. insufficient material).</li>
<li>Both players can force a draw. Neither player can hope to win if their opponent plays perfectly.</li>
<li>No matter which move white plays, the computer is 100% sure that black can force a draw if he wishes to. White cannot hope to win if black plays perfectly. A draw is the most likely outcome, but a deeper search might show that black can force a win.</li>
<li>The computer is 100% sure that white can force a draw if he wishes to. Black cannot hope to win if white plays perfectly. A draw is the most likely outcome, but a  deeper search might show that white can force a win.</li>
<li>The computer has not found a forced draw for either side, but the evaluation so far is exactly level. A draw is the most likely outcome, but a deeper search may later show an advantage for one side.</li>
</ul>

<p>Just to give an example of when this might be useful, if white doesn't need to win and just wants to be as sure as possible of getting a draw then they might prefer to play a move with evaluation +0.0 and a known forced draw even though another move with a higher evaluation is available.</p>

<p>Another example is that if you <em>need</em> a win (i.e. a draw is just as bad as a loss) you might want to play a move with a slight negative evaluation to avoid giving your opponent the opportunity to force a draw. Even though this increases your chance of losing, it also increases your chance of winning.</p>

<p>Obviously there are positions where it is difficult or impossible to be sure whether a forced draw is available or not. But if the engine announces a forced draw then it <em>must</em> be possible to force a draw. False negatives are acceptable but there should be no false positives.</p>

<p>So in summary, I'd like to know for a specific position if one (or both players) have a forced draw available to them. Calculating the numerical evaluation of the position is not necessary, but if it also provides this at the same time, that's a bonus.</p>
 167: <p>Just as engines can, at certain points, see a forced mate some number of moves away, because there are forcing enough lines that the engine can see everything perfectly in the remaining depth until mate, there are also junctures in chess games that would allow an engine to see a forced draw for the same reason of being able to completely survey the limited possibilities in play.</p>

<p>Moreover, it would be easy to tweak an engine's evaluation function in order to make it seek out and prefer moves that lead to such forced draws: just as achieving mate is typically given some enormous value that dwarfs all other numerical factors that the engine's evaluation algorithm considers in order to guide the engine's play toward the ultimate objective, one could instead give such an enormous numerical value to achieving one of the sorts of draws I have in mind.</p>

<p>For instance, automatically evaluate any position in which the opponent has insufficient material to mate as +1000000. Then, if the engine ever finds itself with the option of forcing off that much material of the opponent's, it will let you know. Also, tweak the evaluation algorithm to evaluate any three-fold repetition as +1000000 instead of the usual 0. Then, if there is a forcible repetition (as in a perpetual check scenario), the engine will love it and let you know about it. Similarly, give +1000000 if one can forcibly reach a tablebase draw.</p>

<p>You could also ensure that the engine will give these valuations only when there is complete certainty that the draws really are forcible (because the tree between here and there has been able to be fully checked), just as with an engine not announcing mate unless it is sure. Thus, you won't get any false positives, though there will of course be plenty of false negatives, which you sensibly/necessarily allow in your question.</p>
 12: <p>The short answer to your question is <strong>no</strong>, there is not a chess engine that can reliably show if one side has a forced draw.  For example, this locked position is quite clearly a draw to the human eye:</p>

<p><img src="https://i.stack.imgur.com/7NLPu.png" alt="Locked position, hopeless draw"></p>

<p>However, notice that the evaluation is <em>0.17</em>, not <em>0.00</em>.  Houdini also give <em>0.05</em> - ever so slightly good for white.  This is very important.  This suggests that the evaluation of <em>0.00</em> is reserved by these programs for a specific reason, and indeed it is.  Basically, even in an "equal" position, the computer will not ever say that the score is <em>0.00</em>, instead it will give a minute edge to one or the other side.  </p>

<p>So with that background, on to the specifics!  First, if the game is just a draw due to the position (i.e. stalemate, insufficient material, etc.) most GUI's will pop up a message that says "Game Drawn", or something to that effect.  That leaves the more complicated cases that you mentioned in your question.  In order to cover most of those, I'll introduce another position.  This is taken from Morphy-NN 1-0, New Orleans Blindfold Simul:</p>

<p><img src="https://i.stack.imgur.com/gzgco.png" alt="Morphy - NN 1-0, New Orleans Blindfold Simul"></p>

<p>Notice that Morphy currently has mate in 6 starting with <code>18.b4+!</code>.  However, if Morphy somehow missed that this was mate, he still had a forced draw by repetition, which the computer quickly sees.  By increasing the number of variations that the computer displays, it is possible to see that after white plays a move like <code>18.Qxc3+?</code>, white can still force a draw, despite being down a rook and a piece.  The evaluation of <em>0.00</em> again tips us off that this is a special position in that the computer can calculate a perpetual check.  If the moves <code>18.Qxc3+? Kxd5</code> are made on the board, then the evaluation will be <em>0.00</em>, indicating that white's best continuation is to force a draw.  Failure to do this will lead to loss of the game with best play.  </p>

<hr />

<p>So to summarize, no existing engine can say with exact certainty that a position is a draw.  However, the evaluation of <em>0.00</em> is special, and if that shows up as either the main score, or the score for a variation, that means that a draw is probably being forced in that specific line.  The easiest way to check is playfully called "spacebar analysis" - when the user hits the spacebar over and over again to force the computer to play the top recommended move.  Eventually you will get to a position that is obvious to a human as well as the machine.  </p>

<hr />

<p>And finally, to address your point about "contempt"</p>

<blockquote>
  <p>Another example is that if you need a win (i.e. a draw is just as bad
  as a loss) you might want to play a move with a slight negative
  evaluation to avoid giving your opponent the opportunity to force a
  draw. Even though this increases your chance of losing, it also
  increases your chance of winning.</p>
</blockquote>

<p>This is quite simply referred to as contempt among chess programmers.  Most engines will allow you to set the level of contempt in the settings.  A positive contempt setting (100 is usually a reasonable level for analysis) will tell the engine to try fairly hard (a pawn's worth) to avoid a draw.  A negative setting will cause the engine to seek a forced draw (i.e. insufficient material, stalemate, or perpetual).  </p>
