Hi all,
I've got a memoization question...
my chess-engine spends most of its time calculating legal moves for
pawns. That is because legal moves for pawns depend on the state of the
board...all other pieces have logical moves that are buffered in a giant
map but for pawns I have to calculate them every single time. Since
core.logic sits in between my rules and my engine, when profiling my
application I see loads of LVars and such. I'm pretty sure that if I
manage to somehow memoize the pawn moves I'd get a significant speedup...
my approach was this:
(def chess-moves {:pawn *(memo/lu #(rul/pawn-moves board-mappings-chess
%1 %2 %3 %4) :lu/threshold 64)*
:rook rul/rook-moves
:bishop rul/bishop-moves
:knight rul/knight-moves
:queen rul/queen-moves
:king rul/king-moves})
the bold line is where I tried to memoize. I gave it a threshold of 64
because that is the size of the board which gives all the possible
positions for a pawn. However the fn I'm memoizing takes 4 args. If I
understand correctly, this means that each memoized slot will be a seq
of these 4 args -> some value. But here lies the problem...the first arg
(%1) has nothing to do with pawns, it is simply the new board. This
changes every time even if no pawn moved. This will cause brand new
memoization slots to be created, yes? therefore I'm not seeing any
speedups due to the fact that memoization fills up its limited slots but
it never uses them because the first arg is never the same...the board
changes after every move even if the pawns themselves did not move...
does anyone have any ideas as to how to accomplish this? is it just
impossible with my current setup?
thanks a lot in advance :)
Jim
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.