マルチ式プログラミング(MEP) は、与えられたデータセットを記述する数学関数を生成する進化アルゴリズムです。MEP は、同じ染色体に複数の解をエンコードする遺伝的プログラミングの変種です。MEP の表現は特定されていません (複数の表現がテストされています)。最も単純な変種では、MEP 染色体は命令の線形文字列です。この表現は、3 アドレス コードに触発されたものです。MEP の強みは、問題の複数の解を同じ染色体にエンコードできることです。このようにして、探索空間のより広い領域を探索できます。ほとんどの問題では、この利点は、染色体に単一の解をエンコードする遺伝的プログラミングの変種と比較して、実行時間のペナルティなしで得られます。 [ 1 ] [ 2 ] [ 3 ]
MEP染色体は、3アドレスコード形式で表現された命令の配列である。
各命令には、変数、定数、または関数が含まれます。命令が関数である場合は、引数(命令のアドレスとして指定される)も存在します。
ここに単純なMEP染色体を示します(左側のラベルは染色体の一部ではありません)。
1:a 2: b 3: + 1、2 4: c 5: d 6: + 4, 5 7: * 3、5
染色体を評価する際、どの命令がプログラムの出力を生成するのかは明確ではありません。多くの場合、一連のプログラムが得られますが、その中には全く関連性のないプログラム(共通の命令を持たないプログラム)も含まれています。
上記の染色体について、デコード中に得られる可能性のあるプログラムのリストは以下のとおりです。
E1 = a、 E2 = b、 E4 = c、 E5 = d、 E3 = a + b。 E6 = c + d。 E7 = (a + b) * d。
各命令は、プログラムの可能な出力として評価される。
適合度(または誤差)は標準的な方法で計算されます。例えば、シンボリック回帰の場合、適合度は期待される出力(ターゲットと呼ばれる)と実際の出力との差(絶対値)の合計です。
どの式が染色体を表すでしょうか?どの式が染色体の適応度を表すでしょうか?
MEPでは、最も優れたもの(誤差が最も小さいもの)が染色体を表します。これは他のGP手法とは異なります。線形遺伝的プログラミングでは、最後の命令が出力となります。一方、直交座標系遺伝的プログラミングでは、出力を提供する遺伝子は他のすべての遺伝子と同様に進化します。
なお、多くの問題において、この評価の複雑さは、各染色体に単一の解をエンコードする場合と同程度です。したがって、他の手法と比較して実行時間にペナルティはありません。
MEPXは、Windows、macOS、Linux Ubuntuに対応した、コンピュータプログラムの自動生成のための無料ソフトウェアです。データ分析、特に記号回帰、統計的分類、時系列問題の解決に利用できます。ユーザーインターフェースはwxWidgetsで作成されています。

Libmepは、多重式プログラミング技術を実装した無料のオープンソースライブラリです。C++で記述されています。
hmepは、Haskellプログラミング言語で多重式プログラミング技術を実装した新しいオープンソースライブラリです。