import java.util.Vector; import java.io.FileWriter; import java.io.BufferedWriter; /** * */ public class SimEvalMorphGlbl { static int m_nNumErrorDumps = 0; public static void main(String args[]) { for(int nAgents = 10; nAgents < 500; nAgents +=1) { for(int iter = 0; iter < 100+5*nAgents; ++iter) { runOn(nAgents); System.out.println("n = "+nAgents); } } } static double getMaxDiam(double arrLfPts[]) { double lfResult = 0.0; for(int nIdx = 2; nIdx < arrLfPts.length; nIdx += 2) { double lfCurrDist = arrLfPts[0]-arrLfPts[nIdx]; lfCurrDist *= lfCurrDist; double lfTmp = arrLfPts[1]-arrLfPts[nIdx+1]; lfTmp *= lfTmp; lfCurrDist += lfTmp; if(lfCurrDist > lfResult*lfResult) { lfResult = Math.sqrt(lfCurrDist); } } return lfResult; } public static void runOn(int nAgents) { NonInteractiveSim mySim = new NonInteractiveSim(); mySim.trivSetupNagents(nAgents, 10.0*nAgents, 0.6, new ControlFuncDoNothing(2), new TreeAgentState()); mySim.setScheduleAndGraph(0.1, new RdiskGraph(1.0)); MorphAgentGlbl agent = new MorphAgentGlbl(0.1); MorphTargetAdapter specGen; specGen = new MorphTargetAdapter(mySim.getInit(), 1.0); IMorphSpec morphSpec = specGen.generate(); agent.setShapeDesc(morphSpec); agent.setMotionParams(1.0, 0.1, 1.2); mySim.setAgent(agent); DataCallbackAggregator callbackStats = new DataCallbackAggregator(); { callbackStats.addCallback(new MorphDoneCallback(morphSpec)); callbackStats.addCallback(new TreeCallbackTrackMaxDepth()); } mySim.runSim(callbackStats, 200.0); try { Vector vecResults = (Vector)callbackStats.getLastObject(); String strOut = ""; try { try { Double objLfTime = (Double)vecResults.elementAt(0); strOut += objLfTime; if(objLfTime.doubleValue() > 50.0) { ++m_nNumErrorDumps; String strStartCond = "start_"+m_nNumErrorDumps+".txt"; String strEndCond = "end_"+m_nNumErrorDumps+".txt"; BufferedWriter fileStartOut = new BufferedWriter(new FileWriter(strStartCond)); BufferedWriter fileEndOut = new BufferedWriter(new FileWriter(strEndCond)); morphSpec.dump(fileEndOut); double [] arrLfIniPos = mySim.getIniPos(); for(int nNum = 0; nNum < arrLfIniPos.length; ++nNum) { Double objLfCurrVal = new Double(arrLfIniPos[nNum]); fileStartOut.write(objLfCurrVal.toString() + "\n"); } fileStartOut.close(); fileEndOut.close(); } } catch(java.lang.ClassCastException e) { strOut += "Time measure failed"; } strOut += " "; try { Integer objNMaxDepth = (Integer)vecResults.elementAt(1); objNMaxDepth = new Integer(morphSpec.getMaxDepth()); strOut += objNMaxDepth; } catch(java.lang.ClassCastException e) { strOut += "Depth measure failed"; } } catch(Exception e) { strOut = "Other exception :"+e; } strOut += " " + getMaxDiam(mySim.getIniPos()); System.out.println(strOut); } catch(ClassCastException e) { } } }