Modified:
/trunk/ai/experiments/src/main/java/org/cspoker/ai/bots/BotRunner.java
/trunk/ai/experiments/src/main/java/org/cspoker/ai/bots/listener/CSVLogListener.java
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/ARFFPlayer.java
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/ActionTrackingVisitor.java
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/WekaLearningModel.java
=======================================
--- /trunk/ai/experiments/src/main/java/org/cspoker/ai/bots/BotRunner.java
Mon Aug 16 10:38:42 2010
+++ /trunk/ai/experiments/src/main/java/org/cspoker/ai/bots/BotRunner.java
Tue Aug 17 11:28:01 2010
@@ -68,7 +68,7 @@
private static final TableConfiguration config = new
TableConfiguration(100,
0, false, true, true,0);
- public static final int nbGamesPerConfrontation = 2000;
+ public static final int nbGamesPerConfrontation = 2001;
public static final int reportInterval = 1;
public final int nbExperiments = 1;
@@ -107,7 +107,7 @@
public static void create(RemoteCSPokerServer cspokerServer) {
kullbackLeibler = new KullbackLeiblerListener(reportInterval);
// new BotRunner(cspokerServer, "bucketSampler0.01VsRulebots");
- new BotRunner(cspokerServer, "CardBotAccuracy2", getBots());
+ new BotRunner(cspokerServer, "NaiveBotsAccuracy2", getBots());
}
public static BotFactory[] getBots() {
@@ -124,7 +124,7 @@
WekaOptions configPersist = new WekaOptions();
configPersist.setContinuousLearning(false);
- configPersist.setModelCreationTreshold(2000);
+ configPersist.setModelCreationTreshold(3000);
configPersist.setContinueAfterCreation(false);
Sampler s = new BucketSampler(0.01);
=======================================
---
/trunk/ai/experiments/src/main/java/org/cspoker/ai/bots/listener/CSVLogListener.java
Mon Aug 16 10:38:42 2010
+++
/trunk/ai/experiments/src/main/java/org/cspoker/ai/bots/listener/CSVLogListener.java
Tue Aug 17 11:28:01 2010
@@ -17,8 +17,6 @@
import java.io.FileWriter;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.log4j.Logger;
import org.cspoker.ai.bots.BotRunner;
@@ -27,7 +25,6 @@
import org.cspoker.ai.bots.util.RunningStats;
import org.cspoker.ai.opponentmodels.weka.ARFFPlayer;
import org.cspoker.ai.opponentmodels.weka.WekaLearningModel;
-import org.cspoker.ai.opponentmodels.weka.WekaRegressionModel;
import org.cspoker.common.elements.player.PlayerId;
public class CSVLogListener extends DealCountingListener {
@@ -58,7 +55,7 @@
throw new IllegalStateException(e);
}
}
-
+
@Override
public void onNewDeal() {
int deals = getDeals();
@@ -76,10 +73,13 @@
}
for (int i = 0; i < runner.nbPlayersPerGame; i++) {
try {
- if (modelCreated(runner.getBot(i).getId()))
- file.write("\tMODELCREATED");
- else
- file.write("\t");
+ // 1000 & -1000 creates vertical line in graphs
+ // to indicate where new model was learned
+ if (modelCreated(runner.getBot(i).getId())) {
+ file.write("\t-1000");
+ } else
+ file.write("\t1000");
+ file.write("\t"+getAccuracy(runner.getBot(i).getId()));
RunningStats profit = runner.getBot(i).getProfit();
int smallBet = runner.getConfig().getSmallBet();
double mean = profit.getMean() / smallBet;
@@ -129,11 +129,24 @@
Config config = bot.getConfig();
WekaLearningModel model = (WekaLearningModel) config.getModel();
ARFFPlayer player = model.getPlayer(actor);
- return player.learningAllowed();
+ return player.modelCreated();
} catch (Exception e) {
System.err.println(e);
return false;
}
}
+
+ private double getAccuracy(PlayerId actor) {
+ try {
+ MCTSBot bot = getLearningMCTSBot();
+ if (bot.getId().equals(actor)) return 0.0;
+ Config config = bot.getConfig();
+ WekaLearningModel model = (WekaLearningModel) config.getModel();
+ return model.getPlayerAccuracy(actor);
+ } catch (Exception e) {
+ System.err.println(e);
+ return 0.0;
+ }
+ }
}
=======================================
---
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/ARFFPlayer.java
Wed Aug 11 08:56:53 2010
+++
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/ARFFPlayer.java
Tue Aug 17 11:28:01 2010
@@ -106,6 +106,10 @@
return (modelCreated && config.continuousLearning()) ||
(!modelCreated && (writeCounter >= config.modelCreationTreshold()));
}
+
+ public boolean modelCreated() {
+ return modelCreated;
+ }
public void writePreCheckBet(Instance instance) {
if (writeAllowed()) {
=======================================
---
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/ActionTrackingVisitor.java
Mon Aug 16 10:38:42 2010
+++
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/ActionTrackingVisitor.java
Tue Aug 17 11:28:01 2010
@@ -68,7 +68,7 @@
public void printAccuracy() {
for (PlayerId id : accuracyData.keySet()) {
AccuracyData data = accuracyData.get(id);
- System.out.print(//" Accuracy : " +
+ System.out.print(id + "\t" + //" Accuracy : " +
(data.trueNegative + data.truePositive) /
(data.trueNegative + data.truePositive + data.falseNegative +
data.falsePositive));
System.out.print("\t");
@@ -222,6 +222,15 @@
data.falseNegative += p.getFalseNegative();
printAccuracy();
}
+
+ public double getAccuracy(PlayerId id) {
+ AccuracyData data = accuracyData.get(id);
+ if (data == null)
+ return 0.0;
+ else
+ return (data.trueNegative + data.truePositive) /
+ (data.trueNegative + data.truePositive + data.falseNegative +
data.falsePositive);
+ }
@Override
public void visitCallState(CallState callState) {
=======================================
---
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/WekaLearningModel.java
Mon Aug 16 10:38:42 2010
+++
/trunk/ai/opponentmodels/weka/src/main/java/org/cspoker/ai/opponentmodels/weka/WekaLearningModel.java
Tue Aug 17 11:28:01 2010
@@ -119,6 +119,13 @@
} else
return null;
}
+
+ public double getPlayerAccuracy(PlayerId actor) {
+ if (config.useOnlineLearning() && !actor.equals(bot)) {
+ return actionTrackingVisitor.getAccuracy(actor);
+ } else
+ return 0.0;
+ }
@Override
public Pair<Double, Double> getCheckBetProbabilities(GameState gameState,
PlayerId actor) {