mirror of
https://github.com/peterosterlund2/droidfish.git
synced 2024-11-23 19:34:08 +01:00
DroidFish: Reduced opening book memory usage.
This commit is contained in:
parent
1767f8c947
commit
41e7a6922c
|
@ -62,7 +62,7 @@ class CtgBook implements IOpeningBook {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<BookEntry> getBookEntries(Position pos) {
|
||||
public ArrayList<BookEntry> getBookEntries(Position pos) {
|
||||
RandomAccessFile ctgF = null;
|
||||
RandomAccessFile ctbF = null;
|
||||
RandomAccessFile ctoF = null;
|
||||
|
@ -75,7 +75,7 @@ class CtgBook implements IOpeningBook {
|
|||
CtoFile cto = new CtoFile(ctoF);
|
||||
CtgFile ctg = new CtgFile(ctgF, ctb, cto);
|
||||
|
||||
List<BookEntry> ret = null;
|
||||
ArrayList<BookEntry> ret = null;
|
||||
PositionData pd = ctg.getPositionData(pos);
|
||||
if (pd != null) {
|
||||
boolean mirrorColor = pd.mirrorColor;
|
||||
|
@ -86,7 +86,7 @@ class CtgBook implements IOpeningBook {
|
|||
pd.pos.makeMove(be.move, ui);
|
||||
PositionData movePd = ctg.getPositionData(pd.pos);
|
||||
pd.pos.unMakeMove(be.move, ui);
|
||||
double weight = be.weight;
|
||||
float weight = be.weight;
|
||||
if (movePd == null) {
|
||||
// System.out.printf("%s : no pos\n", TextIO.moveToUCIString(be.move));
|
||||
weight = 0;
|
||||
|
@ -417,8 +417,8 @@ class CtgBook implements IOpeningBook {
|
|||
case 0x02: ent.weight = 0; break; // ?
|
||||
case 0x03: ent.weight = 32; break; // !!
|
||||
case 0x04: ent.weight = 0; break; // ??
|
||||
case 0x05: ent.weight = 0.5; break; // !?
|
||||
case 0x06: ent.weight = 0.125; break; // ?!
|
||||
case 0x05: ent.weight = 0.5f; break; // !?
|
||||
case 0x06: ent.weight = 0.125f; break; // ?!
|
||||
case 0x08: ent.weight = 1000000; break; // Only move
|
||||
}
|
||||
entries.add(ent);
|
||||
|
|
|
@ -37,9 +37,9 @@ import org.petero.droidfish.gamelogic.Pair;
|
|||
* @author petero
|
||||
*/
|
||||
public final class DroidBook {
|
||||
static class BookEntry {
|
||||
static final class BookEntry {
|
||||
Move move;
|
||||
double weight;
|
||||
float weight;
|
||||
BookEntry(Move move) {
|
||||
this.move = move;
|
||||
weight = 1;
|
||||
|
@ -117,7 +117,7 @@ public final class DroidBook {
|
|||
boolean localized) {
|
||||
StringBuilder ret = new StringBuilder();
|
||||
ArrayList<Move> bookMoveList = new ArrayList<Move>();
|
||||
List<BookEntry> bookMoves = getBook().getBookEntries(pos);
|
||||
ArrayList<BookEntry> bookMoves = getBook().getBookEntries(pos);
|
||||
|
||||
// Check legality
|
||||
if (bookMoves != null) {
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
package org.petero.droidfish.book;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.petero.droidfish.book.DroidBook.BookEntry;
|
||||
import org.petero.droidfish.gamelogic.Position;
|
||||
|
@ -31,5 +31,5 @@ interface IOpeningBook {
|
|||
void setOptions(BookOptions options);
|
||||
|
||||
/** Get all book entries for a position. */
|
||||
List<BookEntry> getBookEntries(Position pos);
|
||||
ArrayList<BookEntry> getBookEntries(Position pos);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.io.InputStream;
|
|||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.petero.droidfish.book.DroidBook.BookEntry;
|
||||
import org.petero.droidfish.gamelogic.ChessParseError;
|
||||
|
@ -33,8 +32,10 @@ import org.petero.droidfish.gamelogic.Position;
|
|||
import org.petero.droidfish.gamelogic.TextIO;
|
||||
import org.petero.droidfish.gamelogic.UndoInfo;
|
||||
|
||||
import android.util.FloatMath;
|
||||
|
||||
final class InternalBook implements IOpeningBook {
|
||||
private static Map<Long, List<BookEntry>> bookMap;
|
||||
private static HashMap<Long, ArrayList<BookEntry>> bookMap;
|
||||
private static int numBookMoves = -1;
|
||||
|
||||
InternalBook() {
|
||||
|
@ -58,15 +59,15 @@ final class InternalBook implements IOpeningBook {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<BookEntry> getBookEntries(Position pos) {
|
||||
public ArrayList<BookEntry> getBookEntries(Position pos) {
|
||||
initInternalBook();
|
||||
List<BookEntry> ents = bookMap.get(pos.zobristHash());
|
||||
ArrayList<BookEntry> ents = bookMap.get(pos.zobristHash());
|
||||
if (ents == null)
|
||||
return null;
|
||||
List<BookEntry> ret = new ArrayList<BookEntry>();
|
||||
ArrayList<BookEntry> ret = new ArrayList<BookEntry>();
|
||||
for (BookEntry be : ents) {
|
||||
BookEntry be2 = new BookEntry(be.move);
|
||||
be2.weight = Math.sqrt(be.weight) * 100 + 1;
|
||||
be2.weight = FloatMath.sqrt(be.weight) * 100 + 1;
|
||||
ret.add(be2);
|
||||
}
|
||||
return ret;
|
||||
|
@ -80,7 +81,7 @@ final class InternalBook implements IOpeningBook {
|
|||
if (numBookMoves >= 0)
|
||||
return;
|
||||
// long t0 = System.currentTimeMillis();
|
||||
bookMap = new HashMap<Long, List<BookEntry>>();
|
||||
bookMap = new HashMap<Long, ArrayList<BookEntry>>();
|
||||
numBookMoves = 0;
|
||||
try {
|
||||
InputStream inStream = getClass().getResourceAsStream("/book.bin");
|
||||
|
@ -131,7 +132,7 @@ final class InternalBook implements IOpeningBook {
|
|||
|
||||
/** Add a move to a position in the opening book. */
|
||||
private final void addToBook(Position pos, Move moveToAdd) {
|
||||
List<BookEntry> ent = bookMap.get(pos.zobristHash());
|
||||
ArrayList<BookEntry> ent = bookMap.get(pos.zobristHash());
|
||||
if (ent == null) {
|
||||
ent = new ArrayList<BookEntry>();
|
||||
bookMap.put(pos.zobristHash(), ent);
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
package org.petero.droidfish.book;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.petero.droidfish.book.DroidBook.BookEntry;
|
||||
import org.petero.droidfish.gamelogic.Position;
|
||||
|
@ -31,7 +31,7 @@ class NullBook implements IOpeningBook {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<BookEntry> getBookEntries(Position pos) {
|
||||
public ArrayList<BookEntry> getBookEntries(Position pos) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.io.FileNotFoundException;
|
|||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.petero.droidfish.book.DroidBook.BookEntry;
|
||||
import org.petero.droidfish.gamelogic.Move;
|
||||
|
@ -373,7 +372,7 @@ class PolyglotBook implements IOpeningBook {
|
|||
}
|
||||
|
||||
@Override
|
||||
public final List<BookEntry> getBookEntries(Position pos) {
|
||||
public final ArrayList<BookEntry> getBookEntries(Position pos) {
|
||||
try {
|
||||
RandomAccessFile f = new RandomAccessFile(bookFile, "r");
|
||||
long numEntries = f.length() / 16;
|
||||
|
@ -396,7 +395,7 @@ class PolyglotBook implements IOpeningBook {
|
|||
}
|
||||
|
||||
// Read all entries with matching hash key
|
||||
List<BookEntry> ret = new ArrayList<BookEntry>();
|
||||
ArrayList<BookEntry> ret = new ArrayList<BookEntry>();
|
||||
long entNo = hi;
|
||||
while (entNo < numEntries) {
|
||||
readEntry(f, entNo, ent);
|
||||
|
|
Loading…
Reference in New Issue
Block a user