I gave up trying to break the search like that when I was trying to provide a "dumb-down" facility. I did have some luck with what I do in crafty currently, but the "skill" setting is very non-linear and almost nonsensical at a level of 1, where there are no extensions or reductions, the eval is reduced to 1% of normal and a random number between 0 and 100 (1 pawn) is added in...hgm wrote:Pruning apparently bad moves will probably not have much effect against Humans, as they prune those moves too. So you make the program more Human-like by it, and vulnarable against full-width searchers which do find non-obvious tactics, but youdon't weaken it against Humans.Tord Romstad wrote:Underpromotions and moves with negative SEE value are pruned with very high probability, long diagonal moves also have quite high probability, obvious recaptures have very low probability of being pruned, and so on. Finally, the frequency of pruning of course depends on the playing strength.
I think it is very important that your prunings are correlated. If you independently decide if the same move will be pruned in some branches, but not in others, the search will simply seek out the branches where it is not pruned. And search is very clever at that.
Humans err very differently: if they miss a move (e.g., that a Knight fork against KQ is possible), they miss it in all branches. So their search will not work around it.
I think you have to decide in the root which moves you are going to prune, or at least globally. E.g. through some kine of history table. The first time you encounter a (Piece, From, To) combination you decide if you will prune that move or not, with a probability that depends on how far from the root this move becomes possible (e.g. how many moves has the piece to do before it gets there, how many pieces are blocking that move in the root). If you decide to prune it, you should then always prune that move, everywhere in the tree.
Try if you can tune it such that you manage to lose from NEG 0.3d! That is an engine that prunes every move!
Artificial stupidity - making a program play badly
Moderator: Ras
-
- Posts: 20943
- Joined: Mon Feb 27, 2006 7:30 pm
- Location: Birmingham, AL
Re: Artificial stupidity - making a program play badly
-
- Posts: 20943
- Joined: Mon Feb 27, 2006 7:30 pm
- Location: Birmingham, AL
Re: Artificial stupidity - making a program play badly
that isn't realistic however. A 1200 human has little concept of passed pawns, weak squares, and king safety. a 2 ply search will be tactically pretty weak, but the program will still play a strong level of positional chess, which is very unlike what you would see from a true beginner-level player...mjlef wrote:I went through the same thing with Zillions and earlier chess programs. WHat I settled on is limit search depth (auto play to determine a rating for a 1 ply search, 2 ply, etc. For even worse play, randomly toss out moves---do not score them based on how likely you think a human would be to overlook it...just toss x% of moves with a 1 ply search. You can then use autoplay to score that as well. People overlook moves all the time...even strong players miss mate in 1 sometimes.
Reducing the search depth is reducing tactical acuity but leaving full positional judgement intact...
-
- Posts: 1808
- Joined: Wed Mar 08, 2006 9:19 pm
- Location: Oslo, Norway
Re: Artificial stupidity - making a program play badly
Hi Bob,
Thanks for sharing your experiences.
It sounds like your approach cripples the evaluation more throughly than mine, but that my approach cripples the tactical skills more. Intuitively, I would expect crippling the search to be more effective, but it doesn't seem to be so. Interesting.
At any rate, I'm giving up for tonight. I'll log off after my next game, log on again with Glaurung running at full strength (on a Core 2 Duo 2.8 GHz), and open for all challengers, in case some of you would like to try a game or two against the latest Glaurung development version. Please be warned that it is terribly underrated, though.
Tord
Thanks for sharing your experiences.
I actually do something slightly similar. I don't add a random number to the evaluation itself, but at the beginning of each new game, I add a huge potentially huge random number to each of the main evaluation weights (king safety for the computer, king safety for the opponent, mobility, passed pawns, pawn structure, and space).bob wrote:I have added a "skill feature" to crafty 22.1, that can be compiled in if desired.
It is a number between 1 and 100, where 100 is normal, and anything lower represents a degraded level of play...
Let's take skill 50 as an example. First thing this does is reduce all extensions and reductions by 50%, which reduces tactical skill. This includes things like check extensions, null-move and LRM type reductions, etc. It then reduces the evaluation numbers by 50% as well, and adds in a random value that is 50% of the value of a pawn.
It sounds like your approach cripples the evaluation more throughly than mine, but that my approach cripples the tactical skills more. Intuitively, I would expect crippling the search to be more effective, but it doesn't seem to be so. Interesting.
At any rate, I'm giving up for tonight. I'll log off after my next game, log on again with Glaurung running at full strength (on a Core 2 Duo 2.8 GHz), and open for all challengers, in case some of you would like to try a game or two against the latest Glaurung development version. Please be warned that it is terribly underrated, though.

