WO2021161427A1 - プログラム生成装置、プログラム生成方法及びプログラム - Google Patents
プログラム生成装置、プログラム生成方法及びプログラム Download PDFInfo
- Publication number
- WO2021161427A1 WO2021161427A1 PCT/JP2020/005386 JP2020005386W WO2021161427A1 WO 2021161427 A1 WO2021161427 A1 WO 2021161427A1 JP 2020005386 W JP2020005386 W JP 2020005386W WO 2021161427 A1 WO2021161427 A1 WO 2021161427A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- program
- input
- output
- constraint
- values
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
Definitions
- the present invention relates to a program generator, a program generation method, and a program.
- Non-Patent Document 1 the relationship between an input / output example and a component of a program is learned, a component of a program having a high probability of being used for a given input / output example is estimated, and the component is programmed.
- a technique for realizing efficient program synthesis by using it for the synthesis of is disclosed.
- Non-Patent Document 2 discloses a technique for automatically synthesizing an Excel (registered trademark) function satisfying an input / output example of Excel (registered trademark).
- the input / output example is only an example of the specifications that the program satisfies, and has the drawback that the amount of information is small. Therefore, a program that is overfitted to the input / output example may be generated, and there is a problem that the program desired by the user is not generated.
- the present invention has been made in view of the above points, and an object of the present invention is to increase the possibility that a desired program is automatically generated.
- the program generator has a generator that generates a first program that satisfies one or more sets of input values and output values, and an input value that satisfies the restrictions on input / output of the first program. Is randomly generated, and the output value obtained by inputting the input value into the first program has a determination unit for determining whether or not the above constraint is satisfied.
- FIG. 10 It is a figure which shows the hardware configuration example of the program generation apparatus 10 in embodiment of this invention. It is a figure which shows the functional structure example of the program generation apparatus 10 in embodiment of this invention. It is a flowchart for demonstrating an example of the processing procedure executed by the program generation apparatus 10. It is a figure which shows an example of the program parts list. It is a figure which shows an example of an input / output example set. It is a figure which shows an example of the synthetic code generated by the change process of the synthetic code. It is a figure which shows an example of a constraint.
- FIG. 1 is a diagram showing a hardware configuration example of the program generation device 10 according to the embodiment of the present invention.
- the program generation device 10 of FIG. 1 includes a drive device 100, an auxiliary storage device 102, a memory device 103, a CPU 104, an interface device 105, a display device 106, an input device 107, and the like, which are connected to each other by a bus B, respectively.
- the program that realizes the processing in the program generation device 10 is provided by a recording medium 101 such as a CD-ROM.
- a recording medium 101 such as a CD-ROM.
- the program is installed in the auxiliary storage device 102 from the recording medium 101 via the drive device 100.
- the program does not necessarily have to be installed from the recording medium 101, and may be downloaded from another computer via the network.
- the auxiliary storage device 102 stores the installed program and also stores necessary files, data, and the like.
- the memory device 103 reads and stores the program from the auxiliary storage device 102 when the program is instructed to start.
- the CPU 104 realizes the function related to the program generation device 10 according to the program stored in the memory device 103.
- the interface device 105 is used as an interface for connecting to a network.
- the display device 106 displays a programmatic GUI (Graphical User Interface) or the like.
- the input device 107 is composed of a keyboard, a mouse, and the like, and is used for inputting various operation instructions.
- FIG. 2 is a diagram showing a functional configuration example of the program generation device 10 according to the embodiment of the present invention.
- the program generation device 10 includes a program synthesis unit 11, a synthesis program execution unit 12, an input / output result determination unit 13, and a constraint confirmation unit 14. Each of these parts is realized by a process of causing the CPU 104 to execute one or more programs installed in the program generation device 10.
- FIG. 3 is a flowchart for explaining an example of a processing procedure executed by the program generation device 10.
- step S101 the program synthesizing unit 11 synthesizes, for example, one or more program parts in the program parts list stored in the auxiliary storage device 102 by, for example, randomly combining them (N pieces). Generates the source code of the program (hereinafter referred to as "synthetic code").
- FIG. 4 is a diagram showing an example of a program component list.
- the data structure of the program parts list shown in FIG. 4 is described below in a format based on the BNF (Backus-Naur form) notation.
- ⁇ Program parts list> :: Program parts + That is, the program parts list includes (source code) one or more program parts.
- program components are classified into constants and methods.
- one constant corresponds to one program component
- one method corresponds to one program component. That is, the unit surrounded by the broken line in FIG. 4 corresponds to the unit of one program component.
- step S101 a process of randomly selecting a plurality of program parts and synthesizing the plurality of program parts to generate one synthetic code is repeated N times.
- N synthetic codes are generated.
- the synthesis of program parts means that the calculations of a plurality of program parts are combined, and can be performed by using a known technique such as the technique described in Non-Patent Document 1.
- each program part is represented by a tree structure in which the operator is the parent node and the variable, constant, or operator that is the operation target by the operator is the child node, and the node in the tree structure of any program part. Can be synthesized by substituting with the tree structure of other program parts.
- the synthetic code includes a definition in which a value is input, a calculation related to the input value is executed, and a calculation result of the value is output, as in the case of a program component.
- the loop process L1 including steps S102 and S103 is executed for each composite code.
- the synthetic code to be processed in the loop processing L1 is referred to as a “target code”.
- step S102 the synthesis program execution unit 12 generates an execution-type program (hereinafter referred to as "synthesis program") by compiling and linking the target code.
- synthesis program an execution-type program
- the synthesis program execution unit 12 inputs each input / output example included in the input / output example set prepared in advance to the synthesis program (hereinafter referred to as “target synthesis program”) to input the target synthesis program. Execute and obtain an output for each input / output example (S103).
- the input / output example set is information indicating conditions to be satisfied by the program to be generated (hereinafter referred to as “target program”) regarding input / output, and is stored in the auxiliary storage device 102, for example, by being preset.
- FIG. 5 is a diagram showing an example of an input / output example set.
- the data structure of the input / output example set shown in FIG. 5 is described below in a format based on the BNF notation.
- One input / output example is a set of an input example and an output example.
- An input example means an input value of 1 or more
- an output example means an output value of 1 or more.
- the synthesis program execution unit 12 executes the target synthesis program with the input values as inputs for each of the M input values in step S103. Obtain M output values.
- the input / output result determination unit 13 determines whether or not there is a synthesis program in which all the output values match the output example of the input / output example to which the input value corresponding to the output value belongs (S104). .. That is, among the synthesis programs targeted for processing in the loop processing L1, it is determined whether or not there is a synthesis program in which all the output values obtained in step S103 are as expected (correct).
- the program synthesis unit 11 executes the synthesis code change process (S105).
- the synthetic code change process a part of the original synthetic code is changed to generate a plurality (N) synthetic codes.
- N is the number of individuals (source code) in one generation of the genetic algorithm.
- each synthetic code to which the genetic algorithm is applied is represented by, for example, a tree structure in which the operator is the parent node and the variable, constant, or operator that is the operation target by the operator is the child node. And the subtrees of the tree structure are subject to genetic manipulation.
- the pass rate of the output value (the rate at which the output value was correct) may be used for the evaluation for selection of the target individual in N times of genetic manipulation.
- a program component included in the program component list is used as a candidate to replace a part of the synthetic code of the previous generation in mutation.
- FIG. 6 is a diagram showing an example of the synthetic code generated by the change process of the synthetic code. As shown in FIG. 6, N synthetic codes are generated by one synthetic process.
- An existing library such as DEAP (https://deap.readthedocs.io/en/master/) may be used for the synthesis processing of the program using the genetic algorithm.
- loop processing L1 and subsequent steps are executed for N synthetic codes. Therefore, in this case, steps S102 and S103 are executed N times.
- step S104 if there is one or more synthesis programs (hereinafter referred to as "input / output pass programs”) that satisfy the conditions of step S104 (Yes in S104), the loop process L1 ends and the process proceeds to step S106. That is, in the loop processing L1, a part of the synthetic code is repeatedly changed (the synthetic code is cumulatively changed part by part) until a program satisfying the input / output example generated in advance is generated, so that the input / output is input / output. An I / O pass program that satisfies the example set is automatically generated. For example, when the three input / output examples shown in FIG. 5 are all the input / output examples constituting the input / output example set, the first and second synthetic codes from the left in FIG. 6 correspond to the input / output passing program. ..
- the constraint confirmation unit 14 has one or more of the input / output pass programs within the range of the input constraint which is one of the components of the input / output constraint (constraint condition) of the target program input by the user. Randomly generate the input value of. That is, one or more input values satisfying the input constraint are generated. It is preferable that a large number of input values are generated in order to improve the accuracy of determining that the input / output pass program satisfies the constraint.
- FIG. 7 is a diagram showing an example of the constraint.
- the data structure of the constraints shown in FIG. 7 is described below in a format based on the BNF notation.
- ⁇ Constraint> :: Input constraint
- Output constraint That is, the constraint is a set of one input constraint and one output constraint.
- one input constraint or output constraint may be composed of a plurality of conditional expressions.
- step S106 a plurality of input values larger than 0 are randomly generated.
- the constraint confirmation unit 14 executes the loop process L2 including step S107 for each input value generated in step S106.
- target input value the input value to be processed
- step S107 the constraint confirmation unit 14 inputs the target input value to the input / output pass program, executes the input / output pass program, and obtains the output value.
- the output value for the same input value is acquired for each of the plurality of input / output pass programs.
- the acquired output value is recorded in the memory device 103 in association with each input / output pass program.
- step S107 is executed for K possible input values.
- the constraint confirmation unit 14 determines whether or not there is an input / output pass program in which all output values (all K output values) satisfy the output constraint (all output values of any input / output pass program). Whether or not satisfies the output constraint) is determined (S108). If there is no corresponding input / output pass program (No in S108), step S105 and subsequent steps are repeated. That is, a synthesis program different from the previous one is generated again, and the loop processing L1 and subsequent steps are executed for the synthesis program.
- the constraint confirmation unit 14 outputs the source code (synthetic code) of the input / output pass program (S109). That is, it is determined that the synthesis program is the target program. If there are a plurality of applicable input / output pass programs, the source code of each input / output pass program may be output.
- the output value of the input / output pass program based on the first synthetic code from the left in FIG. 6 is ⁇ 1,. 0,0 ⁇ , and some output values do not satisfy the output constraint.
- the output value of the input / output passing program based on the second synthetic code from the left is ⁇ 1,4,9604 ⁇ , and all the output values satisfy the output constraint. Therefore, in this case, it is determined that the input / output passing program based on the second synthetic code from the left in FIG. 6 is the target program.
- a program that satisfies not only the input / output example but also the restrictions on input and output is automatically generated. Therefore, it is possible to increase the possibility that the desired program is automatically generated. Specifically, not only is the validity confirmed by using input / output examples for the composite program obtained by synthesizing the program components, but also the input values are randomly set within the given input constraints. It is automatically generated and input to the synthesis program, and it is determined whether or not all the synthesis programs satisfy the output constraints, so that an inappropriate program can be played.
- a program for obtaining the area of a square is a desired program. It is assumed that the user gives an input value 2 and an output value 4 as an input / output example.
- the program x * x should be output, but since the program 6-x also satisfies the input / output example, it can be output as a program that satisfies the input / output example. In the case of this example, both the input and the output must be positive (there is no negative length or negative area). Therefore, the user inputs a constraint related to input / output such as ⁇ input x> 0, output y> 0 ⁇ , and the validity of the synthesis program is determined using not only the input / output example but also the constraint.
- the program synthesis unit 11 is an example of the generation unit.
- the constraint confirmation unit 14 is an example of a determination unit.
- Program generation device 11 Program synthesis unit 12 Synthesis program execution unit 13 Input / output result determination unit 14 Constraint confirmation unit 100 Drive device 101 Recording medium 102 Auxiliary storage device 103 Memory device 104 CPU 105 Interface device 106 Display device 107 Input device B Bus
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Biology (AREA)
- Genetics & Genomics (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
プログラム生成装置は、1以上の入力値及び出力値の組を満たす第1のプログラムを生成する生成部と、前記第1のプログラムの入出力に関する制約を満たす入力値をランダムに生成し、当該入力値を前記第1のプログラムに入力することで得られる出力値が、前記制約を満たすか否かを判定する判定部と、を有することで、所望のプログラムが自動生成される可能性を高める。
Description
本発明は、プログラム生成装置、プログラム生成方法及びプログラムに関する。
近年、社会全体のIT化が進む一方で、IT人材の不足が大きな問題となっている。経済産業省の試算によると、2025年には約36万人のIT人材が不足すると予測されている。特に専門的な知識を必要とする実装工程におけるIT人材の不足は喫緊の課題であり、自動でプログラミングを行う自動プログラミング技術の研究開発が求められている。
従来、自動プログラミング技術としては、ユーザがプログラムの入出力例を与え、それを満たすようにプログラムの部品を合成する技術が有る。
例えば、非特許文献1には、入出力例とプログラムの部品の関係性を学習し、与えられた入出力例に対して使用される確率の高いプログラムの部品を推定して、当該部品をプログラムの合成に用いることで、効率的なプログラム合成を実現する技術が開示されている。
また、非特許文献2には、Excel(登録商標)の入出力例からそれを満たすExcel(登録商標)関数を自動合成する技術が開示されている。
Matej Balog, Alexander L. Gaunt, Marc Brockschmidt, Sebastian Nowozin, Daniel Tarlow、 " DeepCoder: Learning to Write Programs" Proceedings of ICLR'17、[online]、インターネット<URL:https://www.microsoft.com/en-us/research/publication/deepcoder-learning-write-programs/>
Sumit Gulwani、"Automating String Processing in Spreadsheets Using Input-Output Examples" POPL '11 Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages Pages 317-330、[online]、インターネット<URL:https://dl.acm.org/citation.cfm?id=1926423>
しかしながら、入出力例は、プログラムが満たす仕様の一例にすぎず、情報量が少ないといった欠点がある。そのため入出力例にオーバーフィッティングしたプログラムが生成されてしまうことがあり、ユーザの所望するプログラムが生成されないという課題が存在する。
本発明は、上記の点に鑑みてなされたものであって、所望のプログラムが自動生成される可能性を高めることを目的とする。
そこで上記課題を解決するため、プログラム生成装置は、1以上の入力値及び出力値の組を満たす第1のプログラムを生成する生成部と、前記第1のプログラムの入出力に関する制約を満たす入力値をランダムに生成し、当該入力値を前記第1のプログラムに入力することで得られる出力値が、前記制約を満たすか否かを判定する判定部と、を有する。
所望のプログラムが自動生成される可能性を高めることができる。
以下、図面に基づいて本発明の実施の形態を説明する。図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が実行する処理手順の一例を説明するためのフローチャートである。
ステップS101において、プログラム合成部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個の合成コードが生成される。なお、プログラム部品の合成とは、複数のプログラム部品の計算が組み合わされることをいい、例えば、非特許文献1に記載された技術等、公知技術を用いて行うことができる。例えば、各プログラム部品を、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現し、いずれかのプログラム部品の木構造のノードを、他のプログラム部品の木構造によって置換することで、これらのプログラム部品を合成することができる。なお、合成コードは、プログラム部品と同様に、値を入力とし、入力された値に関する計算を実行し、値の計算結果を出力するといった定義を含む。
続いて、合成コードごとにステップS102及びS103を含むループ処理L1が実行される。以下、ループ処理L1において処理対象とされている合成コードを「対象コード」という。
ステップS102において、合成プログラム実行部12は、対象コードをコンパイル及びリンク等することで、実行形式のプログラム(以下「合成プログラム」という。)を生成する。
続いて、合成プログラム実行部12は、当該合成プログラム(以下「対象合成プログラム」という。)に対し、予め用意されている入出力例セットに含まれる各入出力例を入力して対象合成プログラムを実行し、入出力例ごとに出力を得る(S103)。入出力例セットは、入出力に関して生成対象のプログラム(以下「対象プログラム」という。)が満たすべき条件を示す情報であり、例えば、予め設定されて補助記憶装置102に記憶されている。
図5は、入出力例セットの一例を示す図である。図5に示される入出力例セットのデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=入力値+
<出力例>::=出力値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の入力値をいい、出力例とは1以上の出力値をいう。
<入出力例セット>::=<入出力例>+
<入出力例>::=<入力例><出力例>
<入力例>::=入力値+
<出力例>::=出力値+
すなわち、入出力例セットは1以上の入出力例を含む。1つの入出力例は入力例及び出力例の組である。入力例とは1以上の入力値をいい、出力例とは1以上の出力値をいう。
例えば、入出力例セットに含まれる入出力例がM個である場合、合成プログラム実行部12は、ステップS103において、M個の入力値ごとに当該入力値を入力として対象合成プログラムを実行し、M個の出力値を得る。
ループ処理L1が終了すると、入出力結果判定部13は、全ての出力値が、当該出力値に対応する入力値が属する入出力例の出力例に一致する合成プログラムの有無を判定する(S104)。すなわち、ループ処理L1において処理対象とされた合成プログラムの中で、ステップS103において得られた全ての出力値が期待通りであった(正しかった)合成プログラムの有無が判定される。
該当する合成プログラムが無い場合(S104でNo)、プログラム合成部11は、合成コードの変更処理を実行する(S105)。合成コードの変更処理では、元の合成コードの一部を変更して、複数(N個)の合成コードが生成される。合成コードの一部の変更には、例えば、遺伝的アルゴリズムが用いられてもよい。すなわち、前世代の合成コードに対してN回の遺伝的操作が行われて、N個の次世代の合成コードが生成されてもよい。ここで、Nは、遺伝的アルゴリズムの一世代における個体(ソースコード)の個数である。この際、遺伝的アルゴリズムの適用対象とされる各合成コードは、例えば、演算子を親ノードとし、当該演算子による演算対象である変数、定数、又は演算子を子ノードとする木構造によって表現され、木構造の部分木が遺伝的操作の対象とされる。N回の遺伝的操作において対象とされる個体の選択のための評価には、出力値の合格率(出力値が正解だった割合)が用いられてもよい。
また、突然変異において前世代の合成コードの一部に置き換わる候補として、例えば、プログラム部品リストに含まれるプログラム部品が用いられる。
図6は、合成コードの変更処理によって生成される合成コードの一例を示す図である。図6に示されるように、1回の合成処理によってN個の合成コードが生成される。
なお、遺伝的アルゴリズムを用いたプログラムの合成処理には、DEAP(https://deap.readthedocs.io/en/master/)等、既存のライブラリを用いられてもよい。
続いて、N個の合成コードについてループ処理L1以降が実行される。したがって、この場合、ステップS102及びS103はN回実行される。
一方、ステップS104の条件を満たす合成プログラム(以下、「入出力合格プログラム」という。)が1以上有る場合(S104でYes)、ループ処理L1が終了し、ステップS106へ進む。すなわち、ループ処理L1では、予め生成された入出力例を満たすプログラム生成されるまで合成コードの一部の変更が繰り返される(合成コードが一部ずつ累積的に変更される)ことで、入出力例セットを満たすような入出力合格プログラムが自動生成される。例えば、図5に示される3つの入出力例が入出力例セットを構成する全ての入出力例である場合、図6において左から1番目及び2番目の合成コードが入出力合格プログラムに該当する。
ステップS106において、制約確認部14は、ユーザによって入力される、対象プログラムの入出力に関する制約(制約条件)の構成要素の1つである入力制約の範囲内で、入出力合格プログラムに対する1又は複数の入力値をランダムに生成する。すなわち、入力制約を満たす1又は複数の入力値が生成される。なお、入出力合格プログラムが制約を満たすことの判定精度を上げるために、生成される入力値は多い方が好ましい。
図7は、制約の一例を示す図である。図7に示される制約のデータ構造をBNF記法に基づく形式によって記すと以下の通りである。
<制約>::=入力制約 出力制約
すなわち、制約は、1つの入力制約と1つの出力制約との組である。但し、1つの入力制約又は出力制約は、複数の条件式によって構成されてもよい。
<制約>::=入力制約 出力制約
すなわち、制約は、1つの入力制約と1つの出力制約との組である。但し、1つの入力制約又は出力制約は、複数の条件式によって構成されてもよい。
入力制約が図7の通りである場合、ステップS106では、0より大きい複数の入力値がランダムに生成される。
続いて、制約確認部14は、ステップS106において生成された入力値ごとにステップS107を含むループ処理L2を実行する。以下、処理対象とされている入力値を「対象入力値」という。
ステップS107において、制約確認部14は、入出力合格プログラムに対して対象入力値を入力して入出力合格プログラムを実行して出力値を得る。複数の入出力合格プログラムが有る場合、複数の入出力合格プログラムのそれぞれについて同じ入力値に対する出力値が取得される。取得された出力値は、各入出力合格プログラムに関連付けられてメモリ装置103に記録される。
ステップS106において生成された入力値がK個である場合、K通りの入力値についてステップS107が実行される。
ループ処理L2が終了すると、制約確認部14は、全ての出力値(K個の出力値の全て)が、出力制約を満たす入出力合格プログラムの有無(いずれの入出力合格プログラムの全ての出力値が出力制約を満たすか否か)を判定する(S108)。該当する入出力合格プログラムが無い場合(S108でNo)ステップS105以降が繰り返される。すなわち、前回と異なる合成プログラムが改めて生成され、当該合成プログラムについてループ処理L1以降が実行される。
該当する入出力合格プログラムが有る場合(S108でYes)、制約確認部14は、当該入出力合格プログラムのソースコード(合成コード)を出力する(S109)。すなわち、当該合成プログラムが、対象プログラムであると判定される。なお、該当する入出力合格プログラムが複数有る場合、それぞれの入出力合格プログラムのソースコードが出力されればよい。
例えば、ステップS107において生成された入力値が、{1,2,98}の3つである場合、図6において左から1番目の合成コードに基づく入出力合格プログラムの出力値は、{1,0,0}であり、一部の出力値が出力制約を満たさない。一方、図6において左から2番目の合成コードに基づく入出力合格プログラムの出力値は、{1,4,9604}であり、全ての出力値が出力制約を満たす。したがって、この場合、図6において左から2番目の合成コードに基づく入出力合格プログラムが対象プログラムであると判定される。
上述したように、本実施の形態によれば、入出力例だけでなく入力と出力に関する制約をも満たすプログラムが自動生成される。したがって、所望のプログラムが自動生成される可能性を高めることができる。具体的には、プログラム部品を合成して得られた合成プログラムに対して入出力例が用いられて妥当性が確認されるだけでなく、与えられた入力制約の範囲内でランダムに入力値が自動生成されて合成プログラムに入力され、合成プログラムがすべて出力の制約を満たすかどうかが判定されることで、不適切なプログラムを弾くことができる。
例えば、正方形の面積を求めるプログラムが所望のプログラムであるとする。ユーザが入出力例として、入力値2、出力値4を与えたとする。この場合、x*xというプログラムが出力されるべきだが、6-xというプログラムでも入出力例を満たすため、入出力例を満たすプログラムとして出力されうる。本例の場合は入力も出力も必ず正である必要がある(負の長さも負の面積も存在しない)。そこで、{入力x>0、出力y>0}のように入出力に関する制約をユーザが入力し、入出力例だけでなくその制約も用いられて合成プログラムの妥当性が判定される。具体的には、x>0の範囲内で様々な値がランダムに生成され、その値を用いて合成プログラムが実行され、出力値yが常にy>0となっているかどうかが判定される。6-xというプログラムは、例えば、x=8のときy=-2となり、当該制約を満たさないため、不適切と判定される。
なお、本実施の形態において、プログラム合成部11は、生成部の一例である。制約確認部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以上の入力値及び出力値の組を満たす第1のプログラムを生成する生成部と、
前記第1のプログラムの入出力に関する制約を満たす入力値をランダムに生成し、当該入力値を前記第1のプログラムに入力することで得られる出力値が、前記制約を満たすか否かを判定する判定部と、
を有することを特徴とするプログラム生成装置。 - 前記生成部は、前記判定部によって前記制約が満たされないと判定された場合に、前記1以上の入力値及び出力値の組を満たし、前記第1のプログラムと異なる第2のプログラムを生成し、
前記判定部は、前記第2のプログラムについて、前記制約を満たすか否かを判定する、
ことを特徴とする請求項1記載のプログラム生成装置。 - 1以上の入力値及び出力値の組を満たす第1のプログラムを生成する生成手順と、
前記第1のプログラムの入出力に関する制約を満たす入力値をランダムに生成し、当該入力値を前記第1のプログラムに入力することで得られる出力値が、前記制約を満たすか否かを判定する判定手順と、
をコンピュータが実行することを特徴とするプログラム生成方法。 - 前記生成手順は、前記判定手順によって前記制約が満たされないと判定された場合に、前記1以上の入力値及び出力値の組を満たし、前記第1のプログラムと異なる第2のプログラムを生成し、
前記判定手順は、前記第2のプログラムについて、前記制約を満たすか否かを判定する、
ことを特徴とする請求項3記載のプログラム生成方法。 - 請求項3又は4記載のプログラム生成方法をコンピュータに実行させることを特徴とするプログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/798,853 US20230086862A1 (en) | 2020-02-12 | 2020-02-12 | Program generation apparatus, program generation method and program |
JP2021577769A JP7279822B2 (ja) | 2020-02-12 | 2020-02-12 | プログラム生成装置、プログラム生成方法及びプログラム |
PCT/JP2020/005386 WO2021161427A1 (ja) | 2020-02-12 | 2020-02-12 | プログラム生成装置、プログラム生成方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2020/005386 WO2021161427A1 (ja) | 2020-02-12 | 2020-02-12 | プログラム生成装置、プログラム生成方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2021161427A1 true WO2021161427A1 (ja) | 2021-08-19 |
Family
ID=77292185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2020/005386 WO2021161427A1 (ja) | 2020-02-12 | 2020-02-12 | プログラム生成装置、プログラム生成方法及びプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230086862A1 (ja) |
JP (1) | JP7279822B2 (ja) |
WO (1) | WO2021161427A1 (ja) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08234975A (ja) * | 1995-02-28 | 1996-09-13 | Fujitsu Ltd | プログラム生成装置および方法 |
US8972930B2 (en) * | 2010-06-04 | 2015-03-03 | Microsoft Corporation | Generating text manipulation programs using input-output examples |
US10095484B2 (en) * | 2015-12-15 | 2018-10-09 | International Business Machines Corporation | Automatic program synthesis using monadic second-order logic |
US10831451B2 (en) * | 2017-12-01 | 2020-11-10 | Microsoft Technology Licensing, Llc | Synthesized programming-by-example programs |
WO2020061586A1 (en) * | 2018-09-22 | 2020-03-26 | Manhattan Engineering Incorporated | Code completion |
-
2020
- 2020-02-12 WO PCT/JP2020/005386 patent/WO2021161427A1/ja active Application Filing
- 2020-02-12 JP JP2021577769A patent/JP7279822B2/ja active Active
- 2020-02-12 US US17/798,853 patent/US20230086862A1/en active Pending
Non-Patent Citations (2)
Title |
---|
ARMERIA: "Introduction to random input data generation when WA occurs in competitive programming", HATENA BLOG, JP, pages 1 - 7, XP009530431, Retrieved from the Internet <URL:https://betrue12.hateblo.jp/entry/2019/09/07/171628> [retrieved on 20200814] * |
JUNNOSUKE MATSUMOTO; YOSHIKI HIGO; KENTO SHIMONAKA; SHINJI KUSUMOTO: "Automatic programming by reusing/working existing methods", PROCEEDINGS OF 2018 IPSJ/SIGSE SOFTWARE ENGINEERING SYMPOSIUM; SEPTEMBER 5 - 7, 2018, 29 August 2018 (2018-08-29) - 7 September 2018 (2018-09-07), JP, pages 54 - 63, XP009530449 * |
Also Published As
Publication number | Publication date |
---|---|
JPWO2021161427A1 (ja) | 2021-08-19 |
US20230086862A1 (en) | 2023-03-23 |
JP7279822B2 (ja) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8296721B2 (en) | Template-based software development | |
JP7351352B2 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP2011060277A (ja) | 統合環境生成器 | |
Darulova et al. | Synthesis of fixed-point programs | |
JP5516596B2 (ja) | 高レベル合成での設計空間探索の方法及び装置 | |
WO2021161426A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP7355123B2 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
CN111652453A (zh) | 用于零件设计、仿真和制造的智能工作流程顾问 | |
JPWO2008062768A1 (ja) | 命令オペコード生成システム | |
WO2021161427A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
Paler | Surfbraid: A concept tool for preparing and resource estimating quantum circuits protected by the surface code | |
JP7468209B2 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP2011065576A (ja) | テストケース生成装置およびその方法 | |
WO2021161428A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP5275087B2 (ja) | プログラム生成装置およびブロック線図生成装置 | |
WO2022249255A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
CN115210657A (zh) | 使用优化参数集制造或控制技术系统 | |
WO2022230190A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
CN111221248A (zh) | 优化装置及优化装置的控制方法 | |
JP2023003531A (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
WO2011090032A1 (ja) | 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置 | |
WO2022239179A1 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP2019139268A (ja) | プログラム解析方法、プログラム解析装置およびプログラム解析プログラム | |
US20240310794A1 (en) | Method and configuration system for configuring a machine controller | |
JP2009205239A (ja) | ソフトウェア検証システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 20918600 Country of ref document: EP Kind code of ref document: A1 |
|
ENP | Entry into the national phase |
Ref document number: 2021577769 Country of ref document: JP Kind code of ref document: A |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 20918600 Country of ref document: EP Kind code of ref document: A1 |