Versions
1.0
- Maximum 30fps
- Roulette-Wheel Selection
- 2-point crossover
- (x,y) representation of the car, rather than vectors
- Vector representation of car, shown here. Makes many new shapes possible. The cars in previous versions are a subset.
- Better stop conditions:
- car's velocity every 1/30th of a second > 1e-4
- move any direction 0.5 in 3 sec
- increase score by 1 every 10 sec
- Wheel number is now 0 to the maximum number of wheels, set by the user.
- Variable size chromosome to ensure even crossover with variable max wheel size. Goes from 19 to 40 with 1 and 8 wheels respectively.
- Wheel frequency slider to determine how rare wheels are.
- PAUSE button and RESET button. (Press P and R).
- Tournament Selection replaces Roulette-Wheel selection. Also removes the 40% random chance of selection.
- Upvote/downvote! Vote for cars and that determines the tournament results before fitness is considered. Downvoting immediately removes that car from the mating pool. Remove too many and new chromosomes fill the pool
- Smoother track that might actually be beatable. Twice as much torque on each wheel.
- Added max framerate slider for 30-60 fps
2.0
- INPUT/OUTPUT Cars (best car and current car). Copies directly into the clipboard. When a seed car is input it copies it directly into the population then crosses it over with each random member. The cars will look different depending on the maximum wheel number.
- Choose the TERRAIN
- Score is now max car reaches, not where it stops.
- NEW STOP CONDITION: if car x-position does not change by 0.05 every 1/30th of a second for 4 seconds in a row its stalled. if its position is less than 10 it gets 2 seconds.
- ELITE SELECTION - Copies the top 2 cars directly into the next generation with no crossover or mutation. Click the button to turn it off
- Target score now shown by RED TRACK
- TIMER counts up instead of target score display. No time limit
- SPEED is now used to resolve ties in the score during tournament selection, if car reaches target score it is given target score exactly. Therefore when multiple cars reach the target score, the fastest is chosen most often to mate. Try the speedway track to breed the fastest car.
- Tournament selection now chooses pairs for TOURNAMENTS RANDOMLY, meaning each car is not guaranteed to get into a tournament. I might increase the tournament size to 2*population size later to see if that helps.
- Merged all the BUTTON LISTENERS into one button listener to make it faster. Also made the sliders into numerical steppers, also for efficency.
- Extended the track PIECE SIZE of the default track (for efficiency) and made the slope a little steeper with more downslope.
- TORQUE is now mg/wheelNum. Therefore more wheels = less torque per wheel. Seems more realistic.
- Choose the POPULATION SIZE when you pick a track/ load a car
- NEXT button to stop the current car, without downvoting it. Cars gets its score at the time
- fixed the scaling on the graph.
- made the camera move less in y-axis when cars spawn.
- Added a TIMER to each level and made it countdown, formatted as time too. No more infinite loops.
- Made BUTTONS dark blue when selected
- CANCEL button when u click seed/terrain. Also acts as a PAUSE.
- Ported code to box2d 2.1 instead of box2d 2.0. Better collisions, faster, lots more options.
- Lots of efficiency improvements - including only drawing track up to target
- Doubled the length of the default track.
- Added more to The Gap and Big Air -- good luck!
- Static track like default called -- The Hills
- Default (Random) track - randomly changes every generation
- Output now includes wheel number, input with no wheel number uses the minimum number needed to express every wheel turned on in the chromosome.
- Set the score of cars with 0 time 0. Prevents buggy cars that finish in 0 time with max score.
- Time and score printed in different boxes to reduce jitter.
- Miliseconds now shown on the speedway (theyre used on every track even when not shown).
- Initial target score increased on default tracks.
- GPU acceleration
- Fix to resolve ties in elite selection (thank Nicholas).
3.0
- BREAKABLE CARS - strength of each piece based on area
- PARTICLE SWARM OPTIMIZATION - another choice of algorithm
- Input/Output entire population.
- Scores as a list - sort, select one to output at any time
- Cached Scores - It won't re-run any car thats identical from the last round (mainly for elite selection)
- Fixed buggy cars - with one angle greater than 180 degrees
- Torque calculated without counting mass of axles and wheels - u need a massive body to support big wheels now
- Camera control smoothed out.
- Stopping condition - less strict in general. stops cars that don't increase score in 15sec.
- Graph auto-scaling with axis label- doesn't clear when paused anymore.
- Hide button for controls
- Lots of UI changes -- moved buttons, max score display, torque display
- Tournament selection now runs 2n tournaments for popsize n, then uses that winner pool to select n/2 pairs for crossover.
- Crossover never chooses the same car index twice. If theres only one unique car left it goes to input screen.
- NEW LEVELS - one that gets progressively smaller, another with ice and huge drops.
3.1
- PRECISE OUTPUT/INPUT with base-64 compression of bytes - still accepts old input style or mixed of both
- Input cars now breed with the random population (like in older versions).
- Fixed speed scoring bug
- Fixed torque calculation bug.
- Button to turn off score caching. Note: its always off for default and default random tracks.
- ROULETTE WHEEL selection now an option instead of tournament selection.
- MUTATION now uses an approximate NORMAL DISTRIBUTION to nudge the current value instead of picking a new one uniformly from the entire range. The color still changes to a new random one.
- Time for each car is now when it gets its highest score, not when the run ends.
- World is explicity destroyed after each run to help garbage collection.
- Fixed graphing bug when restarting simulation.