Grant Braught wrote:
Hi everyone,

We have been trying to evolve a NN based brain for a pioneer using pyro with the techniques Doug describes for using PyroFromPython (http://emergent.brynmawr.edu/emergent/PyroFromPython) and have run into an interesting issue. In particular, we find that the results of simulations run using the technique using engine.pleaseRun() (as at the top of the PyroFromPython page) differ from those in which simulator.step() is called explicitly (as in section 1.1 Running Faster on the PyroFromPython page).

In particular, when directly calling simulator.step() it appears that every time step is exactly 100 ms long, while when running under control of the engine (or from the pyrobot gui) there is some non-determinism in the length of the time step. This means that with simulator.step() the brain can rely on precise timing between control opportunities that don't exist in the other modes or on a real robot. Thus, when evaluating fitness using simulations that run the faster modes the evolving brains exploit the reliability of the fixed length time steps and as a result perform very poorly when run in with the pyrobot gui (or on a real robot).

Has anyone else encountered this issue?

Grant,

You're absolutely correct about your analysis. When you use the pleaseRun interface, you are talking to the simulator via threads and possibly over sockets, too. Both threads and sockets allow places for non-determinism to enter into the process.

Has anyone found a work around other than running the simulations at real-time speed using the engine or pyrobot interface?

When you say "work around", you wish to work around the determinism, correct? BTW, determinism can be nice in some (simulated) situations (for example, for watching a run over and over again for analysis or debugging). Maybe you would like pseudo-random determinism? If you work over threads then you have real, honest-to-goodness non-determinism: there is no way to replicate a run as the timing differences are real.

One possibility that I can think of would be to add noise to the amount of translation or rotation that actually occurs during one time step of the simulation. Has anyone had any experience with doing that?

Yes, that is one possibility. Another is to add noise in the movement of the robot. Currently, when you say robot.move(.5, .5), the simulator will move exactly that much. You could add some variance to that. A full model of noise is something that would be nice in the Pyrobot Simulator (and one that I have requested for the Stage simulator as well).

Let us know what you find that works for you.

-Doug

Thanks for any insights.

Grant



_______________________________________________
Pyro-users mailing list
Pyro-users@pyrorobotics.org
http://emergent.brynmawr.edu/mailman/listinfo/pyro-users


_______________________________________________
Pyro-users mailing list
Pyro-users@pyrorobotics.org
http://emergent.brynmawr.edu/mailman/listinfo/pyro-users

Reply via email to