Showing posts with label Computer Chess. Show all posts
Showing posts with label Computer Chess. Show all posts

Sunday, May 20, 2018

Round Robin Roundabout

In National Lampoon's European Vacation, Clark Griswold drives his family around the Lambeth Bridge roundabout for hours, unable to maneuver his car to an escape road. I tried to find an alliterative synonym for obsession, but the English language has only so many words and none seemed to fit the bill, so I went for this English landmark for a more figurative version of being stuck in a rut.

Last year, during the club championship qualifier, I looked up the round robin tables. In the past, while assisting with the organization of the chess club, I had typed the numerical pairings found in the USCF Rulebook into an Excel spreadsheet and then done search-replace operations to make pairings using the players' names instead of just their seed number. While laboring to retype a 7-player double round robin and a 16-player single round robin, Mother Necessity whispered into my ear, "This should be automated by a computer." But I could not find a website through a Google search that specifically generated the Crenshaw pairings used in chess.

So I set about writing one of my own. The reference that was most useful was Wikipedia's page on round-robin tournament. In it, the process for Standard, Berger, and Crenshaw round robin pairings is described. Using javascript, I implemented algorithms that generated these 3 types of tables. During the process, I learned many items of minutiae, which is the meat of this post. Those of you who are already bored can read this list and quit, since the remainder of this post is going to be tracing and retracing my steps on my own mental roundabout.

  • Standard round robin uses incremental rotation, while Berger rotates the field halfway around the circle. Crenshaw pairings are just Berger pairings in reverse chronological order.
  • The USCF 4-player and 6-player round robin tables are not generated by the Crenshaw algorithm. The 4-player printed in the rulebook is Standard algorithm. The origin of the 6-player table is shrouded in myth with advantages and disadvantages.
  • The reversal table is only used when the round robin has an even number of players and one player withdraws before playing half of the games. It is possible to create an algorithm to make the reversal tables as well as the pairing tables.
  • Generating the tables and the reversals helped me detect about a dozen typographical errors in the Fifth and Sixth Editions of the USCF Rulebook.
  • A man named Warren J. Porter has created his own round robin system and on his own website placed his name among Berger and Crenshaw, but Wikipedia and the USCF have yet to recognize his innovation.

The most basic way to set up a round robin uses a Standard Algorithm. Put player 1 in a stationary chair. Line up the first half of the n competitors next to him, 2 through n/2. Then come back in reverse order pairing n/2+1 against n/2 until n is facing #1. Next round, everybody rotates clockwise by 1 seat except #1, so that #1 plays n-1 and n sits next to 1 and plays against n-2. The Wikipedia article has good pictures to see this rotation. The Berger tables use a different set of iterative steps. The field is laid out like the Standard, but after round 1, the last player is held constant, while everybody rotates clockwise by n/2 seats. The Crenshaw tables, at least for n>6, are basically identical to the Berger schedule, just in reverse chronological order. In Javascript, these algorithms translate into the following statements:

var seeds = [1, 2, 3, 4, 5, 6, 7, 8];
var half = seeds.length / 2;
var rounds = seeds.length - 1;
var schedule = [];
for (var i = 0; i < rounds; i++) {
  var top = seeds.slice(0, half);
  var bottom = seeds.slice(half, seeds.length);
  bottom.reverse();
  schedule[i] = [];
  for (var j = 0; j < half; j++) {
    var pair = top[j] + "-" + bottom[j];
    schedule[i].push(pair);
  }
  //now we rotate
  var addon = seeds.splice(-1); //Standard algorithm rotates the last player...
  seeds.splice(1, 0, addon[0]); //...into the second position
  //Berger and Crenshaw rotate the field halfway around
  if ((type == "Berger") || (type == "Crenshaw")) seeds = bottom.slice(1).reverse().concat(top).concat(addon);
}
if (type == "Crenshaw") schedule.reverse();

At the end of the algorithm, the pairings will be stored in a two-dimensional array named "schedule[r][b]" where the first index refers to the zero-based round number and the second index refers to the zero-based board number.

