An engine for beginners?

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

Sean Evans
Posts: 1777
Joined: Thu Jun 05, 2008 10:58 pm
Location: Canada

Re: An engine for beginners?

Post by Sean Evans »

kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
Hi, just give the computer one-second to play the whole game, when the opponent can win consistently double the time and then double the time again, etc.

Good luck,

Sean
User avatar
fern
Posts: 8755
Joined: Sun Feb 26, 2006 4:07 pm

Re: An engine for beginners?

Post by fern »

some scientists here are working to reproduce my chess brain.
It assures you permanenet patzer perfomance.
User avatar
Don
Posts: 5106
Joined: Tue Apr 29, 2008 4:27 pm

Re: An engine for beginners?

Post by Don »

kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: An engine for beginners?

Post by bob »

Don wrote:
kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.[/quote

Crafty has this feature built in, but it is not yet clear how well (or actually how poorly) it works. It is quite hard to take a program with a lot of knowledge, and a very fast / deep search, and make it play like a beginner. A beginner is characterized by two distinct features.. (1) he is tactically weak and is not going to be tossing out mates in 15 or 20 and (b) he is positionally weak and won't understand pawn structure, king safety, mobility, space, etc.

Some previous attempts have relied on depth limits. But what you get is a program with GM-like knowledge and idiot-like tactics. That doesn't feel like a beginner because it won't wreck its pawn structure, and so forth.

In Crafty, the "skill command" does both. It introduces a random component into the evaluation which slowly eliminates the concepts of material value and positional value. And at the same time, it reduces the search depth (by slowing the program down, not by making it move quicker) so that we don't see the "beal effect" of a random evaluation still playing good chess.

The only problem is, it is very difficult to calibrate the skill command to Elo. At one point, skill 70 would reduce elo by 200. Skill 50 would reduce it by 400. But that is still way too strong for a beginner. Skill 1 should play like an absolute idiot, but I don't have any opponents weak enough to get a feel for exactly how weak it is...

Would be an interesting experiment to do. And would be a nice publication to produce something that is hardware independent while being able to say something like "skill 1450" and get a 1450-level opponent no matter what the hardware platform.

Not so easy, however. But interesting.
User avatar
Don
Posts: 5106
Joined: Tue Apr 29, 2008 4:27 pm

Re: An engine for beginners?

Post by Don »

bob wrote:
Don wrote:
kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.
Crafty has this feature built in, but it is not yet clear how well (or actually how poorly) it works. It is quite hard to take a program with a lot of knowledge, and a very fast / deep search, and make it play like a beginner. A beginner is characterized by two distinct features.. (1) he is tactically weak and is not going to be tossing out mates in 15 or 20 and (b) he is positionally weak and won't understand pawn structure, king safety, mobility, space, etc.

Some previous attempts have relied on depth limits. But what you get is a program with GM-like knowledge and idiot-like tactics. That doesn't feel like a beginner because it won't wreck its pawn structure, and so forth.

In Crafty, the "skill command" does both. It introduces a random component into the evaluation which slowly eliminates the concepts of material value and positional value. And at the same time, it reduces the search depth (by slowing the program down, not by making it move quicker) so that we don't see the "beal effect" of a random evaluation still playing good chess.

The only problem is, it is very difficult to calibrate the skill command to Elo. At one point, skill 70 would reduce elo by 200. Skill 50 would reduce it by 400. But that is still way too strong for a beginner. Skill 1 should play like an absolute idiot, but I don't have any opponents weak enough to get a feel for exactly how weak it is...

Would be an interesting experiment to do. And would be a nice publication to produce something that is hardware independent while being able to say something like "skill 1450" and get a 1450-level opponent no matter what the hardware platform.

Not so easy, however. But interesting.
I have pondered this and I think the right approach may be to write a separate evaluation function for weaker play. It could have a rudimentary form of pawn structure but nothing sophisticated. It could have just a little bit of king safety and some generally missing terms that are concepts of more sophisticated players. And it could have the classical 1,3,5,9 piece terms since beginners primarily use those. So it might not be aware of the bishop pair for instance and make some positionally bad trades.

Evaluation is so huge in Komodo that I could lower the strength by 300+ ELO just by building a simple but not ridiculous evaluation function and it might simulate weaker players betters. In addition to low depths, we could use overly aggressive LMR or LMR without re-search on later ply and it might even make blunders on it's own without my having to artificially induce them.
bhlangonijr
Posts: 482
Joined: Thu Oct 16, 2008 4:23 am
Location: Milky Way

Re: An engine for beginners?

Post by bhlangonijr »

Don wrote:
kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.
Sometime ago I was playing with what Bob call "Beal effect". I found that even if I randomize the eval function even then it still play chess, and tactically very well sometimes - for a beginner. Although, there is a trick that works very well to get your engine dumbed down hundreds of Elo and making very natural blunders. You just need to modify your engine's move legality check - used when retrieving moves from the hash table-, ignoring if the move is not actually from the side to move and playing it. It will cause the search to randomly make 2 or 3 moves in a row for the same side and then you can imagine how unstable it would be. :)

Regards,
User avatar
Don
Posts: 5106
Joined: Tue Apr 29, 2008 4:27 pm

Re: An engine for beginners?

Post by Don »

Don wrote:
bob wrote:
Don wrote:
kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.
Crafty has this feature built in, but it is not yet clear how well (or actually how poorly) it works. It is quite hard to take a program with a lot of knowledge, and a very fast / deep search, and make it play like a beginner. A beginner is characterized by two distinct features.. (1) he is tactically weak and is not going to be tossing out mates in 15 or 20 and (b) he is positionally weak and won't understand pawn structure, king safety, mobility, space, etc.

Some previous attempts have relied on depth limits. But what you get is a program with GM-like knowledge and idiot-like tactics. That doesn't feel like a beginner because it won't wreck its pawn structure, and so forth.

In Crafty, the "skill command" does both. It introduces a random component into the evaluation which slowly eliminates the concepts of material value and positional value. And at the same time, it reduces the search depth (by slowing the program down, not by making it move quicker) so that we don't see the "beal effect" of a random evaluation still playing good chess.

The only problem is, it is very difficult to calibrate the skill command to Elo. At one point, skill 70 would reduce elo by 200. Skill 50 would reduce it by 400. But that is still way too strong for a beginner. Skill 1 should play like an absolute idiot, but I don't have any opponents weak enough to get a feel for exactly how weak it is...

Would be an interesting experiment to do. And would be a nice publication to produce something that is hardware independent while being able to say something like "skill 1450" and get a 1450-level opponent no matter what the hardware platform.

Not so easy, however. But interesting.
I have pondered this and I think the right approach may be to write a separate evaluation function for weaker play. It could have a rudimentary form of pawn structure but nothing sophisticated. It could have just a little bit of king safety and some generally missing terms that are concepts of more sophisticated players. And it could have the classical 1,3,5,9 piece terms since beginners primarily use those. So it might not be aware of the bishop pair for instance and make some positionally bad trades.

Evaluation is so huge in Komodo that I could lower the strength by 300+ ELO just by building a simple but not ridiculous evaluation function and it might simulate weaker players betters. In addition to low depths, we could use overly aggressive LMR or LMR without re-search on later ply and it might even make blunders on it's own without my having to artificially induce them.
In addition to this, in "weak mode" it should also simulate the thinking time of weaker players, it should not play crappy moves instantly, but take some time to play stupid moves! usleep(1000) or something every time a move is made internally would give the program a more natural "pace" of play for a weaker player.

To simulate a 1000 player you need to think for 5 minutes and then play a howler :-)
yanquis1972
Posts: 1766
Joined: Wed Jun 03, 2009 12:14 am

