Multi Expression Programming

Source code
MEPX Software

Multi Expression Programming (MEP) is a technique for generating computer programs by using an evolutionary approach.

MEP introduced a unique feature: the ability to encode multiple solutions in the same chromosome. This means that we can explore much more from the search space compared to other techniques which encode a single solution in the chromosome. In most cases this advantage comes with no penalty regarding the running time or the involved resources.

This website contains papers about MEP, source code for various problems and MEPX - (a complex software running on Windows, Mac OSX and Linux Ubuntu for solving regression and classification problems).

What is new

For news, please subscribe here:

  • 2018.04.04. New MEPX version which contains several bug fixes for user defined constants.

  • 2017.11.21. New MEPX version which contains several bug fixes.

  • 2017.10.15. Bug fixed for MEPX for regression projects; status bar strings updated.

  • 2017.10.10. Bug fixed for MEPX that appeared when loading saved projects.

  • 2017.10.07. MEP implementation in Haskell. Thanks to Bogdan Penkovsky.

  • 2017.10.04. New major release for MEPX that includes new strategies for multi-class classification and several bug fixes.

  • 2017.08.05. New website mirror at

  • 2016.11.30. New source code for evolving Evolutionary Algorithms for Single Objective Optimization using MEP is available on Github.

  • 2016.10.05. Paper section updated.

  • 2016.08.29. New MEPX release. Bug fixing. More exact function for counting the running time. New random number generator.

  • 2016.08.09. New MEPX release. Bug fixing.

  • 2016.07.17. List of papers updated.

  • 2016.07.01. MEP implementation in Go. Thanks to Mark Chenoweth.

  • 2016.05.24. New MEP source code for solving even-parity problems with Automatically Defined Functions. Can be downloaded from

  • 2016.04.27. New MEPX release. There is a checkbox on the Training data tab which displays or inhibits the display of grids data (training, validation and test). I have chose not to display the data because filling a grid with data takes a lot of time. So, if you have many data or a large project, I suggest to uncheck this box before loading them. Several bugs have been fixed.

  • 2016.04.07-2016.04.25. Several strategies for multi-class classification have been tested. See more details Google group post. However, none of them could compete with what we have so far implemented in MEPX or libmep.

  • 2016.04.06. New MEPX release. Bug fix in the display of Target column.

  • 2016.04.05. New MEPX release. Statistics for runs and errors can now copied directly to Clipboard. This is very useful for performing Copy-Paste to Excel or related programs.

  • 2016.04.03. New MEPX release. Added Mean Squared Error for fitness computation in the case of regression problems. Previously was only Mean Absolute Error. In the case of classification problems the error is now multiplied by 100 in order to show the percentage.

  • 2016.04.02. List of papers updated.

  • 2016.03.31. New MEPX release. Display the best error (for training, validation and test), mean and stddev over multiple runs. Several bugs have been fixed.

  • 2016.03.27. New MEPX release. Adds random subset selection (RSS) which means that fitness is computed on a smaller set of data. RSS set is randomly selected at each generation. By using RSS the program runs faster.

  • 2016.03.26. Mirror copy of the MEP site at: This short name is much more easier to memorize than the long name of the site hosted on our faculty server.

  • 2016.03.25. New MEPX release. 64bit version for Windows is now available. A status bar has been added which displays the current generation, best training error, average training error (over the entire population) and validation error. Selecting the individual to be moved in the next subpopulation is now done randomly (previously it was made with tournament selection).

  • 2016.03.22. New MEPX release. Can load PROBEN1 files. Several bugs have been fixes.

  • 2016.03.15. New MEPX release. Now it can solve classification problems with multiple classes (>= 2). Also the latest version contains some bug fixes.

  • 2016.03.02. New MEPX release. To numeric and scale buttons have been moved to Advanced panel of the Data. Also the latest version contains some bug fixes.

  • 2016.02.21. MEP source code for solving classification problems with multiple classes (2 or more) has been added to the Github repository (see mep_multi_class.cpp from Multi class is NOT yet available for libmep library and neither in MEPX.

  • 2016.02.16. New MEPX version which now displays the variable index (like "x 99") in the header of the training, validation and test tables. Also the latest version contains some bug fixes.

  • 2016.02.12. Google group about MEP created. Address is here:

  • 2016.02.06. New MEPX version which contains some bug fixes.

  • 2016.02.03. Source code moved to Github.

  • 2016.02.03. New MEP source code with C++11 threads.

  • 2015.11.15. New MEPX version with many new features: can load alphanumerical values, can find/replace/scale values, can shuffle rows (in a random order) can move data between training, validation and test etc.

  • 2015.08.15. New MEP source code with multiple sub-populations. Also a small bug fix in MEP source code.

  • 2015.08.05. Bug fix in MEP source code.

  • 2015.08.03. MEPX for Ubuntu 64 bit is now available for download.

  • 2015.07.30. MEP source code for evolving digital circuits has been added to the Source code section.

  • 2015.05.23. A new button which saves (training, validation, test) data from existing project (xml files) to text files. Also several bugs have been fixed.

  • 2015.05.17. Classification threshold parameter has been removed. Now the program discover the best threshold by itself. It is slower than previous, but now there are no more wasted iterations with not optimal threshold. Previous classification projects must be run again because the previous classification parameter is ignored.

    Several bugs have been fixed.

  • 2015.05.15. New operators: if (a < 0)?b:c and if (a < b)?c:d and a little bit more speed.

  • 2015.05.14. Multi-core support for MEPX. Just set the number of cores from the parameters window and the program will do the computations in parallel.

  • 2015.05.10. Source code updated. Now it contains constants and shows how to solve binary classification problems.

  • 2015.05.09. Speed optimization of MEPX. For building1-energy problem from the archive, the running time was reduces from 190 seconds downto 126 seconds. Other parameters were: population size = 1000, code length = 100, num generations = 100.

  • 2015.05.06. More operators added to MEPX software.

  • 2015.05.06. New youtube movie on how to use MEPX software.

  • 2015.05.05. New end-user software for Windows, Mac and Linux.

  • 2015.05.05. Website updated.

  • 2008.09.01. Papers section updated.

  • 2005.02.01. Software section updated.

  • 2004.12.01. Papers section updated.

  • 2004.07.01. New methods and their websites: Traceless Genetic Programming, Evolving Evolutionary Algorithms

  • 2004.04.03. New MEP source code.

  • 2002.01.13 First paper on Multi Expression Programming was written.

  • 2001. Work started on Multi Expression Programming.