Versions history


Note: old versions of Elise can be downloaded here.

0.1.8, 31 December 2013

This is a major update to the Elise engine, with several important new features and significant performance improvements. Accordingly the second version number has been incremented.

Elise now has the ability to play phonies (illegal words) against you. Please see this page for details. Elise knows over 200,000 playable phonies (and additionally can play CSW-only words in TWL play) and evaluates them in an intelligent manner.

Along with the ability to play phonies, of course a challenge system had to be adopted. Elise can play games using single challenges (no penalty for incorrect challenges), double challenges (challenger loses his or her turn on an incorrect challenge), penalty challenges (on an incorrect challenge, opponent is given additional points), and strict challenges (combining both double challenge and penalty challenge). Elise can also play without challenges. Elise's willingness to play phonies varies with the strictness of the challenge rules. Furthermore, Elise supports and roundtrips challenges (both correct and incorrect challenges) in GCG format. Use "Move → Challenge settings..." to view or modify the current challenge rules.

Support for play in Italian and Swedish added.

Significant improvements in Shift+A analysis: If you press SHIFT during Shift+A analysis, you will see the heat map for the analyzed move. It will update as the number of simulations increase. If you press TAB, you can see the most frequent opponent replies and the most dangerous opponent replies (based on play frequency and score above a "marginal" move), as well as your most common next moves. Elise will also show the opponent chances of bingoing or exchanging tiles on the reply move, and your probability of bingoing on the next turn. And, in the pre-end game case, Elise will determine which bag draws are winning in Shift+A analysis (according to its static end game evaluation -- this is not 100% correct but pretty close). It will also show you the winning probability weighted according to tile inferences and the winning probability assuming each unseen tile is equally likely on your opponent's rack.

Tile inferences after opponent exchanges have been improved for English language play, and have been added for other languages.

Dramatic performance improvements were made for simulation in positions with an extremely large number of possible moves (e.g., both blanks on an open board). Not only is this case now more than twice as fast, but RAM use in simulation is much lower.

String constants in Elise's source code (including, for example, dialog captions) have been broken out into a file, so they can be localized. Joan MontanÚ has partially translated the UI into Catalan.

You can now run benchmarks to measure Elise's performance on your machine. Elise will use this benchmark data to improve its clock management! If you play timed games against Elise, and Elise is either leaving too much time on its clock, or has to truncate its move searches too often because it is in time trouble, by running the benchmark tests, you will likely substantially improve Elise's clock management.

Besides using benchmark data, there have been other improvements to improve Elise's clock management. In particular Elise now reserves even more time for the pre-end game.

Elise can now test experimental features by running "strength tests". This is available from the "Testing" menu. While in this mode, Elise will test experimental features that may improve play strength. In this mode Elise runs single-threaded, so you can let it play testing games in the background. The games that are played in this mode are uploaded to this folder so anybody can examine them. (These games are sent by HTTP; you may have to set your firewall to allow Elise to send these games.) Elise's simulation performance while running single-threaded has also been improved.

Experimental features can also be turned on or off via the menu "Move → XPF". When XPF_NONE is selected, no experimental features are in use. Elise 0.1.8 features three additional experimental features (XPFs): XPF_NO_DANGER_HOOKS turns off a feature in static move evaluation that evaluates the value of "hot spots" (this feature is one of the most expensive parts of static move evaluation, and as lookahead can 'see' the hot spots I'd like to measure Elise's performance with this feature off.) Elise's simulation is about 10% faster with XPF_NO_DANGER_HOOKS. XPF_CLOSE_BOARD causes Elise to close the board more aggressively while ahead.

The third experimental feature in version 0.1.8, XPF_SETUP_TILE_GUESSES, improves tile inferences in the case of "setup" moves. Elise, when this feature is on, does a pretty good job at identifying setup moves and inferring the correct tiles on opponent's rack. XPF_SETUP_TILE_GUESSES very likely improves Elise's strength -- you might want to turn this experimental feature on when analyzing a game. After enough testing games have demonstrated a strength boost from this experimental feature, it will be turned on by default.

