IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧 ▶ 国立大学法人大阪大学の特許一覧

特開2024-17331プログラム生成装置、プログラム生成方法及びプログラム
<>
  • 特開-プログラム生成装置、プログラム生成方法及びプログラム 図1
  • 特開-プログラム生成装置、プログラム生成方法及びプログラム 図2
  • 特開-プログラム生成装置、プログラム生成方法及びプログラム 図3
  • 特開-プログラム生成装置、プログラム生成方法及びプログラム 図4
  • 特開-プログラム生成装置、プログラム生成方法及びプログラム 図5
  • 特開-プログラム生成装置、プログラム生成方法及びプログラム 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024017331
(43)【公開日】2024-02-08
(54)【発明の名称】プログラム生成装置、プログラム生成方法及びプログラム
(51)【国際特許分類】
   G06F 8/30 20180101AFI20240201BHJP
   G06N 3/126 20230101ALI20240201BHJP
【FI】
G06F8/30
G06N3/12 160
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022119892
(22)【出願日】2022-07-27
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(71)【出願人】
【識別番号】504176911
【氏名又は名称】国立大学法人大阪大学
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【弁理士】
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】倉林 利行
(72)【発明者】
【氏名】▲松▼本 真佑
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC15
5B376BC16
5B376BC38
5B376BC80
(57)【要約】
【課題】自動的に生成されるプログラムが局所最適解に陥る可能性を低下させること。
【解決手段】プログラム生成装置は、所定の条件を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して繰り返し複数のプログラムを生成する生成部と、前記生成部が複数のプログラムを生成するたびに当該複数のプログラムの中で所定の評価関数の値が最も優れているベストプログラムを特定し、前記ベストプログラムが閾値以下の1以上のプログラムに収束している場合に、前記生成部が利用する遺伝的アルゴリズムの突然変異の確率を上昇させる調整部と、を有する。
【選択図】図2
【特許請求の範囲】
【請求項1】
所定の条件を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して繰り返し複数のプログラムを生成する生成部と、
前記生成部が複数のプログラムを生成するたびに当該複数のプログラムの中で所定の評価関数の値が最も優れているベストプログラムを特定し、前記ベストプログラムが閾値以下の1以上のプログラムに収束している場合に、前記生成部が利用する遺伝的アルゴリズムの突然変異の確率を上昇させる調整部と、
を有することを特徴とするプログラム生成装置。
【請求項2】
前記調整部は、前記ベストプログラムが閾値以下の1以上のプログラムでループしている場合に、前記確率を上昇させる、
ことを特徴とする請求項1記載のプログラム生成装置。
【請求項3】
前記調整部は、前記ベストプログラムが閾値以下の1以上のプログラムに収束していない場合は、前記確率を初期値に戻す、
ことを特徴とする請求項1又は2記載のプログラム生成装置。
【請求項4】
所定の条件を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して繰り返し複数のプログラムを生成する生成手順と、
前記生成手順が複数のプログラムを生成するたびに当該複数のプログラムの中で所定の評価関数の値が最も優れているベストプログラムを特定し、前記ベストプログラムが閾値以下の1以上のプログラムに収束している場合に、前記生成手順が利用する遺伝的アルゴリズムの突然変異の確率を上昇させる調整手順と、
をコンピュータが実行することを特徴とするプログラム生成方法。
【請求項5】
前記調整手順は、前記ベストプログラムが閾値以下の1以上のプログラムでループしている場合に、前記確率を上昇させる、
ことを特徴とする請求項4記載のプログラム生成方法。
【請求項6】
前記調整手順は、前記ベストプログラムが閾値以下の1以上のプログラムに収束していない場合は、前記確率を初期値に戻す、
ことを特徴とする請求項4又は5記載のプログラム生成方法。
【請求項7】
所定の条件を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して繰り返し複数のプログラムを生成する生成手順と、
前記生成手順が複数のプログラムを生成するたびに当該複数のプログラムの中で所定の評価関数の値が最も優れているベストプログラムを特定し、前記ベストプログラムが閾値以下の1以上のプログラムに収束している場合に、前記生成手順が利用する遺伝的アルゴリズムの突然変異の確率を上昇させる調整手順と、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム生成装置、プログラム生成方法及びプログラムに関する。
【背景技術】
【0002】
近年、社会全体のIT化が進む一方で、IT人材の不足が大きな問題となっている。経済産業省の試算によると、2025年には約36万人のIT人材が不足すると予測されている。特に専門的な知識を必要とする実装工程におけるIT人材の不足は喫緊の課題であり、自動でプログラミングを行う自動プログラミング技術の研究開発が求められている。
【0003】
自動プログラミング技術の1つとして遺伝的プログラミングと呼ばれる技術が存在する。遺伝的プログラミングはプログラムのような木構造のデータに対して遺伝的アルゴリズムを用いた手法である。遺伝的プログラミングでは評価関数に基づき、プログラムを生物の進化に見立て、選択、交叉、突然変異というプロセスを経て世代を重ねてプログラムを進化させていくことで、最終的に所望のプログラムを得る。評価関数としては仕様となる入出力例を満たす数などが用いられる。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】Christopher D. Rosin. 2019. "Stepping stones to inductive synthesis of low-level looping programs" In Proceedings of the Thirty-Third AAAI Conference on Artificial Intelligence and Thirty-First Innovative Applications of Artificial Intelligence Conference and Ninth AAAI Symposium on Educational Advances in Artificial Intelligence (AAAI'19/IAAI'19/EAAI'19). AAAI Press, Article 292, 2362-2370.
【発明の概要】
【発明が解決しようとする課題】
【0005】
遺伝的プログラミングの課題として、探索中に局所最適解に陥る可能性があることが挙げられる(非特許文献1)。局所最適解とは、その近くでは最も良い解だが、全体では最も良いとは限らない解のことである。一度、局所最適解に陥るとその近傍から抜け出せず、探索が滞ることが知られている。
【0006】
本発明は、上記の点に鑑みてなされたものであって、自動的に生成されるプログラムが局所最適解に陥る可能性を低下させることを目的とする。
【課題を解決するための手段】
【0007】
そこで上記課題を解決するため、プログラム生成装置は、所定の条件を満たすプログラムが生成されるまで遺伝的アルゴリズムを利用して繰り返し複数のプログラムを生成する生成部と、前記生成部が複数のプログラムを生成するたびに当該複数のプログラムの中で所定の評価関数の値が最も優れているベストプログラムを特定し、前記ベストプログラムが閾値以下の1以上のプログラムに収束している場合に、前記生成部が利用する遺伝的アルゴリズムの突然変異の確率を上昇させる調整部と、を有する。
【発明の効果】
【0008】
自動的に生成されるプログラムが局所最適解に陥る可能性を低下させることができる。
【図面の簡単な説明】
【0009】
図1】本発明の実施の形態におけるプログラム生成装置10のハードウェア構成例を示す図である。
図2】本発明の実施の形態におけるプログラム生成装置10の機能構成例を示す図である。
図3】プログラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
図4】プログラム部品リストの一例を示す図である。
図5】入出力例セットの一例を示す図である。
図6】入出力例セットを満たす合成コードの一例を示す図である。
【発明を実施するための形態】
【0010】
本実施の形態では、遺伝的プログラミングによるプログラムの探索中に局所最適解に陥り、探索が滞っている場合のみ突然変異の確率(以下、「突然変異率」という。)を上昇させることで局所最適解に陥ることを防ぐ。具体的には一定世代数の間、集団の中で最も優れた個体が常に同一プログラムだった場合、局所最適解から脱するまで突然変異率を上昇させる。
【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以上のプログラム部品を、例えば、ランダムに組み合わせて合成することで、複数(N個)のプログラムのソースコード(以下、「合成コード」という。)を生成する。
【0017】
図4は、プログラム部品リストの一例を示す図である。図4に示されるプログラム部品リストのデータ構造をBNF(Backus-Naur form)記法に基づく形式によって記すと以下の通りである。
<プログラム部品リスト>::=プログラム部品+
すなわち、プログラム部品リストは、1以上のプログラム部品(のソースコード)を含む。図4では、定数とメソッドとにプログラム部品が分類されている。ここで、1つの定数が1つのプログラム部品に相当し、1つのメソッドが1つのプログラム部品に相当する。すなわち、図4において破線で囲まれた単位が、1つのプログラム部品の単位に相当する。
【0018】
ステップS101では、ランダムに複数のプログラム部品を選択し、当該複数のプログラム部品を合成することで1つの合成コードを生成するといった処理がN回繰り返される。その結果、N個の合成コードが生成される。
【0019】
なお、プログラム部品の合成とは、複数のプログラム部品の計算が組み合わされることをいい、公知技術を用いて行うことができる。例えば、各プログラム部品を、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現し、いずれかのプログラム部品の木構造のノードを、他のプログラム部品の木構造によって置換することで、これらのプログラム部品を合成することができる。なお、合成コードは、プログラム部品と同様に、値を入力とし、入力された値に関する計算を実行し、値の計算結果を出力するといった定義を含む。
【0020】
続いて、合成コードごとにステップS102及びS103を含むループ処理L1が実行される。以下、ループ処理L1において処理対象とされている合成コードを「対象コード」という。
【0021】
ステップS102において、合成プログラム実行部12は、対象コードをコンパイル及びリンク等することで、実行形式のプログラム(以下「合成プログラム」という。)を生成する。
【0022】
続いて、合成プログラム実行部12は、当該合成プログラム(以下「対象合成プログラム」という。)に対し、予め用意されている入出力例セットに含まれる各入出力例を入力して対象合成プログラムを実行し、入出力例ごとに出力を得る(S103)。入出力例セットは、入出力に関して生成対象のプログラム(以下「対象プログラム」という。)が満たすべき条件を示す情報であり、例えば、予め設定されて補助記憶装置102に記憶されている。
【0023】
図5は、入出力例セットの一例を示す図である。図5に示される入出力例セットのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=入力値+
<出力例>::=出力値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の入力値をいい、出力例とは1以上の出力値をいう。
【0024】
例えば、入出力例セットに含まれる入出力例がM個である場合、合成プログラム実行部12は、ステップS103において、M個の入力値ごとに当該入力値を入力として対象合成プログラムを実行し、M個の出力値を得る。
【0025】
ループ処理L1が終了すると、入出力結果判定部13は、全ての出力値が当該出力値に対応する入力値が属する入出力例の出力例に一致する合成プログラムの有無を判定する(S104)。すなわち、ループ処理L1において処理対象とされた合成プログラムの中で、ステップS103において得られた全ての出力値が期待通りであった(正しかった)合成プログラムの有無が判定される。
【0026】
該当する合成プログラムが無い場合(S104でNo)、突然変異率調整部14は、N個の合成プログラムの中からベストプログラムを特定する(S105)。ベストプログラムとは、評価関数の値が最も優れた値である一つの合成プログラムをいう。評価関数に対する入力は、例えば、期待通りであった02出力値の数であってもよい。この場合、期待通りであった出力値の数が最も多い合成プログラムがベストプログラムとして特定される。
【0027】
続いて、突然変異率調整部14は、ベストプログラムが一定世代の間にわたって連続して同じであるか否かを判定する(S106)。例えば、ステップS105において特定されたベストプログラムがK回(K>1)連続して同じであるか否かが判定される。斯かる判定は、例えば、過去K回分のベストプログラムの履歴を記憶しておくことで可能である。又は、前回の合成プログラムと前回の合成プログラムがベストプログラムとして特定された連続回数とが記憶されてもよい。いずれの場合であっても、前回のベストプログラムと今回のベストプログラムとを比較することで、ステップS106の判定を行うことができる。
【0028】
ここで、ベストプログラムの同一性の判定は、公知の各種の方法のうちのいずれかに基づいて行われればよい。例えば、ソースコードが同一(実質的に同一も含む)であるか否かに基づいて同一性が判定されてもよいし、複数の入力に対する出力が全て同じであるか否かに基づいて同一性が判定されてもよい。
【0029】
ベストプログラムが一定世代の間にわたって連続して同じではないで場合(S106でNo)、突然変異率調整部14は、後述の遺伝的アルゴリズムの突然変異率を初期化する(初期値に戻す)(S107)。初期値は、ユーザによって予め決められる。一般的には0.01~0.2が初期値として採用される場合が多いが、この範囲に含まれない初期値が用いられてもよい。
【0030】
一方、ベストプログラムが一定世代の間にわたって連続して同じである場合(S106でYes)、プログラムの進化が止まっているため、突然変異率調整部14は、突然変異率を現在値から所定値分だけ上昇させる(S108)。上昇は現在値が初期値よりも大きい場合であっても行われる。すなわち、突然変異率の上昇は累積的に(複数段階で)行われうる。但し、突然変異率の最大値は1.0であるため、現在値が1.0である場合、上昇は行われない。
【0031】
ステップS107又はS108に続いて、プログラム合成部11は、合成コードの変更処理を実行する(S109)。合成コードの変更処理では、元の合成コードの一部を変更して、複数(N個)の合成コードが生成(再生成)される。合成コードの一部の変更には、例えば、遺伝的アルゴリズム(遺伝的プログラミング)が用いられる。すなわち、前世代の合成コードに対してN回の遺伝的操作(選択、交叉、突然変異)が行われて、N個の次世代の合成コードが生成される。ここで、Nは、遺伝的アルゴリズムの一世代における個体(ソースコード)の個数である。この際、遺伝的アルゴリズムの適用対象とされる各合成コードは、例えば、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現され、木構造の部分木が遺伝的操作の対象とされる。
【0032】
プログラム合成部11は、遺伝的操作において、突然変異率に従った確率で突然変異に相当する操作を行う。したがって、突然変異率が高い程、突然変異が実行される可能性が高くなる。突然変異において前世代の合成コードの一部に置き換わる候補として、例えば、プログラム部品リストに含まれるプログラム部品が用いられる。
【0033】
続いて、ループL1以降が繰り返される。
【0034】
その後、ステップS104の条件を満たす合成プログラムが1以上生成されると(S104でYes)、入出力結果判定部13は、当該合成コードを出力する(S110)。その結果、ユーザは、所望のプログラムを得ることができる。図5の入出力例セットを満たす合成コードとしては、例えば、図6に示されるような合成コードが出力される。
【0035】
なお、上記では、(一つの)ベストプログラムが一定世代の間にわたって連続して同じであること、すなわち、ベストプログラムが一つの同一プログラムに収束してしまうこと(以下、「条件1」という。)が突然変異率を上昇させる条件とされる例について説明したが、他の条件が採用されてもよい。例えば、ベストプログラムが閾値n(n≧1)以下の1以上のプログラムに収束してしまうことが突然変異率を上昇させる条件(以下、「条件2」という。)とされてもよい。ベストプログラムが閾値n以下の1以上のプログラムに収束してしまうとは、一定世代において、当該1以上のプログラムのうちのいずれかだけにベストプログラムが限定されてしまう状態をいう。斯かる状態の一例として、ベストプログラムが閾値n以下の1以上のプログラム内でループをしてしまう場合が挙げられる。
【0036】
例えば、各世代のベストプログラムが以下の通りであるとする。
世代1:プログラムA
世代2:プログラムB
世代3:プログラムC
世代4:プログラムA
世代5:プログラムA
世代6:プログラムB
世代7:プログラムC
世代8:プログラムA

この場合、ベストプログラムが、プログラムABCの順でループを起こしている(世代4,5はAが連続しているが、重複は無視して1つのAとしてカウントする。)。突然変異率調整部14は、このループ数が一定回数を超えた場合に、突然変異率を上昇させる。なお、条件2において閾値n=1の場合は、条件1と等価である。
【0037】
上述したように、本実施の形態によれば、プログラム合成部11が遺伝的アルゴリズムを利用して繰り返しプログラムを合成する過程においてベストプログラムが閾値以下の1以上のプログラムに収束している場合に、プログラム合成部11が利用する遺伝的アルゴリズムの突然変異の確率が上昇する。したがって、突然変異によってプログラムが合成される可能性が高めることができ、自動的に生成されるプログラムが局所最適解に陥る可能性を低下させることができる。その結果、例えば、所定の条件(入出力例)を満たすプログラムの生成率の向上や高速化を期待することができる。
【0038】
なお、突然変異率を上げると、通常の探索時でもプログラムがランダムに変化してしまうため、プログラムの進化が進みにくくなる可能性が考えられるが、本実施の形態では、ベストプログラムが閾値以下の1以上のプログラムに収束している場合に限って突然変異率が上昇し、当該収束が回避された場合には、突然変異率が初期値に戻されるため、斯かる可能性を低下させることができる。
【0039】
なお、本実施の形態において、プログラム合成部11は、生成部の一例である。突然変異率調整部14は、調整部の一例である。
【0040】
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0041】
10 プログラム生成装置
11 プログラム合成部
12 合成プログラム実行部
13 入出力結果判定部
14 突然変異率調整部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 表示装置
107 入力装置
B バス
図1
図2
図3
図4
図5
図6