Sloppy 0.1.1 released

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

Moderators: hgm, Rebel, chrisw

Tony

Re: Toga 0.1.1 released

Post by Tony »

Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning(Chess *chess, int beta, int *depth, bool in_pv)

static U32
iid(Chess *chess, int alpha, int beta, int depth)

static int
mate_distance_pruning(Board *board, int *alpha, int *beta, int ply)

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
Uri Blass
Posts: 10281
Joined: Thu Mar 09, 2006 12:37 am
Location: Tel-Aviv Israel

Re: Toga 0.1.1 released

Post by Uri Blass »

Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning(Chess *chess, int beta, int *depth, bool in_pv)

static U32
iid(Chess *chess, int alpha, int beta, int depth)

static int
mate_distance_pruning(Board *board, int *alpha, int *beta, int ply)

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
If the evaluation is the same and the search is the same then what is the reason that fruit is significantly stronger than sloppy?
User avatar
ilari
Posts: 750
Joined: Mon Mar 27, 2006 7:45 pm
Location: Finland

Re: Toga 0.1.1 released

Post by ilari »

Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning(Chess *chess, int beta, int *depth, bool in_pv)

static U32
iid(Chess *chess, int alpha, int beta, int depth)

static int
mate_distance_pruning(Board *board, int *alpha, int *beta, int ply)

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
I also use negamax search with beta cutoffs. Pretty Fruity, huh?

You are aware that Fabien didn't invent null move pruning and IID (not sure about mate distance pruning), right?

Let's see. First Sloppy's null move pruning:
When to NOT null move:
- when in pv: very common, not a Fruit feature
- previous move was a null move: very common, not a Fruit feature
- when in check: again, not a Fruit feature, just common sense
- depth <= 2: after a lot of testing, this value worked best. Nothing to do with Fruit.
- beta is a mate score: just common sense
- material <= VAL_KNIGHT: definitely not from Fruit
- eval < beta: again, common sense

The rest of the null move pruning is pretty much a textbook example of null-move pruning. Nothing that Fruit should get exclusive credit for.


Sloppy's internal iterative deepening (used for getting a "best move" to try first):

Code: Select all

val = search&#40;chess, alpha, beta, depth, true, NULL&#41;;
	if &#40;val <= alpha&#41;
		val = search&#40;chess, -VAL_INF, beta, depth, true, NULL&#41;;
Wow, no way anyone but Fabien could have thought of this! As for deciding when to do IID and how many plies to reduce, that was tweaked after sufficient testing.


As I said earlier in this discussion, the mate distance pruning is from Fruit. But then again, it has pretty much zero effect on playing style or strength.


And can_win() is from Crafty? Yeah, crafty has an integer called "can_win" somewhere in the evaluation. Sloppy has a boolean function called "can_win" in the search. And that's where the similarities end. I also have a variable called alpha. Better change that before someone notices.


The most Fruity part of Sloppy's search that actually affects the playing style and strength is futility pruning. But then again, it's futility pruning at its simplest, and a very widely used feature even by those who haven't seen Fruit's source code.
Dann Corbit
Posts: 12540
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: Toga 0.1.1 released

Post by Dann Corbit »

Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning&#40;Chess *chess, int beta, int *depth, bool in_pv&#41;

static U32
iid&#40;Chess *chess, int alpha, int beta, int depth&#41;

static int
mate_distance_pruning&#40;Board *board, int *alpha, int *beta, int ply&#41;

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
I thought you were a programmer, but I guess you do not program in C or C++. Someone's credibility *should* take a hit here.

I don't understand why some people are so afraid of legitimate use of open source. If you are unable to see the things that the Sloppy author has done that are different, then I suggest you are unable to read C or C++ source code. Otherwise, I think you are squeaking simply because you do not like the idea of someone learning things from a strong program, which I consider a foolish stance. But others feel exactly like you do -- perhaps more than those who feel like I do. So I say that both of us are welcome to our opinions and probably mine is no better than yours.

At any rate, people are going to learn from open source programs and the new generation of chess programs is going to be much stronger than the old. Lots of old programs -- some taking 10 years and thousands of hours of programming to complete -- will simply not be able to compete. But that is OK with me. If you are still using a btree as a dictionary after the hash table has been invented it is your fault. And the error in continuing to use the btree is on the part of the btree user and not the hash table inventor.

