Changelog for bishbosh-0.1.1.0
2018-01-01 Dr. Alistair Ward bishbosh@functionalley.com
0.0.0.1
- First version of the package.
0.0.0.2
- Minor changes required to build on Windows.
0.0.0.3
- Added Paths_bishbosh to Other-modules section of cabal file.
0.0.0.4
- Changed references to author's domain-name.
0.0.0.5
- Added ability to specify the text-encoding used in a PGN-database file.
- Updated list of test-compilers.
0.0.0.6
- Fixed failure to persist game-state after requesting that the game be restarted.
- Fixed parsing of TextEncoding in PGNOptions.
- Replaced module Distribution.Verbosity with BishBosh.Input.Verbosity.
0.0.0.7
- Rewrote function BishBosh.Data.RoseTree.countTerminalNodes in accordance with the suggestions of David Feuer.
- Amended function BishBosh.State.EnPassantAbscissa.mkMaybeEnPassantAbscissa to guard against exposing one's King after En-passant capture.
0.0.0.8
- Corrected the parsing of FEN when an Enpassant-destination defined on file b was erroneously interpreted as a bishop in the previous CastleableRooks field.
- Added parent class BishBosh.Property.ExtendedPositionDescription.EPD for Property.ForsythEdwards.FEN, for which the latter typically has a default implementation of both methods.
0.1.0.0
Bug-fixes:
- Upgraded the transposition-table in module Search.DynamicMoveData, from merely recording moves (which doesn't include the rank to which a Pawn is promoted), to recording qualified-moves.
- In function Search.AlphaBeta.negaMax.descend.selectMax, amended bound function isFitter to prefer shorter move-sequences where fitness is equal, & corrected the scenario in which all nodes were skipped because they were repetitious, but without ever defining alpha.
Features:
- Added the configurable runtime ability to asynchronously decompress PGN-databases, & to set a maximum number of games to read.
- Added a configuration-option to normalise the values of specified piece-square tables into the closed unit-interval.
- Modularised the packaged config-files, by defining XML External Entities in the DTD.
- Added suggestions on failure to parse a user-command, & created a module Text.AutoComplete to contain common code.
- Added makefile to facilitate common tasks.
- Removed the configuration-option preferMovesTowardsCentre & its implementation in function Cartesian.Coordinates.radiusSquared, because of it's conceptually wobbly foundations.
New Runtime Cmmands:
Command | Purpose |
---|---|
availableMoves | to report all available moves from the current position. |
maxPositionInstances | to reveal the maximum number of instances any available position has been visited. |
reversiblePlyCount | to count the number of consecutive reversible plies that have been made. |
Command-line Options:
- Added a new module Input.CategorisedCommandLineOptions to improved the partitioning of command-line options into functional categories.
- Added a command-line option --formatPieceSquareTableForGNUPlot to print the piece-square tables in a format suitable for GNUPlot.
Performance:
- Included a compilation-flag unboxedarrays, to request the use of unboxed arrays where (infrequently) possible.
- Changed data-type Component.PieceSquareByCoordinatesByRank.EitherPieceSquareValueByNPiecesByCoordinates, bringing type Cartesian.Coordinates.ByCoordinates inside Either, leading to significant space/time gains.
- Constructed each large constant data-structure in parallel. Bracketed all data-parallel operations with CPP-conditionals controlled by the compilation-flag threaded.
- Parallelised function Attribute.CriterionValue.calculateWeightedMean.
New Modules:
Module | Purpose |
---|---|
Component.CastlingMove | Forked from module Component.Move. |
Data.Enum | Currently single-function. |
Data.Foldable | Currently single-function. |
Property.FixedMembership | Defines a class to which sum-types can conform. |
StateProperty.Censor | Relocated from directory State/. |
StateProperty.Mutator | defines a class to express the dual implementations within State.Board. |
StateProperty.Seeker | defines a class to express the dual implementations within State.Board. |
Text.Case | Forked from Text.ShowList to contain case-related operations. |
Text.Prefix | Forked from Text.ShowList to define the constant prefixes of log-messages. |
Testing:
- Split src-test/Main.hs into src-test/HUnit.hs & src-test/QuickCheck.hs, each referenced independently from the cabal file.
- Added an executable duel (to coordinate a battle between two independently configured instances of bishbosh) & a corresponding section-1 man-page.
- Validated the list of ranks supplied to construct either Attribute.RankValues.RankValues or Input.PieceSquareTable.PieceSquareTable.
Refactoring:
- Flattened the nested array Component.Zobrist.getRandomByCoordinatesByRankByLogicalColour, by means of a composite index.
- Reimplemented function Cartesian.Coordinates.getLogicalColourOfSquare.
- Reimplemented function Cartesian.Coordinates.interpolationsByDestinationBySource in terms of function Cartesian.Coordinates.extrapolationsByDirectionByCoordinates.
- Used the LambdaCase language-extension.
0.1.1.0
New Modules:
New Module | Purpose |
---|---|
BishBosh.Time.StopWatch | Replaces module BishBosh.Data.Time to encapsulate interaction with module Data.Time.Clock. |
BishBosh.Time.GameClock | Contains two BishBosh.Time.StopWatches to enable module Duel.Process.Intermediary to measure the time used by each player. |
BishBosh.Property.Switchable | Exports a type-class, which both BishBosh.Time.StopWatch & BishBosh.Time.GameClock implement, to expose their functionality. |
BishBosh.Property.SelfValidating | Exports a type-class, which both BishBosh.Time.GameClock & Duel.Data.Options implement, to validate themselves. |
BishBosh.Type.Countable | Defines newtypes to enhance type-safety, replacing type-synonyms for Int. There is a performance-degradation, so this enhancement can be disabled using a new cabal-flag. |
BishBosh.Type.Crypto | Self-documentation. |
BishBosh.Type.Length | Replaced the polymorphic type-parameters row & column with newtypes to enhance type-safety. |
BishBosh.Type.Mass | Self-documentation. |
BishBosh.Metric.RankValue | Replaced the polymorphic type-parameter rankValue, with a newtype & a smart-constructor to guard permissible bounds. |
Duel:
- Added command-line option --verifyConfiguration, to request that the mutual compatibility of the two configuration-files be verified before forwarding each to a forked instance of bishbosh.
BishBosh:
- Created a new directory Rule/ to which Model.{DrawReason, GameTerminationReason, Result} were relocated.
- Refactored functions BishBosh.ContextualNotation.PositionHashQualifiedMoveTree.findNextOnymousQualifiedMovesForPosition, BishBosh.Model.MoveFrequency.insertMoves & BishBosh.Model.GameTree.toMoveFrequency.
- Evaluation-criteria:
- Moved BishBosh.Attribute.{CriterionValue, CriterionWeight, WeightedMeanAndCriterionValues} to a new directory Metric/
- Implemented classes [Num, Fractional, Real] for data-types BishBosh.Metric.{CriterionValue.CriterionValue, CriterionWeight.CriterionWeight}, nullifying the requirement for exports.
- Replaced the pointless polymorphic payloads in data-types BishBosh.Metric.{CriterionValue.CriterionValue, CriterionWeight.CriterionWeight, WeightedMeanAndCriterionValues.WeightedMeanAndCriterionValues} with concrete types.
- Moved BishBosh.Attribute.RankValues to BishBosh.Input.
- Checked that (with the possible exception of the King) the Queen is configured as the most valuable rank.
- Avoided repeated calls from module BishBosh.Evaluation.Fitness to function IBishBosh.nput.RankValues.calculateMaximumTotalValue by adding the record-field BishBosh.Input.EvaluationOptions.getMaximumTotalRankValue.