GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. If nothing happens, download GitHub Desktop and try again. If nothing happens, download Xcode and try again. If nothing happens, download the GitHub extension for Visual Studio and try again. This project focuses on computer science concepts such as data structures and algorithms.
Chessnut is the chess engine we are using for all the moves and chess logic. We are utilizing a tree to generate the possible chessboards 3 levels deep and depth first search, minimax, and alpha-beta pruning to find the best move based on the following heuristics:.
Currently trying to implement multiprocessing as our recursive function uses a lot of computing power so calculating heuristics on board states more than 4 levels deep takes a lot of time. With a depth of 3 leves, our AI makes pretty good moves but also makes a lot of ill-advised ones as well. The AI's chess intelligence is estimated to be at a level 3 out of 9. These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
After installing the prerequisites and cloning this repo, go into the repo and create a virtual env:. Borrowing from Wikipedia's concise definition, the minimax algorithm is "a decision rule used The minimax algorithm assumes that the opponent is competent and would respond by minimizing the value determined by some heuristic of the maximizer. This simplified tree represents a game where each depth represents a player's turn.
Starting at the bottom of the tree the deeper into the tree, the further into the gamethe leaf nodes' values are passed back up to determine the maximizer's current best move.
In an actual chess game, the each depth would have many more branches with each branch representing a possible move by a chess piece. By keeping track of alpha the highest value guaranteed to the maximizer and beta the lowest value guaranteed to the minimizerit is possible to avoid calculating the heuristics of certain board states that cannot improve the situation for the current player. The grayed-out leaf node with a heuristic of 5 is never explored because the maximizer, at that point, is guaranteed a 5 by going left and can do no better than 4 by going right.
That is, if the value of the grayed-out leaf node is greater than 4, the minimizer would choose the 4. If it were less than 4, the minimizer would choose it instead. From the maximizer's perspective, there is no reason to investigate that leaf node. For more information on the history of chess, minimax, and alpha-beta pruning, check out Patrick Winston's lecture.
There are many factors when calculating the heuristics of a chessboard. As we developed our heuristic formula to consider more factors, the computations required to calculate the best move increased exponentially. At the moment, the AI considers the following 4 aspects of a board in its heuristic function. The material heuristic compares the value of one's pieces with the opponent's pieces.
It encourages the AI to capture pieces and make favorable trades. We used the standard values for each piece:. This heuristic calculates the number of legal moves a player can make. It encourages the AI to develop its pieces to exert more control over the board. It prioritizes controlling the center where pieces will have more options to influence the game. For example, a queen near the center of the board can move in 8 directions and thus control more squares, whereas a queen on a corner square can only move in 3 directions.
The pawn structure heuristic gives a score based on the number of pawns supported by other pawns.I was excited by the idea of building a program that could make decisions ,and maybe in the future, learn from those decisions. The goal of this project is to build the chess AI, not the board visuals or chess logic what moves are allowed, when the game is over, etc.
For server-side code, it is just Node. The function I used here is actually available on the chessboard. It also includes the code for integrating chess. It then picks the move which leads to the best position. What about the value for each piece?
Subscribe to RSS
The function, shown below, takes the 2D array that is returned by chess. It loops through each piece and either adds the piece if its color matches with the player color passed to the function, or subtracts it. This board evaluation function will be used in the rest of the iterations. As mentioned, it does have limitations.
This function uses the position evaluation function to evaluate the position after every possible move. Instead of randomly choosing the move from the list of possible moves, our program will make every move and evaluate the position. After it makes each move, it will undo the move.
All the while, the function is tracking which move leads to the best position. Without this randomization, if all moves lead to an equal outcome, it will choose the first move in the list which is the first piece that can move in the upper left corner. This leads to the knight moving, then the rook moving back and forth until a piece comes close enough to capture.
While the last iteration now encourages the computer to capture pieces it will pick moves that increase its relative positionit is still lacking. Minimax is an algorithm we can use to evaluate all possible moves a player can make.
We follow each move to a certain depth, which in this instance is how many moves ahead we want to look. Our evaluation will be relative to a player, and that player will be trying to get the best score possible maximize their position. To further understand this concept, it helps to create a tree.Chess isn't an easy game, by human standards.
But for an artificial intelligence powered by a formidable, almost alien mindset, the trivial diversion can be mastered in a few spare hours. In a new paper, Google researchers detail how their latest AI evolution, AlphaZero, developed "superhuman performance" in chess, taking just four hours to learn the rules before obliterating the world champion chess program, Stockfish.
In other words, all of humanity's chess knowledge — and beyond — was absorbed and surpassed by an AI in about as long as it takes to drive from New York City to Washington, DC. After being programmed with only the rules of chess no strategiesin just four hours AlphaZero had mastered the game to the extent it was able to best the highest-rated chess-playing program Stockfish.
In a series of games against Stockfish, AlphaZero won 25 games while playing as white with first mover advantageand picked up three games playing as black. The rest of the contests were draws, with Stockfish recording no wins and AlphaZero no losses.
This algorithm could run cities, continents, universes. DeepMind has been refining this AI for yearsin the process besting a series of human champions who fell like dominoes before the indomitable, "Godlike" neural network.
That victory streak culminated in a startling success in October, in which a new fully autonomous version of the AI — which only learns by playing itself, never facing humans — bested all its former incarnations.
By contrast, AlphaGo Zero's predecessors partly learned how to play the game by watching moves made by human players. That effort was intended to assist the fledgling AI in learning strategy, but it seems it may have actually been a handicap, since AlphaGo Zero's fully self-reliant learning proved devastatingly more effective in one-on-one competition.
It can learn whatever it determines is optimal, which may indeed be more nuanced that our own conceptions of the same. But things are moving so fast in this field that already the October accomplishment may have been outmoded.
In their new paperthe team outlines how the very latest AlphaZero AI takes the self-playing reliance — called reinforcement learning — and applies it with a much more generalised streak that gives it a broader focus to problem solving. That broader focus means AlphaZero doesn't just play chess. It also plays Shogi aka Japanese chess and Go too — and, perhaps unsurprisingly, it only took two and eight hours respectively to master those games as well.
For now, Google and DeepMind's computer scientists aren't commenting publicly on the new research, which hasn't as yet been peer-reviewed. But from what we can tell so far, this algorithm's dizzying ascent to the pinnacle of artificial intelligence is far from over, and even chess grandmasters are bewildered by the spectacle before them. The findings are available at preprint website arXiv.Machines capable of playing chess have fascinated people since the latter half of the 18th century, when the Turkthe first of the pseudo-automatons, began a triumphal exhibition tour of Europe.
Like its 19th-century successor Ajeeb, the Turk was a cleverly constructed cabinet that concealed a human master. The mystery of the Turk was the subject of more than a dozen books and a widely discussed article written by Edgar Allan Poe in Several world-class players were employed to operate the pseudo-automatons, including Harry Nelson Pillsbury, who was Ajeeb during part of the s, and Isidor Gunsberg and Jean Taubenhaus, who operated, by remote control, Mephisto, the last of the pseudo-automatons, before it was dismantled following World War I.
See Figure 5. The ability of a machine to play chess well has taken on symbolic meaning since the first precomputer devices more than a century ago. In a Spanish scientist, Leonardo Torres y Quevadointroduced an electromagnetic device—composed of wire, switch, and circuit—that was capable of checkmating a human opponent in a simple endgame, king and rook versus king.
The machine did not always play the best moves and sometimes took 50 moves to perform a task that an average human player could complete in fewer than But it could recognize illegal moves and always delivered eventual checkmate. Torres y Quevado acknowledged that the apparatus had no practical purpose. As a scientific toy, however, it gained attention for his belief in the capability of machines to be programmed to follow certain rules.
No significant progress in this area was made until the development of the electronic digital machine after World War II. Four years later a Manchester colleague, D. Prinz, wrote a program capable of solving mate-in-two-move problems but not actually playing chess. Shannon, like Torres y Quevada and Turing, stressed that progress in developing a chess-playing program would have a wider application and could lead, he said, to machines that could translate from language to language or make strategic military decisions.
Shannon appreciated that a computer conducting an entire game would have to make decisions using incomplete information because it could not examine all the positions leading to checkmate, which might lie 40 or 50 moves ahead. Therefore, it would have to select moves that were good, not merely legal, by evaluating future positions that were not checkmates. This evaluation function is crucial because even a rudimentary program would have to determine the relative differences between thousands of different positions.
In a typical position White may have 30 legal moves, and to each of those moves Black may have 30 possible replies. It has been estimated that humans examine only about 50 positions before choosing a move.
But Shannon suggested that each position could be weighed using positional criteria, including the condition of pawns and their control of the centre squares, the mobility of the other pieces, and specific cases of well-placed pieces, such as a rook on an open pawnless file or on the seventh rank. Other criteria were used by later programmers to refine and improve the evaluation function.
All criteria had to be quantified. For example, a human master can quickly evaluate the mobility of bishops or the relative safety of the king. Computers began to compete against humans in the late s. Chess Federation tournament.
This was borne out by a steady improvement by the best programs until Deep Thought played above the level in When Deep Blueits successor, was introduced init saw as far as six moves ahead. Gary Kasparov said he normally looks only three to five moves ahead, adding that for humans more are not needed.
Also helping computer progress was the availability of microprocessors in the late s. This allowed programmers unattached to universities to develop commercial microcomputers that by the s were nearly as strong as programs running on mainframes. In the same year another Carnegie Mellon program, Deep Thought, defeated a top-notch grandmaster, Bent Larsenin a tournament game. HiTech used 64 computer chips, one for each square on the board, and was capable of considering up topositions per second.
The result, Chiptest, won the North American Computer Championship in and evolved into Deep Thought, a program powerful enough to considerpositions a second. In that year a Fritz 3 program, examiningpositions per second, tied for first place with Kasparov, ahead of 16 other grandmasters, at a five-minute tournament in Munich, Germany.You can view the final AI algorithm here on GitHub.
The move generation library basically implements all the rules of chess. Based on this, we can calculate all legal moves for a given board state. Using these libraries will help us focus only on the most interesting task: creating the algorithm that finds the best move.
The simplest way to achieve this is to count the relative strength of the pieces on the board using the following table:. This is done by using the Minimax algorithm.
That is, we try to either minimize or maximize the outcome at each level. The effectiveness of the minimax algorithm is heavily based on the search depth we can achieve.
Alpha-beta pruning is an optimization method to the minimax algorithm that allows us to disregard some branches in the search tree. This helps us evaluate the minimax search tree much deeper, while using the same resources. The alpha-beta pruning is based on the situation where we can stop evaluating a part of the search tree if we find a move that leads to a worse situation than a previously discovered move.
The alpha-beta pruning does not influence the outcome of the minimax algorithm — it only makes it faster. The alpha-beta algorithm also is more efficient if we happen to visit first those paths that lead to good moves. With alpha-beta, we get a significant boost to the minimax algorithm, as is shown in the following example:. Follow this link to try the alpha-beta improved version of the chess AI. The initial evaluation function is quite naive as we only count the material that is found on the board.
To improve this, we add to the evaluation a factor that takes in account the position of the pieces. For example, a knight on the center of the board is better because it has more options and is thus more active than a knight on the edge of the board.
This said, it still lacks strategic understanding. You can check out the final version is on GitHub. If you want to learn more, check out the chess programming wiki. If this article was helpful, tweet it. Learn to code for free.
Get started. Stay safe, friends. Learn to code from home. Use our free 2, hour curriculum. A visualization of the move generation function. The starting position is used as input and the output is all the possible moves from that position.
Black plays with the aid of the simple evaluation function. A visualization of the minimax algorithm in an artificial position. The best move for white is b2-c3because we can guarantee that we can get to a position where the evaluation is With minimax in place, our algorithm is starting to understand some basic tactics of chess: Minimax with depth level 2.
Step 4: Alpha-beta pruning Alpha-beta pruning is an optimization method to the minimax algorithm that allows us to disregard some branches in the search tree. The positions we do not need to explore if alpha-beta pruning isused and the tree is visited in the described order. Step 5: Improved evaluation function The initial evaluation function is quite naive as we only count the material that is found on the board.
The visualized piece-square tables visualized. We can decrease or increase the evaluation, depending on the location of the piece.
Some further improvements we could make to the algorithm would be for instance: move-ordering faster move generation and end-game specific evaluation.
Thanks for reading!Computer chess includes both hardware dedicated computers and software capable of playing chess. Computer chess provides opportunities for players to practice even in the absence of human opponents, and also provides opportunities for analysis, entertainment and training.I created an AI to Play Chess
Computer chess applications that play at the level of a chess master or higher are available on hardware from super-computers to smart phones. Standalone chess-playing machines are also available. Stockfish, GNU Chess, Fruit, and other free open source applications are available for various platforms. Computer chess applications, whether implemented in hardware or software, employ a different paradigm than humans to choose their moves: they use heuristic methods to build, search and evaluate trees representing sequences of moves from the current position and attempt to execute the best such sequence during play.
Such trees are typically quite large, thousands to millions of nodes. The computational speed of modern computers, capable of processing tens of thousands to hundreds of thousands of nodes or more per second, in conjunction with extension and reduction heuristics that narrow the tree to mostly relevant nodes, make such an approach effective. The first chess machines capable of playing chess or reduced chess-like games were software programs running on digital computers early in the vacuum tube computer age s.
The early programs played so poorly that even a beginner could defeat them. Within 50 years, inchess engines running on super-computers or specialized hardware were capable of defeating even the best human players.
Nevertheless, solving chess is not currently possible for modern computers due to the game's extremely large number of possible variations. Online and webapps are also available. Programs run on everything from super-computers to smartphones. Hardware requirements for programs are minimal: the apps are no larger than a few megabytes on disk, use a few megabytes of memory but can use much more, if it is availableand any processor Mhz or faster is sufficient.
A step-by-step guide to building a simple chess AI
Performance will vary modestly with processor speed, but sufficient memory to hold a large transposition table up to several gigabytes or more is more important to playing strength than processor speed. Most available commercial chess programs and machines are super-grandmaster playing strength ELO or moreand take advantage of multi-core and hyperthreaded computer CPU architectures.
Top programs such as Stockfish have surpassed even world champion caliber players. Most chess engines interface to a GUI like Winboard or Chessbase and playing strength, time controls, and other performance-related settings are adjustable from the GUI.
Most GUI's also allow the player to set up and edit positions, take back moves, offer and accept draws and resignhave a "coach" function to recommend a move when the player is in doubt, and show the engine's analysis as the game progresses. Perhaps the most common type of chess software are programs that simply play chess. You make a move on the board, and the AI calculates and plays a response, and back and forth until one player resigns.
Sometimes the chess enginewhich calculates the moves, and the graphical user interface GUI are separate programs. A variety of engines can be imported into the GUI, so that you can play against different styles.
Engines often have just a simple text command-line interface while GUIs may offer a variety of piece sets, board styles or even 3D or animated pieces. Because recent engines are so strong, engines or GUIs may offer some way of limiting the engine's strength, so the player has a better chance of winning.
Some versions of Fritz have a Handicap and Fun mode for limiting the current engine or changing the percentage of mistakes it makes or changing its style. Fritz also has a Friend Mode where during the game it tries to match the level of the player. Chess databases allow users to search through a large library of historical games, analyze them, check statistics, and draw up an opening repertoire.
Programs such as Playchess allow you to play games against other players over the internet.
Chess training programs teach chess. Chessbase has Fritz and Chesster for children. There is also Software for handling chess problems. After discovering refutation screening—the application of alpha-beta pruning to optimizing move evaluation—ina team at Carnegie Mellon University predicted that a computer would defeat the world human champion by Researchers worked to improve programs' ability to identify killer heuristicsunusually high-scoring moves to reexamine when evaluating other branches, but into the s most top chess players believed that computers would not soon be able to play at a Master level.
However, the chess game tree is too large to be completely examined. That is why computer chess engines only examine the tree up to a certain depth, and then use various methods to evaluate the positions. Many of these methods are based on heuristics. Also, a serious chess-playing program will have a library of openings so that it can play in the beginning by just consulting that library and not having to examine the game tree. Finally, many end games are completely solved, and these are also programmed in as a library.
If you need an in-depth knowledge about AI algorithms, I think "artificial intelligence modern approach" book is the best source. Wikipedia is a safe bet as a starting point.
Did you look there? Rybka seems to be a contender. Have a look at the some of the free source chess codes, for instance Crafty or even better how about Fruit? It plays pretty much almost the same strength of Rybka. But there are many new algos out there. Learn more. Currently known best algorithm s for computer chess?
Asked 10 years, 3 months ago. Active 10 years, 3 months ago. Viewed 54k times. I just wanted to learn name of algorithms. Before getting into their "algorithmic" mode, most but not all chess programs, rely on heuristics, namely an extensive library of Chess Openings.
Active Oldest Votes. JaakkoK JaakkoK 7, 1 1 gold badge 28 28 silver badges 47 47 bronze badges. An equivalent of minimax is called negamax. The difference is that the score is negated at each change of depth in the tree.
This way both players are trying to maximize the score where in minimax one is trying to minimize it. Does it become just a single value? In fact, its probably the only area where there is novelty in most chess engines now adays. For example, the Rybka position evaluation function was designed over 5 years if irc by very strong players.
In a sense the evaluation function is what gives the computer intuition about the chess position, a fundamentally important part of any chess game and orthogonal to other issues like tactics in the game.