The Reasonable Randomizer is a Java program that can modify the starter pokemon, wild pokemon, trainer pokemon and movesets of any pokemon game from the 3rd gen. It works with FireRed, LeafGreen, Emerald, Ruby and Sapphire, and with English, Japanese and French ROMs. The Reasonable Randomizer is different from other randomization programs in that it offers options for limited randomization, which means it won't simply pick any random pokemon from Bulbasaur to Deoxys, but instead limits the random pokemon to choose from based on factors such as evolution state, pokemon strength, pokemon habitat, and type specialties.
I've also hosted the program on Google Code, so that people who don't have PC accounts / are too lazy to log in can download the randomizer. I've included the Java source code with the program, if anybody is interested in seeing it. Here's a sneak peak at the user interface, for a visual explanation of what it does: