JP2023003531A - プログラム生成装置、プログラム生成方法及びプログラム - Google Patents
プログラム生成装置、プログラム生成方法及びプログラム Download PDFInfo
- Publication number
- JP2023003531A JP2023003531A JP2021104657A JP2021104657A JP2023003531A JP 2023003531 A JP2023003531 A JP 2023003531A JP 2021104657 A JP2021104657 A JP 2021104657A JP 2021104657 A JP2021104657 A JP 2021104657A JP 2023003531 A JP2023003531 A JP 2023003531A
- Authority
- JP
- Japan
- Prior art keywords
- program
- output
- synthesis
- code
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】プログラムの自動生成を効率化すること。【解決手段】プログラム生成装置は、初期状態として与えられる複数のプログラム部品の合成を累積的に繰り返すことで、複数のプログラムを生成する生成部と、前記複数のプログラムについて、同一のプログラムが合成された確率を算出する算出部と、前記確率を出力する出力部と、を有する。【選択図】図2
Description
本発明は、プログラム生成装置、プログラム生成方法及びプログラムに関する。
近年、社会全体のIT化が進む一方で、IT人材の不足が大きな問題となっている。経済産業省の試算によると、2025年には約36万人のIT人材が不足すると予測されている。特に専門的な知識を必要とする実装工程におけるIT人材の不足は喫緊の課題であり、自動でプログラミングを行う自動プログラミング技術の研究開発が求められている。
従来、自動プログラミング技術としては、ユーザがプログラムの入出力例を与え、それを満たすようにプログラムの部品を合成する技術が有る。
入出力例を満たすプログラムを探すための手法はいくつか存在するが、そのうちの1つがヒューリスティクスな手法である。例えば、非特許文献1では、入出力例を満たすプログラムを遺伝的アルゴリズムによって探索している。
富田 裕也 他、"遺伝的アルゴリズムを用いた自動プログラム修正手法を応用したプログラミングコンテストの回答の自動生成に向けて"、[online]、インターネット<URL:https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&page_id=13&active_action=repository_view_main_item_detail&item_id=203469&item_no=1&block_id=8>
しかしながら、ヒューリスティクスによるプログラム合成では、時折局所最適解に陥り、プログラムの進化が止まってしまうという欠点が存在する。局所最適解とは探索空間中の一部における最適解であり、局所最適解に陥るとその周辺を探索し続けてしまうため、抜け出すことは困難である。その結果、合成結果としてのプログラムの進化が止まってしまう事象が発生する場合がある。その結果、プログラムの自動生成が非効率になってします可能性が有る。
本発明は、上記の点に鑑みてなされたものであって、プログラムの自動生成を効率化することを目的とする。
そこで上記課題を解決するため、プログラム生成装置は、初期状態として与えられる複数のプログラム部品の合成を累積的に繰り返すことで、複数のプログラムを生成する生成部と、前記複数のプログラムについて、同一のプログラムが合成された確率を算出する算出部と、前記確率を出力する出力部と、を有する。
プログラムの自動生成を効率化することができる。
以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態におけるプログラム生成装置10のハードウェア構成例を示す図である。図1のプログラム生成装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、インタフェース装置105、表示装置106、及び入力装置107等を有する。
プログラム生成装置10での処理を実現するプログラムは、CD-ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってプログラム生成装置10に係る機能を実現する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。表示装置106はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置107はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
図2は、本発明の実施の形態におけるプログラム生成装置10の機能構成例を示す図である。図2において、プログラム生成装置10は、プログラム合成部11、合成プログラム実行部12、入出力結果判定部13及び合成状況出力部14を有する。これら各部は、プログラム生成装置10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。
以下、プログラム生成装置10が実行する処理手順について説明する。図3は、プログラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
ステップS100において、プログラム合成部11は、過去リストを空の状態に初期化する。過去リストとは、過去に合成されたソースコード(以下、「合成コード」という。)の一覧を記憶するための記憶領域(コンテナ)である。
続いて、プログラム合成部11は、例えば、補助記憶装置102に記憶されているプログラム部品リストの中の1以上のプログラム部品を、例えば、ランダムに組み合わせて合成することで、複数(N個)のプログラムのソースコード(以下、「合成コード」という。)を生成する。
図4は、プログラム部品リストの一例を示す図である。図4に示されるプログラム部品リストのデータ構造をBNF(Backus-Naur form)記法に基づく形式によって記すと以下の通りである。
<プログラム部品リスト>::=プログラム部品+
すなわち、プログラム部品リストは、1以上のプログラム部品(のソースコード)を含む。図4では、定数とメソッドとにプログラム部品が分類されている。ここで、1つの定数が1つのプログラム部品に相当し、1つのメソッドが1つのプログラム部品に相当する。すなわち、図4において破線で囲まれた単位が、1つのプログラム部品の単位に相当する。
<プログラム部品リスト>::=プログラム部品+
すなわち、プログラム部品リストは、1以上のプログラム部品(のソースコード)を含む。図4では、定数とメソッドとにプログラム部品が分類されている。ここで、1つの定数が1つのプログラム部品に相当し、1つのメソッドが1つのプログラム部品に相当する。すなわち、図4において破線で囲まれた単位が、1つのプログラム部品の単位に相当する。
ステップS101では、ランダムに複数のプログラム部品を選択し、当該複数のプログラム部品を合成することで1つの合成コードを生成するといった処理がN回繰り返される。その結果、N個の合成コードが生成される。図5に合成コードの一例を示す。
なお、プログラム部品の合成とは、複数のプログラム部品の計算が組み合わされることをいい、例えば、非特許文献1に記載された技術等、公知技術を用いて行うことができる。例えば、各プログラム部品を、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現し、いずれかのプログラム部品の木構造のノードを、他のプログラム部品の木構造によって置換することで、これらのプログラム部品を合成することができる。なお、合成コードは、プログラム部品と同様に、値を入力とし、入力された値に関する計算を実行し、値の計算結果を出力するといった定義を含む。
続いて、合成コードごとにステップS102~S104を含むループ処理L1が実行される。以下、ループ処理L1において処理対象とされている合成コードを「対象コード」という。
ステップS102において、合成プログラム実行部12は、対象コードをコンパイル及びリンク等することで、実行形式のプログラム(以下「合成プログラム」という。)を生成する。
続いて、合成プログラム実行部12は、当該合成プログラム(以下「対象合成プログラム」という。)に対し、予め用意されている入出力例セットに含まれる各入出力例を入力して対象合成プログラムを実行し、入出力例ごとに出力を得る(S103)。入出力例セットは、入出力に関して生成対象のプログラム(以下「対象プログラム」という。)が満たすべき条件を示す情報であり、例えば、予め設定されて補助記憶装置102に記憶されている。
図6は、入出力例セットの一例を示す図である。図6に示される入出力例セットのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=入力値+
<出力例>::=出力値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の入力値をいい、出力例とは1以上の出力値をいう。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=入力値+
<出力例>::=出力値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の入力値をいい、出力例とは1以上の出力値をいう。
例えば、入出力例セットに含まれる入出力例がM個である場合、合成プログラム実行部12は、ステップS103において、M個の入力値ごとに当該入力値を入力として対象合成プログラムを実行し、M個の出力値を得る。
続いて、合成プログラム実行部12は、過去において対象コードと同一の合成コードが合成された確率(以下、「存在率」という。)を算出する(S104)。存在率は、以下の式に基づいて算出される。
存在率=対象コードと同一の合成コードの数÷過去リスト中の合成コードの総数
すなわち、合成プログラム実行部12は、過去リストに含まれている各合成コードについて対象コードと同一か否かを判定する。合成プログラム実行部12は、対象コードと同一であると判定された合成コードの数を、過去リスト中の合成コードの総数で除することで、対象コードの存在率を算出する。合成プログラム実行部12は、算出した存在率を、対象コードと共に(対象コードに関連付けて)メモリ装置103又は補助記憶装置102に記憶しておく。
存在率=対象コードと同一の合成コードの数÷過去リスト中の合成コードの総数
すなわち、合成プログラム実行部12は、過去リストに含まれている各合成コードについて対象コードと同一か否かを判定する。合成プログラム実行部12は、対象コードと同一であると判定された合成コードの数を、過去リスト中の合成コードの総数で除することで、対象コードの存在率を算出する。合成プログラム実行部12は、算出した存在率を、対象コードと共に(対象コードに関連付けて)メモリ装置103又は補助記憶装置102に記憶しておく。
対象コードとの同一性は、テキストベースの比較によって判定される。すなわち、対象コードを構成する文字列群が、或る合成コードを構成する文字列群と完全に一致すれば両者は同一であると判定され、そうでなければ両者は異なると判定される。なお、過去リストが空の場合、対象コードの存在率は0とされる。
ループ処理L1が終了すると、入出力結果判定部13は、全ての出力値が、当該出力値に対応する入力値が属する入出力例の出力例に一致する合成プログラムの有無を判定する(S105)。すなわち、ループ処理L1において処理対象とされた合成プログラムの中で、ステップS103において得られた全ての出力値が期待通りであった(正しかった)合成プログラムの有無が判定される。
該当する合成プログラムが無い場合(S105でNo)、合成状況出力部14は、最後に実行されたステップS101において合成された複数の(N個の)合成コード(以下、「最新の合成コード群」という。)を過去リストへ追加する(S106)。続いて、合成状況出力部14は、ステップS101以降からこの時点までの間に(例えば、ループ処理L1の期間中に)、合成状況の出力指示を示す所定の操作がユーザによって行われたか否かを判定する(S107)。当該所定の操作は、例えば、ステップS100のタイミングにおいて、当該所定の操作を受け付けるためのポップアップ画面を合成状況出力部14が表示装置106に表示しておき、当該ポップアップ画面を介して入力されてもよい。又は、キーボードにおける所定のキーの押下によって入力されてもよい。
合成状況の出力指示が入力された場合(S107でYes)、合成状況出力部14は、合成状況を示す情報を出力する(S108)。合成状況を示す情報とは、最新の合成コード群のそれぞれの内容と、最新の合成コード群のそれぞれの存在率とである。ユーザは、合成状況を示す情報を参照して、合成過程をリセットするか否かを判断する。合成過程のリセットとは、今までの合成結果を破棄して、初期状態から合成を再実行することをいう。初期状態とは、プログラム部品のみが合成元として存在する状態をいう。
例えば、ユーザは、最新の合成コード群の内容が所望のソースコードとは全く異なる状態で局所最適解に陥っていると判断した場合、リセットをした方が良いと判断する。一方、最新の合成コード群の中に所望のプログラム(ソースコード)に近い合成コードが存在した場合、ユーザは、リセットせずに、累積的な合成を継続した方が良いと判断する。局所最適解に陥っているかどうかの1つの判断基準として、最新の合成コード群のそれぞれと同一の合成コードがこれまでの合成中にどの程度存在するかといった点が挙げられる。同様の合成コードが過去の合成過程においても多く存在した場合、局所最適解に陥っている可能性が高い。そこで、本実施の形態では、最新の合成コード群のそれぞれについて、過去の合成における存在率を表示してユーザが確認可能とされる。ユーザは、合成コードの内容だけでなく、存在率をも参考にして、局所最適解に陥っているか否かを判断する。
なお、合成状況出力部14は、合成状況を示す情報の出力とともに、合成過程のリセットの指示を受け付けるためのポップアップ画面を表示する。当該ポップアップ画面に対してリセットの指示が入力されると(S109でYes)、プログラム合成部11は、最新の合成コード群を破棄して(S110)、ステップS100以降を繰り返す。この場合、これまでの合成結果とは無関係に、初期状態としてのプログラム部品群から合成コードの生成が再開される。
一方、合成状況の出力指示が無い場合(S107でNo)、又はリセットの指示が無い場合(S109でNo)、プログラム合成部11は、最新の合成コード群の中から、次回の合成(S101)において雛型とする1つの合成コードを選択する(S111)。当該合成コードの選択は、例えば、最新の合成コード群に属する各合成コードについてのステップS103の結果に基づいて行われてもよい。具体的には、出力値が期待通りであった確率(合格率)が最も高い合成コードが雛型として選択されてもよい。
ステップS111に続いて、プログラム合成部11は、ステップS101以降を繰り返す。この場合のステップS101では、雛型の合成コードの一部を変更して、複数(N個)の合成コードが生成される。すなわち、これまでの合成結果が利用されて、累積的に合成が行われる。
合成コードの一部の変更には、例えば、遺伝的アルゴリズムが用いられてもよい。すなわち、雛型の合成コードに対してN回の遺伝的操作が行われて、N個の次世代の合成コードが生成されてもよい。ここで、Nは、遺伝的アルゴリズムの一世代における個体(ソースコード)の個数である。この際、遺伝的アルゴリズムの適用対象とされる合成コードは、例えば、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現され、木構造の部分木が遺伝的操作の対象とされる。
なお、突然変異において雛型の合成コードの一部に置き換わる候補として、例えば、プログラム部品リストに含まれるプログラム部品が用いられる。
その後、ステップS104の条件を満たす合成プログラムが1以上生成されると(S105でYes)、入出力結果判定部13は、当該合成コードを出力する(S112)。その結果、ユーザは、所望のプログラムを得ることができる。図6の入出力例セットを満たす合成コードとしては、例えば、図7に示すように合成コードが出力される。
上述したように、本実施の形態によれば、合成途中のソースコードについてこれまでの合成過程における存在率が可視化されるため、プログラムの進化が局所最適解に陥っているか否かについての判断基準をユーザに与えることができる。その結果、無駄な合成を減らし、所望のプログラムの自動生成を効率化することができる。
なお、本実施の形態において、プログラム合成部11は、生成部の一例である。合成プログラム実行部12は、算出部の一例である。合成状況出力部14は、出力部の一例である。
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
10 プログラム生成装置
11 プログラム合成部
12 合成プログラム実行部
13 入出力結果判定部
14 合成状況出力部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 表示装置
107 入力装置
B バス
11 プログラム合成部
12 合成プログラム実行部
13 入出力結果判定部
14 合成状況出力部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 表示装置
107 入力装置
B バス
Claims (5)
- 初期状態として与えられる複数のプログラム部品の合成を累積的に繰り返すことで、複数のプログラムを生成する生成部と、
前記複数のプログラムについて、同一のプログラムが合成された確率を算出する算出部と、
前記確率を出力する出力部と、
を有することを特徴とするプログラム生成装置。 - 前記確率の出力に応じてユーザによって所定の指示が入力されると、前記生成部は、前記複数のプログラム部品の合成を前記初期状態から再実行する、
ことを特徴とする請求項1記載のプログラム生成装置。 - 初期状態として与えられる複数のプログラム部品の合成を累積的に繰り返すことで、複数のプログラムを生成する生成手順と、
前記複数のプログラムについて、同一のプログラムが合成された確率を算出する算出部と、
前記確率を出力する出力手順と、
をコンピュータが実行することを特徴とするプログラム生成方法。 - 前記確率の出力に応じてユーザによって所定の指示が入力されると、前記複数のプログラム部品の合成を前記初期状態から再実行する再生成手順、
をコンピュータが実行ことを特徴とする請求項3記載のプログラム生成方法。 - 請求項3又は4記載のプログラム生成方法をコンピュータに実行させることを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021104657A JP2023003531A (ja) | 2021-06-24 | 2021-06-24 | プログラム生成装置、プログラム生成方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021104657A JP2023003531A (ja) | 2021-06-24 | 2021-06-24 | プログラム生成装置、プログラム生成方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023003531A true JP2023003531A (ja) | 2023-01-17 |
Family
ID=85100566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021104657A Pending JP2023003531A (ja) | 2021-06-24 | 2021-06-24 | プログラム生成装置、プログラム生成方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2023003531A (ja) |
-
2021
- 2021-06-24 JP JP2021104657A patent/JP2023003531A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tormos et al. | An efficient multi-pass heuristic for project scheduling with constrained resources | |
JP2010218152A (ja) | テストケース生成装置およびテストケース生成方法 | |
JP7355123B2 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP6663873B2 (ja) | プログラム自動生成システム及びプログラム自動生成方法 | |
US20230046961A1 (en) | Program generation apparatus, program generation method and program | |
Libralesso et al. | Iterative beam search algorithms for the permutation flowshop | |
WO2021161426A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP2009181446A (ja) | プログラム生成装置およびブロック線図生成装置 | |
JP2023003531A (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
Turlea et al. | A hybrid test generation approach based on extended finite state machines | |
Ramachandra et al. | Sequencing precedence-related jobs on two machines to minimize the weighted completion time | |
Planinić et al. | Towards interpretable dispatching rules: Application of expression simplification methods | |
Ding et al. | Enhanced enumeration techniques for syntax-guided synthesis of bit-vector manipulations | |
WO2021161427A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
WO2022239179A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
Bosman | A solution merging heuristic for the steiner problem in graphs using tree decompositions | |
Emeretlis et al. | A multi-stage hybrid approach for mapping applications on heterogeneous multi-core platforms | |
WO2022249255A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP2024017331A (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
Schmelter et al. | Toward learning realizable scenario-based, formal requirements specifications | |
Laleh et al. | Predictive Failure Recovery in Constraint-aware Web Service Composition. | |
WO2021161428A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
Emeretlis et al. | A hybrid ILP-CP model for mapping directed acyclic task graphs to multicore architectures | |
Ali et al. | Adopted rescheduling strategy for solving the dynamic job shop using GA based local search | |
Zapotecas Martínez et al. | A multi-objective meta-model assisted memetic algorithm with non gradient-based local search |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7426 Effective date: 20210628 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20210628 |