Page 1

The art of Evolutionary Algorithms programming, by Dr. Juan-Juliรกn Merelo, Esq. Calling from the University of Granada in the Old Continent of Europe


You suck Art of Evolutionary Algorithms Programming /2


Don't worry

I suck too Art of Evolutionary Algorithms Programming /3


This is about sucking less At programming evolutionary algorithms, no less! Or any other, for that matter! Art of Evolutionary Algorithms Programming /4


And about the

zen

Art of Evolutionary Algorithms Programming /5


And about writing publishable papers painlessly through efficient, maintainable, scientific programming Art of Evolutionary Algorithms Programming /6


1. Mind your environment

Art of Evolutionary Algorithms Programming /7


Tools of the trade ● ●

Use real operating systems. Programmer's editor: kate, emacs, geany (your favorite editor here) + Debugger (gdb, languagespecific debugger) ●

Set up macros, syntax-highlighting and -checking, online debugging.

IDE: Eclipse, NetBeans ●

Steep learning curve, geared for Java, and too heavy on the resource usage side –

But worth the while eventually Art of Evolutionary Algorithms Programming /8


2. Open source your code and data Art of Evolutionary Algorithms Programming /9


Aw, maaaan! ●

Open source first, then program ●

Scientific code should be born free

Science must be reproducible

Easier for others to compare with your approach ●

Increased H –

Heaven!

Manifest hidden assumptions.

If you don't share, you don't care! Art of Evolutionary Algorithms Programming /10


3. Minimize bugs via test-driven programming Art of Evolutionary Algorithms Programming /11


Tests before code ●

What do you want your code to do? ●

Mutate a bit string, for instance.

Write the test ●

Is the result from mutation different from the original? – –

Of course! But will it be even if you change an upstream function? Or the representation?

Does it change all bits in the same proportion?

Doest it follow (roughly) the mutation rate? Art of Evolutionary Algorithms Programming /12


Use testing frameworks ●

Unit testing tries to catch bugs in the smallest atom of a program ●

Every language has its testing framework ●

Interface, class, function, decision

PHPUnit, jUnit, xUnit, DejaGNU...

Write tests for failure, not for success Art of Evolutionary Algorithms Programming /13


4. Control the

source of your power

Art of Evolutionary Algorithms Programming /14


Source control systems save the day ●

Source code management systems allow ●

Checkpoints

Stygmergic interaction

Individual responsability over code changes

Branches

Distributed are in: git, mercurial, bazaar

Centralized are out: subversion, cvs.

Instant backup! Art of Evolutionary Algorithms Programming /15


Code complete 1) 1) Check Checkout outcode/Update code/Updatecode code 2) Make changes

2) Make changes

3) Test your code

3) Commit changes (and push to central

4)repository) Commit changes (and push to central repository)

Art of Evolutionary Algorithms Programming /16


5. Be language agnostic

Art of Evolutionary Algorithms Programming /17


Language shapes thought ●

● ●

Don't believe the hype: ●

Compiled languages are faster... NOT

There is no free lunch.

Avoid programming in C in every language you use Consider DSL: Damn Small Languages Python, Perl, Lua, Ruby, Javascript... interpreted languages are faster. Art of Evolutionary Algorithms Programming /18


Language agnoticism at its best Evolving Regular Expressions for GeneChip Probe Performance Prediction http://www.springerlink.com/content/j3x8r108x757876w/ The regular expresions are coded in AWK scripts: Although this may seem complex, gawk (Unix’ free interpreted pattern scanning and processing language) can handle populations of a million individuals.

Art of Evolutionary Algorithms Programming /19


6

Programming speed > program speed

Art of Evolutionary Algorithms Programming /20


Scientists, not software engineers ●

● ●

Our deadlines are for papers – not for software releases. What should be optimized is speed-to-publish. Makes no sense to spend 90% time programming – 5 % writing the paper. Scripting languages rock ●

And minimize time-to-publish

Art of Evolutionary Algorithms Programming /21


Perl faster than Java? Algorithm::Evolutionary, a flexible Perl module for evolutionary computation

http://www.springerlink.com/content/8h025g83j0q6827 ●

Class-by-class, Perl library much more compact ●

Less code to write

In pure EC code, Algorithm::Evolutionary was faster than ECJ

Art of Evolutionary Algorithms Programming /22


10. Become an adept of the chosen language Art of Evolutionary Algorithms Programming /23


Don't teach an old dog new tricks ●

The first language you learn brands you with fire.

But no two languages are the same

Every language includes very efficient solutions

Regular expressions

Symbolic processing

Graphics

Efficiency/knowledge balance Art of Evolutionary Algorithms Programming /24


11 Don't assume: measure Art of Evolutionary Algorithms Programming /25


Performance matters â—?