Tord
-
- Posts: 585
- Joined: Wed May 10, 2006 7:28 pm
- Location: Birmingham, England
Re: Artificial stupidity - making a program play badly
Tord,
Here's my idea...
Randomly exclude a number of moves from consideration altogether. For very weak play half the number of possible moves (or more) could be excluded. For a very slight reduction in playing level a single move (selected at random) could be excluded on every other turn. In addition, for a realistically reduced level of play, the engine should start its calculations after an interval.
Here's my idea...
Randomly exclude a number of moves from consideration altogether. For very weak play half the number of possible moves (or more) could be excluded. For a very slight reduction in playing level a single move (selected at random) could be excluded on every other turn. In addition, for a realistically reduced level of play, the engine should start its calculations after an interval.
Marek Soszynski
-
- Posts: 151
- Joined: Wed Mar 08, 2006 10:09 pm
- Location: Murcia (Spain)
Re: Artificial stupidity - making a program play badly
I've been trying to remember what kind of mistakes I made more often when I used to play OTB.
-Sometimes I just forgot about a certain piece. That piece had a strong move at the end of the variation, but I forgot the piece was there (from the begining, or since a certain move in the middle of the variation).
-Other typical mistake is to forget that a certain piece was captured. At some point in my calculations I think the piece is still on the board, and use it.
-Less frequent, but also happens: just forget about a certain area of the board, typically where a passed pawn can emerge. It used to happen with corners of the board, not with the center.
-Positional mistakes happen when you forget about some important factor of the position. For example, you're very happy with your pawn structure, but forget to evaluate piece activity of the opponent, which happens to be deadly.
-Other times you make a positional mistake because you think you're smarter than then general rule. You think 'I know pawn weakness is bad, but this is an exception to the rule'. And your clever exception proves wrong.
-Sometimes you feel like Tahl and decide to make the board burn in tactical fire. Of course you discover you're not Tahl, and blunder a piece for nothing.
-Or you feel the king of attack, forget everything you know about evaluating positions and just try to the opponent's king killed.
So, in summary, it's all about forgetting things
-Sometimes I just forgot about a certain piece. That piece had a strong move at the end of the variation, but I forgot the piece was there (from the begining, or since a certain move in the middle of the variation).
-Other typical mistake is to forget that a certain piece was captured. At some point in my calculations I think the piece is still on the board, and use it.
-Less frequent, but also happens: just forget about a certain area of the board, typically where a passed pawn can emerge. It used to happen with corners of the board, not with the center.
-Positional mistakes happen when you forget about some important factor of the position. For example, you're very happy with your pawn structure, but forget to evaluate piece activity of the opponent, which happens to be deadly.
-Other times you make a positional mistake because you think you're smarter than then general rule. You think 'I know pawn weakness is bad, but this is an exception to the rule'. And your clever exception proves wrong.
-Sometimes you feel like Tahl and decide to make the board burn in tactical fire. Of course you discover you're not Tahl, and blunder a piece for nothing.
-Or you feel the king of attack, forget everything you know about evaluating positions and just try to the opponent's king killed.
So, in summary, it's all about forgetting things

