Multi Expression Programming

Source code
MEPX Software
    User manual

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 software running on Windows, Mac OSX and Linux Ubuntu for solving regression, classification and time series problems).

mepx screenshot

What is new

For news, please subscribe here:

  • 2023.4.14. New MEPX release. Fix bug in VBA generated code for FMOD. Major code refactoring.

  • 2024.4.6. A GitHub repository containing binaries for MEPX has been renamed to Here the source code for MEPX will be published in the near future.

  • 2024.3.31. New libmep major release.

  • 2023.4.3. New MEPX release. Improvement in selecting rows to ignore when loading data.

  • 2023.3.18. New MEPX release. Rows can be ignored when loading data from files (or when pasting from Clipboard).

  • 2023.3.5. New MEPX release. Then number of effective instructions is displayed in the Runs (Errors) table.

  • 2023.02.23. New video showing how to discover, from data, the formulas for Josephus sequence which is a multivariate time-series.

  • 2023.02.16. New, major, MEPX release. Multiple outputs for symbolic regression and time-series problems.

  • 2023.02.16.1. New videos showing how to discover, from data, the formulas for 2x2 matrix multiplication and how to handle multivariate time-series.

  • 2022.11.14. New video on how to discover Fibonacci formula with MEPX. Watch it here.

  • 2022.11.4. New MEPX release. User interface improvements. Evolution chart can shows the Validation error and can hide/show Average and Validation errors.

  • 2022.10.18. New MEPX release. User interface improvements.

  • 2022.10.1. New MEPX release. Random number generator replaced. Bug fixes.

  • 2022.9.27. New MEPX release. Can export formulas into Latex. Bug fixes.

  • 2022.9.26. New MEPX release. Bug fixes.

  • 2022.8.21. New MEPX release. Integer data type for symbolic regression and time series. Bug fixes.

  • 2022.7.19. New MEPX release. The target column for classification problems can contain any integer value. Previously, values were continuous integers starting with 0. Bug fixes.

  • 2022.3.19. New MEPX release. Infix form for mathematical expressions. Constants inserted directly into final code. Bugs fixed in VBA code.

  • 2022.3.16. A technical report describing classification strategies for MEP has been uploaded.

  • 2022.2.25. New MEPX release. Button for exporting all data. Bug fixed.

  • 2022.2.24. New MEPX release. Bug fixed.

  • 2022.2.17. New MEPX release. Programs generated by MEPX can be exported in Python too.

  • 2022.2.13. New MEPX release. Grids for displaying data have been replaced with List Views. Minor fixes.

  • 2022.2.7. New MEPX release. New strategy (called Closest Center) for multiclass classification problems.

  • 2022.1.30. New MEPX release. fmod (modulus for real numbers) added.

  • 2022.1.21. New MEPX release. Bug fixed.

  • 2022.1.13.1. New MEPX release. Bug fixed.

  • 2022.1.11. Added a screenshots section on website. Also, libmep was updated.

  • 2022.1.10. New MEPX release. Bug fixed.

  • 2022.1.9. New MEPX release. Constants can now evolve outside the initial interval.

  • 2021.12.31. New MEPX release. Bug fixed when computing the time series error for the Test set.

  • 2021.12.30. New MEPX release. Added predictions for time series. Graphical representation improved. Some grids were replaced by List Views. Bugs fixed. A movie with time series prediction is here on YouTube.

  • 2021.12.13. New MEPX release. Initial support for time series added. Bugs fixed.

  • 2021.12.8. New MEPX release. Can select what to show in the graphical representation of the result (Training, Validation, Test, Target and Output).

  • 2021.12.7. New MEPX release. Graphical representation of the target and output.

  • 2021.12.3. New MEPX release. Tabs navigation is enabled for the parameters window.

  • 2021.12.2. New MEPX release. Loading data from file takes into account the local setting for the decimal separator. Several bugs were fixed.

  • 2021.11.30. New MEPX release. Bugs fixed.

  • 2021.11.28. New MEPX release. Evolution graphic is redesigned with the legend at the right and labels for axis.

  • 2021.11.22-27. New MEPX release with some bugs fixed.

  • 2021.11.21. New MEPX release with some additional options to paste results to Clipboard.

  • 2021.11.03. New libmep release. It is was updated to be on-par with MEPX internal engine.

  • 2021.10.29. New MEPX release. The evolved mathematical expression can be used in Excel as a formula. A movie with this feature is here on YouTube.

  • 2021.10.27. New MEPX release. Can paste tabular data from Excel or Google Spreadsheet. A movie with this feature is here on YouTube.

  • 2021.10.01. New MEPX release. Bug fix when saving projects with training data as strings (not as double).

  • 2021.09.14. New MEPX release. Can load projects to UI if given as a parameter to command line. Some bug fixes.

  • 2021.08.30. Papers section updated.

  • 2021.08.28. New MEPX release. Improved import from CSV files.

  • 2021.08.15. Papers using MEP can now be added by filling this Google Form.

  • 2021.08.05. New MEPX release. Can be run from command line and integrated into other applications.

  • 2021.08.04. New MEPX release. Bug fix in the random numbers generator.

  • 2021.05.18. New MEPX release with faster display of data.

  • 2021.03.18. MEPX for Windows is now signed.

  • 2021.01.02. New MEPX release. 3 new functions added: negation (-x), if a ≤ 0 || b ≤ 0?c:d, if a ≤ 0 != b ≤ 0?c:d.

  • 2020.12.27.1. New MEPX release. Fix bug when the program gives error during test set evaluation.

  • 2020.12.27. New MEPX release. Fix bug when the simplified program was incorrect for some Multi Class Classification with Winner Takes All (Dynamic) error.

  • 2020.12.24. New MEPX release. The validation is performed only on the best of the (entire) population.

  • 2020.12.20. New MEPX release. GUI framework updated. A new button for updates is added in the main toolbar. Signed app for macOS. Desktop icon for Ubuntu.

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

  • 2017.11.21. New MEPX release 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. Papers 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. MEP source code released to public.

  • 2002.01.13. First paper on Multi Expression Programming was written.

  • 2001. Work started on Multi Expression Programming.