Sharing of code and papers descibing how to write code are a good thing and not a bad one. Though it will make it much tougher for some programs to compete because they cannot keep up, that does not make it bad or harmful. Eventually, I hope that Rybka will be considered in the same light that TSCP and MSCP are considered now -- a pushover. Learning how to write a better chess program is going to continue. And new techniques are going to be developed. Those who do not learn these techniques are going to lose and they are going to lose a lot. Eventually, if they do not pick up the new skills they will get totally whitewash-flattened. This also is a good thing. That is how science advances. At some point, everyone will be forced to learn or surrender.
Christopher Conkie
Posts: 6073
Joined: Sat Apr 01, 2006 9:34 pm
Location: Scotland

Re: Toga 0.1.1 released

Post by Christopher Conkie »

Dann Corbit wrote:
Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning&#40;Chess *chess, int beta, int *depth, bool in_pv&#41;

static U32
iid&#40;Chess *chess, int alpha, int beta, int depth&#41;

static int
mate_distance_pruning&#40;Board *board, int *alpha, int *beta, int ply&#41;

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
I thought you were a programmer, but I guess you do not program in C or C++. Someone's credibility *should* take a hit here.

I don't understand why some people are so afraid of legitimate use of open source. If you are unable to see the things that the Sloppy author has done that are different, then I suggest you are unable to read C or C++ source code. Otherwise, I think you are squeaking simply because you do not like the idea of someone learning things from a strong program, which I consider a foolish stance. But others feel exactly like you do -- perhaps more than those who feel like I do. So I say that both of us are welcome to our opinions and probably mine is no better than yours.

At any rate, people are going to learn from open source programs and the new generation of chess programs is going to be much stronger than the old. Lots of old programs -- some taking 10 years and thousands of hours of programming to complete -- will simply not be able to compete. But that is OK with me. If you are still using a btree as a dictionary after the hash table has been invented it is your fault. And the error in continuing to use the btree is on the part of the btree user and not the hash table inventor.

Sharing of code and papers descibing how to write code are a good thing and not a bad one. Though it will make it much tougher for some programs to compete because they cannot keep up, that does not make it bad or harmful. Eventually, I hope that Rybka will be considered in the same light that TSCP and MSCP are considered now -- a pushover. Learning how to write a better chess program is going to continue. And new techniques are going to be developed. Those who do not learn these techniques are going to lose and they are going to lose a lot. Eventually, if they do not pick up the new skills they will get totally whitewash-flattened. This also is a good thing. That is how science advances. At some point, everyone will be forced to learn or surrender.
I want him to change the eval.
Aleks Peshkov
Posts: 892
Joined: Sun Nov 19, 2006 9:16 pm
Location: Russia

Re: Toga 0.1.1 released

Post by Aleks Peshkov »

Christopher Conkie wrote:I want him to change the eval.
Do it yourself and contribute your version to community! :)
Tony

Re: Toga 0.1.1 released

Post by Tony »

Uri Blass wrote:
Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning&#40;Chess *chess, int beta, int *depth, bool in_pv&#41;

static U32
iid&#40;Chess *chess, int alpha, int beta, int depth&#41;

static int
mate_distance_pruning&#40;Board *board, int *alpha, int *beta, int ply&#41;

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
If the evaluation is the same and the search is the same then what is the reason that fruit is significantly stronger than sloppy?
Because he crippled it. (ie "found out" new best things)

The rest, the structure is the same. He just replaced things. In assembly they are even more alike, since the static functions get inlined.

Tony
Tony

Re: Toga 0.1.1 released

Post by Tony »

ilari wrote:
Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning&#40;Chess *chess, int beta, int *depth, bool in_pv&#41;

static U32
iid&#40;Chess *chess, int alpha, int beta, int depth&#41;

static int
mate_distance_pruning&#40;Board *board, int *alpha, int *beta, int ply&#41;

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
I also use negamax search with beta cutoffs. Pretty Fruity, huh?

You are aware that Fabien didn't invent null move pruning and IID (not sure about mate distance pruning), right?

Let's see. First Sloppy's null move pruning:
When to NOT null move:
- when in pv: very common, not a Fruit feature
- previous move was a null move: very common, not a Fruit feature
- when in check: again, not a Fruit feature, just common sense
- depth <= 2: after a lot of testing, this value worked best. Nothing to do with Fruit.
- beta is a mate score: just common sense
- material <= VAL_KNIGHT: definitely not from Fruit
- eval < beta: again, common sense

The rest of the null move pruning is pretty much a textbook example of null-move pruning. Nothing that Fruit should get exclusive credit for.


Sloppy's internal iterative deepening (used for getting a "best move" to try first):

Code: Select all