Once I got the algorithm to work and output to a readable form, I noticed a couple discrepancies in the USCF tables for 4-player and 6-player round robins. The 4-player table is simply the Standard 4-player table. The 6-player table is weird in that seeds 1-2 meet in round 1 while they meet in the penultimate round for tables 8-24. This would seem to be a defect of the table, especially if you have seeded players into the round robin in descending rating order. However, the USCF tables also carry a not-so-useless provision that if a player drops out of an even round robin before playing 50% of the games, late-round reversals can help mitigate color imbalances.

  • The custom 6-player round robin table, unlike most round robin tables pairs seeds 1-2 in round 1 instead of the penultimate round like all the rest of the tables. This would seem to be a defect with the pairings if you have chosen to seed your players by rating order instead of by lot. However, the reversal table has all the reversals in the final round 5. When the 6-player table is generated by algorithm, some of the reversals occur as early as round 3 of 5.
  • Aside from the idiosyncrasies of the 4-player and the 6-player, the algorithm generates tables with players 8-24 with basically no error.
  • The reversal tables of the 10-player and the 14-player are sorted in such a manner that my algorithm is at a loss for matching it.
  • In the Fifth Edition USCF rulebook, on page 296, it should say, "Color reversals should be made in the last three rounds if someone withdraws before playing five games."
  • Also in 5th Ed., on page 298, the 14-player PAIRING table, round 1, board 1, should say, "7-14" as the pairing, not "7-4".
  • In 6th Ed(p 323) and 5th Ed(p 301), in the 18-player REVERSAL table, when #13 withdraws, the first pairing to reverse should be 18-1 instead of 8-1 (1-8 is a round 10 pairing). Also, when #14 withdraws, the second pairing to reverse should be 13-6 instead of 13-16 (13-16 is a round 7 pairing).
  • In 6th Ed(p 325) and 5th Ed(p 303), in 20-player REVERSAL table when #10 withdraws, the pairing to reverse should be 15-6 instead of 15-16 (15-16 is a round 9 pairing).
  • In 6th Ed(p 326) and 5th Ed(p 304), in the 22-player PAIRING table, in the 18th round, the second to last pairing should be 1-4 instead of 1-14 (1-14 is a round 8 pairing).
    • In 6th Ed(p 328) and 5th Ed(p 306), in the 24-player PAIRING table, many pairings in rounds 21-23 have typos, specifically:
    • In round 21, 10-17, 11-16, 12-15, and 13-14 instead of 0-17, 1-16, 2-15, and 3-14.
    • In round 22, the second to last pairing should be 23-3 instead of 23-2 (2-23 is a round 23 pairing).
    • In round 23, 10-15, 11-14, and 12-13 instead of 0-15, 1-14, and 2-13.

I have made a web application that produces the tables and reversals algorithmically at http://www.symbiosis.elementfx.com/projects/roundrobin2/RoundRobin.htm.

Wednesday, November 16, 2016

SARGON

After using the search box above, I was surprised to find that none of my posts seems to have ever mentioned SARGON which seems to have been named after Sargon the Great, first ruler of the Akkadian Empire. Incidentally, the Scorpion King played by Dwayne Johnson supposedly arises from the remnants of the Akkadian tribe. I myself didn't play against SARGON, since our family had an Atari computer, but the Atari version has no eponym, so I decided to go with the winner of the first computer chess tournament. At the end of the 1982 Tron movie, the Master Control Program is defeated and he looks like an old man, implying the MCP was layered on top of a core computer chess program. In 6th grade, I played chess and even went to the state chess contest where I placed around a tie for 2-3. In 7th grade, I discovered computers and pretty much gave up chess until college. During the early years of computing, Atari Computer Chess on mere level 3 would be me so consistently that I rage quit chess. These days I have a Kindle with AI Factory's Chess Free on it. At maximum level 12, it is tactical enough that I have to be careful, but the opening book is not so good and there is definitely a horizon effect, so I can find and exploit its weaknesses. Here is the first time I beat it on maximum Level 12. The game is brief enough that following it on your blindfold board could be a nice exercise.

