From: Stefan F. <ste...@us...> - 2010-04-16 16:38:29
|
Update of /cvsroot/rails/18xx/rails/algorithms In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv2212/rails/algorithms Modified Files: RevenueCalculator.java RevenueAdapter.java NetworkVertex.java Log Message: Updated revenue calculation: Pretty print and better thread support Index: RevenueCalculator.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/RevenueCalculator.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** RevenueCalculator.java 15 Apr 2010 21:46:28 -0000 1.3 --- RevenueCalculator.java 16 Apr 2010 16:38:21 -0000 1.4 *************** *** 1,5 **** package rails.algorithms; - import java.awt.EventQueue; import java.util.Arrays; --- 1,4 ---- *************** *** 57,63 **** private int[] maxTrainRevenues; ! // revenue listener ! private RevenueListener revenueListener; protected static Logger log = --- 56,63 ---- private int[] maxTrainRevenues; ! // revenue Adapter ! private RevenueAdapter revenueAdapter; + private boolean stopped; protected static Logger log = *************** *** 65,70 **** ! public RevenueCalculator (int nbVertexes, int maxNeighbors, int nbTrains) { this.nbVertexes = nbVertexes; this.maxNeighbors = maxNeighbors; --- 65,71 ---- ! public RevenueCalculator (RevenueAdapter revenueAdapter, int nbVertexes, int maxNeighbors, int nbTrains) { + this.revenueAdapter = revenueAdapter; this.nbVertexes = nbVertexes; this.maxNeighbors = maxNeighbors; *************** *** 99,102 **** --- 100,104 ---- currentBestRun = new int[nbTrains][nbVertexes]; + } *************** *** 133,139 **** return currentBestRun; } ! ! void addRevenueListener(RevenueListener listener) { ! this.revenueListener = listener; } --- 135,141 ---- return currentBestRun; } ! ! private void notifyRevenueAdapter(final int revenue, final boolean finalResult) { ! revenueAdapter.notifyRevenueListener(revenue, finalResult); } *************** *** 141,144 **** --- 143,148 ---- log.info("RC: calculateRevenue trains from " + startTrain + " to " + finalTrain); + stopped = false; + // initialize maximum train revenues maxTrainRevenues = new int[nbTrains]; *************** *** 150,153 **** --- 154,161 ---- this.finalTrain = finalTrain; runTrain(startTrain); + + // inform revenue listener via adapter + notifyRevenueAdapter(currentBestValue, true); + return currentBestValue; } *************** *** 414,424 **** } log.info("RC: Found better run with " + totalValue); ! // inform revenue listener ! EventQueue.invokeLater( ! new Runnable() { ! public void run() { ! revenueListener.revenueUpdate(currentBestValue, false); ! } ! }); } } --- 422,427 ---- } log.info("RC: Found better run with " + totalValue); ! // inform revenue listener via adapter ! notifyRevenueAdapter(currentBestValue, false); } } Index: NetworkVertex.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/NetworkVertex.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** NetworkVertex.java 13 Apr 2010 23:21:12 -0000 1.5 --- NetworkVertex.java 16 Apr 2010 16:38:21 -0000 1.6 *************** *** 209,212 **** --- 209,227 ---- } + public String getVertexName(){ + StringBuffer name = new StringBuffer(); + if (isStation()) { + // if (hex.getCityName() != null && !hex.getCityName().equals("")) + // name.append(hex.getCityName()); + // else + // name.append("Station"); + // if (station.getNumber() != 1) + // name.append("." + station.getNumber()); + name.append(this.getValue()); + } else + name.append(hex.getOrientationName(side)); + return name.toString(); + } + @Override public String toString(){ Index: RevenueAdapter.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/RevenueAdapter.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** RevenueAdapter.java 15 Apr 2010 21:46:28 -0000 1.3 --- RevenueAdapter.java 16 Apr 2010 16:38:21 -0000 1.4 *************** *** 1,4 **** --- 1,5 ---- package rails.algorithms; + import java.awt.EventQueue; import java.util.ArrayList; import java.util.Arrays; *************** *** 14,17 **** --- 15,19 ---- import rails.game.GameManager; + import rails.game.MapHex; import rails.game.PhaseI; import rails.game.PublicCompanyI; *************** *** 32,35 **** --- 34,41 ---- private List<NetworkTrain> trains; + // revenue listener + private RevenueListener revenueListener; + + public RevenueAdapter(Graph<NetworkVertex, NetworkEdge> graph){ this.graph = graph; *************** *** 49,53 **** maxNeighbors = Math.max(maxNeighbors, graph.edgesOf(vertex).size()); ! this.rc = new RevenueCalculator(vertexes.size(), ++maxNeighbors, trains.size()); // increase maxEdges to allow for cutoff } } --- 55,59 ---- maxNeighbors = Math.max(maxNeighbors, graph.edgesOf(vertex).size()); ! this.rc = new RevenueCalculator(this, vertexes.size(), ++maxNeighbors, trains.size()); // increase maxEdges to allow for cutoff } } *************** *** 250,254 **** public void addRevenueListener(RevenueListener listener) { ! rc.addRevenueListener(listener); } --- 256,271 ---- public void addRevenueListener(RevenueListener listener) { ! this.revenueListener = listener; ! } ! ! void notifyRevenueListener(final int revenue, final boolean finalResult) { ! if (revenueListener == null) return; ! ! EventQueue.invokeLater( ! new Runnable() { ! public void run() { ! revenueListener.revenueUpdate(revenue, finalResult); ! } ! }); } *************** *** 257,260 **** --- 274,313 ---- } + public void removeRevenueListener() { + // only removes revenueListener + revenueListener = null; + } + + public String getOptimalRunPrettyPrint() { + StringBuffer runPrettyPrint = new StringBuffer(); + Map<NetworkTrain, List<NetworkVertex>> run = getOptimalRun(); + + for (NetworkTrain train:run.keySet()) { + runPrettyPrint.append("Train " + train + ": "); + MapHex currentHex = null; + NetworkVertex startVertex = null; + for (NetworkVertex vertex:run.get(train)) { + if (startVertex == null) { + currentHex = vertex.getHex(); + startVertex = vertex; + runPrettyPrint.append(vertex.getHex().getName() + "("); + } else if (startVertex == vertex) { + currentHex = vertex.getHex(); + runPrettyPrint.append(") / " + vertex.getHex().getName() + "(0"); + continue; + } else if (vertex.getHex() != currentHex) { + currentHex = vertex.getHex(); + runPrettyPrint.append("), " + vertex.getHex().getName() + "("); + } else { + runPrettyPrint.append(","); + } + runPrettyPrint.append(vertex.getVertexName()); + } + runPrettyPrint.append(")\n"); + } + return runPrettyPrint.toString(); + } + + @Override public String toString() { |