From: Stefan F. <ste...@us...> - 2010-05-20 23:13:29
|
Update of /cvsroot/rails/18xx/rails/game/specific/_18EU In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv26538/rails/game/specific/_18EU Added Files: PullmanRevenueModifier.java Log Message: Added support for 18EU Pullman, introduced RevenueDynamicModifier --- NEW FILE: PullmanRevenueModifier.java --- package rails.game.specific._18EU; import java.util.Collection; import java.util.List; import rails.algorithms.NetworkTrain; import rails.algorithms.NetworkVertex; import rails.algorithms.RevenueAdapter; import rails.algorithms.RevenueDynamicModifier; import rails.algorithms.RevenueTrainRun; public class PullmanRevenueModifier implements RevenueDynamicModifier { private boolean hasPullman; private int maxValue; public boolean prepareModifier(RevenueAdapter revenueAdapter) { // 1. check if there is a Pullman in the train set hasPullman = false; List<NetworkTrain> trains = revenueAdapter.getTrains(); for (NetworkTrain train:trains) { if (train.getRailsTrainType().getName().equals("P")) { hasPullman = true; revenueAdapter.removeTrain(train); // remove from revenueAdapter break; } } if (!hasPullman) return false; // 2. find the maximum value of the vertices maxValue = maximumMajorValue(revenueAdapter.getVertices()); return true; } public int evaluationValue(RevenueAdapter revenueAdapter) { return pullmanValue(revenueAdapter.getCurrentRun()); } private int pullmanValue(List<RevenueTrainRun> trainRuns) { int maximum = 0; for (RevenueTrainRun trainRun:trainRuns) { maximum = Math.max(maximum, maximumMajorValue(trainRun.getVertices())); if (maximum == maxValue) break; } return maximum; } public int predictionValue(RevenueAdapter revenueAdapter) { return maxValue; } public String prettyPrint(RevenueAdapter revenueAdapter) { return "Pullman: " + pullmanValue(revenueAdapter.getOptimalRun()); } private int maximumMajorValue(Collection<NetworkVertex> vertices) { int maximum = 0; for (NetworkVertex vertex:vertices) { if (!vertex.isMajor()) continue; maximum= Math.max(maximum, vertex.getValue()); } return maximum; } } |