Basic measure: CPU time as measured by time

jmerelo@penny:~/proyectos/CPAN/Algorithm-Evolutionary/benchmarks$ time perl onemax.pl 0; time: 0.003274 1; time: 0.005438 [...] 498; time: 1.006539 499; time: 1.00884 500; time: 1.010817 real 0m1.349s user 0m1.140s sys 0m0.050s Art of Evolutionary Algorithms Programming /26


Going a bit deeper: profilers Art of Evolutionary Algorithms Programming /27


Size matters

Art of Evolutionary Algorithms Programming /28


There's always a better algorithm/ data structure

12

Art of Evolutionary Algorithms Programming /29


And differences are huge ●

Sort algorithms are an example ●

Plus, do you need to sort the population?

Cache fitness evaluations ●

Cache them permanently in a database? –

Thousand ways of computing fitness ●

How do you compute the MAXONES? –

Measure how much fitness evaluation takes

$fitness_of{$chromosome} = ($copy_of =~ tr/1/0/);

Algorithms and data structures interact Art of Evolutionary Algorithms Programming /30


13

Learn the tricks of the trade

Art of Evolutionary Algorithms Programming /31


Two trades ●

Evolutionary algorithms ●

Become one with your algorithm –

It does not work, but for a different reason that what you think it does

Programming languages ●

What function is better implemented?

Is there yet another library to do sorting?

Where should you go if there's a problem?

Even a third trade: programming itself. Art of Evolutionary Algorithms Programming /32


Case study: sort ●

Sorting is routinely used in evolutinary algorithms ●

Roulette wheel, rank-based algorithms

Faster sorts (in Perl): http://raleigh.pm.org/sorting.html ●

Sorting implies comparing

Orcish Manoeuver, Schwartzian transform

Sort::Key, fastest ever http://search.cpan.org/dist/Sort-Key/

Do you even need sorting? ●

Top or bottom n will do nicely sometimes

Art of Evolutionary Algorithms Programming /33


14

Make output processing easy

Art of Evolutionary Algorithms Programming /34


Avoid drowning in data ●

Every experiment produces megabytes of data ●

Timestamps, vectors, arrays, hashes

Difficult to understand after some time

Use serialization languages for storing data ●

YAML: Yet another markup language

JSON: Javascript Object Notation

XML: eXtensible Markup languajge

Name your own Art of Evolutionary Algorithms Programming /35


Case study: Mastermind Entropy-Driven Evolutionary Approaches to the Mastermind Problem Carlos Cotta et al., http://www.springerlink.com/content/d8414476w2044g2m/ ●

Output uses YAML

Includes

Experiment parameters

Per-run and per-generation data

Final population and run time

Open source! Art of Evolutionary Algorithms Programming /36


15 When everything fails

visualize

Art of Evolutionary Algorithms Programming /37


16 to 25

backup your data Art of Evolutionary Algorithms Programming /38


Better safe than unpublished ●

Get an old computer, and backup everything there. In some cases, create virtual machines to reproduce one paper's environment ●

Do you think gcc 3.2.3 will work on your new one?

Use rsync, bacula or simply cp

It's not if your hard disk will fail, it's when

Cloud solutions are OK, but backup that too Art of Evolutionary Algorithms Programming /39


26 Keep stuff together

Art of Evolutionary Algorithms Programming /40


Where did I left my keys? ●

Paper: program + data + graphics + experiment logs + text + revisions + referee reports + presentations. Experiments have to be rerun, graphics replotted, papers rewritten. Use logs to know which parameters produced which data that produced which graph. And put them all in the same directory tree.

Art of Evolutionary Algorithms Programming /41


27 Get out and smell the air

Art of Evolutionary Algorithms Programming /42


New is always better ●

Programming paradigms are changing on a daily basis ●

NoSQL, cloud computing, internet of things, Google Prediction API, map/reduce, GPGPU

Keep a balance between following fashions and finding more efficient ways of doing evolutionary algorithms. ●

And by doing I mean publishing

Art of Evolutionary Algorithms Programming /43


28 Nurture your code Art of Evolutionary Algorithms Programming /44


A moment of joy, a lifetime of grief ●

Run tests periodically, or when there is a major upgrade of interpreter, upstream library or OS. ●

Maintain a roadmap of releases ●

Can be automated. Remember this is free software

Get the community involved ●

Your research is for the whole wide world.

Art of Evolutionary Algorithms Programming /45


Publish, don't perish!

Art of Evolutionary Algorithms Programming /46


Or camels!

(no cats were harmed doing this presentation) http://geneura.wordpress.com http://twitter.com/geneura

Art of Evolutionary Algorithms Programming /47

The art of Evolutionary Algorithm Programming  

Tutorial at the CEC conference

Advertisement