[virtualcommons-svn] SF.net SVN: virtualcommons:[425] foraging/trunk
Status: Beta
Brought to you by:
alllee
From: <al...@us...> - 2010-01-05 20:36:34
|
Revision: 425 http://virtualcommons.svn.sourceforge.net/virtualcommons/?rev=425&view=rev Author: alllee Date: 2010-01-05 20:36:23 +0000 (Tue, 05 Jan 2010) Log Message: ----------- aggregate statistics were missing the last interval as the isIntervalElapsed() was never triggered (no movement events at t=240) Modified Paths: -------------- foraging/trunk/pom.xml foraging/trunk/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java Modified: foraging/trunk/pom.xml =================================================================== --- foraging/trunk/pom.xml 2010-01-05 20:31:55 UTC (rev 424) +++ foraging/trunk/pom.xml 2010-01-05 20:36:23 UTC (rev 425) @@ -46,21 +46,12 @@ <releases><enabled>true</enabled></releases> <snapshots><enabled>false</enabled></snapshots> </repository> - <!-- - <repository> - <id>java.net</id> - <name>java.net</name> - <url>http://download.java.net/maven/2</url> - <layout>default</layout> - </repository> - --> </repositories> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.5</version> - <scope>test</scope> </dependency> <dependency> <groupId>edu.asu.commons</groupId> @@ -87,6 +78,17 @@ <finalName>foraging</finalName> <plugins> <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>2.6.1</version> + <configuration> + <links> + <link>http://commons.asu.edu/api/csidex/</link> + </links> + <detectLinks>true</detectLinks> + </configuration> + </plugin> + <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java 2010-01-05 20:31:55 UTC (rev 424) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java 2010-01-05 20:36:23 UTC (rev 425) @@ -179,7 +179,7 @@ * @return */ public int getSanctionMultiplier() { - return getIntProperty("sanction-multiplier", 1); + return getIntProperty("sanction-multiplier", 2); } public int getSanctionPenalty() { Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java 2010-01-05 20:31:55 UTC (rev 424) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java 2010-01-05 20:36:23 UTC (rev 425) @@ -46,6 +46,7 @@ * @author <a href='mailto:All...@as...'>Allen Lee</a> * @version $Rev$ */ +@SuppressWarnings("unused") public class ForagingSaveFileConverter { public static boolean convert(String saveDataDirectory) { @@ -557,17 +558,7 @@ int elapsedTimeInSeconds = savedRoundData.getElapsedTimeInSeconds(event); if (isIntervalElapsed(elapsedTimeInSeconds)) { - // write all collected data - for (Map.Entry<Identifier, Integer[]> entry : collectedTokenNeighbors.entrySet()) { - Identifier id = entry.getKey(); - Integer[] neighboringTokens = entry.getValue(); - writer.println(Utils.join(',', elapsedTimeInSeconds - 1, id, - Utils.join(',', neighboringTokens))); - // replace old neighboring tokens with new array - Integer[] freshNeighbors = new Integer[9]; - Arrays.fill(freshNeighbors, 0); - entry.setValue(freshNeighbors); - } + writeAggregateStatistics(writer, collectedTokenNeighbors); } if (event instanceof ResourceAddedEvent) { ResourceAddedEvent rae = (ResourceAddedEvent) event; @@ -587,9 +578,25 @@ collectedTokenNeighbors.get(id)[numberOfNeighboringTokens]++; } } - + // write out last interval + writeAggregateStatistics(writer, collectedTokenNeighbors); } + private void writeAggregateStatistics(PrintWriter writer, + Map<Identifier, Integer[]> collectedTokenNeighbors) { + // write all collected data + for (Map.Entry<Identifier, Integer[]> entry : collectedTokenNeighbors.entrySet()) { + Identifier id = entry.getKey(); + Integer[] neighboringTokens = entry.getValue(); + writer.println(Utils.join(',', getIntervalEnd(), id, + Utils.join(',', Arrays.asList(neighboringTokens)))); + // replace old neighboring tokens with new array + Integer[] freshNeighbors = new Integer[9]; + Arrays.fill(freshNeighbors, 0); + entry.setValue(freshNeighbors); + } + } + @Override public String getOutputFileExtension() { return "-collected-token-neighbors.txt"; @@ -600,7 +607,6 @@ public static class AggregateTimeIntervalProcessor extends SaveFileProcessor.Base { - private static int secondsPerInterval = 60; public void process(SavedRoundData savedRoundData, PrintWriter writer) { // populate the ordered identifiers, try directly from the participant tokens map that // is persisted in later versions of the experiment. @@ -657,40 +663,15 @@ ); writer.println(header); - int currentInterval = 0; for (PersistableEvent event: savedRoundData.getActions()) { int secondsElapsed = savedRoundData.getElapsedTimeInSeconds(event); - int endOfInterval = (currentInterval + 1) * secondsPerInterval; - // System.err.println("seconds elapsed: " + secondsElapsed); - // System.err.println("end of interval: " + endOfInterval); - // see if the current persistable event is past the threshold, // meaning we should take a snapshot of our currently // accumulated stats - if (secondsElapsed >= endOfInterval) { + if (isIntervalElapsed(secondsElapsed)) { // generate group expected token counts - List<Double> expectedTokenProbabilities = getExpectedTokenProbabilities(serverDataModel); - // report summary stats and reset - List<Integer> movesTaken = new ArrayList<Integer>(); - List<Integer> harvestedTokens = new ArrayList<Integer>(); - List<Integer> tokensLeft = getTokensLeft(groups); - List<Double> distances = getClientDistances(groups); - for (Identifier id : orderedIdentifiers) { - ClientMovementTokenCount stats = clientStatistics.get(id); - movesTaken.add(stats.moves); - harvestedTokens.add(stats.tokens); - stats.reset(); - } - String dataline = - Utils.join(',', endOfInterval, - Utils.join(',', movesTaken), - Utils.join(',', harvestedTokens), - Utils.join(',', expectedTokenProbabilities), - Utils.join(',', tokensLeft), - Utils.join(',', distances) - ); - writer.println(dataline); - currentInterval++; + writeAggregateStatistics(writer, serverDataModel, + clientStatistics, orderedIdentifiers, groups); } // next, process the current persistable event ClientMovementTokenCount stats = clientStatistics.get(event.getId()); @@ -730,8 +711,38 @@ resourcesAddedEvent.getGroup().addResources(resourcesAddedEvent.getResources()); } } + writeAggregateStatistics(writer, serverDataModel, + clientStatistics, orderedIdentifiers, groups); } + private void writeAggregateStatistics(PrintWriter writer, + ServerDataModel serverDataModel, + Map<Identifier, ClientMovementTokenCount> clientStatistics, + TreeSet<Identifier> orderedIdentifiers, + List<GroupDataModel> groups) { + List<Double> expectedTokenProbabilities = getExpectedTokenProbabilities(serverDataModel); + // report summary stats and reset + List<Integer> movesTaken = new ArrayList<Integer>(); + List<Integer> harvestedTokens = new ArrayList<Integer>(); + List<Integer> tokensLeft = getTokensLeft(groups); + List<Double> distances = getClientDistances(groups); + for (Identifier id : orderedIdentifiers) { + ClientMovementTokenCount stats = clientStatistics.get(id); + movesTaken.add(stats.moves); + harvestedTokens.add(stats.tokens); + stats.reset(); + } + String dataline = + Utils.join(',', getIntervalEnd(), + Utils.join(',', movesTaken), + Utils.join(',', harvestedTokens), + Utils.join(',', expectedTokenProbabilities), + Utils.join(',', tokensLeft), + Utils.join(',', distances) + ); + writer.println(dataline); + } + private List<Double> getClientDistances(List<GroupDataModel> groups) { List<Double> distances = new ArrayList<Double>(); for (GroupDataModel group: groups) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |