JP2018136755A - プログラム自動生成システム及びプログラム自動生成方法 - Google Patents

プログラム自動生成システム及びプログラム自動生成方法 Download PDF

Info

Publication number
JP2018136755A
JP2018136755A JP2017030940A JP2017030940A JP2018136755A JP 2018136755 A JP2018136755 A JP 2018136755A JP 2017030940 A JP2017030940 A JP 2017030940A JP 2017030940 A JP2017030940 A JP 2017030940A JP 2018136755 A JP2018136755 A JP 2018136755A
Authority
JP
Japan
Prior art keywords
program
node
unit
data
generated
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.)
Granted
Application number
JP2017030940A
Other languages
English (en)
Other versions
JP6663873B2 (ja
Inventor
篤志 宮本
Atsushi Miyamoto
篤志 宮本
忠幸 松村
Tadayuki Matsumura
忠幸 松村
教夫 大久保
Michio Okubo
教夫 大久保
竜治 嶺
Ryuji Mine
竜治 嶺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2017030940A priority Critical patent/JP6663873B2/ja
Priority to US15/898,731 priority patent/US10466972B2/en
Publication of JP2018136755A publication Critical patent/JP2018136755A/ja
Application granted granted Critical
Publication of JP6663873B2 publication Critical patent/JP6663873B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/12Computing arrangements based on biological models using genetic models
    • G06N3/126Evolutionary algorithms, e.g. genetic algorithms or genetic programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • General Physics & Mathematics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Physiology (AREA)
  • Genetics & Genomics (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】処理の組み合せの爆発を抑制してプログラムを自動的に生成する。【解決手段】プログラム生成装置100は、プログラム記憶部200に記憶された複数の第2のプログラムを分析してプログラムモデルを生成するプログラム分析部104と、プログラム分析部104が生成したプログラムモデルと入力部210から入力された設計要件に基づいて、進化計算のための基本ノードと制約条件を生成する基本ノード/制約条件生成部106と、基本ノード/制約条件生成部106が生成した基本ノード及び制約条件と、入力部210から入力された入力データ及び前記目標データに基づいて進化計算により第1のプログラムを生成する最適化部107とを有する。【選択図】図1

Description

本発明は、プログラム自動生成システム及びプログラム自動生成方法に関する。
コンピュータプログラム作成は、高度な専門スキルが必要な作業の一つである。特に、大規模かつ複雑なプログラムを作成する場合や、記述すべき処理内容が難しい問題に対しては、その作成コストは非常に高くなる。このような設計を自動的に行う試みとして、例えば、遺伝的プログラミングがある。遺伝的プログラミングは、プログラムを構文木とみなして構造的に進化計算を行う手法である。
遺伝的プログラミングによる進化計算に関連する技術として、例えば、特許文献1がある。特許文献1は、入力データ及び目標データを問題として与え、この入力データ及び目標データに基づいてプログラムの処理フローを修正する処理フロー生成装置を開示している。この処理フロー生成装置では、処理の組み合わせ構造とパラメータを同時に進化計算する。
特開2015−230702号公報
しかしながら、特許文献1では、処理構造の基本単位である基本ノードや設定するパラメータの項目については、事前にユーザが設計しておかなければならない。
遺伝的プログラミングの交配処理及び突然変異処理は、ランダム性のある変換である。このため、対象が複雑な問題の場合には、適切に基本ノードやパラメータを設定しないと、処理の組み合わせ数が膨大となり解が収束しない。
特許文献1では、基本ノードやパラメータの設定を事前にユーザが設計しているので、複雑な問題に対して、適切に基本ノードやパラメータの設定が行われない可能性がある。この結果、処理の組み合せの爆発を起こしてしまう恐れがある。
本発明の目的は、処理の組み合せの爆発を抑制してプログラムを自動的に生成することにある。
本発明の一態様に係るプログラム自動生成システムは、生成すべき第1のプログラムに対する入力データ、目標データ及び設計要件の入力を受け付ける入力部と、複数の既存の第2のプログラムを記憶するプログラム記憶部と、前記第1のプログラムを生成するプログラム生成装置と、前記プログラム生成装置が生成した前記第1のプログラムを出力する出力部、を備え、前記プログラム生成装置は、前記プログラム記憶部に記憶された前記複数の第2のプログラムを分析してプログラムモデルを生成するプログラム分析部と、前記プログラム分析部が生成した前記プログラムモデルと前記入力部から入力された前記設計要件に基づいて、進化計算のための基本ノードと制約条件を生成する基本ノード/制約条件生成部と、前記基本ノード/制約条件生成部が生成した前記基本ノード及び前記制約条件と、前記入力部から入力された前記入力データ及び前記目標データに基づいて、前記進化計算により前記第1のプログラムを生成する最適化部と、を有することを特徴とする。
本発明の一態様に係るプログラム自動生成方法は、生成すべき第1のプログラムに対する入力データ、目標データ及び設計要件の入力を受け付け、複数の既存の第2のプログラムを記憶し、前記複数の第2のプログラムを分析してプログラムモデルを生成し、前記生成した前記プログラムモデルと前記入力された前記設計要件に基づいて、進化計算のための基本ノードと制約条件を生成し、前記生成した基本ノード及び前記制約条件と、前記入力された前記入力データ及び前記目標データに基づいて、前記進化計算により前記第1のプログラムを生成し、前記生成した前記第1のプログラムを出力することを特徴とする。
本発明によれば、組み合せの爆発を抑制してプログラムを自動的に生成することができる。
実施例1のプログラム自動生成システムの構成例を示すブロック図である。 実施例1のプログラム自動生成システムが適用されるシステム構成の一例を示すブロック図である。 実施例1のプログラム自動生成システムが実行する処理の概要を説明するフローチャートである。 実施例1のプログラム自動生成システムがプログラム分析処理で抽出する構文構造の1例である。 実施例1のプログラム自動生成システムがプログラム分析処理で抽出する構文構造が持つノード情報の1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理の概要を説明するフローチャートである。 実施例1のプログラム自動生成システムが実行するプログラム分析処理の概要を説明するフローチャートであり、生成するプログラムモデルがベクトルデータである場合の1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理の概要を説明するフローチャートであり、生成するプログラムモデルがテンプレートデータである場合の1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理の概要を説明するフローチャートであり、生成するプログラムモデルが確率遷移グラフである場合の1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理において、生成されるベクトルデータの1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理において、生成されるベクトルデータの1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理において、生成されるベクトルデータの学習過程の1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理において、生成されるベクトルデータの学習過程の1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理において、生成されるテンプレートデータの1例である。 実施例1のプログラム自動生成システムが実行するプログラム分析処理において、生成される確率遷移グラフの1例である。 実施例1のプログラム自動生成システムが実行する基本ノード・制約条件生成処理の概要を説明するフローチャートである。 実施例1のプログラム自動生成システムが実行する最適化処理の概要を説明するフローチャートである。 実施例2のプログラム自動生成システムが実行するプログラム分析装置の構成例を示すブロック図である。 実施例2のプログラム自動生成システムが実行するプログラム分析処理の概要を説明するフローチャートである。 実施例2のプログラム自動生成システムが実行するプログラム分析処理において生成される依存関係グラフの1例である。 実施例2のプログラム自動生成システムが実行するプログラム分析処理において生成される依存関係グラフ上に付加された重み情報の1例である。 実施例2のプログラム自動生成システムが実行するプログラム分析処理において、生成されるベクトルデータの学習過程の1例である。
以下、添付図面を参照して実施例について説明する。まず、実施例の概要について説明する。
遺伝的プログラミングによる進化計算では、最適化問題として進化計算を実行する際に、基本ノードやパラメータなどの制約条件の設計が非常に重要となる。このため、実施例のプログラム自動生成システム(図1参照)は、主に、以下の2つの処理機能を実行する。
(1)プログラムモデル学習機能101
既存のプログラム郡から知識を抽出して、プログラムの自動生成に利用する。このため、複数のプログラムが記憶されたプログラム記憶部200からプログラムモデルを作成する。プログラム記憶部200は、例えば、プログラムファイルが保持されたデータベースやオープンソースソフトウェア(OSS)のソフトウェアリポジトリである。ソフトウェアリポジトリとしては、CVS、Subversion、Gitなどのソフトウェア構成管理システムが含まれる。プログラムモデル学習機能101では、事前にプログラム記憶部200からプログラム郡(ソフトウェア郡)を読み出して分析し、その分析結果をプログラムモデルとして、プログラムモデル記憶部105に格納しておく。これにより、事前にユーザが基本ノードやパラメータの設計を行う必要はない。
プログラムモデルとしては、例えば、プログラムの全体の意味をコード化したベクトルデータや、複数プログラム間から頻出構造をテンプレートとして抽出した構造データがある。プログラムモデル記憶部105はベクトルデータと構造データを系統的に格納するデータベースである。例えば、SQLなどのリレーショナルデータベースや、特に構造データを扱う場合には、XMLデータベースが利用できる。
(2)プログラムモデル活用機能102
事前に生成されたプログラムモデルと、ユーザが入力する設計要件を用いて、進化計算のための基本ノードと制約条件を生成する。そして、生成された基本ノードと制約条件と、入力データ及び目標データを用いて進化計算を実行してプログラムを生成する。進化計算は、例えば、遺伝的プログラミングである。生成される基本ノードは、進化計算の組み合わせ要素となるノードである。
制約条件は、プログラムモデルの種類と活用方法によって多岐のものがある。狭義には、制約条件は、進化計算のパラメータであり、個体数、世代数、交叉確率、突然変異確率などが含まれる。また、広義には、ノードの分類情報による選択重み、ノードの選択確率などが含まれる。ユーザが入力する設計要件は、例えば、活用プログラムの種別、ライブラリの種別、様式などが含まれる。また、プログラムを修正して改良したプログラムを生成する場合において、修正前のプログラムを設計要件に含めることもできる。進化計算においてプログラムは木構造で表現され、進化計算によって最適化された木構造は、対応するプログラムコードに変換されて出力される。
以上のような2つの機能(プログラムモデル学習機能101、プログラムモデル活用機能102)を持つ処理を実行することにより、データベースやソフトウェアリポジトリの中に含まれる既存のプログラムの中から知識を取り出してプログラムモデルを作成する。さらに、生成されたプログラムモデルを、例えば、遺伝的プログラミングの進化計算に活用することができる。よって、複雑な問題に対しても、処理の組み合わせの爆発を起こすことなくプログラムの自動生成が可能となる。
以下、図1、図2を参照して、実施例1のプログラム自動生成システムについて説明する。
図2に示すシステムは、プログラム生成装置100、基地局220、ユーザ端末210、及びプログラム記憶部200を有する。プログラム生成装置100、基地局200及びプログラム記憶部200は、ネットワーク240を介して互いに接続される。ネットワーク240は、例えば、WAN、LAN等が考えられるが、ネットワーク240の種別に限定されない。ユーザ端末210は、基地局220を介して無線通信を介して、プログラム生成装置100と接続される。なお、ユーザ端末210と基地局220との間は有線通信を介して接続されてよいし、ユーザ端末210が直接ネットワーク240と接続されてもよい。
ユーザ端末210は、例えば、パーソナルコンピュータ又はタブレット端末等の装置である。ユーザ端末210は、プロセッサ(図示省略)、メモリ(図示省略)、ネットワークインタフェース(図示省略)及び入出力装置(図示省略)を有する。入出力装置には、ディスプレイ、キーボード、マウス、及びタッチパネル等が含まれる。
ユーザ端末210は、プログラム生成装置100を操作するためのユーザインタフェース(ユーザI/F)211を提供する。ユーザインタフェース211は、プログラム生成装置100に設計要件や、入力データ及び目標データを入力し、また、プログラム生成装置100から出力されたプログラムを受け付ける。
プログラム生成装置100は、例えば、ハードウェア構成としてプロセッサ(図示省略)、メモリ(図示省略)、ネットワークインタフェース(図示省略)及びストレージ装置(図示省略)を備えた計算機である。
プログラム生成装置100は、ユーザ端末210の指示に従って、プログラム生成処理を実行する。プログラム記憶部200からプログラムデータを取得し、取得されたプログラムデータを分析する。プログラム記憶部200から検索され、読み込まれた分析対象となるプログラムデータは、内部のストレージ装置又はメモリに格納される。プログラム生成処理のための実行プログラム及び当該プログラムの実行時に用いられる情報は、メモリに格納される。プロセッサが、当該プログラムを実行することで、プログラム生成装置100が有する各種機能を実現できる。以下の説明において、機能部を主体に処理の説明をするときには、当該機能部を実現するプログラムがプロセッサによって実行されていることを示す。
プログラム記憶部200は、例えば、プログラムファイルが保持されたデータベースやオープンソースソフトウェア(OSS)のソフトウェアリポジトリである。ソフトウェアリポジトリには、CVS、Subversion、Gitなどのソフトウェア構成管理システムが含まれる。
図1を参照して、メモリに格納されるプログラム生成処理のための実行プログラム及び情報について説明する。
プログラム生成装置100は、プログラムモデル学習機能101とプログラムモデル活用機能102の2つの機能を有し、複数のプログラムモジュールから構成される。具体的には、プログラム生成装置100は、プログラム検索部103、プログラム分析部104、プログラムモデル記憶部105、基本ノード/制約条件生成部106、最適化部107、基本ノード記憶部108を含む。
プログラム検索部103は、ユーザインタフェース211から検索項目やキーワードを受け取り、プログラム記憶部200にアクセスしてプログラムを取得する。取得したプログラムは、内部ストレージ装置又はメモリに格納する。
プログラム分析部104は、取得したプログラムを分析し、プログラムモデルを生成する。生成したプログラムモデルは、プログラムモデル記憶部105に格納する。
プログラムモデル記憶部105は、生成されたプログラムモデルを格納する。内部ストレージ装置またはメモリ、もしくは、外部ネットワーク240を介して接続されるサーバまたはデータベースであってもよい。
基本ノード/制約条件生成部106は、ユーザインタフェース211から設計要件を受け取り、設計要件を満たすプログラムモデルをプログラムモデル記憶部105から抽出し、基本ノードと制約条件を生成する。生成した基本ノードは、基本ノード記憶部108に格納する。
最適化部107は、基本ノードと制約条件を受け取り、進化計算を実行してプログラムを生成する。生成したプログラムはユーザインタフェース211を介して、ユーザ端末210に出力される。
基本ノード記憶部108は、生成された基本ノードを格納する。内部ストレージ装置またはメモリ、もしくは、外部ネットワーク240を介して接続されるサーバまたはデータベースであってもよい。
次に、図3を参照して、プログラム生成装置100が実行する処理について説明する。
プログラム生成装置100は、ユーザ端末210から処理の開始を受信した場合に、以下の処理を実行する。
<プログラムモデル学習機能101>
プログラム生成装置100は、ユーザウインタフェース211からキーワード、対象となるデータベース又はソフトウェアリポジトリの指定、期間指定などの検索項目を受け付け、それらの情報を元に、外部ネットワーク240を介して、プログラム記憶部200から該当するプログラム群を検索する(ステップS301)。具体的には、プログラム検索部103が、プログラム群を検索する。検索されて抽出されたプログラム群は、プログラム生成装置100の内部ストレージに格納される。
プログラム生成装置100は、抽出されたプログラム群に対して、プログラム分析処理を実行する(ステップS302)。具体的には、プログラム分析部104がプログラム分析処理を実行する。プログラム分析処理では、プログラムは、図4に示すような抽象構文木(AST:Abstract Syntax Tree)などの木構造へ変換され、それらをベースに処理される。
プログラム分析処理と生成されるプログラムモデルには、多様な実施形態がある。例えば、生成されるプログラムモデルとしては、木の個体やノード毎に計算されるベクトルデータ、複数の木構造間の類似構造を抽出したテンプレートデータ、複数の木構造間の重ね合わせによって生成する確率遷移グラフデータなどが含まれる。プログラム分析部104が実行するプログラム分析処理については、図6、図6A、図6B、図6Cを用いて後述する。
プログラム生成装置100は、生成されたプログラムモデルをプログラムモデル記憶部105に格納する(ステップS302)。具体的には、プログラム分析部104がプログラム記憶部105への格納を実行する。プログラム分析処理によって作成されたプログラムモデルは、分析内容とプログラムモデルのデータ構造を考慮し、プログラムモデル記憶部105に系統的に格納される。
ステップS301〜S303までの処理がプログラムモデル学習機能101に該当する。これらのステップにおいて、プログラム記憶部200に格納された既存のプログラム群の知識がプログラム分析部104によって学習され、プログラムモデルとして、プログラムモデル記憶部105に蓄えられる。
<プログラムモデル活用機能102>
プログラム分析装置100は、進化計算に必要な基本ノードと制約条件を、プログラムモデル学習機能101で生成されたプログラムモデルと、ユーザが入力する設計要件を用いて生成する(ステップS304)。具体的には、基本ノード/制約条件生成部106が、基本ノード・制約条件生成処理を実行する。ユーザが入力する設計要件は、例えば、活用プログラムの種別、ライブラリの種別、様式などがある。これらは、プログラムモデル記憶部105に対するプログラムモデルの参照に使われる。
基本ノードは、木構造の各ノードを構成する基本要素である。例えば、図4に示す木構造のn0〜n8が基本要素を表し、内容としては、例えば、図5のテーブルに記載のノードがある。図5に記載のノードは、意味の粒度が細かいが、プログラムモデルを用いて基本となる粒度が大きなノードを作成して進化計算の収束性を高める。
制約条件は、プログラムモデルの種類と活用方法によって多岐のものがある。狭義には、制約条件は、進化計算のパラメータであり、個体数、世代数、交叉確率、突然変異確率などが含まれる。また、広義には、ノードの分類情報による選択重み、ノードの選択確率などが含まれる。制約条件は、ユーザの設計要件で直接指定することもできる。基本ノード/制約条件生成部106が実行する基本ノード/制約条件生成処理については後述する。
プログラム分析装置100は、生成された基本ノードを基本ノード記憶部108に格納する(ステップS305)。具体的には、基本ノード/制約条件生成部106が基本ノード記憶部108への格納を実行する。ここで、基本ノード記憶部108は、内部ストレージ又はメモリ内のモジュールである。
プログラム分析装置100は、生成された基本ノードと制約条件を元に、進化計算を実行してプログラムを生成する(ステップS306)。具体的には、最適化部107が、遺伝的プログラミングによる進化計算を実行する。最適化部107は、ユーザインタフェース211を介して、入力データ及び目標データを入力として受け付ける。入力データに対する出力データと目標データの比較から適応度を決定する。
進化計算において、木構造で表現されたプログラム群は、突然変異、交差などの遺伝的プログラミングの演算を繰り返し行って適応度を評価され、既定となる世代に到達するもしくは解が収束した時点で処理は終了する。最適化部107は、終了時における収束した木構造をプログラムコードに変換する。最適化部107が実行する最適化処理については後述する。
プログラム分析装置100は、生成したプログラムコードを、ユーザインタフェース211を介して、ユーザ端末210へ出力する(ステップS307)。このとき、プログラムコードをユーザ端末210にある画面上に表示するようにしてもよい。また、プログラムコードの作成完了だけを通知し、ユーザがプログラム分析装置100に問い合わせてダウンロードするようにしてもよい。
ステップS304〜S307までの処理がプログラムモデル活用機能102に該当する。これらのステップS304〜S307において、プログラム記憶部200に格納された既存のプログラム群の知識が、最適化処理によって活用されてプログラムが生成される。
<各処理の説明>
図6を参照して、実施例1のプログラム分析部104が実行する処理の概要について説明する。ここで、図6Aは、実施例1のプログラム分析部104が実行する処理の1形態の概要を説明するためのフローチャートである。図6Bは、実施例1のプログラム分析部104が実行する処理の1形態の概要を説明するためのフローチャートである。図6Cは、実施例1のプログラム分析部104が実行する処理の1形態の概要を説明するためのフローチャートである。
図7A、図7Bは、図6Aの実施において、作成されるノード辞書の1例を示す説明図である。図8A、図8Bは、図6Aの実施において、ノードベクトルの学習を示した1例を示す説明図である。図9は、図6Bの実施において、抽出されたモデルの1例を示す説明図である。図10は、図6Cの実施において、作成されたモデルの1例を示す説明図である。
プログラム分析部104は、プログラム群を入力として、それらからプログラムモデルを学習して生成する。プログラム分析部104は、まず、入力されたプログラム毎(ステップS601)にプログラムを木構造へと変換する(ステップS602)。プログラムに対する木構造は、例えば、抽象構文木である。図4に示すような構造で表現され、各ノードは、例えば、図5に示すような意味を持つ。プログラム分析処理と生成されるプログラムモデルには、多様な実施形態がある。例えば、生成されるプログラムモデルとしては、プログラムやノード毎に計算されるベクトルデータ、複数の木構造間の類似構造を抽出したテンプレートデータ、複数の木構造間の重ね合わせによって生成する確率遷移グラフデータなどが含まれる。
以下、図6A、図6B、図6Cを参照して、プログラムモデルの実施形態について説明する。
図6Aは、プログラムや木構造のノード毎に計算されるベクトルデータをプログラムモデルとした場合の実施形態である。
まず、プログラム分析部104は、入力されるプログラム群からノード辞書を作成する(ステップS611)。ノード辞書は、入力される全てのプログラムにおいて出現するノードの種別を列挙したリストである。図7Aは、図4に対応するノード辞書の例であり、プログラムX400とプログラムY401に出現するノードの種別が列挙されている。
プログラム分析部104は、ノード辞書の項目毎(ステップS612)に、ノードベクトルを学習する(ステップS613)。ノードベクトルは、ノードの種別毎に設定される多次元ベクトルであり、初期値は、例えば、ランダムな値である。ノードベクトルは、構文木の全ての親ノードと子ノードの関係を抽出し、それらをサンプルに、機械学習などの手法によって繰り返し学習することで導出される。機械学習の手法には、ニューラルネットワークの手法などを用いることができる。ノードベクトルの学習(ステップS613)が終了すると、図7Bのように各ノードの項目に対してベクトル情報が与えられる。
図8Aは、ノードベクトルの学習終了時に、図4のプログラムX400に対して、ノードベクトルが付加された様子を説明したものである。図7Bのテーブルからわかるように、図8Aのノードのn0,n1,n2…などのラベルが同じ場所には、同じノードベクトルが付加されている。なお、ノードベクトルの次元数はパラメータであり、事前に設定しておいてもよいし、分析の都度、ユーザインタフェース211を介して、分析条件設定により指定してもよい。
プログラム分析部104は、プログラム毎(ステップS615)に、木の末端、すなわち、葉の部分からノードベクトルの追学習を実施する(ステップS616)。ステップS616では、ステップS613で学習されたノードベクトルを初期値として、より根に近いノードが下層のノードの情報を含むことができるようにベクトル情報を統合する。図8Bは、ノードベクトルの追学習を示したものであり、下層のノードから再帰的に上層のノードで、ベクトル情報を統合していく。ベクトル情報の統合には、線形結合を用いてもよいし、部分構造をニューラルネットワークの構造として学習して求めてもよい。
以上の処理を実行することにより、プログラム分析部104は、上層のノードベクトルほど、抽象度の高い表現を持つベクトル情報が得られる。最上位のノードに着目すれば、プログラムの意味をベクトルで表現することができる。図6Aの実施形態では、プログラムの構造データと、それぞれのノードが持つベクトルデータをプログラムモデルとして出力する。
図6Bは、複数の木構造間の類似構造を抽出したテンプレートデータをプログラムモデルとした場合の実施形態である。
プログラム分析部104は、複数の既存のプログラムから共通構造を抽出するために、全てのプログラムの構文木の中から部分構造を抽出し(ステップS623)、その出現数を元に共通構造を抽出していく(ステップS625)。 初期の部分構造を2ノードの構造とし、ステップS621の繰り返しにおいて、共通する部分構造を拡張しながら、共通構造を抽出する。図9は、図4に対応して共通構造を抽出した木構造である。なお、この実施形態では完全一致する共通構造を抽出しているが、それに限らず類似の構造であればよい。出現数はパラメータであり、事前に設定しておいてもよいし、分析の都度、ユーザインタフェース211を介して、分析条件設定により指定してもよい。
以上の処理を実行することにより、プログラム分析部104は、類似の構造を持つ部分木のモデルを抽出することができる。図6Bの実施形態では、この類似の構造を持つ部分木のモデルをプログラムモデルとして出力する。
図6Cは、複数の木構造間の重ね合わせによって生成する確率遷移グラフデータをプログラムモデルとした場合の実施形態である。
まず、プログラム分析部104は、プログラムリストを作成する(ステップS631)。そして、プログラムリストの1番目のプログラムをベースプログラムとして設定する(ステップS632)。プログラムリストの項目毎に、ベースプログラムの木構造に対して、対象となるプログラムの木構造を重ね合わせていく(ステップS634)。このとき、構造の重ね合わせによって、重なり合う部分のエッジ(辺)またはノードは、重みが増え、重ね合わせされた木構造は確率遷移グラフとなる。図10は、対象となるプログラムを、図4のプログラムX400とプログラムY401とした場合の、確率遷移グラフの1例である。太いラインで示されたエッジとノードは重なる部分であり、他のエッジやノードと比較して、高い尤度(確率)が設定されている。
以上の処理を実行することにより、プログラム分析部104は、プログラム構造に対して確率を持つ確率遷移グラフを作成することができる。図6Cの実施形態では、この確率遷移グラフをプログラムモデルとして出力する。
次に、図11を参照して、基本ノード/制約条件生成部106が実行する処理の概要について説明する。
基本ノード/制約条件生成部106は、ユーザインタフェース211を介して入力されるユーザの設計要件と、プログラムモデルとを用いて、進化計算のための基本ノードと制約条件を生成する。
基本ノード/制約条件生成部106は、ユーザインタフェース211を介して入力されるユーザの設計要件を読み込む(ステップS1101)。ここで、設計要件は、例えば、活用プログラムの種別、ライブラリの種別、様式などが含まれる。プログラムを修正して改良したプログラムを生成する場合において、修正前のプログラムを設計要件に含めることもできる。
基本ノード/制約条件生成部106は、設計要件に従って、プログラムモデルを選択して読み込む。設計要件として、活用プログラムの種別が選択されていた場合、類似のプログラムに起因するプログラムモデルを選択する。また、前述したベクトルデータ、テンプレートデータ、確率遷移グラフのいずれのモデルを使う、もしくは組み合わせて使うかも選択することができる。
基本ノード/制約条件生成部106は、プログラムモデルと設計要件に従って、制約条件を生成する(ステップS1103)。ここで、制約条件は、プログラムモデルの種類と活用方法によって多岐のものがある。例えば、狭義には、制約条件は、進化計算のパラメータであり、個体数、世代数、交叉確率、突然変異確率などが含まれる。また、広義には、ノードの分類情報による選択重み、ノードの選択確率および変異確率などが含まれる。
基本ノード/制約条件生成部106は、狭義の制約条件である進化計算に必要なパラメータを、事前に設定しておいたものを利用してもよいし、もしくは、設計要件でユーザが指定したものを用いてもよい。基本ノード/制約条件生成部106は、広義の制約条件を、主にプログラムモデルの分析によって生成する。
例えば、ベクトルデータによるプログラミングモデルでは、各ノード間の類似度をベクトルデータから容易に計算することができる。そのため、予めプログラムモデル記憶部105に格納されているベクトルデータを複数のカテゴリに分類(分類1、分類2、分類3等)することで、プログラムらしさを表現することができる。これらのノードの分類と、交差や突然変異対象のノードを比較することで、プログラムらしくない部分を優先して排除することが可能となる。よって、制約条件は、ノード分類情報による選択重みとして与えられる。
例えば、ベクトルデータによるプログラミングモデルでは、後述する進化計算における初期集団の生成において、プログラムらしさを表現可能な分類情報により、ランダムではなく、よりプログラムらしい構造を持つ個体を生成し、優先的に集団に含めることができる。
例えば、テンプレートデータまたは確率遷移グラフによるプログラミングモデルでは、プログラムのよりメタな構造を進化計算の更新処理に利用することができる。特に、確率遷移グラフでは、ノード間の確率遷移が定義されており、ノード間の接続の自然さを確率として表現することができる。この情報を用いることで、接続の不自然な箇所を優先的に排除してより自然なプログラムを生成できるように、通常の進化計算におけるランダムな変化に方向付けを行うことができる。よって、制約条件は、ノードの選択確率および変異確率として与えられる。
基本ノード/制約条件生成部106は、プログラムモデルと設計要件に従って、進化計算のための基本ノードを生成する(ステップS1104)。基本ノードは、進化計算における木構造の各ノードを構成する基本要素となる。前述のように、プログラムモデルを用いて、基本となる粒度が大きなノードを作成し、進化計算の収束性を高める。
基本ノード/制約条件生成部106は、設計要件に、ライブラリ情報など、既に構造の情報を持った要素が指定された場合には、それを直接基本ノードに含めることができる。
基本ノード・制約条件生成部106は、基本ノードを主にプログラミングモデルの分析によって生成する。例えば、ベクトルデータによるプログラミングモデルの場合、プログラムらしさを表現した分類情報のから、代表的なベクトルを抽出し、そのベクトルに対応するノードを構成する部分構造を、基本ノードに加えることができる。
例えば、テンプレートデータによるプログラミングモデルの場合、テンプレートとして与えられる構造を、そのまま基本ノードに加えてもよい。
以上の処理を実行することにより、基本ノード/制約条件生成部106は、プログラミングモデルを活用し、種々の基本ノード、制約条件を生成することができる。
次に、図12を参照して、最適化部107が実行する処理の概要について説明する。
最適化部107は、生成された基本ノードと制約条件を元に、遺伝的プログラミングによる進化計算を実行する。
最適化部107は、制約条件を元に、初期世代の集団を生成する(ステップS1201)。個体数、世代数、交叉確率、突然変異確率が制約条件として設定される。プログラムモデルにより生成された分類によって、個体の生成に確率が付与されている場合には、その情報を用いて個体を生成し、それを繰り返すことで集団を生成する。付帯情報がない場合には、ランダムに初期個体が生成される。個体生成のための基本ノードとしては、基本ノード/制約条件生成部106が生成した基本ノードを用いる。
最適化部107は、世代毎(ステップS1202)に、進化計算を実行する。まず、入力された入力データ及び目標データを用いて、適合度を計算する。ここで、適合度は、入力データに対する個体の出力データと、目標データの距離を表したものである。個体が所望の進化段階になったか否かは、この適合度によって判定される。
最適化部107は、適合度と制約条件を元に、集団から個体を選択する(ステップS1204)。適合度に比例する確率分布を用いて、変異させる数個体を選択する。このとき、個体の選択に、プログラムモデルによる生成された分類データがある場合には、その確率も考慮する。
最適化部107は、集団から選択された個体に対して、交差処理または突然変異処理を実行する(ステップS1205)。交差処理または突然変異処理は、交差確率及び突然変異確率によって決定される。交差または突然変異するノードを決定する場合、プログラムモデルから生成された選択確率が存在すれば、それを考慮する。存在しない場合は、ランダムに決定する。
最適化部107は、修正した個体を集団に戻す(ステップS1206)。最適化部107は、ステップS1202〜ステップS1207までの処理を世代数が既定数に達成するまで繰り返す。もしくは、収束した個体(出力データと目標データが一致した個体)が一定数出現するまで繰り返す。
最適化部107は、収束した個体の中から代表個体を選出する(ステップS1208)。ここで、例えば、複雑な構造ではなく単純な構造で記述するため、木構造のサイズが小さな個体を優先して選択する。
最適化部107は、代表個体をプログラムコードへ変換する(ステップS1209)。
以上の処理を実行することで、最適化部107は、プログラムモデルから生成した基本ノードと制約条件を活用し、解の収束性を高めることが可能となる。
実施例1によれば、プログラム生成装置100は、データベースやソフトウェアリポジトリの中に含まれる既存のプログラムの中から知識を取り出して、ベクトルデータ、テンプレートデータ、確率遷移グラフなどのプログラムモデルを作成する。そして、生成されたプログラムモデルから基本ノードと制約条件を生成して遺伝的プログラミングの進化計算に活用する。これらを用いれば、複雑な問題に対しても、組み合わせ爆発を起こすことなくプログラムの自動生成が可能となる。
以下、図13、図14を参照して、実施例2のプログラム自動生成システムについて説明する。まず、実施例2の概要について説明する。
プログラム開発の現場において、大規模なソフトウェアリポジトリの活用が進んでいる。ソフトウェアリポジトリとは、プログラムやドキュメント、バグレポートなどの成果物を蓄積するデータベースのことである。ソフトウェア資源の管理や共有、再利用が可能となるメリットがある一方で、大規模化が進むことで、再利用のための検索や信頼性の確認といった活用の手間も増えている。これに対し、プログラムの普遍的な意味づけを与えようという動きがある。プログラムの意味づけに関する方法としては、人工知能分野ではディープラーニングなど機械学習が注目されており、特に、自然言語分野では、単語や文章の意味づけに目覚ましい進展がある。ベクトル化によって単語の概念を扱えるように学習させるアプローチである。プログラムを抽象構文木(AST)として扱うことで構成的な学習を可能とし、抽象構文木(AST)のノードレベルのベクトル化とツリーベースのニューラルネットワークによってプログラム全体の意味表現を獲得する。
既存のプログラムを活用するためには、既存プログラムから学習された分類モデルが必要であり、普遍性をもったプログラムの意味づけや表現方法が必要となる。そこで、プログラムの表現方法として、構文構造だけでなく、プログラム処理の依存関係を考慮した上でベクトル表現が作成できる仕組みを与え、構文的な情報、意味的な情報の双方を利用する。これにより、プログラムの意味的な表現方法として、構文構造情報に加え、処理の依存関係も含めたプログラムのベクトル表現が可能となる。これにより、プログラムの分類問題などにおいて、高い精度を実現することができる。
実施例2では、プログラム分析部104の処理の、特に、ベクトルデータによるプログラムモデルにおいて、抽象構文木の構造だけでなく、状態や関数などのプログラム処理の依存関係も含めてベクトルデータを生成する。このように、実施例2では、構文的な情報と意味的な情報の双方を利用する。
実施例2では、実施例1との差異を中心に実施例2について説明する。なお、実施例1と同一の構成には同一の符号を付し、詳細な説明は省略する。
図13を参照すると、実施例2のプログラム分析部104の構成例を示すブロック図である。実施例2のプログラム分析部104は、構文情報取得部1301、ノードベクトル学習部1302、依存関係情報取得部1303、重み生成部1304及びノードベクトル結合部1305を有する。
構文情報取得部1301は、入力されたプログラムを木構造へと変換する。ノードベクトル学習部1302は、変換された全てのプログラムの木構造を用いて、ノード辞書の項目毎のノードベクトルを学習する。
依存関係情報取得部1303は、入力されたプログラムから、プログラム内部に記述されている依存関係を抽出する。依存関係情報は、例えば、関数の参照関係などがある。ソース、クラス、データなど別の粒度の依存関係をベースにしてもよい。依存関係情報は、例えば、依存関係グラフとしてグラフ構造で記述される。重み生成部1304は、生成された依存関係情報を入力として、ノード毎に重要度を示す重みを生成する。ノードベクトル結合部1305は、生成されたノードベクトル情報と重み情報と用いて、ベクトルを結合し、対応するプログラムのベクトルデータを得る。
図14を参照して、実施例2のプログラム分析部104が実行する処理について説明する。プログラム分析部104は、まず、入力されたプログラム毎(ステップS601)に、プログラムを木構造へと変換する(ステップS602)。この処理は、実施例1と同様である。続いて、図6Aと同様に、ノードベクトルの学習を実施する(ステップS611〜S614)。
次に、ノードベクトルの学習に並行して、プログラム毎に、依存関係の抽出処理を行う(ステップS1404)。依存関係情報は、例えば、関数の参照関係などである。ソース、クラス、データなど別の粒度の依存関係をベースとしてもよい。依存関係情報は、例えば、依存関係グラフとしてグラフ構造で記述される。
図15Aは、依存関係を関数の参照関係とした際の依存関係グラフの例を示す。依存関係を求める要素をノード、関係性をエッジとして接続してグラフを生成する。図15Aでは、関数をノードとし、例えば、関数Bが関数Aを参照した場合、関数Aから関数Bへの接続を有効エッジとして記載している。また、関数Cは関数Dと関数Eを参照しているので、関数Dから関数Cへの接続を有効エッジとして、関数Eから関数Cへの接続を他の有効エッジとして記載している。計算機プログラム上で、依存関係グラフは、例えば隣接リストで与えることができる。
プログラム分析部104は、生成した依存関係情報を元に、構文木の各ノードに付加する重み情報を生成する。例えば、図15Aの依存関係グラフ上で、中心性計算を実施することで、図15Bのようなグラフ上の各ノードの重要度を算出することができる。
依存関係グラフ上で実施される中心性計算には、例えば、多くのノード間の媒介となるものに高いスコアを与える媒介中心性などが利用できる。例えば、関数Eは関数I、関数J及び関数Kを参照しているので、関数Eのノードに付加する重み情報として高いスコア(0.7)が与えられる。一方、関数Aのノードは、どのノードも参照していないので、関数Aのノードに付加する重み情報として低いスコア(0.2)が与えられる。
このノード毎に計算された重要度を構文木上の各ノードに対応づけることで、該当するノードベクトルの結合に重みを与える。図16は、構文木400において、n0が図15Aの関数C、n1が関数E、n3が関数D、n4が関数Bとした場合の例である。依存関係グラフから導出された重み情報は、n1(関数E)、n3(関数D)、n4(関数B)を結合して、n0(関数C)を結合する時に使われる。
プログラム分析部104は、ノードベクトルの結合処理を実行する(ステップS1409)。結合の接続関係は、構文構造情報から得る。ベクトルを結合する際の重みは、重み情報から得る。重み情報を考慮すること以外は、図6Aと同様の手続きである。
実施例2によれば、ベクトルデータの学習に、構造情報に加え、依存関係情報を用いることで、状態や接続関係を表現可能なベクトルデータを生成することが可能となる。より高い表現能力を持つ結合方法によって、処理中に実施されるプログラムの分類などのタスクにおいて、高い精度を実現することが可能となる。

Claims (15)

  1. 生成すべき第1のプログラムに対する入力データ、目標データ及び設計要件の入力を受け付ける入力部と、
    複数の既存の第2のプログラムを記憶するプログラム記憶部と、
    前記第1のプログラムを生成するプログラム生成装置と、
    前記プログラム生成装置が生成した前記第1のプログラムを出力する出力部、を備え、
    前記プログラム生成装置は、
    前記プログラム記憶部に記憶された前記複数の第2のプログラムを分析してプログラムモデルを生成するプログラム分析部と、
    前記プログラム分析部が生成した前記プログラムモデルと前記入力部から入力された前記設計要件に基づいて、進化計算のための基本ノードと制約条件を生成する基本ノード/制約条件生成部と、
    前記基本ノード/制約条件生成部が生成した前記基本ノード及び前記制約条件と、前記入力部から入力された前記入力データ及び前記目標データに基づいて、前記進化計算により前記第1のプログラムを生成する最適化部と、
    を有することを特徴とするプログラム自動生成システム。
  2. 前記プログラムモデルは、前記第2のプログラムの意味をコード化したベクトルデータであり、
    前記プログラム分析部は、前記ベクトルデータを導出するために、前記複数の第2のプログラムから構文構造情報を抽出し、前記構文構造情報からノードの項目を列挙してノードベクトル情報を学習することを特徴とする請求項1に記載のプログラム自動生成システム。
  3. 前記プログラムモデルは、テンプレートデータであり、
    前記プログラム分析部は、前記テンプレートデータを導出するために、前記複数の第2のプログラムから構文構造情報を抽出し、前記構文構造情報から部分構造を抽出して前記複数の第2のプログラム間の類似構造を抽出することを特徴とする請求項1に記載のプログラム自動生成システム。
  4. 前記プログラムモデルは、確率遷移グラフであり、
    前記プログラム分析部は、前記確率遷移グラフを導出するために、前記複数の第2のプログラムからプログラムリストを作成し、前記作成したプログラムリストに従って前記複数の第2のプログラムの構文構造情報を重ね合わせることを特徴とする請求項1に記載のプログラム自動生成システム。
  5. 前記プログラムモデルは、前記第2のプログラムの意味をコード化したベクトルデータであり、
    前記プログラム分析部は、前記ベクトルデータを導出するために、前記複数の第2のプログラムから構文構造情報を抽出し、前記複数の第2のプログラムから依存関係情報を抽出し、前記構文構造情報からノードの項目を列挙してノードベクトル情報を学習し、前記依存関係情報から重み情報を生成し、前記ノードベクトル情報と前記重み情報に基づいて前記ノードベクトルを追学習することを特徴とする請求項1に記載のプログラム自動生成システム。
  6. 前記入力部は、前記設計要件として、活用プログラムの種別、ライブラリの種別又は様式を入力することを特徴とする請求項1に記載のプログラム自動生成システム。
  7. 前記入力部は、前記設計要件として、修正前の前記第1のプログラムを入力することを特徴とする請求項1に記載のプログラム自動生成システム。
  8. 前記基本ノード/制約条件生成部は、前記制約条件として、個体数、世代数、交差確率、突然変異確率、ノードの分類情報による選択重み、ノードの選択確率又はノードの変異確率を生成することを特徴とする請求項1に記載のプログラム自動生成システム。
  9. 前記プログラムモデルは、前記第2のプログラムの意味をコード化したベクトルデータであり、
    前記基本ノード/制約条件生成部は、前記ベクトルデータを用いて、前記複数の第2のプログラム中のノードを分類し、前記ノードの分類情報を基に前記制約条件を生成することを特徴とする請求項1に記載のプログラム自動生成システム。
  10. 前記プログラムモデルは、テンプレートデータ又は確率遷移グラフであり、
    前記基本ノード/制約条件生成部は、前記テンプレートデータ又は前記確率遷移グラフを用いて、前記複数の第2のプログラム中のノード間の接続関係を分析し、前記ノードの接続関係を基に前記制約条件を生成することを特徴とする請求項1に記載のプログラム自動生成システム。
  11. 前記基本ノード/制約条件生成部は、前記基本ノードとして、前記進化計算のために処理される木構造の各ノードを構成する基本となるノードを生成することを特徴とする請求項1に記載のプログラム自動生成システム。
  12. 前記プログラムモデルは、前記第2のプログラムの意味をコード化したベクトルデータであり、
    前記基本ノード/制約条件生成部は、前記ベクトルデータを用いて、前記複数の第2のプログラム中のノードを分類し、前記ノードの分類情報を基に前記進化計算のための基本ノードを生成することを特徴とする請求項1に記載のプログラム自動生成システム。
  13. 前記プログラムモデルは、テンプレートデータであり、
    前記基本ノード/制約条件生成部は、前記テンプレートデータを前記基本ノードとして用いることを特徴とする請求項1に記載のプログラム自動生成システム。
  14. 前記進化計算は、遺伝的プログラミングであり、
    前記最適化部は、
    前記制約条件を基に初期集団を生成し、前記入力データ及び前記目標データを用いて、前記入力データに対する個体の出力データと前記目標データの距離を表す適応度を計算し、
    前記適合度と前記制約条件を基に前記初期集団から前記個体を選択し、前記初期集団から選択された前記個体に対して、前記制約条件を用いて交差又は突然変異処理を実行して修正した個体を前記初期集団に戻し、
    前記遺伝的プログラミングによる前記進化計算によって、世代を繰り返し更新して、前記適応度を収束させて前記第1のプログラムを生成することを特徴とする請求項1に記載のプログラム自動生成システム。
  15. 生成すべき第1のプログラムに対する入力データ、目標データ及び設計要件の入力を受け付け、
    複数の既存の第2のプログラムを記憶し、
    前記複数の第2のプログラムを分析してプログラムモデルを生成し、
    前記生成した前記プログラムモデルと前記入力された前記設計要件に基づいて、進化計算のための基本ノードと制約条件を生成し、
    前記生成した基本ノード及び前記制約条件と、前記入力された前記入力データ及び前記目標データに基づいて、前記進化計算により前記第1のプログラムを生成し、
    前記生成した前記第1のプログラムを出力することを特徴とするプログラム自動生成方法。
JP2017030940A 2017-02-22 2017-02-22 プログラム自動生成システム及びプログラム自動生成方法 Active JP6663873B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017030940A JP6663873B2 (ja) 2017-02-22 2017-02-22 プログラム自動生成システム及びプログラム自動生成方法
US15/898,731 US10466972B2 (en) 2017-02-22 2018-02-19 Automatic program generation system and automatic program generation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017030940A JP6663873B2 (ja) 2017-02-22 2017-02-22 プログラム自動生成システム及びプログラム自動生成方法

Publications (2)

Publication Number Publication Date
JP2018136755A true JP2018136755A (ja) 2018-08-30
JP6663873B2 JP6663873B2 (ja) 2020-03-13

Family

ID=63167821

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017030940A Active JP6663873B2 (ja) 2017-02-22 2017-02-22 プログラム自動生成システム及びプログラム自動生成方法

Country Status (2)

Country Link
US (1) US10466972B2 (ja)
JP (1) JP6663873B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11348032B1 (en) * 2018-09-02 2022-05-31 Meta Platforms, Inc. Automated generation of machine learning models
US10552121B1 (en) * 2019-05-07 2020-02-04 Capital One Services, Llc System and method for dynamic process flow control based on real-time events
CN111176614B (zh) * 2019-12-26 2021-06-29 南京航空航天大学 Vrm形式化需求模型的生成和分析方法
WO2021161428A1 (ja) * 2020-02-12 2021-08-19 日本電信電話株式会社 プログラム生成装置、プログラム生成方法及びプログラム
JP2021184147A (ja) * 2020-05-21 2021-12-02 富士通株式会社 データ変換プログラム、データ変換装置、及びデータ変換方法
US20230092628A1 (en) * 2021-09-23 2023-03-23 Change Healthcare Holdings, Llc Systems and methods for building products

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014144523A (ja) * 2013-01-30 2014-08-14 Fanuc Ltd 動作プログラム作成装置
WO2015189935A1 (ja) * 2014-06-11 2015-12-17 富士通株式会社 プログラム生成装置、プログラム生成方法およびプログラム
JP2016062269A (ja) * 2014-09-17 2016-04-25 富士通株式会社 アルゴリズム生成装置、アルゴリズム生成方法及びアルゴリズム生成用コンピュータプログラム

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6532453B1 (en) * 1999-04-12 2003-03-11 John R. Koza Genetic programming problem solver with automatically defined stores loops and recursions
US7225431B2 (en) * 2002-10-24 2007-05-29 International Business Machines Corporation Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
US7577935B2 (en) * 2004-02-14 2009-08-18 Matthew T. Reynolds Generative programming system and method employing focused grammars
US7725409B2 (en) * 2007-06-05 2010-05-25 Motorola, Inc. Gene expression programming based on Hidden Markov Models
US8782637B2 (en) * 2007-11-03 2014-07-15 ATM Shafiqul Khalid Mini-cloud system for enabling user subscription to cloud service in residential environment
US8387001B2 (en) * 2008-04-17 2013-02-26 Infosys Technologies Limited Method for finding an impact on a computer generated code
EP2296410B1 (en) * 2009-09-10 2017-02-08 Alcatel Lucent Telecommunications network node and methods
US8195345B2 (en) * 2010-08-05 2012-06-05 King Fahd University Of Petroleum & Minerals Method of generating an integrated fuzzy-based guidance law for aerodynamic missiles
US9563844B2 (en) * 2011-06-30 2017-02-07 International Business Machines Corporation Speculative asynchronous sub-population evolutionary computing utilizing a termination speculation threshold
US8838510B2 (en) * 2011-09-16 2014-09-16 International Business Machines Corporation Choosing pattern recognition algorithms and data features using a genetic algorithm
US8789022B2 (en) * 2012-03-31 2014-07-22 Bmc Software, Inc. Self-evolving computing service template translation
JP5875681B2 (ja) * 2012-06-20 2016-03-02 株式会社日立製作所 制御ソフトウェアの設計支援装置
US9009536B2 (en) * 2012-10-02 2015-04-14 International Business Machines Corporation Test case production utilizing problem reports
US10108526B2 (en) * 2012-11-27 2018-10-23 Purdue Research Foundation Bug localization using version history
US20140236578A1 (en) * 2013-02-15 2014-08-21 Nec Laboratories America, Inc. Question-Answering by Recursive Parse Tree Descent
US9311597B2 (en) * 2013-03-12 2016-04-12 International Business Machines Corporation Early generation of individuals to accelerate genetic algorithms
US9239710B2 (en) * 2013-03-15 2016-01-19 ArtinSoft Corporation Programming language transformations with abstract syntax tree extensions
WO2014171011A1 (ja) * 2013-04-19 2014-10-23 株式会社武蔵野化学研究所 脂肪族ポリエステルの精製方法およびその方法で精製された脂肪族ポリエステル
US9176732B2 (en) * 2013-08-28 2015-11-03 Oracle International Corporation Method and apparatus for minimum cost cycle removal from a directed graph
JP2015230702A (ja) 2014-06-06 2015-12-21 株式会社リコー 処理フロー生成装置、処理フロー生成方法、処理フロー生成プログラム、情報処理装置の製造方法及び情報処理プログラムの製造方法
US20160224453A1 (en) * 2015-01-30 2016-08-04 Lindedln Corporation Monitoring the quality of software systems
JP6533415B2 (ja) * 2015-06-03 2019-06-19 株式会社日立製作所 系統樹を構築する装置、方法およびシステム
JP6468356B2 (ja) * 2015-06-25 2019-02-13 富士通株式会社 プログラム生成装置、プログラム生成方法および生成プログラム
JP6511986B2 (ja) * 2015-06-26 2019-05-15 富士通株式会社 プログラム生成装置、プログラム生成方法および生成プログラム
US9798818B2 (en) * 2015-09-22 2017-10-24 International Business Machines Corporation Analyzing concepts over time
WO2017056320A1 (ja) * 2015-10-02 2017-04-06 富士通株式会社 プログラム生成装置、プログラム生成方法および生成プログラム
CN108140133B (zh) * 2015-10-22 2022-03-22 富士通株式会社 程序生成装置、程序生成方法及记录介质
US9916158B2 (en) * 2016-07-20 2018-03-13 International Business Machines Corporation Cognitive feature analytics
US10606885B2 (en) * 2016-11-15 2020-03-31 Evolv Technology Solutions, Inc. Data object creation and recommendation using machine learning based online evolution

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014144523A (ja) * 2013-01-30 2014-08-14 Fanuc Ltd 動作プログラム作成装置
WO2015189935A1 (ja) * 2014-06-11 2015-12-17 富士通株式会社 プログラム生成装置、プログラム生成方法およびプログラム
JP2016062269A (ja) * 2014-09-17 2016-04-25 富士通株式会社 アルゴリズム生成装置、アルゴリズム生成方法及びアルゴリズム生成用コンピュータプログラム

Also Published As

Publication number Publication date
US20180239593A1 (en) 2018-08-23
US10466972B2 (en) 2019-11-05
JP6663873B2 (ja) 2020-03-13

Similar Documents

Publication Publication Date Title
JP6663873B2 (ja) プログラム自動生成システム及びプログラム自動生成方法
US8719299B2 (en) Systems and methods for extraction of concepts for reuse-based schema matching
EP3671526B1 (en) Dependency graph based natural language processing
US11281864B2 (en) Dependency graph based natural language processing
WO2005010727A2 (en) Extracting data from semi-structured text documents
JP2007052744A (ja) 分類ルール作成支援方法
Robinson et al. Finding reusable UML sequence diagrams automatically
Heck et al. Horizontal traceability for just‐in‐time requirements: the case for open source feature requests
Dit et al. Configuring topic models for software engineering tasks in tracelab
Kessentini et al. Semi-automated metamodel/model co-evolution: a multi-level interactive approach
Gelman et al. A language-agnostic model for semantic source code labeling
Kumar et al. A systematic review of semantic clone detection techniques in software systems
Kozmina et al. Information requirements for big data projects: A review of state-of-the-art approaches
CN116400910A (zh) 一种基于api替换的代码性能优化方法
CN113302601A (zh) 含义关系学习装置、含义关系学习方法及含义关系学习程序
Azmi et al. Relevance feedback using genetic algorithm on information retrieval for indonesian language documents
CN114676155A (zh) 代码提示信息的确定方法、数据集的确定方法及电子设备
Olsson et al. Mapping Source Code to Modular Architectures Using Keywords
Klusáček et al. Comparing fitness functions for genetic feature transformation
JP5600826B1 (ja) 非構造化データ処理システム、非構造化データ処理方法およびプログラム
Khalilipour et al. Intelligent Model Management based on Textual and Structural Extraction-An Exploratory Study
Schulte Investigating topic modeling techniques for historical feature location.
Maxville et al. Applying a reusable framework for software selection
US12020008B2 (en) Extensibility recommendation system for custom code objects
Fraternali et al. Almost rerere: An approach for automating conflict resolution from similar resolved conflicts

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190319

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200124

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200217

R150 Certificate of patent or registration of utility model

Ref document number: 6663873

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150