Notes:
Changes: Version 0.12 - 01/02/2009 ------------------------- * NEW FEATURES AND MODIFICATIONS - to be able to replicate the exact experimental results with a same configuration when everything runs in a single process, only one thread and one random number generator is used if when a synchronous infrastructure (i.e., call based) is used, similar to what happens in jasa - edu.cuny.cat.Game ArrayList instead of HashSet used now to store initializing traders and markets so as to maintain a desired order among them. starts traders and markets without running separate threads when a synchronous infrastructure is used. - edu.cuny.cat.Preferences sets GlobalPRGN.useMultiEngines to false when a synchronous infrastructure is used regardless of what's given in the configuration file - edu.cuny.cat.util.Utils.randomize(Object[]) moved to edu.cuny.cat.server.ConnectionManager and revised to use the default random number generator all the time when a synchronous infrastructure is used - to ease the way the game clock is controlled - edu.cuny.cat.server.ClockController added defines an interface for controlling the game clock - edu.cuny.cat.server.SynchronousClockController added starts the game clock without creating a new thread, useful for replicating experimental results in different runs with a same configuration - edu.cuny.cat.server.AutoClockController added automatically starts and quits a simulation after certain delays without external control; originally defined as GameController.VirtualConsole - edu.cuny.cat.server.EventBasedClockController added allows an external source to control the game clock via TypedEvent messages - edu.cuny.cat.server.GameController.clockController viable added the clock controller, which listens to auction events - edu.cuny.cat.server.GameClock no longer listens to and acts upon TypedEvent messages, which is now dealt with in EventBasedClockController - edu.cuny.cat.server.GameController.start() renamed to initialize() - edu.cuny.cat.server.GameController.destroy() added do post-simulation processing before terminating the process - edu.cuny.cat.ui.GameConsole.exit() modified to send TypedEvent for a listener (typically EventBasedClockController) to quit the simulation, rather than calling System.exit() directly - edu.cuny.cat.stat.StatisticalReport added added to calculate the max, min, and mean values of given report variables across game days for immediate display and checking. - to debug more easily the implementation of game clients and check concerned behaviors - edu.cuny.cat.stat.ClientDynamicsReport added receives TypedEvent messages from a GameClient and stores them into a separate file for later examination. - GameClient: reportDynamics(String) added sends text info via TypedEvent messages to edu.cuny.cat.stat.ClientDynamicsReport. - edu.cuny.cat.stat.AbstractReportVariableReport added as an abstract super class for all reports that relies upon the declaration of a list of report variables. - edu.cuny.cat.stat.ReportVariableWriterReport now extends AbstractReportVariableReport. - to randomly redraw the private values for traders after each game - edu.cuny.cat.valuation.GamelyRandomValuer added - edu.cuny.cat.valuation.GamelyRandomValuerGenerator added - edu.cuny.cat.trader.strategy.AbstractStrategy.endOfRound() removed subclasses updated to do the processing in eventOccurred() instead. - edu.cuny.cat.trader.strategy.GDStrategy.calculateProbability() refactored to avoid query HistoricalReport on a same thing twice. - edu.cuny.cat.trader.strategy.PriestVanTolStrategy It is different from the implementation in JASA. Here, when a trader is inactive, it never reduces its profit margin, not even letting its learner to learn; while in JASA, the trader's learner continues to learn, though the current price remains the same. This additional learning of reduced margins would be reflected on the next trading day, however, when the trader becomes active again. This implementation in JCAT is believed what Priest and van Tol meant to do, since it is against their aim for those inactive traders to reduce profit margins when they become active again. - edu.cuny.cat.market.SlidingAverageBeatingAcceptingPolicy a variant of edu.cuny.cat.market.EquilibriumBeatingAcceptingPolicy that was introduced by PSUCAT in CAT 2007. - edu.cuny.cat.market.HistoryBasedAcceptingPolicy.toString() added - edu.cuny.cat.server.TimeController renamed to TimeoutController to accurately indicate what it does. - edu.cuny.cat.GameClient.run() promoted from subclasses - edu.cuny.cat.startProactiveSession() promoted from subclasses - edu.cuny.ai.learning.RandomActionChoosingPolicy added - params/cat.params sample markets changed to CH and CDA so as to make it more interesting. game length and num of iterations changed. call-based infrastructure used by default for faster execution. new report added to show the distribution of market metrics, e.g. efficiency. - params/specialist.params changed to use a continuous double auction mechanism. - params/tournament.params call-based infrastructure used by default for faster execution. - params/modules/clock.params default game length, day length, and num of iterations changed - params/modules/traders.params four subpopulations reduced to two. trader id changed. - params/modules/specialists.params default specialist id added. * BUG FIXES - ZIP trading strategy - edu.cuny.cat.trader.strategy.MomentumStrategy modified to comply with the idea of Cliff's original ZIP with the different persistant shout-based market framework in JCAT. trPrice, trAskPrice, trBidPrice removed; lastShoutPrice added. scaling set to 0.05 instead of 0.01. - edu.cuny.cat.trader.strategy.ZIPStrategy modified to use exactly the heuristic rules in Cliff's original ZIP. uses lastShoutPrice as the target to learn. - edu.cuny.cat.trader.strategy.ZIQStrategy added the old implementation of ZIP in JCAT and JASA, which seems to work well in continuous double auction markets. uses lastShoutPrice as the target to learn. - GD trading strategy - edu.cuny.cat.trader.strategy.GDStrategy now forwards events to its HistoricalReport first, then process them locally, instead of in the reverse order previously. - edu.cuny.cat.stat.HistoricalReport.SortedView sortedAsks and sortedBids do not get refilled after having been cleared in reset(), which at least partly led to GD's strange, cyclic, behavior. sortedAsks and sortedBids inccorrectly initialized twice, which causes incorrect counts of shouts meeting certain criteria. - edu.cuny.cat.stat.HistoricalReport.memorysize default value changed to 10 instead of previously 50. - edu.cuny.cat.market.HistoryBasedAcceptingPolicy.DEFAULT_THRESHOLD changed back to 0.5. - edu.cuny.cat.stat.HistoricalReport.highestUnacceptedBid renamed to highestUnmatchedBid - edu.cuny.cat.stat.HistoricalReport.lowestUnacceptedAsk renamed to lowestUnmatchedAsk - edu.cuny.cat.trader.strategy.PureSimpleStrategy.DEFAULT_DELTA changed to 5 instead of 0 to avoid making PS a truth telling by default - Epsilon-greedy exploration in market selection over-favors one of several even choices that has slightly higher among its peers - edu.cuny.util.ApproxNumberComparator added compares double values and see if one is approximately equal to, bigger than, or smaller than the other value. - edu.cuny.util.NumberComparator added defines the interface for ApproxNumberComparator. - ExactNumberComparator added defines the common strict comparison, in contrast to that in ApproxNumberComparator - edu.cuny.util.MathUtil.maxIndex(double[], NumberComparator) added allows to use a specific NumberComparator in comparing array elements to determining the index of the maximal element; used by to select the best action. - edu.cuny.ai.learning.EpsilonGreedyActionChoosingPolicy uses the above method to select the best action - edu.cuny.ai.learning.ReturnUpdatingPolicy removed the random initialization of returns array that had used to avoid this problem (though ineffectively)
Copyright © 2009 Geeknet, Inc. All rights reserved. Terms of Use