1. e3 {Van't Kruijs Opening} e5 2. Qh5 Nc6 3. Bc4 d5 4. Bb5 Bd6 5. Bxc6+ bxc6 6. Nc3 Nf6 7. Qd1 O-O 8. Nge2 a5 9. O-O e4 10. d3 {If you have never read The Art of Attack in Chess by Vukovic, I highly recommend the chapter on the Classic Bishop Sacrifice. Vukovic analyzes game after game with the standard piece placements and some variations to make the Greek Bishop sacrifice a success. I have only finished one tournament game that had this combination in it though. But it is the stuff of chess artistry that draws us to the game.} 10...Bxh2+ 11. Kxh2 Ng4+ 12. Kg3 Qg5 13. Na4 Nxe3+ 14. Kh2 Qxg2#

Take that, chess computer!

Monday, November 7, 2016

Staider

I'm a sucker for space drama. Recently, I find myself watching and rewatching "Interstellar" and "Gravity". But the original space drama was probably 1968's "2001: A Space Odyssey" directed by Stanley Kubrick. I had watched it as a highschooler and found it quite confusing with long artsy sequences bereft of dialog. When it arrived in my streaming pile a year ago, I tried to watch it again, but Strauss' "Blue Danube" coupled with the slow cinematics put me to sleep about halfway in. This picture is a key moment where HAL9000 eavesdrops on the astronauts plotting against him by reading their lips. Checkmate.

A couple days ago, I resumed watching 2001 and ran into the chess sequence around 1:06:06 where astronaut Frank Poole is playing the ship's computer HAL9000. It's laughable how bad Frank's position is. His queenside is untouched and his queen is the only active piece.



FRANK: Queen takes pawn.(Qxa6)
HAL: Bishop takes knight's pawn.(Bxg2)
FRANK: What a lovely move. Uh, rook to king one.(Re1)
HAL: I'm sorry, Frank, I think you missed it. Queen to bishop's three (Qf3). Bishop takes queen (Bxf3). Knight takes bishop, mate (Nxf3#).

Right after the chess scene, there is a scene in which Dave Bowman is drawing on a sketch pad while walking past cryochambers. The music sounded darned familiar. I googled my hunch and found that someone else noticed that perhaps James Horner "borrowed" music for the opening 2 minutes of "Aliens" from Alex North of "2001." Perhaps this was not so much plagiarism but homage since cryochambers are present in both scenes.

A while back I had a dalliance with Scrabble. At one point, I was trying to memorize various 7-letter combinations, the rack-emptying "bingo" plays that garner 50 bonus points. Scrabble players like to memorize based upon alphabetically arranged tiles:

    ADEIRST permutes into:
  • ARIDEST
  • ASTRIDE
  • DIASTER
  • DISRATE
  • STAIDER
  • TARDIES
  • TIRADES

I had a mnemonic of a story: In the ARIDEST desert, ASTRIDE his horse, the cowboy regarded this two-faced boomtown in the midst of DIASTER: a raucous DISRATE downtown and a sleepy STAIDER uptown; he dared not pause long as his TARDIES tended to provoke TIRADES from his boss.

My last rated game was a staid draw. Here is the final position (black to play):

In an earlier position, I tried to analyze the tactics and felt rust (black to play):

25...Nf4 26.Nxf4 exf4+ 27.Bd4 Bxd4+ 28.Kxd4 Ne6+ 29.Kc3. After the combination was over, I was disturbed to find an inaccuracy in my analysis. I had thought that Ne6 was necessary to prevent Nxf4 on the next move, but the knight at e2 is gone and the one on f2 needs one tempo to attack it. "I've just picked up a fault in the AE35 unit. It's going to go 100% failure in 72 hours." I chose this quote for the fault part referring to my visualization skills, not for what happens in real life about 72 hours from now. I'm trying to marshal some resources regarding the stepping stones method recommended by a friend from GM Jonathan Tisdall's "Improve Your Chess Now." I guess it's back to the drawing board to plug a hole in my opening repertoire and perhaps begin doing regular tactics again at Chess Tempo.

Tuesday, December 22, 2009

Dirty Rotten Scoundrels


I was going to call this post "Swindler Swindled", but then the executive producer of Soapstone's Studio reminded me that I'm supposed to do movie themes whenever I can. "Dirty Rotten Scoundrels" was a 1988 comedy about two swindlers played by Michael Caine and Steve Martin who enter a battle of wits and one-up-manship. There is a point in the con games that you begin to lose track of what's real and what's just part of someone's elaborate con.

In 2007, my opponent and I played a similar opening and had a seesaw battle with a comedy of errors ending in his mistakenly going for a perpetual check when he had a winning line.



During my latest game, I just couldn't figure out if the advantages I saw in the tips of my analysis tree were illusory or not. Fear played a big part: I had the tournament's top standing at stake (pride only, no money). A draw would clinch clear first. I had 17 rating points from rounds 1-5. A draw would pretty much preserve the rating points at 18. Winning would push it to 27; losing would cut it down to 10. My rook on e7 looked sickly next to the knight and I knew that the two rooks together could beat my queen in the right circumstances. My king had his back against the wall. The game had already run past midnight so fatigue was making it difficult to track all the dangers. Knight forks began to haunt some of my lines like the Headless Horseman. This time I forced the draw by repetition.



After I got home, I powered up Fritz who told me that I was the one left holding the bag at the end. I had about a 9-pawn advantage in the final position and two winning plans to choose from. I feel a bit hypocritical for having recently reposted Never Give Up. Never Surrender. where I saved a draw from a losing position. Converting a win should take similar will power. When annotating my game, I had this faintly nauseating feeling in the pit of my stomach as if I had been swindled out of something of significant value. Let that be my lesson for the next time I throw away a half point. My opponent showed good swindling technique by keeping the pieces on and throwing problems at me until the end.

Self-assessment:
1. Made correct evaluations of the variations after 11...Na6 and chose active development over passive defense early in the game. Made incorrect evaluations of the variations after 31...Qb6 and chose passive defense over active development late in the game.
2. Completely missed the advantages of 14...Qf6 and misevaluated White's queenside advantage after 15.b4 and 16.b4.
3. Made good decisions to open the position, to castle into an advancing h-pawn, and to sacrifice the exchange.
4. Played hope chess on moves 25 (missing Qg4) and 37 (missing the Rh3-g3-g7 mate problem).
5. Missed many continuations in the endgame.
6. Had problems with #1.Queen complexities: 20...Qb6!, 24...Qe8!, 31...Qb6!, 37...Qa1+!, 38/39...Qb1+!, and 42...Qa1+!.
7. Missed a good #9.Backward #7.Bishop move, 27...Be8!.
8. #8.Knight complexities figured into missing 28...Bc2+! and the fatigue of watching the knight on e6.
9. Missed #14.King zwischenzug in 48...f4 49.Nxf4? Kg7!.
10. Not knowing the strength of my #13.Rampaging g-pawn, and #10.Fear/overestimating defense fed into the incorrect decision to give up playing for a win.

Thus completed the weird symmetry of my opponent swindling himself by forcing a draw from a winning position in 2007 and now my doing the same for him. I have another pair of swindles with less symmetry against another expert member of our club.

I was asked how I use Fritz to help me with analysis. I use ChessBase 8 with the Fritz 8 engine plug-in chewing on positions and spitting out optimal lines. But if you have Fritz without ChessBase, you can do something similar by choosing New Game and before any one makes a move, select menu option Engine->Infinite Analysis. Not only will the program allow you to play moves for each side, but there should be a window that shows what Fritz thinks of the position and possible moves. Each line is prefaced by a +/=/- evaluation and a decimal number (e.g. -1.00 is a pawn's worth of advantage for black) to quantitate who has the advantage and how much.

When I did the games bulletins for the big Reno tournaments, Fritz's blunder check helped me crunch the 60-100 games so that I could zero in on the critical moments. This is something that takes a while per game, so you should expect to set the computer on the game and walk away for an hour. With the game(s) highlighted in Fritz's Database view (File->Open->Database), select Tools->Analysis->Blunder Check.

For the most recent game, I wanted to demonstrate at a glance that White didn't have much advantage the whole game, at least according to Fritz. After doing Blunder Check, I selected menu option Window->Panes->Evaluation Profile to view the Evaluation Profile. Colored bars below the line indicate Black held the advantage almost the whole game with only slight advantages for White around moves 15 and 28.

Thursday, November 20, 2008

Flash


Flash Gordon was a very mediocre movie blending bad 70s with bad 80s. This title prompted my memory of the sound of Queen singing in high falsetto chorus "Flash! Fla-ash!"

A while back, I tried to emulate Rolf Wetzell's Chess Master At Any Age. I discussed it in this post. I even wrote a computer program in C# to help me make nice flashcards.



I've spent a couple days back at Chess Tempo. Since I've missed 20 of the last 50 problems (and my rating has plummeted), I decided to try to solidify the learning by making a flashcard of each missed problem.

Here is a pdf file of my efforts to date, generated by my chess flashcard program. Going over some of the older flashcards, I remembered a Python-inspired title that could lead to another Python-themed post. See if you can spot it.

Thursday, May 8, 2008

Killer Heuristic

I gravitate toward pacifism. The day I start spewing ad hominem attacks at people, deserved or not, is the day I ask, "Where is the body-snatching pod that took away the real me?" However, I'm not above criticizing, likely more than I praise, but I try to keep the criticism on the object before me rather than on the person who produced it. Blue Devil Knight used the term "ad rem" which I only learned today is the opposite of "ad hominem." Latin is still fun to use when you want to talk over people's heads. This discussion reminds me of a favorite short story "Love is a Fallacy" by Max Shulman.

The title of this post sounds like a slasher movie or at least a Heuristic ALgorithm that becomes a killer. The fact that a lot of my posts are titled with violent words or warlike themes, however, tells me that conflict is not altogether a bad thing. Conflict sells advertising spots on the news and tickets at the theater. The two main contenders for this year's Academy Award for Best Picture were "There Will Be Blood" and "No Country For Old Men". I have seen neither, but from the trailers, they seem to have a heftier than usual helping of conflict. There is a lot to be discovered in the crucible of conflict as long as you don't lose too much of yourself. What is chess but a conflict between two people abstracted into a game? I tend to focus on the self-preserving first part of Nietzsche's quote (Conan the Barbarian translation) "That which does not kill us, makes us stronger." while the meat of the quote is the self-improvement second part.

A few years back, one of my projects was trying to program my own chess computer engine. I did it out of the challenge of the thing, and the fact that it married my two favorite pastimes. I had these grand schemes of having the program spar with computer programs I have at home and even releasing it from captivity into the wild and wooly world of FICS or ICC. But I didn't get very far because my perfectionist side began nagging at me before I got far enough to implement the things it was suggesting. "Have you considered taking advantage of the MMX? Why don't you optimize your slow algorithm? Bitboards or no bitboards?" I managed to make a program that could play legal, 1 to 2-ply chess, but it was still close to playing giveaway chess. The slow algorithm started to implement beta cutoff, but I never got around to implementing killer heuristic.

At temposchlucker's great blog, he's exploring the mysterious workings of the mind in the context of tactical ability and trying in the formalized manner of a methodical researcher to discover a new method of training the stagnant chess player. Currently he's elucidating and formalizing the step of "scanning" or finding targets, training his mind to use the method, and seeing where the research leads. Andres Hortillosa is supposed to give us some tips on analysis at his Monroi blog. So far it seems big on framework, but skimpy on detail of scanning improvement. While I wait, I think I will begin to construct my own scanning method, of course plagiarizing from the best so that I can stand on the shoulders of the giants.

I couldn’t find any particular chess personality who coined this phrase, but apparently some chess teachers tell their students to "listen to the pieces." Basically ask, "What's out there?" Scanning and target recognition are important because as many of us who Fritz our games know, many combinations lurk beneath the surface, obscured by features of the chess board, hiding in our blind spots. A saying I made up a long time ago is "Somewhere on the chess board, hidden among inaccuracies, weak moves, and outright blunders, the best move is waiting." I think I was single when I made that up.

One idea I suggested which temposchlucker either didn't see or dismissed without comment was the idea of the killer heuristic. It might be improper to put it in the scanning stage, but in the context of tempo's frustrating 1.5 hour-long search, I thought killer heuristic could lead to faster analysis. Many years ago, I wrote out my move selection method. At the top on the list was "Can I checkmate him?" Working my way down the priorities, next came "Can he checkmate me?" and "Can I win decisive material from him?" and its reciprocal. The two recent examples of problems that temposchlucker gave had the common element that high priority checking moves (Qxg7+ and Bxe4+) could be used as guidewires to find the key move of the combination.

Years later, I lumped my steps into "Forcing Moves First". From Googling this phrase, I see now that there is a book I was unaware of by FM Charles Hertan called Forcing Chess Moves. I'm not sure I'm even going to read this book, since the gist seems to be summed up in the reviews. Hertan recommends "use computer eyes and always look at forcing moves first," no matter how silly those moves look to our human bias. Kassa Korley remarked that GM Hikaru Nakamura calculates very similar to a computer. After seeing what he can do, I believe it. Kotov's tree method is similar to the computer's thinking method, adapted for us mere mortals. Arguments for and against Kotov's method seem to boil down to whether it's too hard for humans to apply. Despite anti-computer sentiment (and perhaps envy), I would not be unhappy if I "suddenly got good" and found that I could calculate like Fritz does.

It was only recently I began to equate the efficiencies gained from "Forcing Moves First" to the concept of the "Killer Heuristic". The computer algorithm employing the killer heuristic will keep one or two moves in memory to check first because the move contained the features of a very violent and decisive resolution to the chess position. If the killer move proves strong, all subsequent moves will achieve more efficient beta cutoff (computer jargon for "Stop looking, there's no contest between this move and the other one") leading to a quicker evaluation that doesn't suffer too much in terms of accuracy compared with full-width-depth brute force minimax.

What is a forcing move? In my estimation, the pecking order of moves is:
Moves that checkmate or threaten to checkmate
Moves that check or threaten to check
Moves that win or threaten oodles of material
Moves that win or threaten a little material

Toward the bottom of this list of priority are all the positional attributes that bounce upward like quantum irregularities and are rather difficult to constantly and accurately balance against the material. But evaluate we must because most of the time, at least in my games, the positions seem rather quiet and there isn't a forcing continuation at the head of the line.

For the same reasons as the Killer Heuristic, computer chess algorithms sort the remaining moves they consider by certain characteristics, probably by the material they win and the capturing piece value (e.g. pxQ ahead of QxN ahead of quiet moves). This is done at every node, because the time cost of sorting reaps downstream benefits in the efficiency of the overall algorithm. Prioritization leads to time savings and efficiency.

I'm sure I have only scratched the surface of this one, but likely I'll come back when I draft my scanning list.

Monday, December 10, 2007

Computer Tutorial

Since chessloser mentioned me in his latest post, I decided to do a quick-and-dirty tutorial for how I use my ChessBase 8 and Fritz 8 software.

When I get home after a tournament game, I almost immediately power up ChessBase 8 and enter the entire game into my Tournament database. A long time ago, I created this database by using File->New->Database and naming the database "Tournament".
Since my database already exists, I double click on it to open it and it lists every one of my 369 rated games. With the Tournament database open, I click the checkerboard button near the top of the window to signal the entry of a new game, my 370th game. By clicking and dragging pieces , I put all the moves of the game in and then save it using the Save button . I enter all the game data into the pop-up form and click OK.

Now here comes the fun part. I click the analysis button which is a computer chip with an exclamation point on it in ChessBase 8, six buttons to the right of the aforementioned Save button. I have Fritz 8 as my default best analysis engine. Then I replay through all the moves of the game, pausing at each position long enough to watch Fritz crunch its analysis for about 1 minute or two.
It takes some practice to read the data, but learning Fritz's language is well worth it since it's almost like having an International Master in your back pocket to tell you how your position could best have been played.

The lines are usually ranked from best to worst based upon what the engine has determined in the time allotted. Here, the #1 line shows a -+ winning advantage for Black, quantified as -1.59 pawns (negative means Black is ahead, positive means White is ahead) which is arrived at if Black starts by playing 4...Nxe5. If somehow, Black decides to play line #2, 4...Bc5, then White has a slight advantage += of 0.48 pawns. Numbers with magnitude between -0.5 to +0.5 mean that the position is close to equal. Numbers with magnitude greater than +2.0 or -2.0 mean that one side has a winning advantage. Large swings of 1.5 pawns from one move to the next are serious mistakes and swings of greater than 3 pawns are essentially blunders. Fritz shows alternatives that may or may not match what was played in the game. The #1 variation often makes it into my notes while I'm annotating.

I usually manually go to the branch point and drag the alternative move in. The program will ask if I'm trying to enter a New Variation, enter a New Main Line, Overwrite the current line, or Insert . I choose New Variation. If you right click on a line of the computer evaluations and choose Copy to notation, ChessBase will insert the variation into the game notation. In the Game notation window, you can right click and add text to help add English notes to the chess notation and make it more meaningful to you and any potential readers. After I mark up the game with my annotations, I use the Replace Game button so that I don't get two copies of the game in my Tournaments database.

I have found that this has made me a little lazy in analysis, but the exercise provides a gold standard of a strong player (Fritz) against which you can compare your game thought processes against. If you are organized enough, Fritz can help you figure out what's going wrong in your openings. Fritz does have weaknesses, though. "Positional compensation" is a difficult concept to make a computer understand. The Halloween Gambit in the example above isn't outright losing, but it is probably unsound.

Many of the software clients for the internet chess servers log the games in a PGN file that can be opened by ChessBase. If you are hardcore enough to analyze your internet games, they've already been entered and stored somewhere; you just have to find the file and have the diligence and patience to watch Fritz find the good variations that were missed during the games.