__________________________
José Carlos Martínez Galán
José Carlos Martínez Galán
-
- Posts: 388
- Joined: Wed Mar 08, 2006 10:08 pm
Re: Artificial stupidity - making a program play badly
I have done this in Thinker.
Here are a few things that I have tried:
1. Make eval do piece counting only. This really, really works.
2. Avoid the best root move. Pick the second best (and sometimes the third best).
3. Use-up a small time, but don't move quickly. For example, search for only 1 second, and then sleep for 5 more seconds before making the move. This way your engine does not make quick moves, and gives the human opponent some time to ponder.
4. Never make a move in less than 2 seconds, even in bullet games.
5. Randomize the time allocation.
6. Offer-up draws when you are behind in score (the obnoxious human).
7. Disconnect randomly.
Note that the goal is for the engine to be 'weak', and not 'stupid'. So, you can violate (2) and (3) when the best move is a re-capture, a capture of a hanging piece, a promotion, or when evading a check.
Here are a few things that I have tried:
1. Make eval do piece counting only. This really, really works.
2. Avoid the best root move. Pick the second best (and sometimes the third best).
3. Use-up a small time, but don't move quickly. For example, search for only 1 second, and then sleep for 5 more seconds before making the move. This way your engine does not make quick moves, and gives the human opponent some time to ponder.
4. Never make a move in less than 2 seconds, even in bullet games.
5. Randomize the time allocation.
6. Offer-up draws when you are behind in score (the obnoxious human).
7. Disconnect randomly.
Note that the goal is for the engine to be 'weak', and not 'stupid'. So, you can violate (2) and (3) when the best move is a re-capture, a capture of a hanging piece, a promotion, or when evading a check.
-
- Posts: 1922
- Joined: Thu Mar 09, 2006 12:51 am
- Location: Earth
Re: Artificial stupidity - making a program play badly
LOL!CThinker wrote:6. Offer-up draws when you are behind in score (the obnoxious human).
7. Disconnect randomly.
Personally, I'd like to give a crack at the weak version.At any rate, I'm giving up for tonight. I'll log off after my next game, log on again with Glaurung running at full strength (on a Core 2 Duo 2.8 GHz), and open for all challengers, in case some of you would like to try a game or two against the latest Glaurung development version. Please be warned that it is terribly underrated, though. Smile

