[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: computer-go: minimax and go
Hi Dave,
Your reasoning is basically correct, the branching factor is indeed
much larger in Go than in Chess. Not to be sarcastic, but I have to
ask, "so what?"
To me, this might imply that it takes a lot more hardware to play a
little bit better. Ok.
The previous poster wrote:
I need to know (succintly) what are the arguments that a brute-force
minimax approach to Go won't work assuming increased computer power
just like it worked for Chess?
A brute force program will "work." Give me infinite computing power,
or enough computing power to search the entire game tree and I will
write a perfect Go program. Short of that, I can write a Go program
that plays better with every hardware doubling of power. It might not
play much better, it might even be hard to measure but it will play
better on the average with each doubling, until it reaches the point
where it can search the entire game tree.
So I have a pathway (in principle) to making a program play perfect GO
with a finite amount of computing power, or to get abritrarily strong
with an increasing amount of computing power. Do you have a pathway
to do the same without involving any searching? I doubt that any of
us do.
Please note that I am taking a bit of a philosophical approach,
believe me I understand the problems, and I realize that we don't know
how to construct a very effective search ... yet. A naive fixed
depth n ply search with a simple static evaluation is not what I
suggest. I'm also not being critical of how Go programs are currently
written, I think we are doing the best we can. But I just don't
believe that we will make much more progress by tweaking our eval
rules, patterns and openings. At some point, we will have to start
searching more than just local string battles and we will have to do
it really intelligently.
The key, is that both evaluation AND search is much harder in Go than
in Chess. That only means that whatever we do, it won't be as good or
as easy as in Chess. You can't say search won't work any more than
you can say evaluation won't work just because it's so much harder
than Chess and we can't even do it in Chess.
Don
P.S.
> Now factor in that chess programs get very good reductions in the
> raw numbers because very strong, fast, simple evaluators prune out
> most of the really bad nodes without having to evaluate them.
That's not true. A true brute force chess program only prunes based
on alpha/beta cutoffs. A Go program written in this style would
actually prune much more heavily, and it's doesn't matter how good or
bad the evaluation function is.
Yes, modern programs do null move prunning and this does have
something to do with the strength of the evaluation function and gives
more cutoffs than alpha/beta. However, it's not why Chess programs
are so strong. If you throw out null move prunning you will still
have a master strength Chess program.
X-Sender: ddyer@xxxxxxxxxxxxxxxxx
X-Mailer: QUALCOMM Windows Eudora Version 5.0
Date: Wed, 08 Nov 2000 11:49:57 -0800
From: Dave Dyer <ddyer@xxxxxxxxxxxxxxxxx>
References: <200011071757.MAA04849@xxxxxxxxxxxxxxxxx>
Mime-Version: 1.0
Sender: owner-computer-go@xxxxxxxxxxxxxxxxx
Precedence: bulk
Reply-To: computer-go@xxxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="us-ascii"
Content-Length: 783
The basic arithmetic is this:
To do a 10 ply brute force search in Chess might in principle have to examine
25^10 ~= 9.5e13 nodes
To do a 10 ply brute force search in Go might in principle have to examine
200^10 ~= 1.024e23 nodes
that's a billion times harder.
Now factor in that chess programs get very good reductions in the
raw numbers because very strong, fast, simple evaluators prune out
most of the really bad nodes without having to evaluate them.
Now factor in that in go, even very simple, local problems require reading
15 - 20 ply, and there are usually many such "simple" problems on the
board at once, so reading the full outcome of a midgame position
could easily require 100 ply.
Now factor in that in go, there are no "strong, simple, fast" evaluators.