You can also help to build a Scrabble® "opening book" -- a collection of best moves for opening racks. There are over 3 million different possible English-language Scrabble® racks, but most of them are quite rare -- it turns out that the 5,209 most frequent racks represent 10% of all openings, the 16,761 most frequent racks are 20% of all openings, and to get fully half of all openings you need approximately 112,000 of the most frequent racks. In other words, less than 4% of all possible racks account for half of all Scrabble® openings. (The single most common rack, AEINORT, is more common than the 100,000 least common racks put together.) Compiling an opening book containing starting moves for the majority of Scrabble® games is quite feasible. If you select "Help create opening book..." from the "Testing" menu, Elise will simulate opening racks (it will use the most frequently appearing racks that don't have opening moves calculated.) You can choose to run this simulation single-threaded.

You can view the current contents of the opening book on this page.

There is now an option to highlight tiles already on the board when printing moves. You also have the option to show a '#' character after English words that are CSW-only, and '*' after moves containing phonies, and English words that are only in the unabridged lexicon (the phonies lexicon).

A new option has been added to the Simulation options menu, "Word knowledge". Normally, Elise assumes perfect word knowledge for its opponents. By adding words to this list, you can simulate under the assumption that your opponent does not know the specified words. Is there a position with a valuable hook that you want to simulate, assuming that your opponent does not know the hook? It's easy to do with this feature.

"Pattern match" from the Lexicon menu now can match one letter from a group -- enclose the letters you want to match in square brackets []. The pattern "[act][act][act]" would match ACT, ATT, CAT, and TAT. You can also match a vowel with (V) and a consonant with (C). You can match a tile with a certain point value by enclosing the point value in parentheses ().

A new page has been added to the website giving the 2,700 most frequent 7-8 letter phonies Elise can play (that are not anagrams of words that are valid in either TWL06 or CSW12). The lists can be seen here.

A new option, "Game statistics" gives you various game statistics. One statistic, the average relative rack value, is useful in comparing play strength and in identifying mistakes or excellent plays. See this page for more information.

Two new English-language lexicons have been added to the Elise distribution: UNABRIDGED (which is the large English language lexicon containing phonies -- 484,208 words in this version), and OSPD2 (which corresponds with the official North American tournament list in use between 1991 and 1999).

Another new option on the Game menu, "Auto-show well contents", will print the remaining unseen tiles in the text pane after every move.

Elise uses the #rack1 and #rack2 pragmas to preserve racks in GCG format.

During a clock move, if Elise has to finish a simulation early due to time trouble, Elise will print a warning to the text pane.

Under Spanish-language rules, Elise's evaluation of exchanges with less than 7 tiles left in the bag is improved.

The contents of the simulation results pane (accessed by pressing TAB during simulation or Shift+A move analysis) can be copied to the clipboard (Ctrl+P).

Further improvements in endgame code: in particular, terminated endgame searches (either due to time or by pressing the ESC key) should give better results.

When starting a new game against Elise, you now have the option to alternate or randomize the first player.

In previous versions, Elise's static evaluation would occasionally evaluate "pass" as the best move in a solitaire game, even if that wasn't the only legal move. This is fixed in 0.1.8.

0.0.7, 20 October 2013

Support for Catalan language and French language play added. The 'senyors' rule in Catalan language play is currently automatically invoked when applicable. (Not ideal, I'd rather have Elise give human players the option to invoke it.)

Some improvements in the end game code. There is now a 'greedier' end game option: this isn't perfectly spread-greedy, but it will find the optimally greedy moves in more end games, at a performance cost. Clock move will attempt to "pile on" using the greedier endgame code if it has time on its clock and the game is not particularly close.

Bingo heat maps -- hold down ALT with a simulated move highlighted, and Elise will show where opponent bingo replies are played, with probability and average value. Only the space where a bingo starts is counted, so you can determine the opponent bingo probability easily by adding up the spaces.

Newlines in GCG #notes are now handled (Quackle appears to save multiline #notes in this way, and I like to preserve such #notes when they appear while roundtripping through Elise).

There is a new option ("Give median rack draws") on the Rack menu. This option might only be a curiosity for most people, but I suspect it will be more important for future testing of Scrabble® strategies. Normally, bag draws are completely random. When this option is on, Elise always (after a non-exchange move) gives a draw of median value (according to rack statistics.) In a two-player game, this code also makes special effort to give one blank to each player, although in some rare and unusual circumstances one player might still get both blanks.

This option reduces the effect of draw luck on a game considerably. Elise, playing "best fast" moves against itself, using the CSW12 lexicon, had an average margin of victory per game of about 85 points without this option (random tile draws), and an average winning margin of only 48 points with this option (median-value tile draws). Blowouts are much more infrequent with median tile draws. Games are more often won or lost in the end game. Normally, one player would hold both blanks about 50% of the time (maybe a little more, since players with blanks bingo more often, and bingoes increase tile turnover, giving a higher chance of drawing the other blank); with the option checked, over 98% of games had one blank for each player. Drawn games are about ten times as common with the median rack draws.

So what's that good for? This option may come in useful in testing strategies in the future; since it reduces the impact of tile draw luck (i.e., noise) and makes the average game a lot closer, it can allow us to evaluate the superiority (or not) of a strategy after fewer games.

(Note that "rate current rack draw" will not always rate a median-value draw based on rack statistics at or near 50%, since it evaluates the moves that can be formed on the current board with the tiles. The rack statistics are based on the average move value on all boards. Note also that Elise's simulation is not 'aware' of this option, so it will not assume, for example, that it will get one blank, or that it will not see unusually good or bad draws.)

Fixed an intermittent crash in open rack crossword games.

If "pass" evaluates in a tie for the highest win probability, we always prefer the move that scores points.

Fixed a bug in GCG load for digraphs (relevant to Spanish and Catalan language play).

Better statistics for rare racks for CSW12, and a 2 player win probability table for CSW12.

Fixed a bug in Shift+A analysis and "rate rack draw" that sometimes flashed weird scores while the simulations were running.

Saving a position and board print incorrectly used lower case letters for non-blank special letters.

A clock management change: the time available per move is multiplied by the number of threads available to determine the ply depth used for a given move.

Better kerning for some characters (period, parentheses, brackets, apostrophe, colon) in the text pane.

0.0.6, 17 September 2013

Spanish, Danish, and German language play are now available in the release distribution. If you play in these languages, you will want to download the lexicon pack corresponding to your language; these packs contain the rack leave statistics, tile guess data, etc. and greatly improve the quality of Elise's play.

The tile leave and board simulation file formats have been generalized to allow data for languages besides English.

You can now, along with the default tile textures, set a custom (solid) color for your tiles, the letters printed on the tiles, and the letter printed on played blank tiles (if any). These settings are saved in the registry, so your custom tiles will appear in later Elise sessions.

You can now start a "new game against Elise" immediately on boot, with no game type selected. The "select game" dialog will appear first.

There is now an option, when playing against Elise, to have the analysis and lexicon features enabled. In this mode, you can also terminate Elise's move search during its turn with the ESC key. Select "Analysis enabled during game" in the Game menu to enable this mode. If this option is off (the default), analysis and lexicon features are disabled during a game, and you cannot terminate Elise's move search during a game. This option can be toggled during a game.

When playing a game against Elise, you can also now abandon the game ("Forfeit game" from the Game menu). This option asks for confirmation, and will stop the game in progress (by dropping you out of game play mode).

Fixed the flashing rack bug (Elise would sometimes, during simulation, flash racks from the simulation during redraw.)

Recalling tiles from the board re-alphabetizes your rack.

PEG search, especially in the 1 tile in the bag case, does not terminate immediately on finding a 100% winning move; it is allowed to search longer for a better winning move.

Running the tile guess from the Rack menu shows the estimate of how much better or worse your opponent's rack is compared to the overall average.

Player moves in the text pane are marked with the player name.

All lexicon dialogs now have their default focus set on the input field.

0.0.5, 19 August 2013

There are a lot of internal code changes for multiple-language support in Elise 0.0.5. (Support for play in several additional languages, including Spanish, Danish, and French, is coming.)

Reduced Elise's RAM usage significantly in most games (saved about 100 MB RAM). This may also improve performance slightly, depending on your hardware.

Game type is saved in the registry with the other UI options.

Second-ply heat maps: just for the heck of it! Hold CTRL while highlighting an active simulation move to see these. This shows the distribution of your next move in simulation. Often interesting when you have a blank in the tile leave, or when Elise is trying to set up a move.

There is now an option to play a game against Elise at a fixed simulation ply depth. Unlike clock games, using the same setting on ply depth results in similar play strength regardless of the speed of your computer.

A clock management change: it happened far too frequently, in a clock game, that Elise would terminate a simulation due to time, and then play a move that had only 80 (or some other small number) of total simulations, just because it happened to be the top-ranked move at that time. Most of the time, this play would simulate worse if Elise had been able to finish the simulation completely. In 0.0.5, Elise's behavior is that, if a simulation terminates due to time, it chooses to play the top ranked move that has at least 400 simulations (or was evaluated by a pre-end game search.) This will usually result in better play in games where Elise is in time trouble.

There is now a feature, available from the Rack menu, that shows estimated values (above or below the overall average rack) for every sub-rack of the current rack. These values take into account the distribution of the unseen tiles.

Fixed a bug where Shift+A analyze might not use the win probability model at the start of the game (this would result in win probabilites out of line with fast lookahead.)

Fixed a bug where Elise would load (or rather, attempt to load) partial rack values when they didn't exist (with custom word lists, for example.)

Freeform mode is now turned off when you play a game against Elise.

Fixed a bug where board hooks on the undo stack were not updated after a lexicon change. This caused all sorts of trouble in analyzing games after a change in lexicon.

Game analysis, in games where player opens with a down move, will evaluate other candidates as down moves too, to avoid duplicating work.

Changed the default focus of the Ctrl+R dialog and the blank select dialog -- you can type directly in the edit box (without needing to change focus to the edit box, by clicking with the mouse e.g.) now.

0.0.4, 07 August 2013

This is primarily a usability and bug-fix version. There is a new feature: Elise can now take a GCG game and output its analysis of each move. I had multiple, separate requests for an automated analysis feature, so it's added to this version. The analysis output can include data on tile inferences or heat map data if desired.

Here is an example of the GCG game analysis (with tile inferences on, but no heat map data).

Most UI options are now saved in the registry, and are preserved across Elise sessions. This includes your player name (in "play game against Elise"), default clock settings, tile textures, etc. These options are saved under HKEY_CURRENT_USER in the registry, so different users can have different saved settings.

"Analyze move..." (Shift+A) now can analyze any exchange, not only the default exchanges listed in the dropdown. Select the "Custom exchange..." at the bottom of the dropdown, press OK and tell Elise what tiles you want to keep.

"Well contents" now, by default, will display the unseen tiles in a manner similar to Quackle ("AAAAAAA BB C DD", etc. with each letter on its own line.) The original behavior can be obtained by checking "Concise well contents" in the Game menu. Well contents also displays the number of vowels and consonants unseen.

There is now an option to not draw the bonus square labels (under the Board menu).

A tty (command line) version for Win32 and Linux (x86) is available. This version of Elise runs the automatic .GCG game analysis from the command line, and can be scripted. See this page.

Some minor improvements in Elise's clock management were made. Elise now tries to leave more time on its clock for the late game. These moves are frequently the most critical of the game and if Elise should run the clock down on any moves, it should be these moves. Clock moves now are more likely to use the stronger win probability simulation, as well.

"Analyze move..." (Shift+A) now can use the 1-3 tile guess data, and also, if it reaches an empty bag-state during simulation, will play the end game out according to the fast end game heuristics, just like "Fast lookahead..." does.

Elise normally generates a set of racks for opponent to use during simulation, and it sorts this set by their value (according to the rack statistics) to make sure that each set of 80 iterations in simulation has about an equal number of good racks and bad racks. In the pre end game, however, the value given by the rack statistics may not be a very good estimate of the rack's actual value (since playability on the board and setting up for a good end game are much more important in a PEG situation than the rack's average value.) Sorting opponent racks in simulation by their average value in the pre end game is thus now an option in 0.0.4. There are instances in PEG evaluation where the sort still helps, and instances when it doesn't. Usually the positions in which sorting doesn't help are the cases where the unseen tile distribution is extremely unusual (no vowels left, for instance, or both blanks remaining.) Whatever additional accuracy in simulation that comes by removing the sort, however, is somewhat offset by a loss of simulation stability. What really needs to be done here is that static move find should have more smarts specifically for PEG play.

It's something of a corner case, but 1-ply and 2-ply simulation strength is improved by adding expected rack values to the scores in simulation.

"Quick move" called from the UI evaluates sixth pass move correctly.

Simulation sometimes overestimated pass moves and small exchanges when your rack is weak; this is fixed in version 0.0.4.

A rare, intermittent bug in draw was fixed that sometimes could crash the GUI application.

Another rare bug in GCG load was fixed (it could sometimes mess up blank tile placement in moves, if there was ambiguity.)

There was some internal code clean-up and changes for portability.

The ENABLE lexicon pack was recently improved, with tile guess data and additional rare racks. The ENABLE rack statistics now contain values for 2,994,000 different racks; 98,154,000 racks were simulated in creating the data.

0.0.3, 27 July 2013

Substantially improved tile guessing, including the ability to infer opponent's rack leave after a play of only 1-3 tiles. This is done by the use of pre-calculated rack leave distribution data, compiled over millions of games. The data read from the file needs to be adjusted for the remaining unseen tile composition and board state, but the tile leave guesses obtained this way are surprisingly accurate.

Estimating opponent rack leave value, using tile guesses

Stochastic estimate of opponent rack leave value

Above you see the results of about 2,000 tile guesses (made after opponent plays of 1 to 3 tiles) in Elise 0.0.3. Only guesses made with at least 20 tiles remaining in the bag were plotted (when there are only a few tiles left in the bag, accurately estimating the opponent's rack value is easy; even purely random racks will be close more often than not.)

In the left graph, the x-axis is the estimated value of the opponent's rack leave (in points above average), according to the tile guesses, and the y-axis is the value of the actual opponent leave, for every move with a 1-3 tile guess. In the right graph, the x-axis is the estimated value of the opponent's rack leave, estimated by repeatedly drawing at random from the unseen remaining tiles, and the y-axis is the value of the actual opponent leave, for every guess. Random guesses, on the right, still have a weak but statistically significant relationship with the actual value, since they draw from the actual remaining tiles; accordingly, the random guesses will guess higher when the unseen tiles remaining are good and lower when the unseen tiles remaining are bad, and that's enough to give a slight idea of the opponent's rack value, relative to the average over all well distributions. The stochastic guess on the right effectively has only "tracking" knowledge of its opponent's rack leave, while the guesses on the left have tracking knowledge and make inferences based on the opponent's previous plays. The tile guesses, on the left, give much better estimates for the opponent's rack leave than the random racks do. The least-squares best fit line is also very close to y = x, which is what we'd expect from a good estimate. Better estimates of the opponent's rack distribution allow for more accurate simulation which allows for stronger play.

The R2 value of the relationship is not awe-inspiringly strong, but without ESP it's impossible to have a very high R2 relationship here: even if you (for example) guess 5 out of 6 of your opponent's remaining tiles exactly after a one-tile move, that one remaining tile could swing the value of your opponent's rack leave by as many as 20 points! For our purposes an R2 value nearly 25% is quite strong.

Notably, the graph illustrates that the tile guesses perform well in the most important case: when they guess an extremely high value rack, Elise's opponent will almost always have an at least better-than-average rack, and will usually have a much better-than-average rack. This is especially important because Elise will play defensively if it thinks its opponent's rack is excellent. If Elise is right it gains a significant boost, while if it's wrong it will almost certainly give up win probability. The tile guesses may not always be accurate on the exact magnitude of the opponent's rack value, but they are rarely wrong in categorizing the opponent's rack in the extreme case.

If we define accuracy in this sense, as correctly determining whether an opponent rack leave is good or bad, then tile guess accuracy is lowest for opponent racks that are close to average, but that's the case that genuinely matters the least. The tile guesses will still usually peg an average opponent rack as close to average, and that's fine.

Since tile guesses are now possible after every opponent move (except, of course, bingoes), there are further gains to make here by combining the results of subsequent tile guesses.

Game annotation. This feature preserves comments about a Scrabble® game in "#note" GCG pragmas. Elise will now load and preserve "#note" pragmas from GCG files. These #notes are displayed in the text pane as you undo or redo through the game. Elise now warns before committing a move with data on the redo stack; this makes it more difficult to inadvertently lose future moves from the redo stack during analysis.

You can edit or add #notes to your GCG game by using the "Annotate last move..." (Ctrl+A) menu option from the "Game" menu.

Improved rack leave estimates for TWL06 and CSW12. This data includes estimated values for hundreds of thousands of rare racks not found in the previous data.

Lexicon Different racks Racks simulated Notes
TWL06 3,098,000 133,641,000 Many rare racks simulated for version 0.0.3
CSW12 3,058,000 112,554,000 Many rare racks simulated for version 0.0.3

You can now play a game against Elise without manually making its moves (or seeing its rack, etc.) This is the "New game (same type) against Elise..." function in the "Game" menu. This uses the "clock move" feature; you may specify how much time Elise has on its clock. More time, of course, allows for stronger play.

Elise's pre-end game evaluation has been improved in 0.0.3. Instead of performing PEG evaluation on moves that empty the bag, and then running lookahead evaluation on the other moves, Elise now (in the case with at least 2 tiles in the bag) will run a regular lookahead evaluation first, and then evaluate the top moves that empty the bag using PEG evaluation. This has the benefit of improving accuracy in some cases (the top simulation moves tend to be top PEG evaluation moves, only the win probability being more accurate in PEG evaluation) and speed in others (truly terrible PEG moves are skipped), as well as allowing the tile guess data to have some say in the pre-end game evaluation (now, given two moves with the same winning probability in PEG evaluation, Elise will favor the one that tile guesses say gives the best outcome.) Additionally, this allows heat maps to be generated for PEG moves.

Some minor performance improvements; the move evaluator in 0.0.3 is between 4-7% faster than the 0.0.2 evaluator. The GUI code has been tightened in a few places as well.

Some minor UI changes: drag-and-drop tiles within your rack inserts them instead of swapping them (the old behavior can be obtained by holding down the SHIFT key); there is now a "game history" hotkey (Ctrl+H); tile guesses can be obtained without a simulation; holding SHIFT down while a word on the board is highlighted changes the default highlight from "across" words to "down" words; ESC key removes the arrow from the board, even if no tiles are placed; default selected button in the phoney warning dialog is now "no"; the HOME key jumps to the beginning of the current game and the END key jumps to the end (these are also options on the "Game" menu). US tournament scoring is the default; right-clicking a quick or endgame move in the textpane now prints the definition of the word; clocks for all players are drawn during timed games.

Rack statistics for lexicons besides TWL06 and CSW12 are now a separate download, to save space in the installer.

The Elise executable now statically links the MFC and Microsoft standard C libraries, rather than using DLLs. This makes using the application simpler for people without the correct versions of the DLLs installed.

0.0.2, 14 Jul 2013

Rudimentary GCG game load and save for Scrabble® games is now supported in Elise. Note that Elise is not a roundtripping application for this format; it does not (currently) preserve pragma data that it does not use. Some of the GCG pragma not supported (discarded on load) include #description, #tile, #note, and #comment. Elise does give a warning when opening such files, and selecting "Save game" will actually save the GCG file under a modified name (to avoid overwriting your original GCG file and losing the additional pragma data.)

GCG load preserves the entire game history, so you can undo/redo through all of the game moves after load, and perform analysis from any of the game positions (remember that committing a move does clear the redo stack; if you do that accidentally you can reload the file to get the later moves back). "Game recap" will also show you the game history from any position.

Elise, in GCG save, will write out simulation results from the game recap (ply, win prob, spread, etc.) in #note pragma lines. Here is an example of a GCG written by Elise with simulation results.

Heat maps are added. These show where your opponent is most likely to respond to a move. You get heat maps by performing a fast simulation. Then, you hover over an active simulated move (so the word appears played on the board). Then press and hold down the SHIFT button. (You can also make heat maps the default in preview by selecting "Lock heat maps in preview" from Move > Simulation options. Then, the SHIFT button will show the normal board.)

Example of a heat map (click for large version)

What you see is each square that your opponent's first reply touched during simulation. The numbers in each square indicate two things. The top number is the percentage of the time your opponent plays that square. The bottom number is the average score of all opponent plays that touch that square. The square itself is colored according to how often the opponent plays there, from dark to yellow to orange to bright red.

You can turn off heat maps via "Move > Simulation options > Track heat maps". Tracking heat maps costs a small amount of speed and RAM, so this feature is toggleable.

Elise now has moods. Moods bias Elise's perception of opponent racks during simulation. If Elise is pessimistic, it will assume that its opponent's tiles are always better than average; if Elise is optimistic, it assumes that its opponent's tiles are always worse than average. A pessimistic Elise plays an extremely defensive and closed game, while an optimistic Elise plays an extremely aggressive, open game. Generally speaking, Elise's play is strongest when it is neither pessimistic nor optimistic (which is the default), but it may be of interest to see how a biased view of the opponent's tiles (one way or the other) changes the play and the win probability evaluations, and what moves moody Elise considers to be the most defensive or most aggressive.

Strength improvements in 0.0.2:

Board simulation data for SOWPODS/CSW12 is now included in the distribution. This improves Elise's evaluation of moves that open up possible DWS-DWS or TWS-TWS responses when playing with either of those lexicons.

Three bug fixes in 0.0.2:

The phony warning dialog would pop up every turn after ignoring a played phony (unless a subsequent hook happened to make the phony a legal word). If you choose to ignore a played phony, Elise now marks that word and does not warn about it for the rest of the game. (Additional phonies may trigger the warning again.)

Default word list for IE Scrabble should be CSW12, not SOWPODS. Lexicon dropdown ("Select current lexicon") displays the current lexicon, instead of defaulting to the first alphabetically.

Passing five times in a row with one tile left in the bag (i.e., passes are always evaluated via pre-end game code) left Elise in a state where the pre-end game couldn't evaluate a pass. (This is an amusing bug, since a pass at that point ends the game; the evaluation is pretty darn easy.)

0.0.1, 08 July 2013

First public release. Includes multi-threaded simulation and move analysis, exhaustive (complicating) end-game search, tile guessing (including tile guessing for passes and exchanges), Clabbers move search, hi-leave move evaluation, pre-end game move search using a static end game evaluator, clock mode, hook searches, pattern matching, and a pretty Windows GUI. Fast move evaluation includes end game heuristics, utilizes full-rack and partial-rack statistics, can set-up hooks if it monopolizes the needed tiles, has accurate values for exposing TWS-TWS or DWS-DWS lines on the board, and plays defensively if opponent telegraphs a bingo rack (via pass or a small exchange, e.g.)

Strength benchmarks: Hi-leave move generation in 0.0.1 beats hi-score move generation 66%-34%. 7-ply winprob simulation beats 3-ply winprob simulation 62%-38%. 5-ply winprob simulation beats Quackle 0.97 Championship Player 61%-39%.

Information about lexicon-specific rack statistics included in this release:

Lexicon Different racks Racks simulated Notes
TWL06 2,570,000 112,721,000 Has its own 2-player win probability table and board simulation statistics
ENABLE 2,479,000 83,285,000 Has its own 2-player win probability table and board simulation statistics
SOWPODS 2,470,000 85,165,000 Has its own 2-player win probability table
CSW12 2,495,000 93,487,000 Uses SOWPODS 2-player win probability table