(57)【特許請求の範囲】
【請求項１】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返す、ことを特徴とする自動プログラミング装置。
【請求項２】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返す、ことを特徴とする自動プログラミング装置。
【請求項３】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング装置。
【請求項４】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング装置。
【請求項５】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法。
【請求項６】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法。
【請求項７】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法。
【請求項８】
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法。
【請求項９】
前記コード列修正ステップは、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、
前記評価結果に基づいて任意の個体を排除する淘汰ステップと、
任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差ステップと、
任意の個体について遺伝子を変化させる突然変異ステップと、
を有することを特徴とする請求項５〜８のいずれかに記載の自動プログラミング方法。
【請求項１０】
前記プログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とすることを特徴とする請求項５〜９のいずれかに記載の自動プログラミング方法。
【請求項１１】
前記実行結果評価ステップは、前記プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第１の評価結果を算出することを特徴とする請求項５〜９のいずれかに記載の自動プログラミング方法。
【請求項１２】
前記実行結果評価ステップは、外部から第２の評価結果を取り込むステップを備えることを特徴とする請求項５〜９のいずれかに記載の自動プログラミング方法。
【請求項１３】
コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。
【請求項１４】
コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。
【請求項１５】
コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。
【請求項１６】
コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動プログラミング装置、自動プログラミング方法および該自動プログラミング方法を実行させるためのプログラムを記録した記録媒体に係り、特に、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成として、任意の機能を実現することができ、また、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備えることにより、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習し得る自動プログラミング装置、自動プログラミング方法および記録媒体に関する。
【０００２】
【従来の技術】
従来より、自動プログラミング方法として代表的なものに「遺伝的プログラミング（Ｇｅｎｅｔｉｃ  Ｐｒｏｇｒａｍｍｉｎｇ）」や「サブサンプションアーキテクチャ」と呼ばれる技術がある。これらの技術は基本的に、複数の要素機能を用意しておき、これらの要素機能の組み合わせを経験的に学習するものである。
【０００３】
【発明が解決しようとする課題】
したがって、従来の自動プログラミング方法にあっては、実現できる機能は予め用意された要素機能の組み合わせ機能であって、限られた機能しか実現することはできないという問題点があった。逆に言えば、従来の自動プログラミング方法は、限られた組み合わせの中から最適な組み合わせを学習する技術であったとも言える。
【０００４】
本発明は、このような従来の問題点に着目してなされたもので、その目的とするところは、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成として、従来の要素機能の組み合わせに限定されるといった制約を排除して、任意の機能を実現し得る自動プログラミング装置、自動プログラミング方法および記録媒体を提供することにある。
【０００５】
また、本発明の他の目的は、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備えることにより、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習し得る自動プログラミング装置、自動プログラミング方法および記録媒体を提供することである。
【０００６】
【課題を解決するための手段】
上記課題を解決するために、本出願の第１の発明は、任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、前記プログラム実行手段による実行結果を評価する実行結果評価手段と、前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段とを具備することを特徴とする自動プログラミング装置にある。
【０００７】
本出願の好ましい実施の形態においては、前記第１の発明による自動プログラミング装置におけるコード列修正手段は、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、前記評価結果に基づいて任意の個体を排除する淘汰手段と、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差手段と、任意の個体について遺伝子を変化させる突然変異手段とを具備するものであってもよい。
【０００８】
本出願の好ましい実施の形態においては、前記第１の発明による自動プログラミング装置におけるプログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返すものであってもよい。
【０００９】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【００１０】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【００１１】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【００１２】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【００１３】
本出願の好ましい実施の形態においては、前記第１の発明による自動プログラミング装置におけるプログラム実行手段は、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶する手段を備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とするものであってもよい。
【００１４】
本出願の好ましい実施の形態においては、前記第１の発明による自動プログラミング装置における実行結果評価手段は、前記プログラム実行手段における入力および出力のデータに基づき所定の演算を行って第１の評価結果を算出するものであってもよい。
【００１５】
本出願の好ましい実施の形態においては、前記第１の発明による自動プログラミング装置における実行結果評価手段は、外部から第２の評価結果を取り込む手段を備えるものであってもよい。
【００１６】
ここで、前記実行結果評価手段は、前記有効コード列の有効コード数を算出する有効コード数算出手段を備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび前記第１の評価結果若しくは前記第２の評価結果に基づき所定の演算を行って新たな第３の評価結果を算出するものであってもよい。
【００１７】
本出願の第２の発明は、任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップとを具備することを特徴とする自動プログラミング方法にある。
【００１８】
本出願の第３の発明は、前記第２の発明による自動プログラミング方法におけるコード列修正ステップは、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、前記評価結果に基づいて任意の個体を排除する淘汰ステップと、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差ステップと、任意の個体について遺伝子を変化させる突然変異ステップとを具備することを特徴とするものである。
【００１９】
本出願の第４の発明は、前記第２の発明又は前記第３の発明による自動プログラミング方法におけるプログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返すことを特徴とするものである。
【００２０】
本出願の第５の発明は、前記第４の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とするものである。
【００２１】
本出願の第６の発明は、前記第４の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とするものである。
【００２２】
本出願の第７の発明は、前記第４の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とするものである。
【００２３】
本出願の第８の発明は、前記第４の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とするものである。
【００２４】
本出願の第９の発明は、前記第２の発明又は第３の発明又は第４の発明による自動プログラミング方法におけるプログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とすることを特徴とするものである。
【００２５】
本出願の第１０の発明は、前記第２の発明又は第３の発明又は第４の発明による自動プログラミング方法における実行結果評価ステップは、前記プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第１の評価結果を算出することを特徴とするものである。
【００２６】
本出願の第１１の発明は、前記第２の発明又は第３の発明又は第４の発明による自動プログラミング方法における実行結果評価ステップは、外部から第２の評価結果を取り込むステップを備えることを特徴とするものである。
【００２７】
本出願の第１２の発明は、前記第１０の発明又は第１１の発明による自動プログラミング方法における実行結果評価ステップは、前記有効コード列の有効コード数を算出する有効コード数算出ステップを備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび前記第１の評価結果若しくは前記第２の評価結果に基づき所定の演算を行って新たな第３の評価結果を算出することを特徴とするものである。
【００２８】
本出願の第１３の発明は、コンピュータに、任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップとを実行させるためのプログラムを記録した記録媒体にある。
【００２９】
本出願の好ましい実施の形態においては、前記第１３の発明による記録媒体におけるコード列修正ステップは、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、前記評価結果に基づいて任意の個体を排除する淘汰ステップと、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差ステップと、任意の個体について遺伝子を変化させる突然変異ステップとを具備するものであってもよい。
【００３０】
本出願の好ましい実施の形態においては、前記第１３の発明による記録媒体におけるプログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返すものであってもよい。
【００３１】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【００３２】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【００３３】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【００３４】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【００３５】
本出願の好ましい実施の形態においては、前記第１３の発明による記録媒体におけるプログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とするものであってもよい。
【００３６】
本出願の好ましい実施の形態においては、前記第１３の発明による記録媒体における実行結果評価ステップは、前記プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第１の評価結果を算出するものであってもよい。
【００３７】
本出願の好ましい実施の形態においては、前記第１３の発明による記録媒体における実行結果評価ステップは、外部から第２の評価結果を取り込むステップを備えるものであってもよい。
【００３８】
さらに、ここで、前記実行結果評価ステップは、前記有効コード列の有効コード数を算出する有効コード数算出ステップを備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび前記第１の評価結果若しくは前記第２の評価結果に基づき所定の演算を行って新たな第３の評価結果を算出するものであってもよい。
【００３９】
そして、この第１の発明、第２の発明または第１３の発明によれば、プログラム解析手段（プログラム解析ステップ）により任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力し、プログラム実行手段（プログラム実行ステップ）により該有効コード列を所与入力について無限ループに陥ることなく実行して、該プログラム実行手段（プログラム実行ステップ）による実行結果を実行結果評価手段（実行結果評価ステップ）によって評価し、コード列修正手段（コード列修正ステップ）では、該評価結果に基づいてコード列を修正するようにしている。このように、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できるよう構成するので、従来の要素機能の組み合わせに限定されるといった制約が排除され、任意の機能を実現することができる。
【００４０】
また、第３の発明によれば、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備え、コード列修正ステップにおいて、淘汰ステップにより評価結果に基づき任意の個体を排除し、交差ステップにより任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせ、また突然変異ステップにより任意の個体について遺伝子を変化させるようにしているので、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習することができる。
【００４１】
ここで、「遺伝子」は個体の性質を規定する基本的構成要素であり、「染色体」は遺伝子の集合体である。また「個体」は染色体によって特徴づけられた自律的な個であり、「集団」は個体の集まりである。また、「淘汰」の戦略には、評価値に応じた淘汰確率を設定して乱数により個体の淘汰を決定するルーレット戦略等がある。また、「交差」の戦略には、一点交差、二点交差、一様交差等があり、遺伝子を交差させるかどうかは交差率によって決定される。さらに、遺伝子を「突然変異」させるかどうかは突然変異率によって決定される。
【００４２】
また、交差ステップにおいて、任意の２つの個体についてコード長（染色体の長さ）の変更を伴う交差を行い、または、突然変異ステップにおいて、任意の個体についてコード長（染色体の長さ）の変更を伴う突然変異を行えば、これにより、従来の多くの自動プログラミングにおいて制約となっていた固定長コードの限定が排除され、任意のコード長命令や可変コード長命令を備えたより一般的な命令セットを扱うことが可能となる。
【００４３】
また、第４の発明によれば、プログラム解析ステップにおいて、コマンドとして有効なコードをコード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、コード列の終端まで繰り返すようにしている。特に、第５の発明によれば、プログラム解析ステップにおいて、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すようにしている。また特に、第６の発明によれば、プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すようにしている。これにより、任意のコード列を実行可能なプログラムとして解釈できる。尚、コード列修正ステップにおける学習が初期の段階では有効コード列のコード生成率は低いが、この初期段階で当該手順を適用すれば、新しい有効コード（列）を生成する確率が高い。
【００４４】
また特に、第７の発明によれば、プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うようにしている。また、第８の発明によれば、プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うようにしている。これにより、任意のコード列を実行可能なプログラムとして解釈できる。尚、コード列修正ステップにおける学習が進むと有効コード列のコード生成率は高くなるが、このような場合に当該手順を適用すれば、過去に生成された有効コード（列）を消滅させる可能性が低くなる。
【００４５】
また、第９の発明によれば、プログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とするようにしている。これにより、任意のコード列による勝手なプログラムが生成されても無限ループに陥ることがなくなる。
【００４６】
また、第１０の発明によれば、実行結果評価ステップは、プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第１の評価結果を算出するようにしている。また、第１１の発明によれば、実行結果評価ステップは、外部から第２の評価結果を取り込むステップを備え、さらに、第１２の発明によれば、実行結果評価ステップは、前記有効コード列の有効コード数を算出する有効コード数算出ステップを備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび第１の評価結果若しくは第２の評価結果に基づき所定の演算を行って新たな第３の評価結果を算出するようにしている。これにより、入力に対する出力結果が適切か否かを判断し、有意味のコード列生成を確認でき、また効率良くコード生成がなされているかの確認も可能である。
【００４７】
【発明の実施の形態】
以下、本発明の自動プログラミング装置、自動プログラミング方法および記録媒体の実施の形態について、図面を参照して詳細に説明する。
【００４８】
図１は本発明の一実施形態に係る自動プログラミング装置の構成図である。
【００４９】
同図において、本実施形態の自動プログラミング装置１００は、コード列記憶部１０１と、コード列記憶部１０１からの任意のコード列を解析して実行可能な機械語プログラムである有効コード列を出力するプログラム解析部１０２と、該有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行部１０３と、プログラム実行部１０３による実行結果を評価する実行結果評価部１０４と、実行結果評価部１０４による評価結果に基づいてコード列を修正するジェネティックアルゴリズム部（コード列修正手段）１０５とを備えて構成されている。
【００５０】
また、自動プログラミング装置１００外部には、実システム若しくはエミュレータ１１１を備えており、該実システム若しくはエミュレータ１１１では、入力ポートおよび出力ポートを介して供給される各種値からプログラム実行動作を実行または模擬実行して入出力および状態データを得るようにしても良い。この場合、実行結果評価部１０４は、自動プログラミング装置１００の外部に外部実行結果評価部１１２として実現し、評価結果を自動プログラミング装置１００に返す構成としてもよい。
【００５１】
以下、各構成要素の機能および動作について詳細に説明する。まず、コード列記憶部１０１は、機械語コードに相当する整数型の値を遺伝子とし、該遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成する場合に、個体数に相当する数のコード列（機械語プログラム）を記憶している。それぞれのコード列では、１つの遺伝子座が１つの機械語コードに相当し、遺伝子座の並ぶ順番にアドレスが割り付けられた構成である。
【００５２】
次に、プログラム解析部１０２では、コード列記憶部１０１からの任意のコード列を解析して実行可能な機械語プログラムである有効コード列を出力する。当該プログラム解析部１０２における処理手順は、おおまかに言えば、第１に、コマンドとして有効なコードをコード列の最初から探索して抽出し、第２に、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という第１および第２の手順を、コード列の終端まで繰り返すことで行われる。このコマンドおよびオペランドの抽出方法として、本実施形態では以下の２つの方法を採用している。
【００５３】
すなわち、第１のコマンドおよびオペランド抽出方法は、オペランドとして有効なコードを探索する際に、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すか、或いは、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものである。
【００５４】
第１のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートを図２に示す。図２において、ＡＰはアドレスポインタ、ＣＣはコマンド数カウンタ、ＯＣはオペランド数カウンタ、ＮＡはコード列の長さ、ＮＯはコマンドのオペランド数である。
【００５５】
まず、ステップ２０１でアドレスポインタＡＰおよびコマンド数カウンタＣＣをクリアして初期設定した後、ステップ２０２では、アドレスポインタＡＰの内容がコード列の長さＮＡに等しいか否かを判断して終了判定を行う。
【００５６】
アドレスポインタＡＰの内容がコード列の長さＮＡ未満である場合には、ステップ２０３に進んで、アドレスポインタＡＰが指すコードがコマンドの１つとして有効か否かを判断する。アドレスポインタＡＰが指すコードがコマンドとして無効であれば、ステップ２０４で、アドレスポインタＡＰを次のコードに移動（インクリメント）して、ステップ２０２に戻る。
【００５７】
また、アドレスポインタＡＰが指すコードがコマンドの１つとして有効ならば、ステップ２０５に進んで、アドレスポインタＡＰが指すコードをコマンド数カウンタが指すコマンドとして設定し、ステップ２０６で、該コマンドの実行に必要なオペランド数ＮＯと種類（アドレス、レジスタ、ポート、等の別）を抽出する。
【００５８】
次に、オペランド抽出処理に入って、ステップ２０７でオペランド数カウンタＯＣをクリアして初期設定した後、ステップ２０８では、オペランド数カウンタＯＣの内容がコマンドの実行に必要なオペランド数ＮＯに等しいか否かを判断してオペランド抽出処理の終了判定を行う。尚、両者が等しい場合には、該コマンドについてのオペランド抽出処理が終了したとして、ステップ２０９で、アドレスポインタＡＰおよびコマンド数カウンタＣＣをそれぞれインクリメントした後、ステップ２０２に戻る。
【００５９】
また、オペランド数カウンタＯＣの内容がコマンドのオペランド数ＮＯ未満である場合には、ステップ２１０に進んで、アドレスポインタＡＰをインクリメントした後、ステップ２１１で、アドレスポインタＡＰの内容がコード列の長さＮＡに等しいか否かを判断してコマンド抽出処理の終了判定を行う。
【００６０】
アドレスポインタＡＰの内容がコード列の長さＮＡ未満である場合には、ステップ２１２に進んで、アドレスポインタＡＰが指すコードがコマンドの第１オペランドとして有効か否かを判断する。該コードが第１オペランドとして無効であれば、ステップ２１０に戻ってアドレスポインタＡＰをインクリメントして次のコードについての処理に移行する。また該コードがオペランドとして有効であれば、ステップ２１４に進んで該コードを第１オペランドとして確定し、ステップ２１５でオペランド数カウンタＯＣをインクリメントして、第２オペランドを抽出すべくステップ２０８に戻る。
【００６１】
すなわち、ステップ２０８からステップ２１５までの処理を、必要オペランド数（ＮＯ）だけ繰り返し、該コマンドに対応するオペランドを確定して、ステップ２０９を介してステップ２０２に戻ることとなる。また、以上の処理（ステップ２０２からステップ２１５までの処理）を、コード列の最後まで繰り返し行う。
【００６２】
尚、ステップ２０８のオペランド抽出処理の終了判定の後に、コマンド抽出処理に戻る処理（ステップ２０９）においては、図２のステップ２０２のように、オペランド抽出処理における最後のオペランドコードの次のコードにアドレスポインタＡＰを移動するものの他に、有効とされたオペランドコードをコード列から除き、残ったコード列に対して、前回のコマンドコードの次のコードにアドレスポインタＡＰを移動する、といった変形も可能である。
【００６３】
次に、第２のコマンドおよびオペランド抽出方法について説明する。これは、オペランドとして有効なコードを探索する際に、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うか、或いは、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うものである。
【００６４】
第２のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートを図３に示す。図３において、ＡＰはアドレスポインタ、ＣＣはコマンド数カウンタ、ＯＣはオペランド数カウンタ、ＮＡはコード列の長さ、ＮＯはコマンドのオペランド数、ＡＰＳはアドレスポインタスタックである。
【００６５】
まず、ステップ３０１でアドレスポインタＡＰおよびコマンド数カウンタＣＣをクリアして初期設定した後、ステップ３０２では、アドレスポインタＡＰの内容がコード列の長さＮＡに等しいか否かを判断して終了判定を行う。
【００６６】
アドレスポインタＡＰの内容がコード列の長さＮＡ未満である場合には、ステップ３０３に進んで、アドレスポインタＡＰが指すコードがコマンドの１つとして有効か否かを判断する。アドレスポインタＡＰが指すコードがコマンドとして無効であれば、ステップ３０４で、アドレスポインタＡＰを次のコードに移動（インクリメント）して、ステップ３０２に戻る。
【００６７】
また、アドレスポインタＡＰが指すコードがコマンドの１つとして有効ならば、ステップ３０５に進んで、アドレスポインタＡＰが指すコードをコマンド数カウンタが指すコマンドとして設定し、またアドレスポインタＡＰの内容をアドレスポインタスタックＡＰＳに入れる。次に、ステップ３０６では、該コマンドの実行に必要なオペランド数ＮＯと種類（アドレス、レジスタ、ポート、等の別）を抽出する。
【００６８】
次に、オペランド抽出処理に入って、ステップ３０７でオペランド数カウンタＯＣをクリアして初期設定した後、ステップ３０８では、オペランド数カウンタＯＣの内容がコマンドの実行に必要なオペランド数ＮＯに等しいか否かを判断してオペランド抽出処理の終了判定を行う。尚、両者が等しい場合には、該コマンドについてのオペランド抽出処理が終了したとして、ステップ３０９で、アドレスポインタＡＰおよびコマンド数カウンタＣＣをそれぞれインクリメントした後、ステップ３０２に戻る。
【００６９】
また、オペランド数カウンタＯＣの内容がコマンドのオペランド数ＮＯ未満である場合には、ステップ３１０に進んで、アドレスポインタＡＰをインクリメントした後、ステップ３１１で、アドレスポインタＡＰの内容がコード列の長さＮＡに等しいか否かを判断してコマンド抽出処理の終了判定を行う。
【００７０】
アドレスポインタＡＰの内容がコード列の長さＮＡ未満である場合には、ステップ３１２に進んで、アドレスポインタＡＰが指すコードがコマンドの第１オペランドとして有効か否かを判断する。該コードが第１オペランドとして無効であれば、上記コマンド抽出処理で抽出したコマンド自体を無効と判断し、ステップ３１３に進んでアドレスポインタＡＰをアドレスポインタスタックＡＰＳの内容に”１”を加えた後にステップ３０２に戻り、該無効コマンドの次のコードについてのコマンド抽出処理に移行する。
【００７１】
また、ステップ３１２において、アドレスポインタＡＰが指すコードがオペランドとして有効であれば、ステップ３１４に進んで該コードを第１オペランドとして確定し、ステップ３１５でオペランド数カウンタＯＣをインクリメントして、第２オペランドを抽出すべくステップ３０８に戻る。
【００７２】
すなわち、ステップ３０８からステップ３１５までの処理を、必要オペランド数（ＮＯ）だけ繰り返し、該コマンドに対応するオペランドを確定して、ステップ３０９を介してステップ３０２に戻ることとなる。また、以上の処理（ステップ３０２からステップ３１５までの処理）を、コード列の最後まで繰り返し行う。
【００７３】
尚、ステップ３１２においてオペランドとして無効とされた場合に、コマンド抽出処理に戻る処理（ステップ３１３）においては、図３のステップ３１３のように、現在コマンドとして解析しているコードの次のコードにポインタを移動する（ＡＰ＝ＡＰＳ＋１）ものの他に、現在オペランドとして解析しているコードの次のコードにポインタを移動する（ＡＰ＝ＡＰ＋１）といった変形が可能である。
【００７４】
以上のようなコマンドおよびオペランド抽出処理によって、プログラム解析部１０２では、任意のコード列を解析して実行可能な機械語プログラムである有効コード列を出力することが可能となる。
【００７５】
プログラム解析部１０２におけるコマンドおよびオペランド抽出処理を、具体例を使用して説明する。図４は、設定されるマシン語、すなわちプログラム実行部１０３における命令セットの説明図である。同図に示すように、命令セットは一般的なものであり、移動命令（ＭＯＶ）、算術命令（ＩＮＣ，ＤＥＣ，ＡＤＤ，ＳＵＢ，ＭＵＬ，ＤＥＶ）、論理演算命令（ＩＮＶ，ＡＮＤ，ＯＲ，ＥＸＯＲ）比較命令（ＩＦＧ，ＩＦＧＴ，ＩＦＬ，ＩＦＬＴ，ＩＦＥＱ，ＩＦＮＥ）、分岐命令（ＪＭＰ，ＪＴＲ，ＪＦＬ，ＬＯＯＰ，ＲＥＴ）等を備えている。尚、アドレスポインタＡＰおよびスタックポインタＳＰの詳細な動作は、通常のコンピュータに準拠している。
【００７６】
また、通常のマイコン等のコンピュータでは、フラグの役割は固定化されており、ユーザがフラグの機能を自由に使いたいときは、通常のレジスタをフラグ代わりに利用するものが多いが、ここでは、自由なフラグを複数持つことで、任意に生成されるコード列の冗長性が上がることを防止している点に特徴がある。
【００７７】
尚、通常、頻繁に用いられる命令に対して複数のコマンドコードを割り当てておいて、任意に生成されるコード列での出現頻度を確率的に高くしておき、生成されるコード列の有効性を高くといった工夫も考えられる。
【００７８】
また、図５（ａ）には、プログラム実行部１０３のハードウェア仕様を、図５（ｂ）には、プログラム解析部１０２に供給されるコード列を示す。
【００７９】
上記第１のコマンドおよびオペランド抽出処理においては、図５（ｂ）のコード列が供給された場合、図６（ａ）に示すような解析が順次なされていく。すなわち、まず第１番目のコード”０１”についてＭＯＶコマンドであると判断される。次に、該ＭＯＶコマンドは第１オペランドとして入力ポート番号を持ち、第２オペランドとしてレジスタ番号を持つので、オペランド抽出処理においては、第２番目のコード”８４”は入力ポート数（８Ｄ）以上の数値であるので無効とされ、第３番目のコード”０３”が第１オペランドとして確定される。また、第４および第５番目のコード”７ｅ”，”２ｆ”はレジスタ数（１６Ｄ）以上の数値であるので無効とされ、第６番目のコード”０ｄ”が第２オペランドとして確定されることとなる。以下、同様にして、コマンドおよびオペランド抽出処理が行われて、結果として図６（ｂ）に示すような有効コード列を得ることとなる。
【００８０】
次に、上記第２のコマンドおよびオペランド抽出処理においては、図５（ｂ）のコード列が供給された場合、図７（ａ）に示すような解析が順次なされていく。すなわち、まず第１番目のコード”０１”についてＭＯＶコマンドであると判断されるが、該ＭＯＶコマンドは第１オペランドとして入力ポート番号を持つにも拘らず、第２番目のコード”８４”は入力ポート数（８Ｄ）以上の数値であるので、該ＭＯＶコマンド自体が無効とされる。また、第２番目のコード”８４”はコマンドとして無効である。次に、第３番目のコード”０３”についてＭＯＶコマンドであると判断されるが、該ＭＯＶコマンドは第１オペランドとしてレジスタ番号を持つにも拘らず、第４番目のコード”７ｅ”はレジスタ数（１６Ｄ）以上の数値であるので、該ＭＯＶコマンド自体が無効とされる。また、第４および第５番目のコード”７ｅ”，”２ｆ”はコマンドとして無効である。次に、第６番目のコード”０ｄ”についてＳＵＢコマンドであると判断される。該ＳＵＢコマンドは第１および第２オペランドとしてレジスタ番号を持つので、オペランド抽出処理においては、第７番目のコード”０ａ”が第１オペランドとして確定され、また、第８番目のコード”０ｆ”が第２オペランドとして確定されることとなる。以下、同様にして、コマンドおよびオペランド抽出処理が行われて、結果として図７（ｂ）に示すような有効コード列を得ることとなる。
【００８１】
次に、プログラム実行部１０３では、プログラム解析部１０２により得られた有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力する。プログラム実行部１０３は、基本的には普通のマイコン等を用いたプログラム実行と同等である。すなわち、内部にはメモリ、レジスタ、スタックポインタ、フラグ等および制御部を備え、その外部には入力ポートおよび出力ポートを備える。尚、入力ポートには外部から信号が供給される。
【００８２】
また、後述のようにジェネティックアルゴリズム部（以下、ＧＡ部という）１０５によって、コード列記憶部１０１上に任意のプログラムが勝手に生成されることから、プログラム実行部１０３では、無限ループに陥らないための制約が必要である。
【００８３】
すなわち、第１に、分岐コマンドでは前方へのジャンプ以外認めない。ジャンプ先のアドレスが現アドレスより後方の場合は、ジャンプしない。つまり、プログラムの繰り返しは、繰り返しコマンドによってのみ行うこととし、またＲＥＴコマンドを備えて、前方分岐命令の後にＲＥＴコマンドが来る場合にはサブルーチンとして処理されることとする。
【００８４】
第２に、プログラム実行部１０３内部に、繰り返しコマンド実行時に繰り返し残り回数を記憶する手段を備え、繰り返し回数が前回の繰り返し実行時より減っていない場合、つまり、繰り返し残り回数を指定するアドレスの数値が（書き換えられて）前回より減っていなかった場合は、そこで繰り返しを終了して該繰り返しコマンドを無効とすることである。
【００８５】
このため、繰り返しコマンドを実装する場合には、本来のプログラムとは別個に、プログラムによって書き替えることのできないスタックを持つことが必要になる。このスタックの持ち方としては、第１に、繰り返し残り回数指定アドレスの内容をその都度コピーしておいて比較チェックする構成、第２に、直接、繰り返し残り回数を保持してその都度デクリメントする構成、等々のバリエーションがある。
【００８６】
第３の制約としては、ジャンプ実行前（スタックポインタが空の状態で）のＲＥＴコマンドは無視されることである。尚、本実施形態では、割り込み等の実装は考慮していない。
【００８７】
次に、実行結果評価部１０４では、プログラム実行部１０３による実行結果を評価する。つまり、入力ポートおよび出力ポートの値を取りこんで、一部は履歴データとして貯え、入力ポートおよび出力ポートの値（若しくは履歴データ）に基づいて所定の演算を行い、評価値を算出する。先に述べたように、自動プログラミング装置１００の外部に実システム若しくはエミュレータ１１１を具備し、入力ポートおよび出力ポートの値を供給して該実システム若しくはエミュレータ１１１を動作させ、その動作の結果である入出力データおよび状態データを外部実行結果評価部１１２で評価して、外部評価値を自動プログラミング装置１００に返すようにしても良い。
【００８８】
さらに、ＧＡ部（ジェネティックアルゴリズム部）１０５は、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、評価結果に基づいて任意の個体を排除する淘汰手段（淘汰ステップ）と、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差手段（交差ステップ）と、任意の個体について遺伝子を変化させる突然変異手段（突然変異ステップ）とを備えて構成されている。
【００８９】
ここで、「遺伝子」は個体の性質を規定する基本的構成要素であり、「染色体」は遺伝子の集合体である。また「個体」は染色体によって特徴づけられた自律的な個であり、「集団」は個体の集まりである。
【００９０】
通常の遺伝子アルゴリズムにおいては、各遺伝子座の役割がアプリケーション毎に決まっているため、原則としてコード長は一定である。しかしながら、本実施形態のように、任意の機能を実現する機械語コード列を作り出すためには、適宜コード長を変更していかなくてはならない。また、一般にはコード長が長いほど複雑な機能が実現できる。このため、本実施形態の遺伝子アルゴリズムにおいては、コード長を変更するようなコード操作を付加している。
【００９１】
すなわち、交差手段（交差ステップ）において、任意の２つの個体についてコード長（染色体の長さ）の変更を伴う交差を行い、また、突然変異手段（突然変異ステップ）において、任意の個体についてコード長（染色体の長さ）の変更を伴う突然変異を行う。これにより、従来の多くの自動プログラミングにおいて制約となっていた固定長コードの限定が排除され、任意のコード長命令や可変コード長命令を備えたより一般的な命令セットを扱うことが可能となる。
【００９２】
まず、淘汰手段（淘汰ステップ）では、評価結果に基づいて任意の個体を排除する。つまり、評価値にしたがって悪い個体を排除する操作である。ここでは、ルーレット戦略を用いている。「ルーレット戦略」とは、個体の評価値の悪さに応じて淘汰確率を（評価値が悪いほど確率が大きくなるように）個体毎に設定し、乱数を発生させて、個体の淘汰を決定する戦略である。図８および図９には、ルーレット戦略による淘汰（淘汰確率０．４の場合）の代表的な操作を例示する説明図を示す。
【００９３】
まず、図８は、全個体Ａ，Ｂ，Ｃ，Ｄを確率に応じて並べ、発生した乱数値で淘汰する個体を決定するものである。同図では、個体数４に対し淘汰確率０．４であるので、２個体淘汰を行うものとし、乱数０．７６５が発生したとして個体Ｃが淘汰され、さらに乱数０．４３０が発生したとして個体Ａが淘汰されている。尚、この方法によれば、１回の乱数発生で何れか１つの個体が淘汰されることとなる。
【００９４】
また、図９は、各個体毎に乱数を発生させて、乱数が該個体の確率以下の場合に該個体を淘汰するものである。同図では、個体Ａに対して乱数０．３６５が発生したとして該個体Ａが淘汰され、個体Ｄに対して乱数０．１３８が発生したとして該個体Ｄが淘汰されている。尚、図８および図９に例示したものは代表的なもので、バリエーションは様々である。
【００９５】
また、淘汰された個体の分は、淘汰された数だけ補充される。ここでは、残った個体の中から無作為に選択して複製している。尚、評価値に応じて選択確率を変えることも可能である。
【００９６】
次に、交差手段（交差ステップ）では、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる。まず、コード長の変更を伴わない交配（通常の交配）では、図１０（ａ）に示すように、一点交差を用いている。すなわち、乱数を発生させて、交配を行う個体（２個体）と遺伝子を分断する交差位置（１箇所）とを決定し、切断された個体の前半と後半とを互いに交換して接続する。
【００９７】
次に、コード長の変更を伴う交配では、図１０（ｂ）に示すように、乱数を発生させて、「交配を行う個体（１個体）と遺伝子を分断する位置（１箇所）」との組を２組決定し、切断された２つの個体の前半と後半とを互いに交換して接続する。
【００９８】
さらに、突然変異手段（突然変異ステップ）では、任意の個体について遺伝子を変化させる。つまり、図１１（ａ）に示すように、乱数を発生させて、突然変異を行う個体、突然変異を発生させる遺伝子座、並びに、突然変異した結果の遺伝子情報を決定して、遺伝子を変化させるものである。
【００９９】
コード長の変更を伴う突然変異では、乱数を発生させて、突然変異を行う個体およびコード長増加か或いはコード長減少かを決定する。コード長増加の場合には、図１１（ｂ）に示すように、突然変異を行う個体Ａについて新しい遺伝子座をどこに挿入するか、どの個体（個体Ｂ）のどの遺伝子座を挿入するかを決定する。また、コード長減少の場合には、図１１（ｃ）に示すように、突然変異を行う個体Ａについてどの遺伝子座を削除するかを決定する。
【０１００】
尚、コード長の変更を伴う突然変異においても、いくつ挿入するか、いくつ削除するか、などのバリエーションがある。例えば、図１２（ａ）に示すコード長増加の突然変異の場合では、突然変異を行う個体Ａについて新しい遺伝子座をどこに挿入するか、どの個体（個体Ｂ）のどの範囲の遺伝子座を挿入するかを決定して突然変異を行っており、また、図１２（ｂ）に示すコード長減少の場合には、突然変異を行う個体Ａについてどの範囲の遺伝子座を削除するかを決定して突然変異を行っている。
【０１０１】
以上のようなジェネティックアルゴリズム部１０５の機能および動作により、任意のプログラム（コード列）を学習的に獲得することができる。
【０１０２】
以上説明したように、本実施形態の自動プログラミング装置では、プログラム解析部１０２により任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力し、プログラム実行部１０３により該有効コード列を所与入力について無限ループに陥ることなく実行して、該プログラム実行部１０３による実行結果を実行結果評価部１０４によって評価し、ジェネティックアルゴリズム部１０５では、該評価結果に基づいてコード列を修正するようにしており、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成としたので、従来の要素機能の組み合わせに限定されるといった制約が排除され、任意の機能を実現することができる。
【０１０３】
また、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備え、ジェネティックアルゴリズム部１０５において、淘汰手段（淘汰ステップ）により評価結果に基づき任意の個体を排除し、交差手段（交差ステップ）により任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせ、また突然変異手段（突然変異ステップ）により任意の個体について遺伝子を変化させるようにしているので、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習することができる。
【０１０４】
尚、プログラム解析部１０２におけるコマンドおよびオペランド抽出処理に関して、一般に、コードの生成率が低い場合（初期段階では）、第１の方法（図２参照）による方が新しい有効コードの生成効率は良い。また、学習が進み、コードの生成率が高くなった場合、過去に生成された有用な（評価値を向上させる）コードが消滅する危険性は、第２の方法（図３参照）の方が少ない。
【０１０５】
また評価値に関して、生成プログラムの評価には大きく２つのポイントがある。第１は「入力に対する出力の結果が適切か否か」であり、第２は「効率よくコードを生成しているか否か」である。主として、初期の段階では、第２のポイントが重要になり、学習が進むにつれて第１のポイントの重要性が増してくる。（実際問題として、初期の段階では、適切な動作はほとんどできない。）
【０１０６】
【発明の効果】
以上の説明から明らかなように、本発明によれば、プログラム解析手段（プログラム解析ステップ）により任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力し、プログラム実行手段（プログラム実行ステップ）により該有効コード列を所与入力について無限ループに陥ることなく実行して、該プログラム実行手段による実行結果を実行結果評価手段（実行結果評価ステップ）によって評価し、コード列修正手段（コード列修正ステップ）では、該評価結果に基づいてコード列を修正するようにし、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成としたので、従来の要素機能の組み合わせに限定されるといった制約が排除され、任意の機能を実現し得る自動プログラミング装置、自動プログラミング方法および記録媒体を提供することができる。
【０１０７】
また、本発明によれば、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備え、コード列修正ステップにおいて、淘汰ステップにより評価結果に基づき任意の個体を排除し、交差ステップにより任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせ、また突然変異ステップにより任意の個体について遺伝子を変化させるようにしているので、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習し得る自動プログラミング方法を提供することができる。
【０１０８】
また、本発明によれば、交差ステップにおいて、任意の２つの個体についてコード長（染色体の長さ）の変更を伴う交差を行い、また、突然変異ステップにおいて、任意の個体についてコード長（染色体の長さ）の変更を伴う突然変異を行うこととしたので、従来の多くの自動プログラミングにおいて制約となっていた固定長コードの限定が排除され、任意のコード長命令や可変コード長命令を備えたより一般的な命令セットを扱うことが可能となる。
【０１０９】
また、本発明によれば、プログラム解析ステップにおいて、コマンドとして有効なコードをコード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、コード列の終端まで繰り返すこととしたので、任意のコード列を実行可能なプログラムとして解釈できる。
【０１１０】
また、本発明によれば、プログラム実行ステップは、ジャンプ命令において、ジャンプ先を示すアドレスの値が現在のアドレスよりも小さい場合に、当該ジャンプ命令を無効とし、また、繰り返し命令において、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効としているので、任意のコード列による勝手なプログラムが生成されても無限ループに陥ることがなくなる。
【０１１１】
さらに、本発明によれば、実行結果評価ステップは、プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第１の評価結果を算出し、外部から第２の評価結果を取り込むステップを備え、さらに、有効コード列の有効コード数および有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび第１の評価結果若しくは第２の評価結果に基づき所定の演算を行って新たな第３の評価結果を算出するので、入力に対する出力結果が適切か否かを判断し、有意味のコード列生成を確認でき、また効率良くコード生成がなされているかの確認も可能である。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る自動プログラミング装置の構成図である。
【図２】第１のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートである。
【図３】第２のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートである。
【図４】設定されるマシン語（プログラム実行部における命令セット）の説明図である。
【図５】図５（ａ）はプログラム実行部のハードウェア仕様の説明図、図５（ｂ）はプログラム解析部に供給されるコード列を例示する説明図である。
【図６】図６（ａ）は図５（ｂ）のコード列が供給された場合の第１のコマンドおよびオペランド抽出処理における解析を説明する説明図、図６（ｂ）はコマンドおよびオペランド抽出結果としての有効コード列の説明図である。
【図７】図７（ａ）は図５（ｂ）のコード列が供給された場合の第２のコマンドおよびオペランド抽出処理における解析を説明する説明図、図７（ｂ）はコマンドおよびオペランド抽出結果としての有効コード列の説明図である。
【図８】ルーレット戦略による淘汰の代表的な操作を例示する説明図（その１）である。
【図９】ルーレット戦略による淘汰の代表的な操作を例示する説明図（その２）である。
【図１０】図１０（ａ）はコード長の変更を伴わない交配（通常の交配）の説明図、図１０（ｂ）はコード長の変更を伴う交配の説明図である。
【図１１】図１１（ａ）は遺伝子情報の突然変異の説明図、図１１（ｂ）はコード長増加の場合の突然変異の説明図、図１１（ｃ）はコード長減少の場合の突然変異の説明図である。
【図１２】図１２（ａ）はコード長増加の突然変異の説明図、図１２（ｂ）に示すコード長減少の突然変異の説明図である。
【符号の説明】
１００    自動プログラミング装置
１０１    コード列記憶部
１０２    プログラム解析部
１０３    プログラム実行部
１０４    実行結果評価部
１０５    ジェネティックアルゴリズム部（コード列修正手段）
１１１    実システム若しくはエミュレータ
１１２    外部実行結果評価部
【図１】
0003594106.tif 000002
【図２】
0003594106.tif 000003
【図３】
0003594106.tif 000004
【図４】
0003594106.tif 000005
【図５】
0003594106.tif 000006
【図６】
0003594106.tif 000007
【図７】
0003594106.tif 000008
【図８】
0003594106.tif 000009
【図９】
0003594106.tif 000010
【図１０】
0003594106.tif 000011
【図１１】
0003594106.tif 000012
【図１２】
0003594106.tif 000013