(57)【特許請求の範囲】
【請求項１】
プログラム部品を組み合わせて所望のプログラムを合成するプログラム合成装置において、
予め機能或いは効果に基づき分類されたプログラム部品を記憶する部品記憶手段と、
前記プログラム部品の分類に基づき、この分類毎にどのように実行するかを指定することによって前記所望のプログラムの概略処理手順を指定する概略処理手順入力部と、
前記部品記憶手段に記憶されたプログラム部品から前記概略処理手順に対応するプログラム部品を、遺伝的アルゴリズムに基づいて探索する部品探索手段と、
前記部品探索で探索されたプログラム部品を結合してプログラムを合成する合成手段と、
前記合成手段で合成されたプログラムを実行する合成プログラム実行手段と、
前記合成手段で合成されたプログラムの性能を、入力データが前記所望のプログラムに入力されたときにこの処理結果として出力されることが期待されている出力データと、該プログラムに前記入力データを与えて前記合成プログラム実行手段で実行し、この実行結果として得られる出力データとの一致の度合いに基づいて評価する評価手段と、を具備することを特徴とするプログラム合成装置。
【請求項２】
前記部品探索手段は、前記処理手順指定手段より与えられる概略処理手順に含まれる個々の概略処理の並びに従って、前記プログラム部品記憶手段からプログラム部品を選択して配列し、染色体を得ることを特徴とする請求項１に記載のプログラム合成装置。
【請求項３】
前記染色体は、実行順序を持った一連のプログラム部品の流れであり、前記部品探索手段により異なった配列方法で作られる複数の染色体は、染色体集団を構成することを特徴とする請求項２に記載のプログラム合成装置。
【請求項４】
前記染色体集団は、前記プログラム結合手段に供給され、当該プログラム結合手段は、個々の染色体についてプログラム部品間の引数対応を決定することを特徴とする請求項３に記載のプログラム合成装置。
【請求項５】
前記プログラム結合手段により引数対応を付けられた染色体集団は前記プログラム評価手段に供給され、当該プログラム評価手段は、個々の染色体をプログラムとして実行し、各々のプログラムの評価値を算出することを特徴とする請求項４に記載のプログラム合成装置。
【請求項６】
前記部品探索手段は、より良い評価値を得る可能性の高い染色体を交叉又は突然変異を用いて生成し直すことを特徴とする請求項２に記載のプログラム合成装置。
【請求項７】
予め機能或いは効果に基づき分類された複数のプログラム部品のうち、所定のプログラム部品を組み合わせて所望のプログラムを合成するプログラム合成方法において、
前記プログラム部品の分類に基づき、この分類毎にどのように実行するかを指定することによって前記所望のプログラムの概略処理手順を指定する概略処理手順入力ステップと、
前記分類された複数のプログラム部品から前記概略処理手順に対応するプログラム部品を、遺伝的アルゴリズムに基づいて探索する部品探索ステップと、
この部品探索で探索されたプログラム部品を結合してプログラムを合成する合成ステップと、
前記合成ステップにおいて合成されたプログラムを実行する合成プログラム実行ステップと、
前記合成ステップにおいて合成されたプログラムの性能を、入力データが前記所望のプログラムに入力されたときにこの処理結果として出力されることが期待されている出力データと、該プログラムに前記入力データを与えて前記合成プログラム実行ステップで実行し、この実行結果として得られる出力データとの一致の度合いに基づいて評価して評価値を求め、その評価値に基づいて前記部品選択ステップ、合成ステップを繰り返す評価ステップと、を具備することを特徴とするプログラム合成方法。
【請求項８】
前記部品探索ステップは、前記処理手順指定ステップにおいて指定された概略処理手順に含まれる個々の概略処理の並びに従って、前記分類された複数のプログラム部品からプログラム部品を選択して配列し、染色体を得ることを特徴とする請求項７に記載のプログラム合成方法。
【請求項９】
前記染色体は、実行順序を持った一連のプログラム部品の流れであり、前記部品探索ステップによって異なった配列方法で作られる複数の染色体は、染色体集団を構成することを特徴とする請求項８に記載のプログラム合成方法。
【請求項１０】
前記染色体集団は、前記プログラム結合ステップに供給され、当該プログラム結合ステップにおいて、個々の染色体についてプログラム部品間の引数対応が決定されることを特徴とする請求項９に記載のプログラム合成方法。
【請求項１１】
前記プログラム結合ステップにおいて引数対応が付けられた染色体集団は前記評価ステップに供給され、当該評価ステップは、個々の染色体がプログラムとして実行し、各々のプログラムの評価値を算出することを特徴とする請求項１０に記載のプログラム合成方法。
【請求項１２】
前記部品探索ステップは、より良い評価値を得る可能性の高い染色体を交叉又は突然変異を用いて生成し直すことを特徴とする請求項８に記載のプログラム合成方法。
【請求項１３】
プログラム部品を組み合わせて所望のプログラムを合成するプログラムコード手段が記録された、計算機により読み出し可能な記録媒体において、
予め機能或いは効果に基づき分類されたプログラム部品を記憶させるインストラクション手段と、
前記プログラム部品の分類に基づき、この分類毎にどのように実行するかを指定することによって前記所望のプログラムの概略処理手順を指定させるインストラクション手段と、
前記プログラム部品から前記概略処理手順に対応するプログラム部品を、遺伝的アルゴリズムに基づいて探索させるインストラクション手段と、
前記部品探索で探索されたプログラム部品を結合してプログラムを合成させるインストラクション手段と、
この合成されたプログラムを実行させるインストラクション手段と、
前記合成されたプログラムの性能を、入力データが前記所望のプログラムに入力されたときにこの処理結果として出力されることが期待されている出力データと、該プログラムに前記入力データを与えて前記合成プログラム実行手段で実行し、この実行結果として得られる出力データとの一致の度合いに基づいて評価させるインストラクション手段とを具備することを特徴とする計算機により読み出し可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピューターのプログラムを予め登録されているプログラム部品から合成する装置及び方法に関し、特に、最初は暫定的なプログラムを生成し、そのプログラムに対して徐々に改良を加えることによって性能の良い最終的なプログラムを合成するプログラム合成装置およびプログラム合成方法に関する。
【０００２】
【従来の技術】
過去に蓄積したプログラム部品を組み合わせて新しいプログラムを作る技術、即ちプログラムの部品合成においては、処理する課題に関して人間の専門家が持っている知識を、機械で扱える形式に纏める必要がある。
【０００３】
画像処理プログラムを作る場合で説明すると、画像処理の方法や、処理の対象画像の光学的性質（たとえばパステル画のように全体がぼやけているとか、直線的な部分が多いなど）、使用する画像処理サブルーチンの内容や入出力変数の型、サブルーチンの効果（そのサブルーチンを施すことによる画像の変化）などが、人間の専門家で持っている知識の例である。
【０００４】
このうち、画像処理サブルーチンの入出力引数の型のような形式的な知識は、マニュアルなどの文書化された形式に体系的にまとめられており、また内容も正確なので、知識獲得は容易である。
【０００５】
これに対し、専門家が沢山の選択肢から適切な画像処理サブルーチンを選ぶとき、画像上のどんな特徴に着目し、どんなルールに基づいて判断しいてるのか、といった複雑な知識は、画像処理分野の長年の研究にも関わらず、機械化できるような形式に体系的にまとめられてはいない。画像処理の優秀な専門家でも、自分がどんな論理的思考に基づいてプログラムを作成しているのかを明確に意識することは稀であり、本人ですら、自分の知識を体系立てて整理することは難しい。まして他人が、インタビューなどの方法で専門家から知識を獲得することは不可能であると言っても過言ではない。
【０００６】
過去、エキスパートシステムを、プログラムの部品合成に応用することが試みられてきたが、上述の困難さのため、内省ないしはインタビューによって熟練作業者から獲得できるのは、表面的な知識に限定されてしまう。熟練者から引き出せる表面的な知識だけでは、実用に耐え得るプログラムを合成するには甚だ不足であった。
【０００７】
この不足を補う目的で行なわれたのは、熟練者の作業を外から観察し、熟練者が使っている知識を推論し、人工的に作ることであった。しかしこの方法には、以下の問題点がある。
【０００８】
すなわち、いろいろな処理対象に適用できるよう網羅して人工的な知識を作り上げるには、膨大な労力が必要になるという問題があり、現実には狭い適用範囲に限定した知識しか準備できず、これを利用した部品合成もまた、自ずから適用分野が限定されてしまう。
【０００９】
また人工的な知識は、熟練者が長年の経験によって蓄積した知識に比較して不正確にならざるを得ず、したがって合成したプログラムの性能も、熟練者が作成するプログラムに及ばない。
【００１０】
上述の問題に対する解決策として、暫定的なプログラムを出発点とし、修正を繰り返し加えることで、徐々に性能の良いプログラムを合成する技術が提案されている。「認識機構学習システムＭＩＲＡＣＬＥ−ＩＶにおける画像処理戦略の学習」（電子情報通信学会技術研究報告ＰＲＵ８８−２０記載）に見られる、遺伝的アルゴリズムによる技術はこの例である。この技術は、試行錯誤的に部品を組み合わせてプログラムを作り、そのプログラムの処理結果と、処理結果の目標の差によってプログラムを評価し、評価値が所望の値に達するまで修正を繰り返してゆく。
【００１１】
この技術は、知識としてプログラム部品同士の接続可否の情報、つまり入出力引数の結合可否の情報という形式的な知識だけを使う。画像処理サブルーチンを選ぶルールのような形式化できない知識は必要としないので、専門家の複雑な知識の獲得という困難かつ繁雑な作業を経ることなく、性能の良いプログラムを得られる。
【００１２】
しかし上述の従来技術には、以下の問題点がある。
【００１３】
第一の問題は、合成されるプログラムの性能を高めるには、できるだけ多くの種類のプログラム部品を用意することが肝要であるが、これは一方で、部品組合せの場合の数の爆発的な増大の原因になってしまうという点にある。組合せの数の爆発的な増大によって、必要な試行錯誤の回数が幾何級数的に増え、そのため、所望の性能のプログラムを得るまでに掛かる時間が、現実的範囲に収まらないことがある。このように、ここで述べた従来技術は、現実規模のプログラムの部品合成に適用することが困難であった。
【００１４】
また第二の問題は、合成するプログラムを実際の処理結果と目標とする処理結果がどのくらい一致するか（出力値と目標値の間の誤差の大きさや、出力値と目標値が完全に一致するデータの件数の全テストデータの件数に対する割合などで定義される）ということのみで評価するため、処理結果が全く同じになる複数のプログラムの優劣を評価できないという点にある。処理結果が全く同じでも、使用するプログラム部品の違いによって、合成したプログラムの実行に要する時間、実行に要するプログラムコードのサイズ、実行に要する記憶領域のサイズ、プログラムの構造の複雑さなどが変わる。またプログラム部品の信頼性、拡張性の良さ、等の主観的評価にもとづく評価も有り得る。これらのどの評価尺度に対してプログラムを最適化してゆくのがよいのかは課題によってまちまちである。
【００１５】
一例を挙げる。プログラムを実行するターゲットマシンが安価なマイコンの場合は主記憶装置の容量は一般に小さく、プログラムが消費する記憶領域の大きさは厳しく制限されるので、実行に要する記憶領域のサイズができるだけ少ないプログラムがより望ましい。一方、銀行のオンライン取り引き記録処理プログラムの場合、大規模な計算機上で処理されるため消費する記憶領域のサイズには制限がないものの、大量の取り引き情報を一定の時間内に捌くことが求められ、実行完了までに要する時間の長さには厳しい制約が課せられる。
【００１６】
上述の従来技術は、合成するプログラムの処理結果が、目標とする処理結果にどれだけ一致するか、という意味での性能向上を提供する技術であって、上述したような、課題の性格に沿った意味で性能が高いプログラムを合成することはできなかった。
【００１７】
【発明が解決しようとする課題】
本発明は上述した事情に対処すべくなされたものである。
【００１８】
処理すべき課題が与えられた際、プログラムの大まかな処理手順（概略処理手順）は容易に指定できる場合が多い。概略処理手順を、プログラム部品の組合せの制約条件として利用することで、試行錯誤の回数を減らし、より短時間に効率的に、性能の良いプログラムを合成することができるであろう。
【００１９】
この点に着目し、本発明は、概略処理手順を使って、プログラム部品の選択肢を一部分に限定することにより、効率よく（短時間に容易に）所望のプログラムを合成できるプログラム合成方法およびそれを用いたプログラム合成装置を提供することを第１の目的とする。
【００２０】
また、本発明は、評価尺度を定義する手段を備えることにより、課題の性格に沿った意味で性能が高いプログラムを合成できるプログラム合成方法およびそれを用いたプログラムの合成装置を提供することを第２の目的とする。
【００２１】
また、本発明は、高性能のプログラムを容易に合成できるプログラム合成方法およびそれを用いたプログラムの合成装置を提供することを第３の目的とする。具体的には、
・  合成したプログラムをターゲットマシン上で実行するのにかかる時間を評価基準としてプログラムの評価値を決定することで、より所望の時間に近い処理時間のプログラムを合成できるプログラム合成方法およびプログラム合成装置を提供する。
【００２２】
・  合成したプログラムをターゲットマシン上で実行するときのプログラムコードのサイズを評価基準としてプログラムの評価値を決定することで、より小さいプログラムを合成できるプログラム合成方法およびプログラム合成装置を提供する。
【００２３】
・  合成したプログラムをターゲットマシン上で実行するときに要する記憶領域のサイズを評価基準としてプログラムの評価値を決定することで、より小さいプログラムを合成できるプログラム合成方法およびプログラム合成装置を提供する。
【００２４】
・  使用するプログラム部品の主観的優先度（例えば、部品の信頼性、拡張性のよさ、主観的評価等）を評価基準としてプログラムの評価値を決定することで、優先度の高い部品を多く使ってプログラムを合成できるプログラム合成方法およびプログラム合成装置を提供する。
【００２５】
【課題を解決するための手段】
本発明の第１のプログラム合成装置は、プログラム部品を組み合わせて所望のプログラムを合成するプログラム合成装置において、予め分類されたプログラム部品を記憶する部品記憶手段と、前記プログラム部品の分類に基づき所望のプログラムの概略処理手順を指定する処理手順指定手段と、前記部品記憶手段に記憶されたプログラム部品から前記概略処理手順に対応するプログラム部品を選択する部品選択手段と、この部品選択手段で選択されたプログラム部品を結合してプログラムを合成する合成手段と、この合成手段で合成されたプログラムの性能を評価する評価手段と、を具備し、前記部品選択手段は、前記評価手段で得られた評価値を参照してプログラム部品を選択することにより、効率よく（短時間に容易に）所望のプログラムを合成できる。
【００２６】
また、本発明の第２のプログラム合成装置は、プログラム部品を組み合わせて所望のプログラムを合成するプログラム合成装置において、予め分類されたプログラム部品を記憶する部品記憶手段と、予め指定された条件に従って、前記プログラム部品の分類に基づき所望のプログラムの概略処理手順を生成する処理手順生成手段と、前記部品記憶手段に記憶されたプログラム部品から前記概略処理手順に対応するプログラム部品を選択する部品選択手段と、この部品選択手段で選択されたプログラム部品を結合してプログラムを合成する合成手段と、この合成手段で合成されたプログラムの性能を評価する評価手段と、を具備し、前記処理手順生成手段は前記評価手段で得られた評価値を参照して概略処理手順を生成し、前記部品選択手段は前記評価値を参照してプログラム部品を選択することにより、効率よく（短時間に容易に）所望のプログラムを合成できる。
【００２７】
また、本発明の第３のプログラム合成装置は、前記評価手段でプログラムを評価する際の評価尺度を定義する手段をさらに具備することにより、所望するプログラムの課題に沿った、性能の高いプログラムを合成できる。
【００２８】
また、本発明の第４のプログラム合成装置は、前記プログラム部品の分類に基づき所望のプログラムの概略処理手順の全部あるいは一部を指定する処理手順指定手段をさらに具備することにより、所望するプログラムの課題に沿った、性能の高いプログラムを合成できる。
【００２９】
また、本発明の第５のプログラム合成装置は、前記部品選択手段は、遺伝的アルゴリズムを用いて、前記部品記憶手段に記憶されたプログラム部品から前記概略処理手順に対応するプログラム部品を選択することにより、効率よく（短時間に容易に）所望のプログラムを合成できる。
【００３０】
また、本発明のプログラム合成装置は、評価手段で、合成手段で合成されたプログラムの性能、すなわち、プログラムの実行時間、プログラムサイズ、プログラムを実行する際に要する記憶容量をそれぞれ評価することにより、ユーザの所望する条件を満たした高性能のプログラムを容易に合成できる。
【００３１】
また、本発明の第１のプログラム合成方法は、プログラム部品を組み合わせて所望のプログラムを合成するプログラム合成方法において、
前記プログラム部品の分類に基づき所望のプログラムの概略処理手順が指定されると、前記概略処理手順に対応するプログラム部品を選択し、この選択されたプログラム部品を結合してプログラムを合成し、この合成されたプログラムの性能の評価を行い、その評価値を前記概略処理手順に対応するプログラム部品を選択する際に参照することにより、効率よく（短時間に容易に）所望のプログラムを合成できる。
【００３２】
また、本発明の第２のプログラム合成方法は、プログラム部品を組み合わせて所望のプログラムを合成するプログラム合成方法において、
予め指定された条件に従って、前記プログラム部品の分類に基づき所望のプログラムの概略処理手順を生成し、この生成された概略処理手順に対応するプログラム部品を選択し、この選択されたプログラム部品を結合してプログラムを合成し、この合成されたプログラムの性能の評価を行い、その評価値を前記概略処理手順を生成する際、および前記概略処理手順に対応するプログラム部品を選択する際に参照することにより、効率よく（短時間に容易に）所望のプログラムを合成できる。
【００３３】
また、本発明の第３のプログラム合成方法は、前記合成されたプログラムの性能を評価する際の評価尺度が定義されることにより、所望するプログラムの課題に沿った、性能の高いプログラムを合成できる。
【００３４】
また、本発明の第４のプログラム合成方法は、前記プログラム部品の分類に基づき所望のプログラムの概略処理手順の全部あるいは一部を指定することにより、所望するプログラムの課題に沿った、性能の高いプログラムを合成できる。
【００３５】
また、本発明の第５のプログラム合成方法は、遺伝的アルゴリズムを用いて、前記概略処理手順に対応するプログラム部品を選択することにより、効率よく（短時間に容易に）所望のプログラムを合成できる。
【００３６】
また、本発明のプログラム合成方法は、合成されたプログラムの性能、すなわち、プログラムの実行時間、プログラムサイズ、プログラムを実行する際に要する記憶容量をそれぞれ評価することにより、ユーザの所望する条件を満たした高性能のプログラムを容易に合成できる。
【００３７】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
【００３８】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るプログラム合成方法を用いたプログラム合成装置の構成例を概略的に示したものである。本発明のプログラム合成方法は、ソフトウエアによって構成し、それを例えばパーソナルコンピュータに実装し、プログラム合成装置として実現してもよい。
【００３９】
図１において、プログラム合成装置は、処理手順指定手段１、部品選択手段２、プログラム部品記憶手段３、プログラム結合手段４、プログラム評価手段５から構成される。
【００４０】
図２は、プログラム合成装置の処理の流れを大まかに説明する流れ図である。
【００４１】
まず、処理手順指定手段１において概略処理手順が指定される（ステップＳ１０１−１）。プログラムの合成は、定められた終了条件が成立するまで繰り返される。（合成ループ；ステップＳ１０１−２〜Ｓ１０１−６）。終了条件の例には、繰返し回数が予め与えられた上限値を越えたときに終了する条件や、合成するプログラムの評価値が予め与えられた目標値を越えたときに終了する条件、合成したプログラムの個数が予め与えられた上限個数を越えたときに終了する条件、あるいはこれらの条件の任意の組合せの論理和など様々に考えられる。ただし本発明の効果は、この終了条件の如何に拘らず発生し、その内容に拘束されるものではないことを指摘しておく。プログラム合成の繰返しごとに、ステップＳ１０１−３〜ステップＳ１０１−５が実行される。まず、部品選択手段２は、指定された概略処理手順に従って、プログラム部品記憶手段３からプログラム部品を選択する（ステップＳ１０１−３）。つぎにプログラム結合手段４が選択されたプログラム部品を結合し、１本のプログラムに組み上げる。（ステップＳ１０１−４）。さらにプログラム評価手段５が、組み上がったプログラムの評価値を決定する（ステップＳ１０１−５）。次に各手段ごとに詳しく説明して行く。
【００４２】
（１−１）  処理手順指定手段
図１において、処理手順指定手段１は、所望のプログラムがとるべき概略処理手順を指定するためのものである。処理すべき課題が与えられた際、プログラムがとるべき概略処理手順は、容易に指定できる場合が多い。概略処理手順を使って、プログラム部品の選択肢を一部分に限定することにより、試行錯誤の回数を減らし、より短時間に効率的に、性能の良いプログラムを合成することができる。
【００４３】
処理手順指定手段１の具体例として、あらかじめ保持している概略処理のリストを熟練者に提示し概略処理を選択させることによって、概略処理の手順を作成する例を説明する。図３に処理手順指定手段１の構成例を示す。
【００４４】
処理手順指定画面の表示手段１ａは、概略処理のリスト（一覧表）が保持されている概略処理記憶手段１ｂから処理の一覧表を読み出して、ディスプレイ１００上に表示する。熟練者は、作成しようとするプログラムの概略処理の手順を一覧表から選択して所望の概略処理の一連の手続きを作成する。
【００４５】
図４は、概略処理記憶手段１ｂに記憶されている概略処理の一覧表の記憶例を示している。図４において、各概略処理にはそれぞれを識別するための識別子が与えられている。なお、図４では、処理の名称（「概略処理１」、「概略処理２」、…）が識別子になっている。
【００４６】
次に、処理手順指定手段１に具備される、熟練者が概略処理手順を作成するためのユーザインタフェイスの機能について説明する。
【００４７】
図５は、このインタフェイスの例として処理手順指定手段１の例えば、処理手順指定画面の表示手段１ａの制御のもと、ディスプレイ１００に表示されるインタフェイス画面の一例を示したものである。
【００４８】
図５において、概略処理手順を指定するためのインタフェイス画面は、主に、概略処理記憶手段１ｂに記憶された概略処理の一覧を表示するウインドウ２００と、このウインドウ２００に表示された一覧から所望の概略処理を選択して概略処理の手順を編集するためのウインドウ２０１が表示される。
【００４９】
熟練者は、例えば、マウスなどの入力装置を使って概略処理を表す箱型のシンボル２０２をウインドウ２０１上の作業画面に張り付け、各々に対して、ウインドウ２００に表示された概略処理の一覧からマウス等を用いて所望の概略処理を選択して割り付ける。
【００５０】
概略処理の手順は、概略処理を表す箱型のシンボル２０２を、実行の順序に従って矢印で結ぶことによって指定する。手順を作成するこの作業は、いわゆるフローチャートを作成する作業と同じである。また図中の六角形のシンボル２０３は、プログラミングの分岐処理をあらわすシンボルである。
【００５１】
（１−２）  プログラム部品記憶手段
プログラム部品記憶手段３は、プログラム部品を部品分類に分けて保持するものである。プログラム部品は、汎用に使えるよう標準化したプログラムコードと、プログラムコードの属性からなる。プログラムコードの属性には、そのプログラムコードの用途、効果、各種のターゲットマシン上での実行にかかる時間、サイズ、引数の情報、プログラム部品の信頼性等を考慮した好ましさを表す使用優先度情報など、そのプログラムコードに関連する任意の情報を含めることができる。一つの完全な（実行可能な）プログラムは、複数のプログラム部品が結合されて成る。
【００５２】
「プログラム部品を結合する」とは、ここでは、プログラムコードの実行順序を決め、一方のプログラム部品の出力引数と、他方のプログラム部品の入力引数を接続し、どの引数からどの引数へと値が受渡しされるかを決めることである。
【００５３】
なお、部品分類とは、特定の観点でプログラム部品を部分集合にまとめる際の観点、または、分類そのものを指す。その一例としては類似の機能を持つプログラム同士をひとまとめにする部品分類が挙げられる。
【００５４】
また、概略処理とは、具体的には、プログラム部品を、例えば、その機能あるいはその効果に基づき分類し、その分類されたプログラム部品全体に共通する処理名である。ここでは、プログラム部品を分類した際の部品分類のタイトルが概略処理のタイトルである場合を例にとり説明している。
【００５５】
図６は、プログラム部品記憶手段３における、プログラム部品の記憶例を示したものである。図６において、プログラム部品は、例えば、部品分類１０、３３１、５１０などに分類されて保持されている。
【００５６】
また、各プログラム部品は、図７に示すように、プログラムコードとその属性情報から構成されて記憶されるようになっている。
【００５７】
（１−３）  部品選択手段
部品選択手段２は、処理手順指定手段１が与える概略処理手順に含まれる個々の概略処理を、プログラム部品記憶手段３から選択したプログラム部品で置き換えるようになっている。
【００５８】
部品選択手段２の具体例として、処理手順指定手段１の概略処理記憶手段１ｂに記憶される概略処理の一覧と、プログラム部品記憶手段３の部品分類とが一対一に対応する場合を説明する。この例では、部品分類が類似の機能を持つプログラム同士をひとまとめにする分類であり、処理手順指定手段１に保持されている概略処理は、プログラム部品の機能的な分類に一致する。
【００５９】
部品選択手段２は、処理手順指定手段１から与えられる概略処理手順に含まれる個々の概略処理の並びに従って、対応する部品分類のプログラム部品を配列し、具体的な処理の手順を生成する。
【００６０】
図８を参照して、部品選択手段２の動作を説明する。
【００６１】
図８において、例えば、図５のウインドウ２０１上で編集された概略処理手順の個々の処理と、プログラム部品記憶手段３に格納されている部品分類との対応は、一点鎖線で表されている。
【００６２】
上述したように、部品選択手段２は個々の概略処理の並びに従って、対応する部品分類の中のプログラム部品を配列し、具体的な処理の手順を生成する。
【００６３】
本発明は部品選択手段２におけるプログラム部品の選択方法を特に限定するものではない。例えば、乱数を用いてプログラム部品を選択する方法でも良いし、また単に乱数で選択するのではなく、過去に合成したプログラムの評価値をプログラム評価手段５から取り込み、評価値の高低とプログラムに使われているプログラム部品との相関から、できるだけ高い評価値が得られるように、プログラム部品を選択する方法でも良い。また、利用者が置き換えを指示しても良い。この方法を用いると、試行錯誤的に、徐々に評価値の高いプログラムを合成することができる。
【００６４】
図８に示すように、プログラム選択手段２でのプログラム部品の選択の結果、太枠で囲まれたプログラム部品が選択されたとする。
【００６５】
図９に、部品選択手段２による概略処理の置き換えの結果を示す。
【００６６】
（１−４）  プログラム結合手段
プログラム結合手段４は、部品選択手段２が与える具体的な処理手順に従ってプログラムコードの実行順序を決め、一方のプログラム部品の出力引数と、他方のプログラム部品の入力引数を接続し、どの引数からどの引数へと値が受渡しされるかを決める。
【００６７】
プログラム結合手段４の具体例を説明する。本発明の効果は引数対応の具体的な方法に拘らず、引数対応の方法を特に限定する必要はない。以下に示す方法は一例である。プログラム部品記憶手段３の説明で述べたように、プログラム部品はプログラムコードとその属性から成る。プログラムコードの属性には、引数に関する情報が含まれている。引数対応は、引数に関する情報のうち引数の入出力種別と引数の内容を参照して決定する。
【００６８】
図１０は、図９の４つのプログラム部品の引数の情報を示している。内容の項目には、その引数の内容を表す記号が入っている。
【００６９】
図１１に示すフローチャートは、プログラム結合手段４が行なうデータ受渡しの指定方法の処理手順を示したものである。図１０に示した４つのプログラム部品からなる具体的な処理手順に対してこのフローチャートに示す手続きを施すと、図１２に示すようにデータの受渡しが決まる。矢印は、その根本でデータの送り手を示し、矢尻でデータの受け手を示している。
【００７０】
図１１に示すフローチャートの手続きを簡単に説明すると、まず、あるプログラム部品ｉの引数ｊと、そのプログラム部品ｉより前にあるプログラム部品ｋの全引数ｌの内容が一致するか否かをチェックして、一致する場合は、引数ｊを引数ｌと対応させる（ステップＳ３〜ステップＳ８）。以上の処理をプログラム部品ｉに含まれる全ての引数について行い（ステップＳ２）、さらに、ステップＳ２〜ステップＳ８の処理を全てのプログラム部品について行う（ステップＳ１）。
【００７１】
たとえば、プログラム部品１３７ｂの引数ｉｐは、プログラム部品５１０−ｃの引数ｊｒｔの値を受けとる。入力引数あるいは入出力引数（入出力種別が、ｉｎｐｕｔかｉｎ／ｏｕｔ）であって、値を他のどの引数から得るかが定まらない引数のあるプログラム部品が残ってしまった場合には、その部品が置き換わった概略処理を、同じ概略処理に属する別のプログラム部品で置き換えて、上記の手順を再度やり直す。このようなすべての引数のデータの受渡し指定が決まると合成すべきプログラムが完成する。
【００７２】
（１−５）  プログラム評価手段
プログラム評価手段５は、プログラム結合手段４でプログラム部品が結合されて合成されたプログラムの評価値を決定するようになっている。
【００７３】
プログラム評価手段５の具体例として、プログラムを実行したときの実際の出力と、プログラムに期待されている出力との一致の度合に基づいて、プログラムの評価値を決定するプログラム評価手段を説明する。
【００７４】
図１３に、プログラム評価手段５の構成例を示す。図１３において、プログラム評価手段５は、プログラム実行手段５ａ、評価値計算手段５ｂ、入力保持手段５ｃ、期待出力保持手段５ｄから構成されている。
【００７５】
プログラム実行手段５ａは、部品結合手段２から与えられる具体的な処理手順に従って、プログラム部品記憶手段３にあるプログラム部品を順次実行する。その際、プログラム部品間の変数の受け渡しは、プログラム結合手段４から与えられるプログラム部品間の引数対応に従って行われる。この時、入力保持手段５ｃが保持する入力データがプログラム実行手段５ａで実行中のプログラムに入力される。その入力データを処理した結果である出力データは評価値計算手段５ｂに与えられる。
【００７６】
評価値計算手段５ｂは、入力データがプログラムに入力されたときにその処理結果として出力されることが期待されている出力データを、期待出力保持手段５ｄから読み出す。次に、出力データと期待されている出力データとを比較し、一致しているかどうかを調べ、それをもとに評価値を計算して出力する。
【００７７】
本発明は、評価値の計算方法には依存せずにその効果を発生するので、具体的な計算式に拘束されるものではない。
【００７８】
ここで、評価値の計算方法の一例を説明する。図１４は、入力データとそれがプログラムに入力されたときに期待される出力データと、合成したプログラムの実際の出力データとの対応の一例を示したものである。この例では、入力データは全部でｎ件ある。出力データＯｉと期待される出力データＯｅｘｐ（ｉ）が一致する件数をｍとしたとき、プログラムの評価値ｅをｅ＝ｍ／ｎで求める。すなわち、入力データ件数に対する、出力データと期待される出力データの一致件数の比率を評価値とする。
【００７９】
計算された評価値は部品選択手段２に送られ、次のプログラム合成において、より評価値の高いプログラムを合成するには概略処理の各々にどのプログラム部品を選択すれば良いかを判断するために使われる。
【００８０】
（１−２）で説明したプログラム部品記憶手段は、プログラム部品を部品分類に分けて保持していたが、プログラム部品を部品分類と対応づけて保持してもよい。
【００８１】
すなわち、プログラム部品はプログラムコードとその属性から成るが、図１５に示すプログラム部品の記憶例のように、属性情報の中に、部品分類の情報が含まれていてもよい。
【００８２】
以上説明したように、本実施形態によれば、プログラム部品の組合せの制約条件としてユーザが概略処理手順を指定し、その指定手順に従ってプログラム部品を結合し、これを評価するものとなっているため、試行錯誤の回数が減少することになり、より短時間に効率的に、性能の良いプログラムを合成することができる。
【００８３】
（第２の実施形態）
次に、本発明の第２の実施形態として、プログラムを評価する尺度（方法）を定義する評価尺度定義手段をさらに具備したプログラム合成装置について説明する。
【００８４】
図１６に示すように、第２の実施形態に係るプログラム合成装置の構成例は、図１の第１の実施形態に係るプログラム合成装置にさらに評価尺度定義手段６が追加されて構成される。
【００８５】
評価尺度定義手段６は、プログラム評価手段５でプログラムの評価値を計算する際の計算方法を与えるものである。
【００８６】
評価尺度定義手段６の具体例として、合成したプログラムを評価するための評価プログラムを供給するものを説明する。図１７は、この評価尺度定義手段６とプログラム評価手段５の関係を示した図である。この具体例では、合成したプログラムの評価は、以下のデータを評価用入力変数とする関数によって計算する。
【００８７】
・合成したプログラムのソースコード
・合成したプログラムのソースコードのサイズ
・合成したプログラムが要する記憶領域のサイズ
・合成したプログラムに入力データを処理させたときの出力データ
・期待されている出力データ
・合成したプログラムに使われたプログラム部品の属性情報
・合成したプログラムの実行時間
評価尺度定義手段のソースコード編集手段６ａは、上記の評価用入力変数を入力データとし、合成したプログラムの評価値を算出する任意の評価プログラムソースコードを編集するためのものである。このソースコード編集手段６ａを人間が操作し、所望の評価尺度を実現する評価プログラムソースコードを作成する。作成されたソースコードはコンパイラ６ｂに渡され、実行可能な評価プログラムに変換される。この評価プログラムは、プログラム評価手段５の評価値計算手段５ｂに供給される。
【００８８】
同図に示すように評価値計算手段５ｂには、上述の評価用入力変数に相当するデータが入力されており、評価プログラムが評価値計算手段５ｂによって実行されることにより、合成したプログラムの評価値が算出される。算出された評価値は、部品選択手段２に供給される。
【００８９】
つぎに、人間がソースコード編集手段６ａで作成する評価プログラムで計算される評価関数の例をいくつか示す。
【００９０】
（実際の出力データと期待されている出力データとの違いによる評価）
第１の実施形態で説明した評価値ｅを、上述の評価尺度定義手段６によって提供される評価プログラムで計算できることは明らかである。それを以下に示す。入力保持手段５ｃに保持される複数件数のテスト入力データを順次、プログラム実行手段５ａで実行されている合成したプログラムに入力すると、その件数分の実際の出力データが算出される。今、その件数をｎ件としよう。この件数は、合成したプログラムが評価値計算手段５ｂに供給する出力データの件数と一致しているので、入力保持手段５ｃから直接供給されなくても、評価値計算手段５ｂは知ることができる。また個々のテスト入力データに対応する期待されている出力データと、実際の出力データとが一致する件数ｍは、評価値計算手段５ｂに入力されている実際の出力データの個々と、これらに対応する期待されている出力データの個々とを比較することで求められる。したがって第１の実施形態で説明した評価値の例は、上述の評価尺度定義手段６が供給した評価プログラムによって算出できる。
【００９１】
（実際の出力データと期待されている出力データとの誤差による評価）
つぎに数学関数のフィッティングに適した評価値として、テスト入力データに対する出力データと、期待される出力データとの誤差の例を示す。全部でｎ件あるうちのｉ番目の入力テストデータに対する実際の出力データをＯ（ｉ）、期待されるデータ出力をＯｅｘｐ  （ｉ）とするとき、評価関数ｅ２  を次のように定める。
【００９２】
【数１】
0003601949.tif 000002
【００９３】
誤差が小さいほど最大値１．０に近い評価値が得られる。この評価値は、実際の出力データ、期待される出力データ、および入力データの件数のみで計算できるから、上述の評価尺度定義手段６が供給する評価プログラムとして実現することが可能である。
【００９４】
（計算結果が期待する値に一致し、プログラムの実行時のサイズがより小さいものを高く評価する場合）
次の例として、合成したプログラムの出力が期待されている出力に完全に一致することを絶対の条件とし、さらに、よりプログラムの実行時のサイズが小さいものを高く評価する場合の例を示す。プログラム実行手段５ａから評価値計算手段５ｂに供給される、合成したプログラムの実行時のサイズをｓとしよう（単位はバイト）。このとき、求める評価値ｅ３  を次のように定める。
【００９５】
【数２】
0003601949.tif 000003
【００９６】
ここでｅ２  は前述の評価関数とする。この評価値ｅ３  は、実際の出力データ、期待される出力データ、入力データの件数、および合成したプログラムのサイズのみで計算できるから、上述の評価尺度定手段６が供給する評価プログラムとして実現することが可能である。
【００９７】
（計算結果が期待する値に一致し、実行に要する時間がより短いものを高く評価する場合）
次の例として、合成したプログラムの出力が期待されている出力に完全に一致することを絶対の条件とし、さらに、より実行に要する時間が短いものを高く評価する場合の例を示す。評価値計算手段５ｂには、時計５ｅから時刻が供給されている。プログラム実行手段５ａ上で合成したプログラムが実行を開始した時刻と、実行を終了した時刻とを使って、所要時間ｔを求められる。したがって前述の評価値ｅ３  の定義式において、プログラムの実行時のサイズｓをｔに置き換えると、ここで求める新しい評価関数ｅ４  が得られる。
【００９８】
（計算結果が期待する値に一致するテスト入力データの比率と、合成したプログラムの品質メトリクスとの線形和を評価値とする場合）
次の例として、実際の出力と期待する出力とが一致するテスト入力データの件数の全テストデータに対する比率と、合成したプログラムのソースコードの品質メトリクスの線形和として評価値を求める場合を示す。実際の出力と期待する出力とが一致するテスト入力データの件数の、全テストデータ件数に対する比率は前述の評価値ｅである。合成したプログラムのソースコードの品質メトリクスｍはプログラムソースコードの品質を定量化した数値であり、様々なものが一般に知られている（たとえば、森口繁一編「ソフトウェア品質管理ガイドブック」日本規格協会刊、第１２章品質の定量的計測と評価の方法を参照）。ここでは、ソースコードの複雑さを計測する尺度である条件文数の総数ｉの関数としてｍ＝１／（ｉ＋１）とする。このとき、出力一致度の百分率ｃを８割、品質メトリクスｍを２割として評価値ｅ５  を定義すると、
ｅ５  ＝０．８ｃ＋０．２ｍ
となる。評価関数ｅ５  も、評価尺度定義手段６がプログラム評価手段５に供給する評価プログラムとして実現することができることは、図１７から明らかであろう。
【００９９】
（その他）
その他評価関数を定義する際に、入力変数としてプログラム部品の属性情報として各部品に予め付けられた主観的優先度（後述する第６の実施形態で詳しく述べる）を使ってもよい。
【０１００】
また、ここでは前述の六種類の評価用データを入力変数とする関数として評価関数を定義する例を説明したが、本発明の評価尺度定義手段６は評価値を計算する関数の入力変数には依存しないので、何を入力変数とするかには拘束されずその効果を発揮することに注意されたい。
【０１０１】
（第３の実施形態）
前述の第１、第２の実施形態のプログラム合成装置では、設計者が処理手順指定手段１を用いて概略処理の手順を作成していく。ここでは、この概略処理の手順を自動的に生成する処理手順生成手段７を具備したプログラム合成装置について説明する。
【０１０２】
図１８に第３の実施形態に係るプログラム合成装置の構成例を示す。なお、図１８において図１と同一部分には同一符号を付し、異なる部分について説明する。すなわち、図１の処理手順指定手段１が処理手順生成手段７に置き換わっている。
【０１０３】
処理手順生成手段７は、図１９に示すように、処理手順発生手段７ａと概略処理記憶手段７ｂと処理手順長入力手段７ｃから構成される。
【０１０４】
処理手順長は人間が指示する正の整数Ｎであり、処理手順の最大の長さを意味している。
【０１０５】
処理手順発生手段７ａは、処理手順長入力手段７ｃで指定された長さＮ以下の概略処理のシーケンス（手順）を概略処理記憶手段７ｂに記憶されている概略処理からランダムに発生し、部品選択手段２に出力する。以降、第１の実施形態の説明と同様にして、プログラム合成を行い、プログラム評価手段５でその評価値を算出し、その算出された評価値が、処理手順発生手段７ａに入力されると、それを上記の概略処理のシーケンスの評価値とし、更に別の概略処理のシーケンスを発生させて同様に評価値を得ることを繰り返し、評価値の高い概略処理のシーケンスとプログラム合成されたプログラムを得る。
【０１０６】
上記では、指定された処理手順長に基づき概略処理のシーケンスをランダムに発生する場合を示したが、各種の組み合わせ探索手法（整数計画法、遺伝的アルゴリズム、タブーサーチ等を用いることもできる）。
【０１０７】
（第４の実施形態）
次に、前述の処理手順指定手段１と処理手順生成手段７を併用するプログラム合成装置について説明する。
【０１０８】
図２０に第４の実施形態に係るプログラム合成装置の構成例を示す。なお、図１と異なる部分は、処理手順指定手段１にさらに処理手順生成手段７が追加されている。
【０１０９】
ユーザは所望の概略処理手順のうちの一部を、前述同様に処理手順指定手段１で指定を行い、前記概略処理手順のうち、自動的に選択して欲しい処理手順は処理手順生成手段７が生成するものである。
【０１１０】
処理手順指定手段１で指定した以外の部分を前述の第３の実施形態と同様に処理手順生成手段７で発生し、以降の処理は前述同様である。
【０１１１】
また、プログラム評価手段５で得られる評価値は処理手順指定手段１にも返され、ユーザがそれを参考に概略処理手順の再指定を行い、修正する。
【０１１２】
（第５の実施形態）
第１の実施形態では、プログラム部品記憶手段３に保持されている概略処理と部品分類とが図８に示すように、一対一に対応している場合について説明した。プログラム部品の管理の便宜で作成する部品分類の場合、必ずしも部品分類と概略処理とは一対一に対応付けすることができず、一般的には多対多の対応となる。
【０１１３】
ここでは、処理−部品分類項目対応テーブル２０を持ち、多対多の対応に対処できるプログラム合成装置について説明する。
【０１１４】
プログラム合成装置の構成例としては、図１と同様であるが、例えば、部品選択手段２あるいはプログラム部品記憶手段３には、処理−部品分類項目対応テーブル２０を具備しているものとする。
【０１１５】
図２１を参照して、処理−部品分類項目対応テーブル２０を用いた場合の動作を説明する。すなわち、部品選択手段２は、例えばウインドウ２０１上で指定された概略処理手順の個々のステップを、処理−部品分類項目対応テーブル２０で対応づけられる部品分類の中のプログラム部品と置き換えて、具体的な処理の手順を生成するようになっている。
【０１１６】
（第６の実施形態）
次に、プログラム評価手段５で合成されたプログラムを評価する際、その合成されたプログラムを実行するのにかかる時間、必要な記憶容量、プログラムコードのサイズ等を評価基準として、評価値を決定するプログラム合成装置について説明する。すなわち、プログラム評価手段５は、プログラム部品記憶手段３からプログラム部品に関する必要な情報を受け取り、評価値を算出する。
【０１１７】
図２２にプログラム部品記憶手段３に保持されるプログラム部品の属性情報の記憶例を示す。
【０１１８】
図２２に示すように、各プログラム部品毎に、ターゲットマシン上での実行時間、ターゲッドマシン上でのプログラムサイズ、ターゲットマシン上での実行に要する記憶容量、および、各プログラム部品の主観的優先度（例えば、部品の信頼性、拡張性のよさ、主観的評価等）を考慮した利用の好ましさを表す優先度の情報が記憶されている。
【０１１９】
プログラム評価手段５は、プログラム結合手段４から渡された合成プログラムを構成している各プログラム部品の、ターゲットマシンに対応する情報や優先度を、プログラム部品記憶手段３の図２２に示したようなテーブルから読み出し、例えば、その合計を算出することにより、ターゲットマシン上での全実行時間、全プログラムサイズ、全記憶容量、総合優先度を評価値として算出する。
【０１２０】
なお、算出方法は種々の演算方式が考えられ、更に、評価値は単独で用いられるだけでなく、複数の評価値を組み合わせ、例えば加重和をとって、評価値とすることも考えられる。
【０１２１】
（第７の実施形態）
次に、処理手順指定手段１で指定された概略処理手順に基づきプログラム部品を選択する際に、遺伝的アルゴリズムを用いるプログラム合成装置について説明する。
【０１２２】
図２３は、第７の実施形態に係るプログラム合成装置の構成例を示したものである。図１と異なる部分は、部品選択手段２が遺伝的アルゴリズムを用いて部品探索を行う部品探索手段８に置き換わっている。
【０１２３】
尚、遺伝的アルゴリズムについては、「遺伝アルゴリズムハンドブック」（Ｌ．デービス編、森北出版）等に述べられているので、ここでは適用の仕方を述べる。
【０１２４】
部品探索手段８では、処理手順指定手段１より与えられる概略処理手順に含まれる個々の概略処理の並びに従って、プログラム部品記憶手段３からプログラム部品を選択して配列する。この処理は第１の実施形態の説明と同様である。この配列処理によって一つの染色体（実行順序を持った一連のプログラム部品の流れを表す情報表現）が構成される。異なった配列方法で作られる複数の染色体とともに、染色体集団を構成する。この時、集団に属する染色体の個数は予め定められた整数とする。
【０１２５】
染色体集団はプログラム結合手段４に渡され、プログラム結合手段４が個々の染色体について、第１の実施形態の説明と同様に、プログラム部品間の引数対応の決定を行ってプログラムに変換する。このプログラムはプログラム評価手段５に渡され、実行され、第１の実施形態の説明と同様にプログラムの評価値（染色体の評価値）が算出される。すべての染色体の評価値を求め、部品探索手段８にそれらすべての評価値を返す。
【０１２６】
部品探索手段８は、より良い評価値を得る可能性の高い染色体を交叉や突然変異を用いて生成し直す。一つの行い方は、評価値に比例した確率で任意の２つの染色体を選び、これを両親として子供の染色体を交叉で産生する。例えば、概略処理手順に含まれる全ての個別の概略処理からなる集合を確率的に２つの部分Ａ、Ｂに分け、父親のＡの部分に含まれる概略処理に対応していたプログラム部品と母親のそれとを入れ替えることで交叉が実現され、子の染色体が産生される。その染色体には更に突然変異によって多様性を増加させる方法もある。例えば、確率的に１つの概略処理を選び、それに対応するプログラム部品を他のプログラム部品に確率的に置き直すことで実現される。
【０１２７】
このように、新しい世代の染色体集団を作成し、同様に、プログラム結合手段４、プログラム評価手段５を通し、個々の染色体の評価値を得る。このことを繰り返すことにより、染色体集団の中に、より評価値の高い染色体が構成されていく。
【０１２８】
遺伝アルゴリズムにも種々の手法があり、それらを利用した方法も変形例として考えられる。また、探索手法としてタブーサーチ等の任意の組合わせ最適化手段も利用できる。
【０１２９】
（第８の実施形態）
次に、第７の実施形態に係るプログラム合成装置を、例えば、画像前処理プログラムの合成に適用する場合について説明する。題材の画像前処理プログラムは、工業製品の生産ラインで使われる自動目視検査装置に利用する。
【０１３０】
図２４は、画像前処理プログラムを合成するプログラム合成装置の構成例を示したものである。以下に各部の機能、動作を説明する。
【０１３１】
（８−１）  処理手順指定手段
処理手順指定手段１は、概略処理手順入力部１ｃとそれにつながる端末１ｄから構成される。概略処理手順入力部１ｃには、図４に示した概略処理の一覧表が記憶されている。概略処理の一覧表の具体例を図２５に示す。すなわち、概略処理の一覧表として、画像前処理プログラムを合成するに必要な概略処理の名称の一覧が記憶されている。
【０１３２】
目視検査装置で用いる、例えば、画像前処理プログラムを開発する専門家は、サンプル画像を見ることによって、どんな処理を行なえば目的の不良が検出できるか、容易に概略手順を決定できる。たとえば、図２６に示す検査対象の表面上の色斑を検出したいとする。この不良は、色の急激な変化として検出できる。
【０１３３】
この場合、概略処理手順は、一例として以下のようになる。
【０１３４】
手順１）  ＲＧＢ系で表現されたカラー画像を、色情報変換によって別の色表現系（例えば、マンセル色空間など）に変換する。
【０１３５】
手順２）  色が急激に変化している部分（色エッジ）を強調する。
【０１３６】
手順３）  後の計算量を減らすため、三次元の値を一次元の値におとす。
【０１３７】
手順４）  色斑の存在を、色エッジがあるか否かによって検出するため、連続した線の存在度を計算する。
【０１３８】
最終的に、算出された連続した線の存在度が規定値以上の場合には、色斑があると判断する。
【０１３９】
専門家は、概略処理手順入力部１ｃが端末１ｄに具備されるディスプレイ上にに表示するインターフェースを使って概略処理手順を入力する。
【０１４０】
図２７は、インターフェース画面上に入力した上記の概略処理手順を示し、図５に対応するものである。
【０１４１】
（８−２）  プログラム部品記憶手段
プログラム部品記憶手段３は、プログラム部品と部品番号を保管する部品ファイルとして実現する。
【０１４２】
ここでは、部品分類としては、機能的な類似性の観点による分類を採用する。部品分類、および各分類に属するプログラム部品の記憶例を図２８に示す。この部品分類は、処理手順指定手段１に具備される概略処理の一覧表（図２５参照）の各項目と、一対一に対応する例である（再度強調するが、部品分類と概略処理とは、必ずしも一対一に静的に対応している必要はない）。プログラム部品には、各分類中で一意の部品番号が付されている。
【０１４３】
各プログラム部品は、プログラムコードとその属性情報との組で記憶されるようになっている。
【０１４４】
図２９は、「Ｐｒｅｗｉｔｔ空間フィルタ」、「色相・再度変換」というプログラム部品を例に、各プログラム部品の格納方法を示したものである。図２９に示すように、各プログラム部品に対応して、ソースコードで表現されているプログラムコードと、プログラム属性の情報が格納されている。
【０１４５】
「Ｐｒｅｗｉｔｔ空間フィルタ」のプログラム属性を見ると、このプログラムが、入力用引数３個と出力用引数１個を取ること、あるターゲットマシン上での標準サイズ画像の処理時間が４．７秒であること、プログラムのサイズが２８１３バイトであること、などが分かる。
【０１４６】
この例でプログラムコードはソースコードとして表現されているが、表現の形式は問わないので例えばソースコードをコンパイルした結果であるオブジェクトコードであってもかまわない。
【０１４７】
（８−３）  部品探索手段、プログラム結合手段、プログラム評価手段
本実施形態の部品探索手段はＧＡ（遺伝アルゴリズム）技術を利用するもので、コーディング情報決定部８ａ、初期染色体発生部８ｂ、交叉・突然変異操作部８ｃ、部品決定部８ｄ、淘汰操作部８ｅから構成される。
【０１４８】
部品探索手段８は、プログラム結合手段４、プログラム評価手段５と密接に関係している。まず、上記３つの手段の動作を簡単に説明する。
【０１４９】
ステップＴ１）  部品探索手段８は、プログラム部品を生物の染色体に各々見立てて、ビット列などのコードで表す。ついで乱数などで、初期の染色体集団を生成する。
【０１５０】
ステップＴ２）  生成した染色体集団に対して、交叉と突然変異を施し、新しい染色体集団をつくる。これら新しい染色体集団は、プログラムを構成する部品のコードに変換され、プログラム結合手段４に渡される。
【０１５１】
ステップＴ３）  プログラム結合手段４は、プログラム部品のコードを結合しプログラム群を生成する。
【０１５２】
ステップＴ４）  生成されたプログラム群は、プログラム評価手段５で実行され、各プログラムの評価値が計算される。
【０１５３】
ステップＴ５）  プログラムの評価値は部品探索手段８に供給される。ここで、評価値が高いプログラムを表現する染色体を残し、評価値の低い染色体を淘汰することによって、全体として進化した（評価値が高い）染色体集団を生成する。
【０１５４】
ステップＴ６）  終了条件が成立したなら、プログラムの生成を終了する。成立していなければ、ステップＴ２に戻る。終了条件には、ステップＴ２〜ステップＴ６の手続きを何世代繰り返したか、プログラムの最高評価値が規定の値に達したか、などを設定する。
【０１５５】
このように、染色体の生成、染色体が表現するプログラムの生成、プログラムの評価、評価値による染色体淘汰のステップを繰り返すことで、染色体の評価値が徐々に向上し、したがって評価値の高い画像前処理プログラムが得られる。以下各ステップの詳細を説明する。
【０１５６】
ステップＴ１）
部品探索手段８は、概略処理手順と部品ファイルを読み込む。
【０１５７】
部品探索手段８のコーディング情報決定部８ａは、概略処理手順と、部品ファイルに保管されている各概略処理に入るプログラム部品の種類の数とから、コーディング情報を生成する。図３０は、コーディング情報が表現している各概略処理手順と、染色体ビット列との対応関係の例を示している。図２７のウインドウ２０１に表示されている概略処理手順と、図２８に示したような部品ファイルに収められているプログラム部品の情報から生成されるコーディング情報の具体例を図３０に示す。
【０１５８】
図２７に示す概略処理手順では、概略処理の数が４つで、第１の概略処理は「色情報変換」である。図２８によると、「色情報変換」に対応するプログラム部品は５種類なので３ビットで区別できる。同様に残りの概略処理のプログラム部品は、「色エッジ強調」が４ビット、「一次元化」が３ビット、「直線の存在度計算」が９ビットでそれぞれ区別できる。したがって図３０に示す通り、プログラムを表現する染色体は、全体で１９ビットの長さになる。
【０１５９】
ここまでの処理によって、プログラムと染色体の対応、すなわち染色体のコーディングが決定したことになる。たとえば染色体
０１０１０１１１１００００００００１１
には、最初の３ビットで「色情報変換」が「ＹＩＱ変換」であること、つづく４ビットで「色エッジ強調」が「Ｓ−Ｇ空間フィルタ」であること、つづく３ビットで「一次元化」が「ｘ３  」  であること、つづく９ビットで「直線存在度」が「マスク処理なしハフ変換分割数２０」であることが表現されている。
【０１６０】
次に、コーディング情報８ｆは初期染色体発生部８ｂに渡される。ここでは、予め決められるか、ユーザーが指定する数の染色体が乱数によって生成される。生成された染色体にプログラムが存在しない場合には、改めて生成し直す。たとえば生成された染色体が、
１１１…
であるとすると、最初の概略処理である「色情報変換」として部品番号「７」のプログラム部品を選んだことになるが、図３０のコーディング情報によれば最初の概略処理の部品数は「５」であるから、この染色体が表現するプログラムが存在しないことになる。この場合は、染色体を生成し直す。
【０１６１】
生成された染色体集団８ｇは交叉・突然変異操作部８ｃに供給され、ここで、交叉や突然変異の操作が施される。
【０１６２】
交叉：  染色体の間で切断と再結合が生じて部分交換が行われ、その結果、染色体組換えがおこることを交叉という。この染色体の操作は、優れた染色体の掛け合わせからより優れた染色体が生まれる場合がある、とする考え方を基本にしている。
【０１６３】
いま、図３２に示すように、
染色体Ａ：  ００００１１００１００００００００００
と、
染色体Ｂ：  １００００００１１００００００００１０
を交叉させる場合を考える。図３２を見ると分かるように、染色体Ａは次のようなプログラムを表現している。
【０１６４】
【数３】
0003601949.tif 000004
【０１６５】
染色体Ｂは次のようなプログラムを表現している。
【０１６６】
【数４】
0003601949.tif 000005
【０１６７】
まず、染色体Ａ、Ｂを複写しＡ′、Ｂ′を作る。ここでの交叉法は、二箇所で切断し交叉する二点交叉法を用いることにする。切断点はランダムに選ぶが、仮に２箇所の切断点を図３２に示すように、５ビット目と６ビット目の間、および、９ビット目と１０ビット目の間に選んだとする。
【０１６８】
次に、切断点の間の部分を交換すると、染色体Ａ′、Ｂ′は、図３３に示すように変化する。
【０１６９】
このように交叉によって、染色体Ａと染色体Ｂとから、新しい染色体Ａ′、Ｂ′が生成された。図３３から明らかなように、染色体Ａ′は次のようなプログラムを表現している。
【０１７０】
【数５】
0003601949.tif 000006
【０１７１】
染色体Ｂ′は次のようなプログラムを表現している。
【０１７２】
【数６】
0003601949.tif 000007
【０１７３】
この場合は概略処理であるエッジ強調の部品が変更されただけであったが、切断点によっては、もっと大幅に部品が変化し得る。
【０１７４】
ある染色体に交叉を施す確率は、予め決めるか、ユーザによって指定される交叉率で与える。交叉の相手になる染色体や切断点は、ランダムに選ぶ。また交叉させた結果存在しないプログラムの染色体が生成された場合は、それを捨てる。交叉はやり直さない。
【０１７５】
突然変異：  染色体の一部を別の染色体で置換し、新しい染色体をつくる操作を突然変異という。突然変異は、多くの染色体が似通ってしまい、染色体集団として多様性が失われたときに起こる進化の停滞を、強制的に打ち破る効果を持つ。
【０１７６】
いま、図３４に示すように、
染色体Ａ：  ００００１１００１００００００００００
を突然変異させる場合を考える。染色体Ａは、次のようなプログラムを表現している。
【０１７７】
【数７】
0003601949.tif 000008
【０１７８】
まず、染色体Ａを複写し、染色体Ａ′を作る。染色体を置換する位置はランダムに選ぶ。染色体の置換として、ここでは図３４に示すように、２、３、６、７、１９ビットめのビットを反転する。突然変異後の染色体を図３５に示す。
【０１７９】
このように突然変異によって、染色体Ａから新しい染色体Ａ′が生成された。
【０１８０】
図３５から明らかなように、染色体Ａ′は次のような新しいプログラムを表現していることが分かる。
【０１８１】
【数８】
0003601949.tif 000009
【０１８２】
この場合は、概略処理である色情報変換、色エッジ強調、直線存在度計算が変更された。
【０１８３】
ある染色体の特定のビットを反転させる確率は、予め決めるかユーザによって指定される突然変異率で与える。また突然変異の結果存在しないプログラムの染色体が生成された場合は、それを捨てる。突然変異の操作はやり直さない。
【０１８４】
このようにして交叉と突然変異で新しく生成した染色体を加えて、全体として数の増えた染色体集団（図２４の染色体集団８ｈ）を部品決定部８ｄに供給する。
【０１８５】
部品決定部８ｄは、コーディング情報に従って染色体を解釈し、その染色体が表現しているプログラムのプログラム部品を部品ファイルから検索する。そして、染色体集団８ｈの各染色体ごと、プログラム部品、プログラム部品と概略処理との対応（どの概略処理をどのプログラム部品で置き換えるか）、概略処理の接続関係を組み合わせてすべての染色体についてまとめたものを、部品情報８ｉとしてプログラム結合手段４に供給する。
【０１８６】
部品探索手段８は、以上のように、概略処理手順からプログラムの合成に必要な全ての情報を供給する。
【０１８７】
ステップＴ３）
プログラム結合手段４は、最終的には部品決定部８ｄが供給する具体的な処理手順（すなわち部品情報８ｉ）にしたがって、プログラム部品のプログラムの引数を結合する。結合の方法については、第１の実施形態の説明と同様である。
【０１８８】
プログラム結合手段４のプログラム合成部４ａ（図２４参照）は、プログラム部品のプログラムの引数の結合に加え、必要な記憶領域の確保や、変数の宣言、画像データの読み込みに必要なソースコードの生成をおこなう。引数が結合されたプログラム部品と前述のソースコードとを接続すると、染色体が表現しているプログラムができあがる。
【０１８９】
染色体集団８ｈの全ての染色体に対応するプログラムソースコード群４ｃ（図２４参照）は、コンパイラ・リンカ４ｂに渡されて、プログラム実行形式群４ｄに変換される。
【０１９０】
ステップＴ４）
生成されたプログラム実行形式群４ｄは、プログラム評価手段５のプログラム実行部５ｆに供給される。評価用データ５ｇには、画像データとその画像データに色斑があるか専門家が判定した結果との組が、複数（ここではｎ組とする）保持されている。
【０１９１】
プログラム実行部５ｆは、評価用データの画像データをプログラムに入力し、そのデータに対するプログラムの出力値（この場合、画像に対する直線の存在度）を受けとる。前述したように、画像処理プログラムによる色斑の有無の判断は、算出した直線の存在度が規定値以上であるか否かによって決める。このプログラムによる色斑有無の判断と、専門家による判定結果とが一致する画像の件数をｍとしたとき、このプログラムに対する評価値ｅを、
ｅ＝ｍ／ｎ
と算出する。
【０１９２】
プログラム実行部５ｆは、プログラム実行形式群４ｄのすべてのプログラムについて評価値を算出する。
【０１９３】
ステップＴ５）
算出されたプログラム評価値は、部品探索手段８の淘汰操作部８ｅに供給される。淘汰操作部８ｅは、染色体集団８ｈの個々の染色体に対応するプログラムの評価値の高い順に上位ｊ位までの染色体のみをのこし、それ以下の染色体を捨てる。ここでｊは、初期染色体発生部８ｂで最初に生成した染色体の数に等しい。残った染色体は、次の世代の染色体８ｇとして交叉・突然変異部８ｃに供給される。
【０１９４】
ステップＴ６）
ステップＴ６については、前述の通りである。
【０１９５】
（８−４）  効果
プログラムを生成しては評価値を計算し、評価値の高いものを残して次の世代のプログラムをまた生成するという方式では、生成したプログラムを実際に実行しなければならない。前述したように、生成するプログラムが処理時間を要するものである場合（言うまでもなく、画像処理は時間が掛かる処理の典型である）、所望の評価値に達するプログラムを得るまでには、膨大な回数の繰り返し処理と、処理時間が必要となる。
【０１９６】
処理時間を短縮するには、プログラム生成の際のプログラム部品の選択肢を、良いプログラムが生成できそうな範囲に制約することが非常に効果がある。しかしこれまでは、プログラム部品の選択肢への制約をかける方法が存在しなかった。
【０１９７】
本発明は、プログラムを開発しようとしている専門家は、概略の処理手順なら比較的容易に設計できる場合が多いということに着目し、この概略処理をプログラム部品の制約に利用することによって、上記の問題を解決するものである。これまで、最初は暫定的なプログラムから初めて徐々に改良を加えることで性能の良いプログラムを合成する技術は、プログラム部品の組合せ爆発が原因で、現実的な時間内に所望性能のプログラムを生成できない、現実性の薄いものであった。これを初めて現実的なものにするという意味において、本発明の効果は非常に大きいといえる。
【０１９８】
【発明の効果】
以上説明したように、本発明によれば、効率よく（短時間に容易に）所望のプログラムを合成できる。また、所望するプログラムの課題に沿った、性能の高いプログラムを合成できる。また、ユーザの所望する条件を満たした高性能のプログラムを容易に合成できる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係るプログラム合成装置の概略構成を示すブロック図。
【図２】プログラム合成装置の処理の流れを大まかに説明する流れ図。
【図３】処理手順指定手段の構成を示すブロック図。
【図４】図３の概略処理記憶手段に記憶されている概略処理の一覧表のデータ構造を示す図。
【図５】処理手順指定手段によりディスプレイに表示されるインタフェイス画面の一例を示す模式図。
【図６】プログラム部品記憶手段のプログラム部品のデータ構造を示す図。
【図７】プログラム部品のデータ構造を示す図。
【図８】部品選択手段によるプログラム部品の選択動作を説明するための図。
【図９】部品選択手段により概略処理が適当なプログラム部品に置き換えられた結果の一例を示す図。
【図１０】プログラム部品記憶手段で記憶されるプログラム部品の属性情報の一例を示す図。
【図１１】プログラム結合手段が行なうデータ受渡しの指定方法の処理手順を示すフローチャート。
【図１２】図１１に示した手順に従って求められた各プログラム部品間のデータの受渡しの様子を示す図。
【図１３】プログラム評価手段の概略構成を示すブロック図。
【図１４】プログラム評価手段で合成されたプログラムを評価する際合成されたプログラムに入力された入力データと、それがプログラムに入力されたときに期待される出力データと、合成したプログラムの実際の出力データとの対応の一例を示す図。
【図１５】プログラム部品記憶手段に記憶されているプログラム部品のデータ構造の他の例を示す図。
【図１６】本発明の第２の実施形態に係るプログラム合成装置の概略構成を示すブロック図。
【図１７】評価尺度定義手段とプログラム評価手段の関係を示した図。
【図１８】本発明の第３の実施形態に係るプログラム合成装置の概略構成を示すブロック図。
【図１９】処理手順生成手段の構成を示すブロック図。
【図２０】本発明の第４の実施形態に係るプログラム合成装置の概略構成を示すブロック図。
【図２１】本発明の第５の実施形態に係るプログラム合成装の置部品選択手段による概略処理とプログラム部品との対応付けの様子を示す図。
【図２２】本発明の第６の実施形態に係るプログラム合成装置のプログラム部品記憶手段に保持されるプログラム部品の属性情報の一例を示す図。
【図２３】本発明の第７の実施形態に係るプログラム合成装置の概略構成を示すブロック図。
【図２４】本発明の第８の実施形態に係る、画像前処理プログラムを合成するプログラム合成装置の具体的な構成を示すブロック図。
【図２５】概略処理手順入力部に記憶された概略処理の記憶例を示す図。
【図２６】合成された画像前処理プログラムの処理対象となる画像の一例を示す模式図。
【図２７】概略処理手順を指定するインタフェース画面の表示例を示す模式図。
【図２８】プログラム部品記憶手段における部品分類および各分類に属するプログラム部品の記憶例を示す図。
【図２９】プログラム部品記憶手段に記憶されるプログラム部品（プログラムコードと属性情報）のデータ構造例を示す図。
【図３０】コーディング情報が表現している各概略処理手順と、染色体ビット列との対応関係の例を示す図。
【図３１】図２７のウインドウに表示されている概略処理手順と、図２８に示したような部品ファイルに収められているプログラム部品の情報から生成されるコーディング情報の具体例を示す図。
【図３２】交叉・突然変異操作部により交叉操作を施す前の２つの染色体Ａ、Ｂの具体例を示す図。
【図３３】２つの染色体Ａ、Ｂに対し交叉操作を施して得られた染色体Ａ’、Ｂ’の具体例を示す図。
【図３４】突然変異操作を施す前の染色体の具体例を示す図。
【図３５】突然変異操作を施して得られた染色体の具体例を示す図。
【符号の説明】
１…処理手順指定手段
２…部品選択手段
３…プログラム部品記憶手段
４…プログラム結合手段
５…プログラム評価手段
【図１】
0003601949.tif 000010
【図２】
0003601949.tif 000011
【図３】
0003601949.tif 000012
【図４】
0003601949.tif 000013
【図５】
0003601949.tif 000014
【図６】
0003601949.tif 000015
【図７】
0003601949.tif 000016
【図８】
0003601949.tif 000017
【図９】
0003601949.tif 000018
【図１０】
0003601949.tif 000019
【図１１】
0003601949.tif 000020
【図１２】
0003601949.tif 000021
【図１３】
0003601949.tif 000022
【図１４】
0003601949.tif 000023
【図１５】
0003601949.tif 000024
【図１６】
0003601949.tif 000025
【図１７】
0003601949.tif 000026
【図１８】
0003601949.tif 000027
【図１９】
0003601949.tif 000028
【図２０】
0003601949.tif 000029
【図２１】
0003601949.tif 000030
【図２２】
0003601949.tif 000031
【図２３】
0003601949.tif 000032
【図２４】
0003601949.tif 000033
【図２５】
0003601949.tif 000034
【図２６】
0003601949.tif 000035
【図２７】
0003601949.tif 000036
【図２８】
0003601949.tif 000037
【図２９】
0003601949.tif 000038
【図３０】
0003601949.tif 000039
【図３１】
0003601949.tif 000040
【図３２】
0003601949.tif 000041
【図３３】
0003601949.tif 000042
【図３４】
0003601949.tif 000043
【図３５】
0003601949.tif 000044