Re: An engine for beginners?

Post by yanquis1972 »

Don wrote:
bob wrote:
Don wrote:
kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.
Crafty has this feature built in, but it is not yet clear how well (or actually how poorly) it works. It is quite hard to take a program with a lot of knowledge, and a very fast / deep search, and make it play like a beginner. A beginner is characterized by two distinct features.. (1) he is tactically weak and is not going to be tossing out mates in 15 or 20 and (b) he is positionally weak and won't understand pawn structure, king safety, mobility, space, etc.

Some previous attempts have relied on depth limits. But what you get is a program with GM-like knowledge and idiot-like tactics. That doesn't feel like a beginner because it won't wreck its pawn structure, and so forth.

In Crafty, the "skill command" does both. It introduces a random component into the evaluation which slowly eliminates the concepts of material value and positional value. And at the same time, it reduces the search depth (by slowing the program down, not by making it move quicker) so that we don't see the "beal effect" of a random evaluation still playing good chess.

The only problem is, it is very difficult to calibrate the skill command to Elo. At one point, skill 70 would reduce elo by 200. Skill 50 would reduce it by 400. But that is still way too strong for a beginner. Skill 1 should play like an absolute idiot, but I don't have any opponents weak enough to get a feel for exactly how weak it is...

Would be an interesting experiment to do. And would be a nice publication to produce something that is hardware independent while being able to say something like "skill 1450" and get a 1450-level opponent no matter what the hardware platform.

Not so easy, however. But interesting.
I have pondered this and I think the right approach may be to write a separate evaluation function for weaker play. It could have a rudimentary form of pawn structure but nothing sophisticated. It could have just a little bit of king safety and some generally missing terms that are concepts of more sophisticated players. And it could have the classical 1,3,5,9 piece terms since beginners primarily use those. So it might not be aware of the bishop pair for instance and make some positionally bad trades.

