(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024180020
(43)【公開日】2024-12-26
(54)【発明の名称】プログラム生成装置、プログラム生成方法及びプログラム
(51)【国際特許分類】
G06F 8/30 20180101AFI20241219BHJP
G06F 8/77 20180101ALI20241219BHJP
【FI】
G06F8/30
G06F8/77
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2023099425
(22)【出願日】2023-06-16
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(71)【出願人】
【識別番号】504176911
【氏名又は名称】国立大学法人大阪大学
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【弁理士】
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】倉林 利行
(72)【発明者】
【氏名】▲松▼本 真佑
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC23
5B376BC38
5B376BC80
(57)【要約】
【課題】自動的に生成されるプログラムが局所最適解に陥る可能性を低下させること。
【解決手段】プログラム生成装置は、所定の入出力を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して世代ごとに複数のプログラムを生成するように構成されている生成部と、前記世代ごとに、当該世代において生成された複数のプログラムのそれぞれについて所定の評価関数の値を導出するように構成されている評価部と、を有し、前記生成部は、世代ごとの前記値の順位の履歴が所定条件を満たすプログラムが遺伝的アルゴリズムに基づく新たな世代のプログラムの生成に利用される確率を、前記所定条件を満たさないプログラムよりも低下させるように構成されている。
【選択図】
図2
【特許請求の範囲】
【請求項1】
所定の入出力を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して世代ごとに複数のプログラムを生成するように構成されている生成部と、
前記世代ごとに、当該世代において生成された複数のプログラムのそれぞれについて所定の評価関数の値を導出するように構成されている評価部と、
を有し、
前記生成部は、世代ごとの前記値の順位の履歴が所定条件を満たすプログラムが遺伝的アルゴリズムに基づく新たな世代のプログラムの生成に利用される確率を、前記所定条件を満たさないプログラムよりも低下させるように構成されている、
ことを特徴とするプログラム生成装置。
【請求項2】
前記所定条件は、世代ごとの前記値の順位に応じて異なる加算値の総和が閾値以上であることである、
ことを特徴とする請求項1記載のプログラム生成装置。
【請求項3】
前記加算値は、前記値の順位が前であるほど大きい、
ことを特徴とする請求項2記載のプログラム生成装置。
【請求項4】
所定の入出力を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して世代ごとに複数のプログラムを生成する生成手順と、
前記世代ごとに、当該世代において生成された複数のプログラムのそれぞれについて所定の評価関数の値を導出する評価手順と、
をコンピュータが実行し、
前記生成手順は、世代ごとの前記値の順位の履歴が所定条件を満たすプログラムが遺伝的アルゴリズムに基づく新たな世代のプログラムの生成に利用される確率を、前記所定条件を満たさないプログラムよりも低下させる、
ことを特徴とするプログラム生成方法。
【請求項5】
所定の入出力を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して世代ごとに複数のプログラムを生成する生成手順と、
前記世代ごとに、当該世代において生成された複数のプログラムのそれぞれについて所定の評価関数の値を導出する評価手順と、
をコンピュータに実行させ、
前記生成手順は、世代ごとの前記値の順位の履歴が所定条件を満たすプログラムが遺伝的アルゴリズムに基づく新たな世代のプログラムの生成に利用される確率を、前記所定条件を満たさないプログラムよりも低下させる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム生成装置、プログラム生成方法及びプログラムに関する。
【背景技術】
【0002】
近年、社会全体のIT化が進む一方で、IT人材の不足が大きな問題となっている。経済産業省の試算によると、2025年には約36万人のIT人材が不足すると予測されている。特に専門的な知識を必要とする実装工程におけるIT人材の不足は喫緊の課題であり、自動でプログラミングを行う自動プログラミング技術の研究開発が求められている。
【0003】
自動プログラミング技術の1つとして遺伝的プログラミングと呼ばれる技術が存在する(非特許文献1)。遺伝的プログラミングはプログラムのような木構造のデータに対して遺伝的アルゴリズムを用いた手法である。遺伝的プログラミングでは評価関数に基づき、プログラムを生物の進化に見立て、選択、交叉、突然変異というプロセスを経て世代を重ねて進化させていくことで、最終的に所望のプログラムを得る。評価関数としては仕様となる入出力例を満たす数などが用いられる。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】Milad Taleby Ahvanooey, Qianmu Li, Ming Wu, Shuo Wang, "A Survey of Genetic Programming and Its Applications," KSII Transactions on Internet and Information Systems, vol. 13, no. 4. Korean Society for Internet Information (KSII), 30-Apr-2019
【発明の概要】
【発明が解決しようとする課題】
【0005】
遺伝的プログラミングの課題として、探索中に局所最適解に陥る可能性があることが挙げられる。局所最適解とは、その近くでは最も良い解だが、全体では最も良いとは限らない解のことである。一度、局所最適解に陥るとその近傍から抜け出せず、探索が滞ることが知られている。
【0006】
本発明は、上記の点に鑑みてなされたものであって、自動的に生成されるプログラムが局所最適解に陥る可能性を低下させることを目的とする。
【課題を解決するための手段】
【0007】
そこで上記課題を解決するため、プログラム生成装置は、所定の入出力を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して世代ごとに複数のプログラムを生成するように構成されている生成部と、前記世代ごとに、当該世代において生成された複数のプログラムのそれぞれについて所定の評価関数の値を導出するように構成されている評価部と、を有し、前記生成部は、世代ごとの前記値の順位の履歴が所定条件を満たすプログラムが遺伝的アルゴリズムに基づく新たな世代のプログラムの生成に利用される確率を、前記所定条件を満たさないプログラムよりも低下させるように構成されている。
【発明の効果】
【0008】
自動的に生成されるプログラムが局所最適解に陥る可能性を低下させることができる。
【図面の簡単な説明】
【0009】
【
図1】本発明の実施の形態におけるプログラム生成装置10のハードウェア構成例を示す図である。
【
図2】本発明の実施の形態におけるプログラム生成装置10の機能構成例を示す図である。
【
図3】プログラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
【
図4】プログラム部品リストの一例を示す図である。
【
図6】入出力例セットを満たす合成コードの一例を示す図である。
【
図7】評価値が上位N位までの合成コードの登場スコアを登場プログラムリストへ追加する処理手順の一例を説明するためのフローチャートである。
【
図8】本実施の形態の具体例を説明するための図である。
【発明を実施するための形態】
【0010】
本実施の形態では、遺伝的プログラミングによるプログラムの探索中に局所最適解に陥った可能性が有ると判定された場合、その原因となったプログラムをブラックリストに登録し、ブラックリスト中のプログラムの評価関数の値を恣意的に下げることで局所最適解から脱出する。結果として所望のプログラムを得られやすくする。より詳しくは、本実施の形態では、以下の手順で所望のプログラムが探索される。
(1)遺伝的プログラミングでプログラムを進化させていく。この時、各世代で評価関数の値が上位N位に入るプログラム(個体)を、各世代における評価値の順位に基づく値(以下、「登場スコア」という。)と共に登場プログラムリストに保存する。
(2)登場プログラムリストにおいて、世代ごとの評価値の順位の履歴が所定条件を満たすプログラム(登場スコアが閾値以上であるプログラム)が発生したら、当該プログラムをブラックリストに入れる。
(3)入出力例を満たすプログラムが得られるまで(1)、(2)を繰り返す。この間、ブラックリストに入っているプログラムの評価値は最低値とすることで、当該プログラムが遺伝的操作の対象とされる確率が下げられる。
【0011】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態におけるプログラム生成装置10のハードウェア構成例を示す図である。
図1のプログラム生成装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、インタフェース装置105、表示装置106、及び入力装置107等を有する。
【0012】
プログラム生成装置10での処理を実現するプログラムは、CD-ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0013】
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってプログラム生成装置10に係る機能を実現する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。表示装置106はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置107はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
【0014】
図2は、本発明の実施の形態におけるプログラム生成装置10の機能構成例を示す図である。
図2において、プログラム生成装置10は、プログラム合成部11、合成プログラム実行部12、入出力結果判定部13及びブラックリスト生成部14を有する。これら各部は、プログラム生成装置10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。
【0015】
以下、プログラム生成装置10が実行する処理手順について説明する。
図3は、プログラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
【0016】
ステップS101において、プログラム合成部11は、例えば、補助記憶装置102に記憶されているプログラム部品リストの中の1以上のプログラム部品を、例えば、ランダムに組み合わせて合成することで、複数(K個)のプログラムのソースコード(以下、「合成コード」という。)を生成する。
【0017】
図4は、プログラム部品リストの一例を示す図である。
図4に示されるプログラム部品リストのデータ構造をBNF(Backus-Naur form)記法に基づく形式によって記すと以下の通りである。
<プログラム部品リスト>::=プログラム部品+
すなわち、プログラム部品リストは、1以上のプログラム部品(のソースコード)を含む。
図4では、定数、変数、及びメソッドにプログラム部品が分類されている。ここで、1つの定数、変数又はメソッドが1つのプログラム部品に相当する。例えば、定数であれば、0~9のそれぞれが1つのプログラム部品に相当する。
【0018】
ステップS101では、ランダムに複数のプログラム部品を選択し、当該複数のプログラム部品を合成することで1つの合成コードを生成するといった処理がK回繰り返される。その結果、K個の合成コードが生成される。ステップS101において生成されるK個の合成コードを、「現世代のK個の合成コード」ともいう。
【0019】
なお、プログラム部品の合成とは、複数のプログラム部品の計算が組み合わされることをいい、公知技術を用いて行うことができる。例えば、各プログラム部品を、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現し、いずれかのプログラム部品の木構造のノードを、他のプログラム部品の木構造によって置換することで、これらのプログラム部品を合成することができる。なお、合成コードは、プログラム部品と同様に、値を入力とし、入力された値に関する計算を実行し、値の計算結果を出力するといった定義を含む。
【0020】
続いて、現世代のK個の合成コードのそれぞれについてステップS102~S105を含むループ処理L1が実行される。以下、ループ処理L1において処理対象とされている合成コードを「対象コード」という。
【0021】
ステップS102において、合成プログラム実行部12は、対象コードと同一の合成コードがブラックリストに含まれているか否かを判定する。当初においてブラックリストは空である。したがって、初めてループ処理L1が実行される場合、ブラックリストに含まれている合成コードは存在しない。
【0022】
対象コードと同一の合成コードがブラックリストに含まれていない場合(S102でNo)、合成プログラム実行部12は、対象コードをコンパイル及びリンク等することで、実行形式のプログラム(以下「合成プログラム」という。)を生成する(S103)。
【0023】
続いて、合成プログラム実行部12は、当該合成プログラム(以下「対象合成プログラム」という。)に対し、予め用意されている入出力例セットに含まれる各入出力例を入力して対象合成プログラムを実行し、入出力例ごとに出力を得る(S104)。入出力例セットは、所望のプログラムが満たすべき条件を示す情報であり、例えば、予め設定されて補助記憶装置102に記憶されている。
【0024】
図5は、入出力例セットの一例を示す図である。
図5に示される入出力例セットのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=値+
<出力例>::=値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の値(入力値)をいい、出力例とは1以上の値(出力値)をいう。
【0025】
例えば、入出力例セットに含まれる入出力例がM個である場合、合成プログラム実行部12は、ステップS104において、M個の入力値ごとに当該入力値を入力として対象合成プログラムを実行し、M個の出力値を得る。
【0026】
続いて、合成プログラム実行部12は、対象コードに対する評価関数の値(評価値)を導出する(S105)。本実施の形態では、対象合成プログラムが満たした入出力例の数が評価値として導出される。したがって、全て(M個)の入出力例を満たした対象コードの評価値はMとなる。但し、対象合成プログラムが満たした入出力例の割合が評価関数とされてもよい。満たした入出力例の数に対する増加関数であれば他の関数が評価関数とされてもよい。つまり、評価関数とは、所望のプログラムに対する近似度を示す指標であるともいえる。
【0027】
一方、対象コードと同一の合成コードがブラックリストに含まれている場合(S102でYes)、合成プログラム実行部12は、対象コードの評価値を最低値とする(S106)。最低値とは、評価値がとりうる範囲での最低の値以下の値である。例えば、負の値が最低値とされてもよい。
【0028】
なお、対象コードと同一の合成コードがブラックリストに含まれているか否かの判定においては、2つの合成コードの同一性の判定が必要である。2つの合成コードの同一性の判定は、公知の各種の方法のうちのいずれかに基づいて行われればよい。例えば、2つの合成コードがテキストとして同一(実質的に同一も含む)であるか否かに基づいて同一性が判定されてもよいし、2つの合成コードに基づく2つのプログラムについて複数の入力に対する出力が全て同じであるか否かに基づいて同一性が判定されてもよい。
【0029】
ループ処理L1が終了すると、入出力結果判定部13は、全ての入出力例を満たす合成コードの有無を判定する(S107)。すなわち、ループ処理L1において処理対象とされた合成コードの中で、ステップS104において得られた全ての出力値が期待通りであった(正しかった)合成コードの有無が判定される。
【0030】
該当する合成コードが無い場合(S107でNo)、ブラックリスト生成部14は、現世代のK個の合成コードのうち、評価値が上位N位(N<K)までの合成コードの登場スコアを登場プログラムリストへ追加する処理を実行する(S108)。なお、2以上の合成コードの評価値が同じである可能性が有る。したがって、現世代のK個のうちの一部の合成コードだけでなく、現世代のK個の全ての合成コードが、評価値が上位N位までの合成コードに該当する可能性が有る。
【0031】
登場プログラムリストとは、過去において生成された合成コードをキーとし、当該合成コードの登場スコアを値とする辞書形式のデータである。登場プログラムリストのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<登場プログラムリスト>::=(<合成コード><登場スコア>)+
<合成コード>::=プログラム部品+
登場スコアとは、世代ごとの評価値の順位に応じて異なる加算値の総和(累積値)である。つまり、登場スコアは、世代ごとの評価値の順位の履歴に基づく値である。加算値は、当該順位が高い(前である)ほど大きい。したがって、登場スコアは、過去の世代において生成(合成)された回数が多いほど大きくなるとともに、世代ごとの評価値の順位が高いほど大きくなる。つまり、本実施の形態において、或る合成コードの登場スコアは、当該合成コードが局所最適解である可能性の高さを示す指標である。
【0032】
なお、現世代のK個の合成コードのうち、評価値が上位N位までの合成コードは、N個以上存在する可能性が有る。評価値が同じ合成コードが複数存在する可能性が有るからである。ステップS108では、現世代のK個の合成コードのうち評価値が上位N位までの合成コードの中で登場プログラムリストに未登録の合成コードについては、当該合成コードの評価値に応じた加算値が登場プログラムリストに登録される。現世代のK個の合成コードのうち評価値が上位N位までの合成コードの中で登場プログラムリストに既に登録されている合成コードについては、当該合成コードについて登場プログラムリストに登録されている登場スコアに対して、当該合成コードの評価値に応じた加算値が加算される。なお、ステップS108の詳細については後述される。
【0033】
続いて、ブラックリスト生成部14は、登場プログラムリストの中で登場スコアが閾値を超えている合成コードの有無を判定する(S109)。斯かる判定は、世代ごとの評価値の順位の履歴が所定条件を満たす合成コードの有無の判定に相当する。上記したように登場スコアは、世代ごとの評価値の順位に応じて異なる加算値の総和である。したがって、登場スコアは、世代ごとの評価値の順位の履歴に基づく値である。そのような登場スコアが閾値以上であるとうことは、世代ごとの評価値の順位の履歴が所定条件を満たすことに相当する。
【0034】
登場スコアが閾値を超えている合成コードが1以上存在する場合(S109でYes)、ブラックリスト生成部14は、登場スコアが閾値を超えている全ての合成コードをブラックリストに追加する(S110)。ブラックリストは、1つの合成コードを1つの要素とするリスト型のデータである。ブラックリストのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<ブラックリスト>::=<合成コード>+
ステップS109でNoの場合、又はステップS110に続いて、プログラム合成部11は、新たな世代の合成コードの生成処理を実行する(S111)。ステップS111では、現世代の合成コードの一部を変更して、複数(K個)の合成コードが生成(再生成)される。合成コードの一部の変更には、例えば、遺伝的アルゴリズム(遺伝的プログラミング)が用いられる。すなわち、現世代のK個の合成コードの中から選択された1以上の合成コードに対してK回の遺伝的操作(選択、交叉、突然変異)が行われて、K個の次世代の合成コードが生成される。ここで、Kは、遺伝的アルゴリズムの一世代における個体(ソースコード)の個数である。遺伝的アルゴリズムの適用対象とされる各合成コードは、例えば、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現され、木構造の部分木が遺伝的操作の対象とされる。
【0035】
この際、プログラム合成部11は、現世代のK個の合成コードの中で評価値が相対的に高い合成コードが選択される確率が高くなるような規則に基づいて遺伝的操作の対象とする合成コードを選択する。換言すれば、プログラム合成部11は、評価値が相対的に低い合成コードが新たな世代の合成コードの生成に利用される確率を相対的に低下させる。したがって、直前のステップS110においてブラックリストに追加された合成コードは、その後のステップS105において評価値が最低値となるため次回以降のステップS111において遺伝的操作の対象とされる確率が低くなる。すなわち、プログラム合成部11は、世代ごとの評価値の順位の履歴が所定条件を満たす合成コード(ブラックリストに追加された合成コード)が遺伝的アルゴリズムに基づく新たな世代の合成コードの生成に利用される確率を、前記所定条件を満たさない合成コード(ブラックリストに追加されていない合成コード)よりも低下させる。その結果、局所最適解から抜け出せる可能性が高くなる。
【0036】
その後、ステップS107の条件を満たす合成プログラムが1以上生成されると(S107でYes)、入出力結果判定部13は、当該合成コードを出力する(S112)。その結果、ユーザは、所望のプログラムを得ることができる。
図5の入出力例セットを満たす合成コードとしては、例えば、
図6に示されるような合成コードが出力される。
【0037】
続いてステップS108の詳細について説明する。
図7は、評価値が上位N位までの合成コードの登場スコアを登場プログラムリストへ追加する処理手順の一例を説明するためのフローチャートである。
【0038】
ステップS201において、ブラックリスト生成部14は、現世代のK個の合成コードを評価値の降順にソートする。ステップS201におけるソートは、所望のプログラムに近い方が前になるように合成コードを整列することを意味する。
【0039】
続いて、ブラックリスト生成部14は、変数nに1を代入する(S202)。
【0040】
続いて、ブラックリスト生成部14は、評価値がn番目である合成コードをn位リストに代入する(S203)。n位リストとは、1以上の合成コードを格納可能なリスト構造のデータである。評価値がn番目である合成コードは複数存在する可能性が有る。したがって、n位リストには複数の合成コードが格納される可能性が有る。
【0041】
続いて、ブラックリスト生成部14は、n位リストに格納されている合成コードごとにループ処理L2を実行する。ループ処理L2は、ステップS204~S206を含む。ループ処理L2において処理対象とされている合成コードを、以下「対象コード」という。
【0042】
ステップS204において、ブラックリスト生成部14は、対象コードと同一の合成コード(以下、「同一コード」という。)が登場プログラムリストにキーとして登録されているか否かを判定する(S204)。斯かる判定においては、2つの合成コードの同一性の判定が必要であるが、2つの合成コードの同一性の判定は上記した通りに実行されればよい。
【0043】
同一コードが登場プログラムリストに登録されていない場合(S204でNo)、ブラックリスト生成部14は、登場プログラムリスト[対象コード]に対して1/nを代入する(S205)。ここで、「登場プログラムリスト[対象コード]に対して1/nを代入する」とは、キーバリュー型のデータである登場プログラムリストに対して、対象コードをキーとするバリューとして1/nを登録することをいう。つまり、ステップS205では、対象コードに対応付けられて1/nが登場プログラムリストに登録される。なお、バリューとして登録される1/nは、登場スコアである。登場スコアは、評価値に基づく順位が高いほど(前であるほど)大きくなる。
【0044】
一方、同一コードが登場プログラムリストに登録されている場合(S204でYes)、ブラックリスト生成部14は、登場プログラムリスト[同一コード]に対して1/nを加算する(S206)。すなわち、評価値に基づく順位が高いほど(前であるほど)、大きな値が登場スコアに加算される。
【0045】
n位リストに格納されている全ての合成コードについてループ処理L2が終了すると、ブラックリスト生成部14は、nに1を加算する(S207)。
【0046】
続いて、ブラックリスト生成部14は、nがNより大きいか否かを判定する(S208)。nがN以下である場合(S208でNo)、ブラックリスト生成部14は、ステップS203以降を繰り返す。nがNより大きくなると(S208でYes)、
図7の処理手順は終了する。
【0047】
図7の処理手順によれば、現世代のK個の合成コードのうち、評価値が上位N位までの合成コードの登場スコアが更新される。この際、評価値が大きいほど大きな値が登場スコアに加算又は設定される。したがって、各世代において生成される(登場する)回数が多い合成コードほど登場スコアは大きくなる。また、評価値が大きい合成コードほど登場スコアは大きくなる。
【0048】
図3及び
図7の処理手順によって実現される処理の具体例について説明する。
図8は、本実施の形態の具体例を説明するための図である。
【0049】
図8には、世代(第1世代、第2世代及び第3世代)ごとに、生成された合成コードの例と、登場プログラムリスト及びブラックリストの内容とが示されている。なお、
図8の例において、登場スコアに対する閾値は2である。
【0050】
第1世代(ステップS101)では、hoge1及びhoge2等の合成コードが生成され、評価値が2であるhoge1が、評価値の降順において1位であり、評価値が1であるhoge2が、評価値の降順におい2位である例が示されている。登場プログラムリストには、hoge1に対する登場スコア=1、及びhoge2に対する登場スコア=0.5等が登録される。なお、登場プログラムリストにおける「hoge1:1」という表記において、「:」の後の数値は登場スコアを示す。
【0051】
第2世代(1回目のステップS111)では、hoge1及びhoge3等の合成コードが生成され、評価値が2であるhoge1が、評価値の降順において1位であり、評価値が1であるhoge3が、評価値の降順におい2位である例が示されている。hoge1は、所望のプログラム(
図6)とは構造が異なるが、評価値が高いため第2世代の生成(遺伝的操作)に利用される。その結果として、hoge1が第2世代において評価値が最上位の合成コード(局所最適解)として残っている。登場プログラムリストには、hoge3に対する登場スコア=0.5等が追加される。また、登場プログラムリストにおいてhoge1に対する登場スコアが2に更新される。ここで、hoge1の登場スコアが閾値(=2)以上となったため(S109でYes)、hoge1がブラックリストに追加される(S110)。
【0052】
但し、hoge1は第2世代においても評価値が高いため第3世代の生成(遺伝的操作)にも利用される。その結果、hoge1は第3世代でも残り続けている。但し、hoge1はブラックリストに登録されている。したがって、第3世代において、hoge1の評価値は最低値(
図8の例では、-999)とされる(S106)。したがって、第4世代の生成にはhoge1は利用される確率は低くなり、局所最適解へ陥ることが回避される。
【0053】
なお、
図8では、登場スコアに対する閾値が2である例を示したが、当該閾値は、1以下であってもよい。すなわち、必要に応じて、評価値が1回でも上位になった合成プログラムが局所最適解としてブラックリストに追加されるようにしてもよい。
【0054】
上述したように、本実施の形態によれば、世代ごとの評価値の順位の履歴が所定条件を満たすプログラム(合成コード)が遺伝的アルゴリズムに基づく新たな世代のプログラム(合成コード)の生成に利用される確率が、前記所定条件を満たさないプログラムよりも(恣意的に)下げられる。したがって、自動的に生成されるプログラムが局所最適解に陥る可能性を低下させることができる。その結果、例えば、入出力例を満たす所望のプログラムの生成率の向上や高速化を期待することができる。
【0055】
なお、本実施の形態において、プログラム合成部11は、生成部の一例である。合成プログラム実行部12は、評価部の一例である。入出力例セットは、所定の入出力の一例である。
【0056】
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0057】
10 プログラム生成装置
11 プログラム合成部
12 合成プログラム実行部
13 入出力結果判定部
14 ブラックリスト生成部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 表示装置
107 入力装置
B バス