-
- Posts: 6401
- Joined: Thu Mar 09, 2006 8:30 pm
- Location: Chicago, Illinois, USA
Re: Artificial stupidity - making a program play badly
"Forget" is what make us intelligent. I should name my engine "Funes" after the great J.L. Borges character.José Carlos wrote:I've been trying to remember what kind of mistakes I made more often when I used to play OTB.
-Sometimes I just forgot about a certain piece. That piece had a strong move at the end of the variation, but I forgot the piece was there (from the begining, or since a certain move in the middle of the variation).
-Other typical mistake is to forget that a certain piece was captured. At some point in my calculations I think the piece is still on the board, and use it.
-Less frequent, but also happens: just forget about a certain area of the board, typically where a passed pawn can emerge. It used to happen with corners of the board, not with the center.
-Positional mistakes happen when you forget about some important factor of the position. For example, you're very happy with your pawn structure, but forget to evaluate piece activity of the opponent, which happens to be deadly.
-Other times you make a positional mistake because you think you're smarter than then general rule. You think 'I know pawn weakness is bad, but this is an exception to the rule'. And your clever exception proves wrong.
-Sometimes you feel like Tahl and decide to make the board burn in tactical fire. Of course you discover you're not Tahl, and blunder a piece for nothing.
-Or you feel the king of attack, forget everything you know about evaluating positions and just try to the opponent's king killed.
So, in summary, it's all about forgetting things
"Sospecho, sin embargo, que no era muy capaz de pensar. Pensar es olvidar diferencias, es generalizar, abstraer. En el abarrotado mundo de Funes no había sino detalles, casi inmediatos."
Funes, el memorioso de Jorge Luis Borges.
"I suspect, nevertheless, that he was not very capable of thought. To think is to forget a difference, to generalize, to abstract. In the overly replete world of Funes there were nothing but details, almost contiguous details."
From "Funes the memorious", Jorge Luis Borges.
Miguel
-
- Posts: 2091
- Joined: Mon Mar 13, 2006 2:31 am
- Location: North Carolina, USA
Re: Artificial stupidity - making a program play badly
There are several reasons for the problem:
1) many humans on ICC cheat and use a 2nd computer with a program.
I noticed (myself playing) that many people I played against
played normally (for their rating) or worse for a few games then
they played perfectly in the 4th game. An 1100 player never plays
perfectly. Many months later, I downloaded Dasher which came
with several rated bots. So, I played the 1000 - 1400 bots. They
played exactly like the "ICC humans" at those ratings. So, there
is a significant amount of cheating going on.
2) The instant move trick is something you can do in many of the ICC
interfaces. It is called a premove. Its a time gaining technique.
Don't use it myself, but lots of others do. Essentially, you tell the
interface make this move as soon as my opponent moves. So,
the opponent hasn't moved yet but I can make a premove which
says I want to make this move regardless of opponents move.
3) I am with Bob, Lance and some of the others. You can't linearly
weaken the programs strength without weakening the eval. Especially,
the pawn structure and king safety knowledge. Just consider the
order in which humans learn.
4) You must consider the machine speed. WBEC uses a P3 1.2Ghz
machine and claims TSCP is about 1650. So, if you have a much
faster machine then you have to up the rating. Also, I am not sure
if Leo adjusted his ratings to account for machine speed over the
years. If that is so, then TSCP may be even stronger compared to
humans.
I'll be glad to run some tests for you. I have an old computerized chess
board which holds a 1700 rating. I could match it against a Glaurung
with the parameters of your choice. It is a very good for static strength
testing - the HW and the SW never change.
Also, I'd be happy to try it out on ICC myself. My ICC rating is low
enough. However, it is 500 pts below my club rating and nearly 300
pts below my USCF rating. On a good day, I get real humans - these
days don't happen much.
1) many humans on ICC cheat and use a 2nd computer with a program.
I noticed (myself playing) that many people I played against
played normally (for their rating) or worse for a few games then
they played perfectly in the 4th game. An 1100 player never plays
perfectly. Many months later, I downloaded Dasher which came
with several rated bots. So, I played the 1000 - 1400 bots. They
played exactly like the "ICC humans" at those ratings. So, there
is a significant amount of cheating going on.
2) The instant move trick is something you can do in many of the ICC
interfaces. It is called a premove. Its a time gaining technique.
Don't use it myself, but lots of others do. Essentially, you tell the
interface make this move as soon as my opponent moves. So,
the opponent hasn't moved yet but I can make a premove which
says I want to make this move regardless of opponents move.
3) I am with Bob, Lance and some of the others. You can't linearly
weaken the programs strength without weakening the eval. Especially,
the pawn structure and king safety knowledge. Just consider the
order in which humans learn.
Code: Select all
below 1000 - people don't know how to count material
below 1200 - people drop pieces about 4 times a game if the
game lasts that long.
below 1500 - people don't analyze pawn structure well
machine and claims TSCP is about 1650. So, if you have a much
faster machine then you have to up the rating. Also, I am not sure
if Leo adjusted his ratings to account for machine speed over the
years. If that is so, then TSCP may be even stronger compared to
humans.
I'll be glad to run some tests for you. I have an old computerized chess
board which holds a 1700 rating. I could match it against a Glaurung
with the parameters of your choice. It is a very good for static strength
testing - the HW and the SW never change.
Also, I'd be happy to try it out on ICC myself. My ICC rating is low
enough. However, it is 500 pts below my club rating and nearly 300
pts below my USCF rating. On a good day, I get real humans - these
days don't happen much.
-
- Posts: 892
- Joined: Sun Nov 19, 2006 9:16 pm
- Location: Russia
Re: Artificial stupidity - making a program play badly
Just short thought.
People experience tunnel vision effect opposite to computers horizon effect.
Many people discover some interesting variation and begin to implement it in blitz almost totally ignoring opponent silent moves.
I think that depth extensions and reductions should be extremely increased.
Reducing depth to any line except PV will help to graduate strength against humans better then fixed flat n-ply search.
People experience tunnel vision effect opposite to computers horizon effect.
Many people discover some interesting variation and begin to implement it in blitz almost totally ignoring opponent silent moves.
I think that depth extensions and reductions should be extremely increased.
Reducing depth to any line except PV will help to graduate strength against humans better then fixed flat n-ply search.