val = search&#40;chess, alpha, beta, depth, true, NULL&#41;;
	if &#40;val <= alpha&#41;
		val = search&#40;chess, -VAL_INF, beta, depth, true, NULL&#41;;
Wow, no way anyone but Fabien could have thought of this! As for deciding when to do IID and how many plies to reduce, that was tweaked after sufficient testing.


As I said earlier in this discussion, the mate distance pruning is from Fruit. But then again, it has pretty much zero effect on playing style or strength.


And can_win() is from Crafty? Yeah, crafty has an integer called "can_win" somewhere in the evaluation. Sloppy has a boolean function called "can_win" in the search. And that's where the similarities end. I also have a variable called alpha. Better change that before someone notices.


The most Fruity part of Sloppy's search that actually affects the playing style and strength is futility pruning. But then again, it's futility pruning at its simplest, and a very widely used feature even by those who haven't seen Fruit's source code.
Exactly, everything that's normal in Fruit you copied. You just tinkered with the parameters.

You didn't even notice that these choices are not so common.

Tony
Last edited by Tony on Fri Nov 02, 2007 9:25 am, edited 1 time in total.
Tony

Re: Toga 0.1.1 released

Post by Tony »

Dann Corbit wrote:
Tony wrote:
Dann Corbit wrote: As to whether it is like Fruit and/or Toga -- again be your own judge.

In this case, the eval is the same and the search is different.
Are you serious ???

I had a look at the Sloppy sourcecode and if you don't see that it's a Fruit rewrite by putting stuff into multiple static functions where they were in one function then you must have seen different code.

Stuff like

Code: Select all


static bool
null_move_pruning&#40;Chess *chess, int beta, int *depth, bool in_pv&#41;

static U32
iid&#40;Chess *chess, int alpha, int beta, int depth&#41;

static int
mate_distance_pruning&#40;Board *board, int *alpha, int *beta, int ply&#41;

Do exactly the same as in Fruit, only the latter has them in Search() There is nothing new, only the Can_Win function comes from Crafty, not Fruit.

If you didn't see that, than your claims about wether a program looks like another program are worth zero.

Tony
I thought you were a programmer, but I guess you do not program in C or C++. Someone's credibility *should* take a hit here.

I don't understand why some people are so afraid of legitimate use of open source. If you are unable to see the things that the Sloppy author has done that are different, then I suggest you are unable to read C or C++ source code. Otherwise, I think you are squeaking simply because you do not like the idea of someone learning things from a strong program, which I consider a foolish stance. But others feel exactly like you do -- perhaps more than those who feel like I do. So I say that both of us are welcome to our opinions and probably mine is no better than yours.

At any rate, people are going to learn from open source programs and the new generation of chess programs is going to be much stronger than the old. Lots of old programs -- some taking 10 years and thousands of hours of programming to complete -- will simply not be able to compete. But that is OK with me. If you are still using a btree as a dictionary after the hash table has been invented it is your fault. And the error in continuing to use the btree is on the part of the btree user and not the hash table inventor.

Sharing of code and papers descibing how to write code are a good thing and not a bad one. Though it will make it much tougher for some programs to compete because they cannot keep up, that does not make it bad or harmful. Eventually, I hope that Rybka will be considered in the same light that TSCP and MSCP are considered now -- a pushover. Learning how to write a better chess program is going to continue. And new techniques are going to be developed. Those who do not learn these techniques are going to lose and they are going to lose a lot. Eventually, if they do not pick up the new skills they will get totally whitewash-flattened. This also is a good thing. That is how science advances. At some point, everyone will be forced to learn or surrender.
You can Hi Ho open source whatever you want whenever somebody takes open source, changes some stuff and returns it. It doesn't mean the code is different (As you stated).

He tinkered with parameters. Hi ho Open Source. He replaced code without changing the structure. Hi ho Open Source. Everyone who objects is evil because we are the good people on this earth, because we are Hi ho Open Source.

Tony
User avatar
ilari
Posts: 750
Joined: Mon Mar 27, 2006 7:45 pm
Location: Finland

Re: Toga 0.1.1 released

Post by ilari »

Because he crippled it. (ie "found out" new best things)

The rest, the structure is the same. He just replaced things. In assembly they are even more alike, since the static functions get inlined.
I didn't create a Fruit clone and then change things to cripple it. I created a new 100% original engine, and then added Fruit's features (mainly evaluation) to make it stronger.

The structure of the search is the same only where it must be. If you've ever written a pvs search you should know this.

I appreciate the offense, but this is getting a bit tiresome.