Evaluation is so huge in Komodo that I could lower the strength by 300+ ELO just by building a simple but not ridiculous evaluation function and it might simulate weaker players betters. In addition to low depths, we could use overly aggressive LMR or LMR without re-search on later ply and it might even make blunders on it's own without my having to artificially induce them.
what you describe in the first paragraph is exactly what chessmaster does & has been doing for years upon years.
fluviumque

Re: An engine for beginners?

Post by fluviumque »

As someone mentioned before, the Glass engine has some very nice approaches to the topic. Interesting: http://www.koziol.home.pl/marittima/glass/glass.pdf
p13 ff. are about the weakening system...

I'm a pretty weak player. A lot because of concentration lack and blunders. But I have an idea what a good move could be. So the best weak engine is an engine, which plays positionally good chess (e.g. wants to conquer the center, does not go for a3 and h3 a lot etc..), an engine, which I may win against, but do not see why :) It's boring if engines make too obvious blunders.
User avatar
Don
Posts: 5106
Joined: Tue Apr 29, 2008 4:27 pm

Re: An engine for beginners?

Post by Don »

yanquis1972 wrote:
Don wrote:
bob wrote:
Don wrote:
kaissa wrote:Hello,

I need a chess engine that will play so weak that a beginner should have a chance once in a while. It should not play like 2600 for some time and then drop a rook. I need it to play at 1000-1400 all the way. Any chance?

Thanks for your time,
If you want it to play like a 1400 player, it must make a couple of blunders per game in addition to playing something like a 2 or 3 ply search.

However, programs have to much good evaluation to similar the crappy positional play of a weaker player. So it would be playing more like a much stronger player who is not thinking very clearly tactically and making blunders once in a while!

I think you can simulate this somewhat by randomizing the evaluation function. I think Bob Hyatt has some good ideas on how to realistically weaken the play.
Crafty has this feature built in, but it is not yet clear how well (or actually how poorly) it works. It is quite hard to take a program with a lot of knowledge, and a very fast / deep search, and make it play like a beginner. A beginner is characterized by two distinct features.. (1) he is tactically weak and is not going to be tossing out mates in 15 or 20 and (b) he is positionally weak and won't understand pawn structure, king safety, mobility, space, etc.

Some previous attempts have relied on depth limits. But what you get is a program with GM-like knowledge and idiot-like tactics. That doesn't feel like a beginner because it won't wreck its pawn structure, and so forth.

In Crafty, the "skill command" does both. It introduces a random component into the evaluation which slowly eliminates the concepts of material value and positional value. And at the same time, it reduces the search depth (by slowing the program down, not by making it move quicker) so that we don't see the "beal effect" of a random evaluation still playing good chess.

The only problem is, it is very difficult to calibrate the skill command to Elo. At one point, skill 70 would reduce elo by 200. Skill 50 would reduce it by 400. But that is still way too strong for a beginner. Skill 1 should play like an absolute idiot, but I don't have any opponents weak enough to get a feel for exactly how weak it is...

Would be an interesting experiment to do. And would be a nice publication to produce something that is hardware independent while being able to say something like "skill 1450" and get a 1450-level opponent no matter what the hardware platform.

Not so easy, however. But interesting.
I have pondered this and I think the right approach may be to write a separate evaluation function for weaker play. It could have a rudimentary form of pawn structure but nothing sophisticated. It could have just a little bit of king safety and some generally missing terms that are concepts of more sophisticated players. And it could have the classical 1,3,5,9 piece terms since beginners primarily use those. So it might not be aware of the bishop pair for instance and make some positionally bad trades.

Evaluation is so huge in Komodo that I could lower the strength by 300+ ELO just by building a simple but not ridiculous evaluation function and it might simulate weaker players betters. In addition to low depths, we could use overly aggressive LMR or LMR without re-search on later ply and it might even make blunders on it's own without my having to artificially induce them.
what you describe in the first paragraph is exactly what chessmaster does & has been doing for years upon years.
I was not aware of that. So you are saying chessmaster slows the pace down significantly and also has a separate evaluation function? Are you sure? By separate evaluation function I don't just mean a switch that turns off pawn structure and king safety, but a complete rethink with more naive concepts.

If that's what it does, I think it's the right idea.

Another twist on this is that you could also interpolate the naive evaluation with the strong evaluation. Depending on settings you could elegantly scale the playing quality from poor to strong, but using 90% poor evaluation, 10% good evaluation. Having any concept represented at all is half the battle so mixing in 10% of the good will have a bigger impact that then next 10% so I believe this interpolation should not be linear.

Don