/** * Created on 26 avr. 2005 * @author cedric and nicolas * * ## Simbad speed Benchmark ## * * The robot will run during 1.000.000 steps randomly wandering in the environment (sometimes it even gets stuck, * eventhough this does not impact the benchmark). This benchmark provides the number of steps per seconds for this * very specific setup (i.e. it *will* vary from one environment or controller to another). based upon the wander * demo. * * Please add your own statistics at the end of this file. Please follow the provided layout for clarity purpose. * You may want to benchmark simbad with and without display mode (note however that displayMode=false sometimes * causes a memory error due to a known memory leak bug in Java3D). * **/ package contribs.bench; import java.util.Random; import javax.vecmath.Vector3d; import simbad.gui.Simbatch; import simbad.sim.Agent; import simbad.sim.EnvironmentDescription; import simbad.sim.RangeSensorBelt; import simbad.sim.RobotFactory; import simbad.sim.Wall; public class Benchmark { static private boolean _displayMode = true; // true: display simulator window, false : quiet mode (faster) public static void main(String[] args) { long _chrono = System.currentTimeMillis(); long totalSteps = 1000000; EnvBench eb = new EnvBench(); Simbatch sim = new Simbatch(eb,_displayMode); sim.reset(); System.out.println("Starting Benchmark (display mode = " + _displayMode + ")"); for(int i=0;i<totalSteps;i++) { if ( i%(totalSteps/10) == 0 ) System.out.print("."); sim.step(); } System.out.println("\nEnd of Benchmark (please provide several results for relevant average figures)"); // at the end, simply have to compute the time taken _chrono = System.currentTimeMillis()-_chrono; System.out.println("/* username : (fill in) */"); System.out.println("/* date : (fill in) */"); System.out.println("/* hardware (speed,ram,video) and OS description : (fill in) */"); System.out.println("/* notes : (anything special?) */"); System.out.println("/* benchmark took "+_chrono+" ms, i.e. "+ totalSteps/(_chrono/1000) +" steps/sec (display mode is " + _displayMode + ") */"); } } class EnvBench extends EnvironmentDescription { static Random _rand=new Random(); public EnvBench() { Wall w1 = new Wall(new Vector3d(9, 0, 0), 18, 1, this); w1.rotate90(1); add(w1); Wall w2 = new Wall(new Vector3d(-9, 0, 0), 18, 1, this); w2.rotate90(1); add(w2); Wall w3 = new Wall(new Vector3d(0, 0, 9), 18, 1, this); add(w3); Wall w4 = new Wall(new Vector3d(0, 0, -9), 18, 1, this); add(w4); add(new Robot(new Vector3d(0,0,0),"Astro le petit robot")); } public class Robot extends Agent { RangeSensorBelt sonars, bumpers; public Robot (Vector3d position, String name) { super(position, name); // Add sensors bumpers = RobotFactory.addBumperBeltSensor(this,12); sonars = RobotFactory.addSonarBeltSensor(this,12); } public void initBehavior () {} public void updateLog (){} public void performBehavior () { if (bumpers.oneHasHit()) { setTranslationalVelocity(-0.1); setRotationalVelocity(0.5-(0.1 * Math.random())); } else if (collisionDetected()) { setTranslationalVelocity(0.0); setRotationalVelocity(0); moveToStartPosition(); System.out.println("Collision!"); } else if (sonars.oneHasHit()) { // reads the three front quadrants double left = sonars.getFrontLeftQuadrantMeasurement(); double right = sonars.getFrontRightQuadrantMeasurement(); double front = sonars.getFrontQuadrantMeasurement(); // if obstacle near if ((front < 0.7)||(left < 0.7)||(right < 0.7)) { if (left < right) setRotationalVelocity(-1); else setRotationalVelocity(1); setTranslationalVelocity(0); } else { setRotationalVelocity(0); setTranslationalVelocity(0.6); } } else { setTranslationalVelocity(0.8);; setRotationalVelocity(0); } } } } /* ********************************************************************************************************************************** */ /* username : nicolas br. */ /* date : 2005/04/27 */ /* hardware (speed,ram,video) and OS description : pc 2.8ghz 512mo nvidiaQuadro4_200/400 under linux (knoppix)*/ /* notes : under linux+eclipse, simbad processes do not terminate (!!), moreover speed is quite unstable */ /* display mode is true */ /* benchmark took 175969 ms, i.e. 5714 steps/sec (display mode is true) */ /* benchmark took 155511 ms, i.e. 6451 steps/sec (display mode is true) */ /* benchmark took 111907 ms, i.e. 9009 steps/sec (display mode is true) */ /* benchmark took 113035 ms, i.e. 8849 steps/sec (display mode is true) */ /* average benchmark : ~138 sec => ~7200 steps/sec (but high variability btw runs (+/- 30 sec)) */ /* display mode is false */ /* benchmark took 66579 ms, i.e. 15151 steps/sec (display mode is false) */ /* benchmark took 61572 ms, i.e. 16393 steps/sec (display mode is false) */ /* benchmark took 77088 ms, i.e. 12987 steps/sec (display mode is false) */ /* benchmark took 63374 ms, i.e. 15873 steps/sec (display mode is false) */ /* average benchmark : ~67 sec => ~15000 steps/sec */ /* username : nicolas br. */ /* date : 2005/04/27 */ /* hardware (speed,ram,video) and OS description : pc 2.8ghz 512mo nvidiaQuadro4_200/400 under windows XP*/ /* java3D/directX */ /* notes : ( displayMode = false ) cannot be done due to java3D bug. */ /* benchmark took 75219 ms, i.e. 13333 steps/sec (display mode is true) */ /* benchmark took 75687 ms, i.e. 13333 steps/sec (display mode is true) */ /* benchmark took 72906 ms, i.e. 13888 steps/sec (display mode is true) */ /* benchmark took 73157 ms, i.e. 13698 steps/sec (display mode is true) */ /* benchmark took 79156 ms, i.e. 12658 steps/sec (display mode is true) */ /* benchmark took 70672 ms, i.e. 14285 steps/sec (display mode is true) */ /* average benchmark : ~75 sec => ~13500 steps/sec */ /* other runs: */ /* benchmark took 74797 ms, i.e. 13513 steps/sec (display mode is false) -- only full run in 4 tries, not that quicker... */ /* benchmark took 86093 ms, i.e. 11627 steps/sec (display mode is true, but window hidden) */ /* benchmark took 92922 ms, i.e. 10869 steps/sec (display mode is true, but window hidden) */ /* benchmark took 101141 ms, i.e. 9900 steps/sec (display mode is true, but window hidden) --> so, dont hide the window :-) */ /* other run: */ /* hardware (speed,ram,video) and OS description : pc 2.8ghz 512mo nvidiaQuadro4_200/400 under windows XP*/ /* java3D/openGL */ /* notes : ( displayMode = false ) cannot be done due to java3D bug. */ /* benchmark took 60703 ms, i.e. 16666 steps/sec (display mode is true) */ /* benchmark took 66453 ms, i.e. 15151 steps/sec (display mode is true) */ /* benchmark took 80109 ms, i.e. 12500 steps/sec (display mode is true) */ /* benchmark took 59735 ms, i.e. 16949 steps/sec (display mode is true) */ /* benchmark took 59984 ms, i.e. 16949 steps/sec (display mode is true) */ /* benchmark took 64750 ms, i.e. 15625 steps/sec (display mode is true) */ /* benchmark took 60000 ms, i.e. 16666 steps/sec (display mode is true) */ /* benchmark took 61422 ms, i.e. 16393 steps/sec (display mode is true) */ /* average benchmark : ~64 sec => ~15862 steps/sec */ /* conclusion : better use java3d/opengl under windows. Moreover the directX version is more bugged. */ /* ********************************************************************************************************************************** */ /* username : Vincent Besson */ /* date : 2005/05/10 */ /* hardware (speed,ram,video) and OS description : P4 3.4 GHz, ram 512 Mo, NVidia Quadro NVS 64 Mo, Linux Mandrake 10.1 */ /* notes : - often the robot stay blocked in a corner, but I let end the benchmark; /* - when I run Benchmark with totalSteps = 1000000 i get memory heaps. Anyway, I got these results: */ /* display mode is true*/ /* benchmark took 102147 ms, i.e. 9803 steps/sec (display mode is true) */ /* benchmark took 115492 ms, i.e. 8695 steps/sec (display mode is true) */ /* benchmark took 106357 ms, i.e. 9433 steps/sec (display mode is true) */ /* benchmark took 111622 ms, i.e. 9009 steps/sec (display mode is true) */ /* average benchmark took ~ 109 s, i.e. ~ 9200 steps/s */ /* display mode is false*/ /* benchmark took 65314 ms, i.e. 15384 steps/sec (display mode is false) */ /* benchmark took 47375 ms, i.e. 21276 steps/sec (display mode is false) */ /* benchmark took 63029 ms, i.e. 15873 steps/sec (display mode is false) */ /* benchmark took 50172 ms, i.e. 20000 steps/sec (display mode is false) */ /* average benchmark took ~ 56 s, i.e. ~ 18000 steps/s */ /* username : Vincent Besson */ /* date : 2005/05/10 */ /* hardware (speed,ram,video) and OS description : P4 3.4 GHz, ram 512 Mo, NVidia Quadro NVS 64 Mo, Windows XP Pro (2002 SP1) */ /* notes : - often the robot stay blocked in a corner, but I let end the benchmark; /* - only in windows, I get sometimes "java.lang.OutOfMemoryError". I reboot Eclipse and it works; /* - when I run Benchmark with totalSteps = 1000000 i get memory heaps. Anyway, I got these results: */ /* display mode is true*/ /* benchmark took 65719 ms, i.e. 15384 steps/sec (display mode is true) */ /* benchmark took 57375 ms, i.e. 17543 steps/sec (display mode is true) */ /* benchmark took 56250 ms, i.e. 17857 steps/sec (display mode is true) */ /* benchmark took 42328 ms, i.e. 23809 steps/sec (display mode is true) */ /* average benchmark took ~ 55 s, i.e. ~ 18600 steps/s */ /* display mode is false*/ /* benchmark took 61891 ms, i.e. 16393 steps/sec (display mode is false) */ /* benchmark took 56844 ms, i.e. 17857 steps/sec (display mode is false) */ /* benchmark took 78968 ms, i.e. 12820 steps/sec (display mode is false) */ /* benchmark took 62469 ms, i.e. 16129 steps/sec (display mode is false) */ /* average benchmark took ~ 65 s, i.e. ~ 15800 steps/s */ /* ********************************************************************************************************************************** */