(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-29
(45)【発行日】2022-12-07
(54)【発明の名称】情報処理装置、及び情報処理プログラム
(51)【国際特許分類】
G06F 8/70 20180101AFI20221130BHJP
G06N 3/12 20060101ALI20221130BHJP
G06N 20/00 20190101ALI20221130BHJP
【FI】
G06F8/70
G06N3/12 160
G06N20/00
(21)【出願番号】P 2019208006
(22)【出願日】2019-11-18
【審査請求日】2021-07-26
(73)【特許権者】
【識別番号】510214388
【氏名又は名称】株式会社エクスモーション
(74)【代理人】
【識別番号】100091225
【氏名又は名称】仲野 均
(74)【代理人】
【識別番号】100096655
【氏名又は名称】川井 隆
(72)【発明者】
【氏名】小▲濱▼ 宗隆
(72)【発明者】
【氏名】福岡 呂之
【審査官】山本 俊介
(56)【参考文献】
【文献】国際公開第2012/147825(WO,A1)
【文献】特開2017-162069(JP,A)
【文献】中山弘隆ほか,多目的最適化と工学設計 ーしなやかシステム工学アプローチー,第1版,日本,株式会社現代図書,2007年12月25日,pp.36-45
【文献】趙冬青ほか,島ごとに異なるデコード化法を用いたGAによる施設レイアウト問題の解法,情報処理学会研究報告 数理モデル化と問題解決(MPS) 2014-MPS-100 [online],日本,情報処理学会,2014年09月18日
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/77
G06N 3/12
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
ソフトウェアアーキテクチャの依存関係を遺伝的アルゴリズムによって改善する情報処理装置であって、
グループごとに管理され、グループを介した依存関係が設定されているソフトウェアアーキテクチャの要素と、当該要素の間の依存関係と、を取得する要素取得手段と、
前記取得した要素を染色体に符号化する符号化手段と、
前記符号化した染色体を進化させることにより、前記要素の属するグループを変化させる進化手段と、
前記取得した依存関係に基づく要素間の直接的なつながりを表す接続情報を生成する接続情報生成手段と、
前記進化させた染色体に対応する進化した依存関係を出力する出力手段と、を具備し
、
前記符号化手段は、前記要素に対応する遺伝子座を配列要素とする配列によって前記染色体を生成し、
各遺伝子座に、当該遺伝子座に対応する要素が属するグループの識別情報を遺伝子として格納
し、
前記進化手段は、
前記生成した接続情報に基づき突然変位を起こす遺伝子を選択し、前記遺伝子座が格納する
前記選択した遺伝子を、当該遺伝子に対応する要素が前記依存関係に基づいて対応する他の要素の遺伝子に置き換えることにより、前記染色体を突然変異させることを特徴とする情報処理装置。
【請求項2】
前記ソフトウェアアーキテクチャは、下位グループごとに管理される下位要素と、前記下位グループを上位要素として管理する上位グループとを有する階層構造を有しており、
前記進化手段は、前記階層構造の階層ごとに前記各グループと前記各要素の依存関係を
別々に進化させ、
前記出力手段は、前記階層ごとに
別々に進化した依存関係を統合して出力することを特徴とする請求項
1に記載の情報処理装置。
【請求項3】
前記進化手段は、前記進化させた染色体に対応する依存関係のメトリクスを計測することにより、前記染色体の進化の良否を判断することを特徴とする請求項1
又は請求項
2に記載の情報処理装置。
【請求項4】
前記進化手段は、
個別に前記染色体を進化させる複数のアイランドと、
前記染色体を前記アイランドに提供する提供手段と、
を用いて構成されていることを特徴とする請求項
3に記載の情報処理装置。
【請求項5】
前記アイランドで進化させている染色体を所定のタイミングで他のアイランドに移住させる移住手段を具備したことを特徴とする請求項
4に記載の情報処理装置。
【請求項6】
前記移住手段は、前記移住させる染色体が所定の遺伝子パターンを有している場合に、当該染色体の遺伝子を改変してから移住させることを特徴とする請求項
5に記載の情報処理装置。
【請求項7】
前記アイランドは、それぞれ異なるメトリクスを用いて前記計測を行うことを特徴とする請求項
4に記載の情報処理装置。
【請求項8】
前記出力した依存関係を機械学習によって学習した分類器によって評価する評価手段を具備したことを特徴とする請求項1から請求項
7までのうちの何れか1の請求項に記載の情報処理装置。
【請求項9】
ソフトウェアアーキテクチャの依存関係を遺伝的アルゴリズムによって改善する情報処理機能をコンピュータで実現する情報処理プログラムであって、
グループごとに管理され、グループを介した依存関係が設定されているソフトウェアアーキテクチャの要素と、当該要素の間の依存関係と、を取得する要素取得機能と、
前記取得した要素を染色体に符号化する符号化機能と、
前記符号化した染色体を進化させることにより、前記要素の属するグループを変化させる進化機能と、
前記取得した依存関係に基づく要素間の直接的なつながりを表す接続情報を生成する接続情報生成機能と、
前記進化させた染色体に対応する進化した依存関係を出力する出力機能と、
をコンピュータで実現する情報処理プログラム
であって、
前記符号化機能は、前記要素に対応する遺伝子座を配列要素とする配列によって前記染色体を生成し、
各遺伝子座に、当該遺伝子座に対応する要素が属するグループの識別情報を遺伝子として格納
し、
前記進化機能は、
前記生成した接続情報に基づき突然変位を起こす遺伝子を選択し、前記遺伝子座が格納する
前記選択した遺伝子を、当該遺伝子に対応する要素が前記依存関係に基づいて対応する他の要素の遺伝子に置き換えることにより、前記染色体を突然変異させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、及び情報処理プログラムに関し、例えば、ソフトウェアアーキテクチャの依存関係を改善するものに関する。
【背景技術】
【0002】
コンピュータプログラムを動作させる場合、これに伴って各種のライブラリを読み込むなど、その機能がソフトウェアアーキテクチャに大きく依存する。
そのため、アーキテクチャの構築・維持は極めて重要であり、近年のソフトウェアの高度化・大規模化に伴って、その重要性が更に増している。
【0003】
ところで、ソフトウェアアーキテクチャには、日常の業務で追加や修正がなされる上に、ときには、その場限りの対応などもなされ、例えばモジュールなどの依存関係に齟齬を来している場合がある。
これらを手動で修正するのは困難であり、修正作業を補助するシステムが求められている。
【0004】
このような依存関係の修復を補助する技術の研究として、例えば、非特許文献1の技術がある。この文献は、著者らが開発した各種手法を振り返ったものである。
ところで、アーキテクチャの改善では、色々な組み合わせを試す処理があり、本願発明者は、遺伝的アルゴリズムの適用が有効であるとの心証を持っていた。
しかし、遺伝的アルゴリズムでは、問題の種類ごとに遺伝子の構造とその善し悪しの計測方法を設計しなければならないところ、遺伝的アルゴリズムをアーキテクチャの依存関係に適用した前例がなく、全く手がかりのない最初から開発しなければならないという問題があった。
【先行技術文献】
【非特許文献】
【0005】
【文献】S.Mancoridis, B.S.Mitchell et al:”Using Automatic Clustering to Produce High-Level System Organizations of Source Code”、Published in:Proceedings.6thInternational Workshop on Program Comprehension. IWPC’98、1998、Print ISBN:0-8186-8560-3、Publisher:IEEE
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明は、ソフトウェアアーキテクチャの依存関係を改善することを目的とする。
【課題を解決するための手段】
【0007】
本発明は、前記目的を達成するために請求項1に記載の発明では、ソフトウェアアーキテクチャの依存関係を遺伝的アルゴリズムによって改善する情報処理装置であって、グループごとに管理され、グループを介した依存関係が設定されているソフトウェアアーキテクチャの要素と、当該要素の間の依存関係と、を取得する要素取得手段と、前記取得した要素を染色体に符号化する符号化手段と、前記符号化した染色体を進化させることにより、前記要素の属するグループを変化させる進化手段と、前記取得した依存関係に基づく要素間の直接的なつながりを表す接続情報を生成する接続情報生成手段と、前記進化させた染色体に対応する進化した依存関係を出力する出力手段と、を具備し、前記符号化手段は、前記要素に対応する遺伝子座を配列要素とする配列によって前記染色体を生成し、各遺伝子座に、当該遺伝子座に対応する要素が属するグループの識別情報を遺伝子として格納し、前記進化手段は、前記生成した接続情報に基づき突然変位を起こす遺伝子を選択し、前記遺伝子座が格納する前記選択した遺伝子を、当該遺伝子に対応する要素が前記依存関係に基づいて対応する他の要素の遺伝子に置き換えることにより、前記染色体を突然変異させることを特徴とする情報処理装置を提供する。
請求項2に記載の発明では、前記ソフトウェアアーキテクチャは、下位グループごとに管理される下位要素と、前記下位グループを上位要素として管理する上位グループとを有する階層構造を有しており、前記進化手段は、前記階層構造の階層ごとに前記各グループと前記各要素の依存関係を別々に進化させ、前記出力手段は、前記階層ごとに別々に進化した依存関係を統合して出力することを特徴とする請求項1に記載の情報処理装置を提供する。
請求項3に記載の発明では、前記進化手段は、前記進化させた染色体に対応する依存関係のメトリクスを計測することにより、前記染色体の進化の良否を判断することを特徴とする請求項1又は請求項2に記載の情報処理装置を提供する。
請求項4に記載の発明では、前記進化手段は、個別に前記染色体を進化させる複数のアイランドと、前記染色体を前記アイランドに提供する提供手段と、を用いて構成されていることを特徴とする請求項3に記載の情報処理装置を提供する。
請求項5に記載の発明では、前記アイランドで進化させている染色体を所定のタイミングで他のアイランドに移住させる移住手段を具備したことを特徴とする請求項4に記載の情報処理装置を提供する。
請求項6に記載の発明では、前記移住手段は、前記移住させる染色体が所定の遺伝子パターンを有している場合に、当該染色体の遺伝子を改変してから移住させることを特徴とする請求項5に記載の情報処理装置を提供する。
請求項7に記載の発明では、前記アイランドは、それぞれ異なるメトリクスを用いて前記計測を行うことを特徴とする請求項4に記載の情報処理装置を提供する。
請求項8に記載の発明では、前記出力した依存関係を機械学習によって学習した分類器によって評価する評価手段を具備したことを特徴とする請求項1から請求項7までのうちの何れか1の請求項に記載の情報処理装置を提供する。
請求項9に記載の発明では、ソフトウェアアーキテクチャの依存関係を遺伝的アルゴリズムによって改善する情報処理機能をコンピュータで実現する情報処理プログラムであって、グループごとに管理され、グループを介した依存関係が設定されているソフトウェアアーキテクチャの要素と、当該要素の間の依存関係と、を取得する要素取得機能と、前記取得した要素を染色体に符号化する符号化機能と、前記符号化した染色体を進化させることにより、前記要素の属するグループを変化させる進化機能と、前記取得した依存関係に基づく要素間の直接的なつながりを表す接続情報を生成する接続情報生成機能と、前記進化させた染色体に対応する進化した依存関係を出力する出力機能と、をコンピュータで実現する情報処理プログラムであって、前記符号化機能は、前記要素に対応する遺伝子座を配列要素とする配列によって前記染色体を生成し、各遺伝子座に、当該遺伝子座に対応する要素が属するグループの識別情報を遺伝子として格納し、前記進化機能は、前記生成した接続情報に基づき突然変位を起こす遺伝子を選択し、前記遺伝子座が格納する前記選択した遺伝子を、当該遺伝子に対応する要素が前記依存関係に基づいて対応する他の要素の遺伝子に置き換えることにより、前記染色体を突然変異させることを特徴とする情報処理プログラムを提供する。
【発明の効果】
【0008】
本発明によれば、遺伝的アルゴリズムを用いることにより、ソフトウェアアーキテクチャの依存関係を改善することができる。
【図面の簡単な説明】
【0009】
【
図1】情報処理装置のハードウェア的な構成を示した図である。
【
図2】情報処理装置の機能的な構成を説明するための図である。
【
図3】依存グラフ、染色体、及び接続情報の関係を説明するための図である。
【
図5】依存関係の遺伝子への符号化を説明するための図である。
【
図6】突然変異の起こし方を説明するための図である。
【
図8】2階層の染色体を処理するGA部の例を説明するための図である。
【
図9】依存関係の改善処理の手順を説明するためのフローチャートである。
【
図11】DNNによってアーキテクチャの善し悪しを評価する手順を説明するためのフローチャートである。
【発明を実施するための形態】
【0010】
(1)実施形態の概要
情報処理装置1(
図2)は、例えば、関数をファイル間で移動したり、ファイルをフォルダ間で移動することによって、コンピュータプログラムにおける依存関係を改善する。
これを実現するために、情報処理装置1は、関数間(前者の場合)やファイル間(後者の場合)の接続関係を保持しつつ、関数とファイルの組み合わせ、ファイルとフォルダの組み合わせを遺伝的アルゴリズムで試行錯誤する。
【0011】
GA部2は、関数やファイルなどの改善対象となっているコンピュータプログラムのソースコードを読み込んで、移動対象となっている要素の依存グラフを作成し、これを用いて染色体を生成する。
染色体は、要素(例えば関数)を遺伝子座とし、当該要素が属しているグループ(例えば、ファイル)を遺伝子として、要素がグループに属する態様を符号化したものである。
【0012】
GA部2は、このように構成した染色体に対して、遺伝子をある確率で突然変異させることにより、要素をグループ間で移動させる。
グループと要素の組み合わせを網羅的に全数探索すると計算時間上現実的でないところ、突然変異によって要素の移動を確率的に選択することにより、少ない試行回数で優れた組み合わせを探索することができる。
このように全数探索を避けて、確率的な選択によって準最適解を効率よく得るのが遺伝的アルゴリズムの目的とするところである。
【0013】
GA部2は、突然変異のほか、2点交叉も行って個体(依存グラフ)を進化させ、その善し悪しを評価関数を用いて行う。評価関数としては、依存関係の善し悪しを計量する計算手法であるメトリクスを複数種類用いて行う。
メトリクスは、種類によって長短(トレードオフ)が存在するため、複数種類のメトリクスを用いることにより、様々な環境に適応した個体をバランス良く進化させることができる。
【0014】
そして、GA部2は、進化させた評価の高い染色体に基づいて改善された依存グラフを生成し、これをAI部3に送る。
なお、GA部2は、アイランドと呼ばれる単位ごとに個別に個体を進化させ、コーディネータによって個体のアイランド間での移住を管理する、今回新たに開発したコーディネータモデルを採用した。
コーディネータは、個体を移住させる際に、パターンマッチにより問題のある遺伝子配列を発見し、これに解法アルゴリズムを適用して遺伝子を改変してから移住させる機能も有している。
【0015】
AI部3は、GA部2から送られてきた依存グラフを複数種類のメトリクスで計測する。
AI部3は、計測された複数のメトリクスを標準化して、これをDNNとランダムフォレストの入力データとする。
【0016】
DNNとランダムフォレストは、予め訓練データにより、依存グラフの品質を良・不可の2値に分類するように学習しており、AI部3は、これによって良と判定された依存グラフに基づくソースコードを改善案として出力する。
このように、情報処理装置1は、依存関係の改善案の作成(GA部2)と改善された依存関係の評価(AI部3)、及び改善されたソースコードの出力を自動的に行う。
【0017】
(2)実施形態の詳細
図1は、本実施の形態の情報処理装置1のハードウェア的な構成を示した図である。
情報処理装置1は、ソフトウェアアーキテクチャの依存関係を遺伝的アルゴリズムによって改善する情報処理装置であって、CPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13、インターフェース14、入力装置15、出力装置16、記憶装置17などがバスラインで接続されて構成されている。
【0018】
CPU11は、例えば、記憶装置17が記憶する改善プログラムに従って動作し、ソフトウェアアーキテクチャ(以下、アーキテクチャ)の依存関係の解析や改善を行う。
ROM12は、読み取り専用メモリであって、情報処理装置1が動作する際の基本的なプログラムやパラメータなどを記憶している。
RAM13は、読み書きが可能なメモリであって、CPU11が、遺伝的アルゴリズムやAI(artificial intelligence)のアルゴリズムに従って情報処理する際のワーキングメモリを提供する。
【0019】
インターフェース14は、例えば、インターネットなどの通信ネットワークや外部の機器と接続しており、外部の機器から改善対象のソフトウェアを受信したり、改善結果を外部の機器に送信したりすることができる。
入力装置15は、例えば、キーボード、マウスといった入力装置を備えており、オペレータが情報処理装置1を操作する際に使用される。
出力装置16は、ディスプレイやスピーカなどを備えており、改善プログラムの操作画面や解析結果を表示したり、操作音を出力したりする。
【0020】
記憶装置17は、半導体装置やハードディスクなどの大容量の記憶媒体を用いて構成されており、OS(Operating System)のほか、改善プログラムや改善対象のソースコードなどを記憶している。
【0021】
図2は、本実施の形態に係る情報処理装置1の機能的な構成を説明するための図である。
情報処理装置1は、GA部2とAI部3を用いて構成されている。
GA部2は、例えば、C言語のソースコードを読み込み、例えば、ライブラリなどで用いる関数やファイルなどの依存関係を解析する。
そして、当該依存関係を遺伝的アルゴリズムで適正化した依存関係の改善案を複数作成してAI部3に出力する。
【0022】
遺伝的アルゴリズムは、個体を進化させながら個体の善し悪しを評価関数によって評価し、ある程度収束したところで、準最適な解を出力する手法であり、最適解に近い解(偶然最適解の場合もある)が得られる。
実用上は、個体が要求されている品質を満たしていれば足りるため、最適解を全数探索する必要はなく、準最適な解を確率的に探索することにより、処理時間を大幅に短縮することができる。
なお、個体とは、染色体を具現化した実態物であり、ここでは染色体6によって表された依存グラフや依存関係を意味する。
【0023】
AI部3は、GA部2が作成した改善案の善し悪しを深層ニューラルネットワーク(以下、DNN)とランダムフォレストで評価する。
AI部3は、この評価に合格したアーキテクチャの改善案をソースコードの形でユーザに提供する。
【0024】
図3は、依存グラフ5、染色体6、及び接続情報7の関係を説明するための図である。
GA部2は、改善対象であるソースコードを解析して依存グラフ(依存関係グラフとも呼ばれる)を作成する。
依存グラフは、例えば、フォルダ内の関数など、グループ化された要素の依存関係を表すものであって、詳細は後述する。
このように、情報処理装置1は、グループごとに管理され、グループを介した依存関係が設定されているソフトウェアアーキテクチャの要素と、当該要素の間の依存関係と、を取得する要素取得手段を備えている。
【0025】
そして、GA部2は、依存グラフ5に基づいて染色体6と接続情報7を生成する。
染色体6は、アーキテクチャの移動対象となっている要素を遺伝子によって符号化(コード化)したものであり、遺伝的アルゴリズムで進化の対象となるものである。
このように情報処理装置1は、要素を染色体に符号化する符号化手段を備えている。
【0026】
一方、接続情報7は、後述するように依存関係に基づく要素間の直接的なつながりを表している。
接続情報7は、進化の後に(要素をグループ間で移動した後に)、要素間の依存関係を再構築したり、あるいは、染色体6を突然変異させる場合に、接続関係が維持されるものだけ許されるように、突然変異(ミューテーション)の態様を制限するのに用いられる。
後者の場合、元の依存関係からかけ離れた劣悪な染色体6が生成されて、進化処理が空費されるのを抑制することができる。
【0027】
図4は、依存グラフ5を説明するための図である。
依存グラフ5は、アーキテクチャの要素(構成要素)の依存関係を表すものであり、本実施の形態では、依存関係を低レベル層(レイヤ)と高レベル層の2層構造で構成した。
【0028】
図4(a)は、低レベル層の依存関係の一例を示している。
低レベル層の依存グラフは、関数やメソッドなどの要素と、これらをグループにまとめるファイル、クラスなどで構成されている。
【0029】
図の例では、ファイル8aには、関数81a~81cがグループ化されて属している。ファイル8b、8cも同様である。矢線は、関数81~83の接続関係を表している。
なお、関数81a、81b、・・・を特に区別しない場合は、単に関数81と記す。他の表記も同様とする。
これらのファイルや関数は、C言語の場合、例えば、ヘッダファイルやこれによってインクルードされるものである。
【0030】
図の例では、例えば、関数81aは、実行する際に、関数81b、81cを呼び出して利用するため、関数81b、81cに接続している。
同様に、関数81cは、ファイル8bの関数82aと、ファイル8cの関数83bにグループを超えて接続し、関数81bは、ファイル8cの関数83aにグループを超えて接続している。
【0031】
ここで、接続関係とは、例えば、関数81cが関数82aを利用するといったように、グループにかかわらずに要素の直接的な利用関係を意味する。
GA部2は、これらグラフの要素の接続関係を解析して、例えば、隣接行列、接続行列、リンクトリストなどで表し、これを接続情報7として保持する。
【0032】
一方、関数81cから関数82aを呼び出す場合、ファイル8bを指定してから、関数82aを指定する必要がある。このように、依存関係とは、グループを介した要素の利用関係を意味する。
【0033】
GA部2は、突然変異によって関数をファイル間で移動するが、接続関係を有する要素のグループ間で移動することもできる。
例えば、関数82aは、関数81cと接続関係を有するため、ファイル8bからファイル8aに移動できるが、ファイル8cには、接続関係を有する関数がないため、ファイル8cには、移動できない。詳細については後述する。
なお、関数の移動によって空のファイルが生じる場合があるが、これを許容するのと対応して新しいファイルを生成することを可能としている。
【0034】
図4(b)は、高レベル層の依存関係の一例を示している。
高レベル層の依存関係は、ファイルを要素とし、これをグループにまとめるフォルダやモジュールなどで構成されている。
このように、低レベル層でのグループを要素とし、これを更にグループ化する高レベル層を設定することにより、依存関係を多層化することができる。本実施の形態では、2層構造としたが、更に多層とすることも可能である。
【0035】
図の例では、フォルダ9aには、ファイル8a、8bがグループ化されて属している。 フォルダ9b、9cも同様である。矢線は、ファイル8a、8b、・・・の接続関係を表している。
【0036】
ファイル8aは、他のフォルダ9の要素と接続関係を有しないので、移動できないが、ファイル8bは、フォルダ9cのファイル8c、及びフォルダ9bのファイル8dと接続関係を有するため、フォルダ9cとフォルダ9bに移動することができる。
なお、フォルダに関しても空のフォルダが生じるのを許容するのと対応して新しいフォルダを生成することを可能としている。
【0037】
以上のように、本実施の形態に係るアーキテクチャは、下位グループ(低レベル層のファイル)ごとに管理される下位要素(関数)と、下位グループを上位要素として管理する上位グループ(フォルダ)とを有する階層構造を有している。
【0038】
図5は、依存関係の遺伝子への符号化を説明するための図である。
図5(a)は、一例として、要素数5、グループ数3のアーキテクチャの依存グラフを表しており、各グループに属する要素を括弧で表すとグループ1(要素1、2)、グループ2(要素3)、グループ3(要素4、5)となっている。
【0039】
グループと要素は、低レベル層の場合は、ファイルと関数などであり、高レベル層の場合はフォルダとファイルなどである。
要素1が要素2に接続することを要素1→要素2などと、矢線を用いて表すと、要素間の接続関係は、要素1→要素2→要素3→要素5→要素4となっている。
【0040】
GA部2は、依存グラフによってグループ分けされた要素に対して、各要素が所属するグループのラベル(グループの識別情報)を遺伝子とする。そして、各要素に対応した遺伝子座を1列に並べた配列に、これら遺伝子を要素に対応させて格納することにより染色体6を作成する。
このように、符号化手段は、要素に対応する遺伝子座を配列要素とする配列によって染色体を生成し、各遺伝子座に、当該遺伝子座に対応する要素が属するグループの識別情報を遺伝子として格納している。
【0041】
例えば、GA部2は、
図5(a)のアーキテクチャを、
図5(b)のように符号化して染色体6に表現する。
染色体の長さは要素数となり、配列の各配列要素は、先頭から要素1、要素2、・・・に対応する遺伝子座となっている。
各遺伝子座には、遺伝子座に対応する要素が属するグループのラベルが遺伝子として格納される。
【0042】
図の例では、染色体6は(1、1、2、3、3)となっており、これらは、要素1~5の属するグループのラベルである。
このようにして構成した染色体6に対し、GA部2は、遺伝的アルゴリズムに従って突然変異と2点交叉を行い、これを進化させていく。
【0043】
図6は、突然変異の起こし方を説明するための図である。
個体の進化は、染色体6の突然変異と2点交叉をベースに行うが、突然変異に関しては、接続情報7を用いた2段階の制御によって行う。
【0044】
第1段階では、GA部2は、突然変異を起こす遺伝子を選択する。このとき、当該遺伝子の遺伝子座に対応する要素の接続関係を接続情報7で調べ、他のグループに属する要素と接続している遺伝子を選択対象とする。
【0045】
図6(a)の例では、要素1、4は、他グループの要素と接続していないため、GA部2は、要素1、4の遺伝子座の遺伝子は突然変異の対象とはせずに、選択対象から外す。
一方、要素2、3、5は、他グループの要素と接続しているため、これらの要素の遺伝子座の遺伝子は、突然変異の選択対象となる。
【0046】
第2段階では、GA部2は、選択した遺伝子のラベルを他のグループのラベルに変更することにより突然変異を行う。
この際に、変異先のグループは、選択した遺伝子に対応する要素が、接続の方向にかかわらずに接続している要素の属するグループとする。
【0047】
図6(b)の例では、要素2は、要素3と接続しているため、要素2は、要素3の属するグループ2に移動することができる。
要素2に対応する遺伝子を突然変異させて当該要素2をグループ2に移動させた場合、染色体6は(1、1、2、3、3)から(1、2、2、3、3)になる。
【0048】
また、接続の方向は、要素2から要素3であるが、接続の方向性は問わないため、要素3を要素2の属するグループ1に移動することもできる。
更に、要素3は、要素5とも接続しているため、要素3を要素5の属するグループ3に移動することもできる。
【0049】
GA部2は、以上のように染色体6を突然変異させて要素の属するグループを変更させるほか、遺伝的アルゴリズムで一般に行われている2点交叉も行う。本実施の形態で行った2点交叉は、2つの染色体6を、それぞれランダムに選択した同じ2カ所で切断し、切り出された内側の遺伝子配列を交換するものである。
ランダムに選択した2点で交叉を行っても、接続情報7を別途管理しているため、これによって依存関係を復元することにより、依存グラフ全体としての整合性を保つことができる。
【0050】
このように、情報処理装置1は、符号化した染色体を進化させることにより、要素の属するグループを変化させる進化手段を備えている。
そして、当該進化手段は、遺伝子座が格納する遺伝子を、当該遺伝子に対応する要素が依存関係に基づいて作成された接続情報で対応する他の要素の遺伝子に置き換えることにより、当該染色体を突然変異させる。
【0051】
図7は、GA部2の構成を説明するための図である。
GA部2は、アイランドモデル(島モデル)を利用して遺伝子を進化させる。
アイランドモデルとは、アイランドと呼ばれる単位ごとに遺伝的アルゴリズムのモジュール(Sub-GA)を備え、これらアイランドで進化を同時並行で進めるモデルである。
同時並行的に進化させることにより進化を早めたり、また、アイランドごとに異なる進化環境として、個体を異なった態様で進化させることにより局所解を回避したりする。
【0052】
一般に用いられるアイランドモデルは、適当なタイミングで各アイランドが隣接するアイランドに個体を移住させる。
なお、個体を移住させるとは、染色体6を他のアイランドのSub-GAに渡すことを意味する。
以下では、個体を進化させたり、個体を移住させることを、よりコンピュータの処理に近い表現とするために染色体6を進化させたり、染色体6を移住させると言うことにする。
【0053】
この他に、マスタで遺伝的アルゴリズムを実行しつつ、マスタで進化させている個体の染色体の一部について、複数存在するスレーブで局所解探索を行ってマスタに戻す、マスタスレーブモデルというものもある。
【0054】
これに対して、GA部2では、コーディネータとアイランドを並列実行の単位とするアイランドコーディネータモデルを採用した。アイランドコーディネータモデルは、本願発明者が今回新たに開発したものである。
図に示したように、アイランドコーディネータモデルでは、GA部2は、複数のアイランド22a~22cと、移住処理などを支援するコーディネータ21を用いて構成されている。図では、一例として3つのアイランド22を用意したが、他の個数でもよい。
【0055】
遺伝的アルゴリズムでは、複数の染色体を交叉や突然変異させて進化させるため、初期状態として複数の染色体が必要である。
そこで、GA部2は、染色体6をコピーして複数作成し、これを各アイランド22に提供する。
【0056】
染色体6をランダム生成することも可能であるが、元のアーキテクチャの構造をできるだけ維持するため、本実施の形態では、全てのアイランド22で元のアーキテクチャから生成した同じ染色体6を初期の個体群(染色体群)として用いる。
全てのアイランド22で同一の状態からスタートし、突然変異によって多様性が生じてくる。
【0057】
なお、各アイランド22に染色体6を一つずつ渡して、アイランド22がこれを複製して増やすように構成することもできる。
また、コーディネータ21で突然変異を起こして染色体群を生成し、生成した全人口を各アイランド22に提供したり、全人口の部分集合をアイランド22に提供したりなど、各種の形態が可能である。
このように、進化手段は、個別に染色体を進化させる複数のアイランドと、染色体をアイランドに提供する提供手段と、を備えている。
【0058】
アイランド22は、Sub-GAによって突然変異や2点交叉などを行い、染色体6を進化させる。アイランド22は、その際に、作成された染色体6の良否を判定するために評価関数(適応度関数)を用い、これによる評価がよいもの(即ち、より環境に適応した染色体6)ほど、子孫を残せる確率を高いため、進化を進める。
【0059】
ここで、アイランド22では、評価関数として依存グラフのメトリクスを用いた。メトリクスは、アーキテクチャの複雑さの程度を計測して数値化したものであり、各種の計算方法が考案されている。
例えば、メトリクスとしては、ファイル数(全体のファイル数)、最大ファイル数(1つのフォルダ内にあるファイル数の最大値)、Cycle Edges(循環依存の原因となるエッジの数)、Cycle Paths(循環依存のサイクル数)、・・・などがある。
【0060】
また、アイランド22a~22cは、例えば、アイランド22aでは、メトリクスとしてファイル数を用い、アイランド22bでは、メトリクスとして最大ファイル数を用いるといったように、アイランド22ごとに異なるメトリクスを採用した。
実際にはより多くのアイランド22を用い、12種類ほどのメトリクスを評価関数として採用した。
【0061】
各メトリクスには一長一短があるところ、このように、進化させた染色体6の良否を判定する評価軸(進化の環境)をアイランド22ごとに変えることにより、各アイランド22では、その評価軸により適応するアーキテクチャの進化を促すことができる。
なお、これは一例であって、全てのアイランド22で単一のメトリクスを用いたり、複数のアイランド22で同じメトリクスを用いてもよい。
【0062】
このように、進化手段は、進化させた染色体に対応する依存関係のメトリクスを計測することにより、染色体の進化の良否を判断する。
そして、各アイランドは、それぞれ異なるメトリクスを用いてメトリクスの計測を行う。
【0063】
アイランド22は、染色体6の進化を進めつつ、適当なタイミングでメトリクスが優秀な染色体6をコーディネータ21に送出する。
適当なタイミングとしては、例えば、定期的としたり、実行時に指定した一定世代ごととすることができる。
【0064】
また、評価関数の計測値がある程度飽和してきて(即ち、進化が進み、進化の進み具合がだんだん小さくなってきて)、ある閾値に達した場合に、染色体6の送出を開始したり、進化の世代数が予め設定した値に達した場合に送出を開始するなど、進化初期の染色体6を送出対象から外すように構成することもできる。
【0065】
一方、コーディネータ21は、アイランド22間での染色体6の移住管理、遺伝子改変、染色体の統合、などの処理を行う。
(移住管理)
コーディネータ21は、あるアイランド22から届いた染色体6を移住管理用のキュー(先着順の列)の最後尾に入れて保持すると共に、先頭の染色体6を当該アイランド22に送出することにより染色体6を移住させる。
これにより、各アイランド22で進化した優秀な個体を異なるアイランド22へ移住させることができる。
【0066】
各アイランド22で使用しているメトリクスには先述したように長短があるため、コーディネータ21が各アイランド22の染色体6を別のアイランド22に移住させることで、複数のメトリクスをより満足させるバランスのよいアーキテクチャの改善を行うことができる。
このように、情報処理装置1は、アイランドで進化させている染色体を所定のタイミングで他のアイランドに移住させる移住手段を備えている。
【0067】
なお、これは一例であって、例えば、コーディネータ21の方から2つのアイランド22に移住要請をかけて、染色体6を提出させ、更に、これらを交換した後、元のアイランド22に戻すなど、何らかの方法を用いて染色体6を移住させればよい。
【0068】
(遺伝子改変)
コーディネータ21は、アイランド22から染色体6を受け取って移住させる際に、当該染色体6と予め記憶してある局所解パターンと照合する。そして、当該パターンを検出した場合には、所定の解法アルゴリズムに従って遺伝子の改変を行う。
【0069】
より詳細には、染色体6は、要素の循環依存などの、遺伝子の配列のパターンで簡単に発見できる問題を持っている場合がある。このような場合に、これを改善する解法アルゴリズムを染色体6に適用して遺伝子改変を行うと、当該問題が解決されたより優れた染色体6となる可能性がある。
【0070】
GA部2は、局所解の適用対象となる局所解パターンと、これに対する解法アルゴリズムのセットを複数有しており、染色体6を移住させる際に、移住対象となっている染色体6に対する局所解パターンの照合・検出と、これに対応する解法アルゴリズムの適用による遺伝子改変を行う。
【0071】
GA部2は、このように遺伝子改変を行った後、当該染色体6を移住先のアイランド22に送って移住させる。
このように、移住手段は、移住させる染色体が所定の遺伝子パターンを有している場合に、当該染色体の遺伝子を改変してから移住させる。
【0072】
局所解パターンのマッチングによる遺伝子改変は、当該パターンがマッチした全ての染色体6に対して行ってもよいが、本実施の形態では、遺伝子改変を一種の突然変異と見なし、プログラム実行開始時に設定した突然変異の確率に従って行うことにした。
このように、遺伝子改変を一定確率で行うことにしたのは、改変の適用が必ずしも全体の解として良いとは限らないためである。
【0073】
検出と解法の適用が、遺伝子の状態のままで行うことが難しい場合は、染色体6を一旦依存グラフの形に復号化し、依存グラフベースで局所解パターンのマッチングと、解法アルゴリズムの適用を行う。そして、解法を適用した依存グラフベースを再び染色体6に符号化して他のアイランド22に移住させる。
【0074】
このように、染色体6の移住に際して遺伝子改変処理を介在させることにより、遺伝的アルゴリズムによる進化と平行して、遺伝的アルゴリズム以外の方法による局所解探索を行うことができ、これによって、遺伝子の高速な局所解探索とその適用が可能となる。
【0075】
コーディネータ21では、局所解の探索を高速に行うため、遺伝子改変対象の検出をパターンマッチで行っているが、より複雑な局所解探索や解法の適用を行う場合には、マスタスレーブモデルのように、局所解探索を別の実行単位(スレーブ)に割り当てても良い。これにより、局所解探索を並行に実行し、かかる時間を短縮することができる。
【0076】
(染色体の統合)
GA部2は、上記のコーディネータモデルによる遺伝子の進化を低レベル層の染色体6(低)と、高レベル層の染色体6(高)で別々に行い、その後、進化した染色体6(低)と染色体6(高)を統合することにより、2層に渡って改善された依存関係を改善案として出力する。
【0077】
GA部2は、染色体6(低)と染色体6(高)を統合した染色体6(低+高)を、これらの組み合わせである(染色体6(低)、染色体6(高))によって生成する。
この場合、染色体6(低)、染色体6(高)は、それぞれ低レベル層、高レベル層での部分解となり、染色体6(低+高)が染色体レベルで統合された解となる。
【0078】
GA部2は、染色体6(低+高)を用いて、ファイルや関数などは、染色体6(低)に基づき、フォルダやファイルなどは、染色体6(高)に基づいて改善前の依存グラフを再構成することにより、低レベル層と高レベル層が統合された依存グラフを改善案として作成する。
【0079】
統合の際の各要素の移動に伴う整合性の保持は、例えば、C言語の場合、ヘッダファイルとinclude文の修正などにより行う。これは、低レベル層の移動対象となっている要素、例えば、関数に一意のキーを割り当て、当該関数の移動や、当該関数が属していたファイルの移動を追跡することにより行うことができる。
そして、GA部2は、完成した依存グラフを評価するため、AI部3に送出する。
【0080】
このように、進化手段は、階層構造の階層ごとにグループと要素の依存関係を進化させる。
更に、情報処理装置1は、進化させた染色体に対応する進化した依存関係を出力する出力手段を備えている。
そして、出力手段は、階層ごとに進化した依存関係を統合して出力する。
【0081】
このように、2階層の染色体6(低)と染色体6(高)を別々に進化させた後に統合する構成としては、各種考えられる。
単純な例では、GA部2に、
図7で説明したコーディネータモデルによるモジュールを2セット用意し、一方で染色体6(低)を進化させ、他方で染色体6(高)を進化させ、これらを統合して出力する構成により実現することができる。
本実施の形態では、効率化を進めるため、次に説明する、単一のコーディネータ21が低レベル層と高レベル層の両方を処理すると共に統合も行う構成を採用した。
【0082】
図8は、2階層の染色体を処理するGA部2の例を説明するための図である。
GA部2は、低レベル層用のアイランド22a~22cと、高レベル層用のアイランド22d~22fを備えている。
コーディネータ21は、これらアイランド22から染色体6が送られてきた場合、これを統合管理用のキュー25の最後尾に格納する。
【0083】
この際に、コーディネータ21は、キュー25の先頭に格納されている染色体6の層が、アイランド22から送られてきた染色体6との層が異なる場合、これらを統合して依存グラフを生成してAI部3に出力する。
図の例では、アイランド22dが染色体6(高)を送ってきたところ、キュー25の先頭には染色体6(低)が格納されているため、コーディネータ21は、染色体6(高)をキュー25の最後尾に追加する一方、キュー25の先頭から染色体6(低)を取り出して当該染色体6(高)と統合し、依存グラフを作成して出力する。
【0084】
移住に関しては、先に説明した通りであり、コーディネータ21は、低レベル層、高レベル層ごとに移住管理用のキューを備えており、染色体6(低)に関しては低レベル層用のアイランド22間で移住させ、染色体6(高)に関しては高レベル層用のアイランド22間で移住させる。
あるいは、キュー25に移住管理用のキューを兼務させ、キュー25の先頭の染色体6を対応する階層のアイランド22に移住させるように構成するなど、他の構成を用いてもよい。
【0085】
図9は、GA部2が行う依存関係の改善処理の手順を説明するためのフローチャートである。
以下の処理は、CPU11が改善プログラムに従って行うものである。
まず、
図9(a)に示したように、CPU11は、記憶装置17から改善対象のソースコードを読み込み、これから低レベル層の依存グラフ(低)と高レベル層の依存グラフ(高)を作成してRAM13に記憶する(ステップ5)。
【0086】
次に、CPU11は、RAM13に記憶した、これら依存グラフを遺伝子に符号化して染色体6(低)と染色体6(高)を作成し、これらをRAM13に記憶する(ステップ10)。
【0087】
次に、CPU11は、RAM13に記憶した染色体6(低)と染色体6(高)を遺伝的アルゴリズムで処理するために複数複製して、染色体6(低)を低レベル層用のアイランド22に、染色体6(高)を高レベル層用のアイランド22に送る(ステップ15)。
これにより、CPU11(各アイランド22)は、RAM13をワーキングメモリとして、染色体6(低)と染色体6(高)の進化を階層別に開始する。
以下、CPU11は、染色体6(低)と染色体6(高)の進化を別々に行うが、染色体6(低)、染色体6(高)をまとめて染色体6と記す。
【0088】
CPU11(アイランド22)は、ある程度進化が進むと、所定のタイミングで進化した染色体6をコーディネータ21に送る。
そして、CPU11(コーディネータ21)は、送られてきた染色体6に対して移住処理を行う(ステップ20)。
以下、CPU11は、各アイランド22での進化が終了するまで移住処理を継続する。
アイランド22は、評価関数の値が目標値に達した場合や、あるいは、予め指定しておいた世代数に達した場合など、所定の条件を満たした場合に進化を終了する。
【0089】
図9(b)は、ステップ20の移住処理を説明するためのフローチャートである。
CPU11(コーディネータ21)は、アイランド22から染色体6が送られてくると、これに対してマッチング処理にて局所解パターンの検出を行う(ステップ50)。
局所解パターンを検出しなかった場合(ステップ50;N)、CPU11(コーディネータ21)は、キュー25の先頭に異なる層の染色体6がある場合は、これと合わせて統合を行い、依存グラフを生成してAI部3に出力する(ステップ65)。
次に、アイランド22から受け取った染色体6を移住管理用のキューを解して他の同じ階層用のアイランド22に移住させる(ステップ70)。
【0090】
一方、当該パターンを検出した場合(ステップ50;Y)、CPU11(コーディネータ21)は、更に突然変異の発現確率によって遺伝子改変を行うか否かを判断する(ステップ55)。
遺伝子改変を行わない場合(ステップ50;N)、CPU11は、ステップ65の処理に移行する。
一方、遺伝子改変を行う場合(ステップ55;Y)、解法アルゴリズムに従って染色体6の遺伝子の配列を改変し(ステップ60)、ステップ65の処理に移行する。
【0091】
次に、AI部3について説明する。
GA部2が改善した依存グラフを出力すると、AI部3は、複数種類のメトリクスA、B、C、・・・、Xでこれを計測する。
【0092】
AI部3は、この計測値を[0、1]の範囲にマッピングすることにより標準化して、DNNやランダムフォレストへの入力データとする。
例えば、依存グラフを10種類のメトリクスで計測する場合、10個の計測値が得られるが、これを標準化した10次元ベクトルが当該依存グラフの特徴量であり、入力データとなる。
【0093】
図10は、AI部3が備えるDNNの構成を説明するための図である。
DNNは、一般に利用されているものと同じであり、入力層、中間層、出力層から構成されている。DNNやランダムフォレストは、分類対象を学習結果に基づいて非線形分離する機械学習器である。
【0094】
入力層は、入力データを入力する層であり、入力層のサイズは、入力データの次元数と同じになっている。
中間層は、全結合層となっており、ReLU関数などの非線形関数を実装している。中間層の各層のユニット数は、入力層と同程度としたが、層数や各層のユニット数は、学習結果の評価によって調整した。
出力層は、例えば、シグモイド関数を用いて、入力データに係る依存関係が良か不可かの2次元の2値分類を行う。
【0095】
DNNは、予め訓練データを用いて、誤差逆伝搬法でパラメータを調節することにより依存関係の善し悪しを判定するように学習してある。
ここで、訓練データは、入力データと正解ラベル(良、不可)の組であり、人間がアーキテクチャの善し悪しを判断して作成した。
このように構成されたDNNは、GA部2が順次出力する改善済みのアーキテクチャに対して、それぞれ良・不可を判定して、その判定結果を出力する。
【0096】
図11は、AI部3がDNNによってアーキテクチャの善し悪しを評価する手順を説明するためのフローチャートである。
CPU11は、GA部2が出力した依存グラフをRAM13から読み出す(ステップ150)。
次に、CPU11は、読み出した依存グラフを用いて各メトリクスを計測し、それらの値をRAM13に記憶する(ステップ155)。
【0097】
次に、CPU11は、RAM13に記憶したメトリクスを標準化して(ステップ160)、DNNに入力する(ステップ165)。
そして、CPU11は、DNNによる良・不可の判定を出力する(ステップ170)。
【0098】
一方、ランダムフォレストは、アンサンブル学習(複数種類の学習器を組み合わせる手法)の一種であり、複数の決定木を用いて構成されている。
各決定木は、例えば、ブートストラップ(重複を許して入力データをサンプリングする手法)によって作成した異なるデータセット(ブートストラップデータ集合)で訓練されている。
このように各決定木は、異なるデータセットで訓練されているため、各決定木の判定がばらつくことになり、これらの多数決を取ることによって、アーキテクチャの良・不可を判定して、その判定結果を出力する。
【0099】
情報処理装置1は、以上のようにしてDNNとランダムフォレストの判定に基づいて、最終的な改善案を提出する。
これは、例えば、DNNとランダムフォレストの双方で良と判定されたソースコードを、改善案として推薦する表示をディスプレイに表示するなど、各種の形態が考えられる。
例えば、DNNとランダムフォレストの双方で良と判定されたソースコードをAランク、どちらか一方だけで良と判定されたソースコードをBランクなど、ランク付けして表示することもできる。
このように、情報処理装置1は、出力した依存関係を機械学習によって学習した分類器によって評価する評価手段を備えている。
【0100】
以上に説明した実施の形態により、次のような効果を得ることができる。
(1)アーキテクチャの依存グラフから、遺伝的アルゴリズムを用いて改善案を複数作成することができる。
(2)作成した改善案について、ディープラーニングを用いてその善し悪しを判定することができる。
(3)改善案の修正項目を自動的にソースコードに反映することができる。
(4)依存関係のネットワークを接続情報とグループ情報(クラスタ)に分けて符号化することができる。
(5)遺伝的アルゴリズムによる依存グラフの進化を実装する。
(6)遺伝子の突然変異に接続情報を用いた制約を課すことができる。
(7)各アイランドで異なるメトリクスを用いて進化させ、遺伝子を混合することで、複数のメトリクス間でのトレードオフを実現する。
(8)各アイランドでの染色体の移動時に、コーディネータがアーキテクチャの改善パターンを適用することによって、アーキテクチャの進化を加速させることができる。
(9)各アイランドでの移住により遺伝子を混合させるが、混合の結果を複数出力して、ディープラーニングによって絞り込みを行うことができる。
【符号の説明】
【0101】
1 情報処理装置
2 GA部
3 AI部
5 依存グラフ
6 染色体
7 接続情報
8 ファイル
9 フォルダ
11 CPU
12 ROM
13 RAM
14 インターフェース
15 入力装置
16 出力装置
17 記憶装置
21 コーディネータ
22 アイランド
25 キュー
81、82、83 関数