JP3594106B2 - 自動プログラミング装置、自動プログラミング方法および記録媒体 - Google Patents
自動プログラミング装置、自動プログラミング方法および記録媒体 Download PDFInfo
- Publication number
- JP3594106B2 JP3594106B2 JP21410297A JP21410297A JP3594106B2 JP 3594106 B2 JP3594106 B2 JP 3594106B2 JP 21410297 A JP21410297 A JP 21410297A JP 21410297 A JP21410297 A JP 21410297A JP 3594106 B2 JP3594106 B2 JP 3594106B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- command
- valid
- operand
- program
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は、自動プログラミング装置、自動プログラミング方法および該自動プログラミング方法を実行させるためのプログラムを記録した記録媒体に係り、特に、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成として、任意の機能を実現することができ、また、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備えることにより、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習し得る自動プログラミング装置、自動プログラミング方法および記録媒体に関する。
【0002】
【従来の技術】
従来より、自動プログラミング方法として代表的なものに「遺伝的プログラミング(Genetic Programming)」や「サブサンプションアーキテクチャ」と呼ばれる技術がある。これらの技術は基本的に、複数の要素機能を用意しておき、これらの要素機能の組み合わせを経験的に学習するものである。
【0003】
【発明が解決しようとする課題】
したがって、従来の自動プログラミング方法にあっては、実現できる機能は予め用意された要素機能の組み合わせ機能であって、限られた機能しか実現することはできないという問題点があった。逆に言えば、従来の自動プログラミング方法は、限られた組み合わせの中から最適な組み合わせを学習する技術であったとも言える。
【0004】
本発明は、このような従来の問題点に着目してなされたもので、その目的とするところは、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成として、従来の要素機能の組み合わせに限定されるといった制約を排除して、任意の機能を実現し得る自動プログラミング装置、自動プログラミング方法および記録媒体を提供することにある。
【0005】
また、本発明の他の目的は、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備えることにより、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習し得る自動プログラミング装置、自動プログラミング方法および記録媒体を提供することである。
【0006】
【課題を解決するための手段】
上記課題を解決するために、本出願の第1の発明は、任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、前記プログラム実行手段による実行結果を評価する実行結果評価手段と、前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段とを具備することを特徴とする自動プログラミング装置にある。
【0007】
本出願の好ましい実施の形態においては、前記第1の発明による自動プログラミング装置におけるコード列修正手段は、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、前記評価結果に基づいて任意の個体を排除する淘汰手段と、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差手段と、任意の個体について遺伝子を変化させる突然変異手段とを具備するものであってもよい。
【0008】
本出願の好ましい実施の形態においては、前記第1の発明による自動プログラミング装置におけるプログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返すものであってもよい。
【0009】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【0010】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【0011】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【0012】
ここで、前記プログラム解析手段は、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【0013】
本出願の好ましい実施の形態においては、前記第1の発明による自動プログラミング装置におけるプログラム実行手段は、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶する手段を備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とするものであってもよい。
【0014】
本出願の好ましい実施の形態においては、前記第1の発明による自動プログラミング装置における実行結果評価手段は、前記プログラム実行手段における入力および出力のデータに基づき所定の演算を行って第1の評価結果を算出するものであってもよい。
【0015】
本出願の好ましい実施の形態においては、前記第1の発明による自動プログラミング装置における実行結果評価手段は、外部から第2の評価結果を取り込む手段を備えるものであってもよい。
【0016】
ここで、前記実行結果評価手段は、前記有効コード列の有効コード数を算出する有効コード数算出手段を備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび前記第1の評価結果若しくは前記第2の評価結果に基づき所定の演算を行って新たな第3の評価結果を算出するものであってもよい。
【0017】
本出願の第2の発明は、任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップとを具備することを特徴とする自動プログラミング方法にある。
【0018】
本出願の第3の発明は、前記第2の発明による自動プログラミング方法におけるコード列修正ステップは、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、前記評価結果に基づいて任意の個体を排除する淘汰ステップと、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差ステップと、任意の個体について遺伝子を変化させる突然変異ステップとを具備することを特徴とするものである。
【0019】
本出願の第4の発明は、前記第2の発明又は前記第3の発明による自動プログラミング方法におけるプログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返すことを特徴とするものである。
【0020】
本出願の第5の発明は、前記第4の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とするものである。
【0021】
本出願の第6の発明は、前記第4の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とするものである。
【0022】
本出願の第7の発明は、前記第4の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とするものである。
【0023】
本出願の第8の発明は、前記第4の発明による自動プログラミング方法におけるプログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とするものである。
【0024】
本出願の第9の発明は、前記第2の発明又は第3の発明又は第4の発明による自動プログラミング方法におけるプログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とすることを特徴とするものである。
【0025】
本出願の第10の発明は、前記第2の発明又は第3の発明又は第4の発明による自動プログラミング方法における実行結果評価ステップは、前記プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第1の評価結果を算出することを特徴とするものである。
【0026】
本出願の第11の発明は、前記第2の発明又は第3の発明又は第4の発明による自動プログラミング方法における実行結果評価ステップは、外部から第2の評価結果を取り込むステップを備えることを特徴とするものである。
【0027】
本出願の第12の発明は、前記第10の発明又は第11の発明による自動プログラミング方法における実行結果評価ステップは、前記有効コード列の有効コード数を算出する有効コード数算出ステップを備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび前記第1の評価結果若しくは前記第2の評価結果に基づき所定の演算を行って新たな第3の評価結果を算出することを特徴とするものである。
【0028】
本出願の第13の発明は、コンピュータに、任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップとを実行させるためのプログラムを記録した記録媒体にある。
【0029】
本出願の好ましい実施の形態においては、前記第13の発明による記録媒体におけるコード列修正ステップは、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、前記評価結果に基づいて任意の個体を排除する淘汰ステップと、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差ステップと、任意の個体について遺伝子を変化させる突然変異ステップとを具備するものであってもよい。
【0030】
本出願の好ましい実施の形態においては、前記第13の発明による記録媒体におけるプログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返すものであってもよい。
【0031】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【0032】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものであってもよい。
【0033】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【0034】
ここで、前記プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うものであってもよい。
【0035】
本出願の好ましい実施の形態においては、前記第13の発明による記録媒体におけるプログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とするものであってもよい。
【0036】
本出願の好ましい実施の形態においては、前記第13の発明による記録媒体における実行結果評価ステップは、前記プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第1の評価結果を算出するものであってもよい。
【0037】
本出願の好ましい実施の形態においては、前記第13の発明による記録媒体における実行結果評価ステップは、外部から第2の評価結果を取り込むステップを備えるものであってもよい。
【0038】
さらに、ここで、前記実行結果評価ステップは、前記有効コード列の有効コード数を算出する有効コード数算出ステップを備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび前記第1の評価結果若しくは前記第2の評価結果に基づき所定の演算を行って新たな第3の評価結果を算出するものであってもよい。
【0039】
そして、この第1の発明、第2の発明または第13の発明によれば、プログラム解析手段(プログラム解析ステップ)により任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力し、プログラム実行手段(プログラム実行ステップ)により該有効コード列を所与入力について無限ループに陥ることなく実行して、該プログラム実行手段(プログラム実行ステップ)による実行結果を実行結果評価手段(実行結果評価ステップ)によって評価し、コード列修正手段(コード列修正ステップ)では、該評価結果に基づいてコード列を修正するようにしている。このように、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できるよう構成するので、従来の要素機能の組み合わせに限定されるといった制約が排除され、任意の機能を実現することができる。
【0040】
また、第3の発明によれば、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備え、コード列修正ステップにおいて、淘汰ステップにより評価結果に基づき任意の個体を排除し、交差ステップにより任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせ、また突然変異ステップにより任意の個体について遺伝子を変化させるようにしているので、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習することができる。
【0041】
ここで、「遺伝子」は個体の性質を規定する基本的構成要素であり、「染色体」は遺伝子の集合体である。また「個体」は染色体によって特徴づけられた自律的な個であり、「集団」は個体の集まりである。また、「淘汰」の戦略には、評価値に応じた淘汰確率を設定して乱数により個体の淘汰を決定するルーレット戦略等がある。また、「交差」の戦略には、一点交差、二点交差、一様交差等があり、遺伝子を交差させるかどうかは交差率によって決定される。さらに、遺伝子を「突然変異」させるかどうかは突然変異率によって決定される。
【0042】
また、交差ステップにおいて、任意の2つの個体についてコード長(染色体の長さ)の変更を伴う交差を行い、または、突然変異ステップにおいて、任意の個体についてコード長(染色体の長さ)の変更を伴う突然変異を行えば、これにより、従来の多くの自動プログラミングにおいて制約となっていた固定長コードの限定が排除され、任意のコード長命令や可変コード長命令を備えたより一般的な命令セットを扱うことが可能となる。
【0043】
また、第4の発明によれば、プログラム解析ステップにおいて、コマンドとして有効なコードをコード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、コード列の終端まで繰り返すようにしている。特に、第5の発明によれば、プログラム解析ステップにおいて、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すようにしている。また特に、第6の発明によれば、プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すようにしている。これにより、任意のコード列を実行可能なプログラムとして解釈できる。尚、コード列修正ステップにおける学習が初期の段階では有効コード列のコード生成率は低いが、この初期段階で当該手順を適用すれば、新しい有効コード(列)を生成する確率が高い。
【0044】
また特に、第7の発明によれば、プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うようにしている。また、第8の発明によれば、プログラム解析ステップは、オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うようにしている。これにより、任意のコード列を実行可能なプログラムとして解釈できる。尚、コード列修正ステップにおける学習が進むと有効コード列のコード生成率は高くなるが、このような場合に当該手順を適用すれば、過去に生成された有効コード(列)を消滅させる可能性が低くなる。
【0045】
また、第9の発明によれば、プログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とするようにしている。これにより、任意のコード列による勝手なプログラムが生成されても無限ループに陥ることがなくなる。
【0046】
また、第10の発明によれば、実行結果評価ステップは、プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第1の評価結果を算出するようにしている。また、第11の発明によれば、実行結果評価ステップは、外部から第2の評価結果を取り込むステップを備え、さらに、第12の発明によれば、実行結果評価ステップは、前記有効コード列の有効コード数を算出する有効コード数算出ステップを備え、該有効コード数および前記有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび第1の評価結果若しくは第2の評価結果に基づき所定の演算を行って新たな第3の評価結果を算出するようにしている。これにより、入力に対する出力結果が適切か否かを判断し、有意味のコード列生成を確認でき、また効率良くコード生成がなされているかの確認も可能である。
【0047】
【発明の実施の形態】
以下、本発明の自動プログラミング装置、自動プログラミング方法および記録媒体の実施の形態について、図面を参照して詳細に説明する。
【0048】
図1は本発明の一実施形態に係る自動プログラミング装置の構成図である。
【0049】
同図において、本実施形態の自動プログラミング装置100は、コード列記憶部101と、コード列記憶部101からの任意のコード列を解析して実行可能な機械語プログラムである有効コード列を出力するプログラム解析部102と、該有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行部103と、プログラム実行部103による実行結果を評価する実行結果評価部104と、実行結果評価部104による評価結果に基づいてコード列を修正するジェネティックアルゴリズム部(コード列修正手段)105とを備えて構成されている。
【0050】
また、自動プログラミング装置100外部には、実システム若しくはエミュレータ111を備えており、該実システム若しくはエミュレータ111では、入力ポートおよび出力ポートを介して供給される各種値からプログラム実行動作を実行または模擬実行して入出力および状態データを得るようにしても良い。この場合、実行結果評価部104は、自動プログラミング装置100の外部に外部実行結果評価部112として実現し、評価結果を自動プログラミング装置100に返す構成としてもよい。
【0051】
以下、各構成要素の機能および動作について詳細に説明する。まず、コード列記憶部101は、機械語コードに相当する整数型の値を遺伝子とし、該遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成する場合に、個体数に相当する数のコード列(機械語プログラム)を記憶している。それぞれのコード列では、1つの遺伝子座が1つの機械語コードに相当し、遺伝子座の並ぶ順番にアドレスが割り付けられた構成である。
【0052】
次に、プログラム解析部102では、コード列記憶部101からの任意のコード列を解析して実行可能な機械語プログラムである有効コード列を出力する。当該プログラム解析部102における処理手順は、おおまかに言えば、第1に、コマンドとして有効なコードをコード列の最初から探索して抽出し、第2に、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という第1および第2の手順を、コード列の終端まで繰り返すことで行われる。このコマンドおよびオペランドの抽出方法として、本実施形態では以下の2つの方法を採用している。
【0053】
すなわち、第1のコマンドおよびオペランド抽出方法は、オペランドとして有効なコードを探索する際に、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すか、或いは、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すものである。
【0054】
第1のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートを図2に示す。図2において、APはアドレスポインタ、CCはコマンド数カウンタ、OCはオペランド数カウンタ、NAはコード列の長さ、NOはコマンドのオペランド数である。
【0055】
まず、ステップ201でアドレスポインタAPおよびコマンド数カウンタCCをクリアして初期設定した後、ステップ202では、アドレスポインタAPの内容がコード列の長さNAに等しいか否かを判断して終了判定を行う。
【0056】
アドレスポインタAPの内容がコード列の長さNA未満である場合には、ステップ203に進んで、アドレスポインタAPが指すコードがコマンドの1つとして有効か否かを判断する。アドレスポインタAPが指すコードがコマンドとして無効であれば、ステップ204で、アドレスポインタAPを次のコードに移動(インクリメント)して、ステップ202に戻る。
【0057】
また、アドレスポインタAPが指すコードがコマンドの1つとして有効ならば、ステップ205に進んで、アドレスポインタAPが指すコードをコマンド数カウンタが指すコマンドとして設定し、ステップ206で、該コマンドの実行に必要なオペランド数NOと種類(アドレス、レジスタ、ポート、等の別)を抽出する。
【0058】
次に、オペランド抽出処理に入って、ステップ207でオペランド数カウンタOCをクリアして初期設定した後、ステップ208では、オペランド数カウンタOCの内容がコマンドの実行に必要なオペランド数NOに等しいか否かを判断してオペランド抽出処理の終了判定を行う。尚、両者が等しい場合には、該コマンドについてのオペランド抽出処理が終了したとして、ステップ209で、アドレスポインタAPおよびコマンド数カウンタCCをそれぞれインクリメントした後、ステップ202に戻る。
【0059】
また、オペランド数カウンタOCの内容がコマンドのオペランド数NO未満である場合には、ステップ210に進んで、アドレスポインタAPをインクリメントした後、ステップ211で、アドレスポインタAPの内容がコード列の長さNAに等しいか否かを判断してコマンド抽出処理の終了判定を行う。
【0060】
アドレスポインタAPの内容がコード列の長さNA未満である場合には、ステップ212に進んで、アドレスポインタAPが指すコードがコマンドの第1オペランドとして有効か否かを判断する。該コードが第1オペランドとして無効であれば、ステップ210に戻ってアドレスポインタAPをインクリメントして次のコードについての処理に移行する。また該コードがオペランドとして有効であれば、ステップ214に進んで該コードを第1オペランドとして確定し、ステップ215でオペランド数カウンタOCをインクリメントして、第2オペランドを抽出すべくステップ208に戻る。
【0061】
すなわち、ステップ208からステップ215までの処理を、必要オペランド数(NO)だけ繰り返し、該コマンドに対応するオペランドを確定して、ステップ209を介してステップ202に戻ることとなる。また、以上の処理(ステップ202からステップ215までの処理)を、コード列の最後まで繰り返し行う。
【0062】
尚、ステップ208のオペランド抽出処理の終了判定の後に、コマンド抽出処理に戻る処理(ステップ209)においては、図2のステップ202のように、オペランド抽出処理における最後のオペランドコードの次のコードにアドレスポインタAPを移動するものの他に、有効とされたオペランドコードをコード列から除き、残ったコード列に対して、前回のコマンドコードの次のコードにアドレスポインタAPを移動する、といった変形も可能である。
【0063】
次に、第2のコマンドおよびオペランド抽出方法について説明する。これは、オペランドとして有効なコードを探索する際に、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うか、或いは、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うものである。
【0064】
第2のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートを図3に示す。図3において、APはアドレスポインタ、CCはコマンド数カウンタ、OCはオペランド数カウンタ、NAはコード列の長さ、NOはコマンドのオペランド数、APSはアドレスポインタスタックである。
【0065】
まず、ステップ301でアドレスポインタAPおよびコマンド数カウンタCCをクリアして初期設定した後、ステップ302では、アドレスポインタAPの内容がコード列の長さNAに等しいか否かを判断して終了判定を行う。
【0066】
アドレスポインタAPの内容がコード列の長さNA未満である場合には、ステップ303に進んで、アドレスポインタAPが指すコードがコマンドの1つとして有効か否かを判断する。アドレスポインタAPが指すコードがコマンドとして無効であれば、ステップ304で、アドレスポインタAPを次のコードに移動(インクリメント)して、ステップ302に戻る。
【0067】
また、アドレスポインタAPが指すコードがコマンドの1つとして有効ならば、ステップ305に進んで、アドレスポインタAPが指すコードをコマンド数カウンタが指すコマンドとして設定し、またアドレスポインタAPの内容をアドレスポインタスタックAPSに入れる。次に、ステップ306では、該コマンドの実行に必要なオペランド数NOと種類(アドレス、レジスタ、ポート、等の別)を抽出する。
【0068】
次に、オペランド抽出処理に入って、ステップ307でオペランド数カウンタOCをクリアして初期設定した後、ステップ308では、オペランド数カウンタOCの内容がコマンドの実行に必要なオペランド数NOに等しいか否かを判断してオペランド抽出処理の終了判定を行う。尚、両者が等しい場合には、該コマンドについてのオペランド抽出処理が終了したとして、ステップ309で、アドレスポインタAPおよびコマンド数カウンタCCをそれぞれインクリメントした後、ステップ302に戻る。
【0069】
また、オペランド数カウンタOCの内容がコマンドのオペランド数NO未満である場合には、ステップ310に進んで、アドレスポインタAPをインクリメントした後、ステップ311で、アドレスポインタAPの内容がコード列の長さNAに等しいか否かを判断してコマンド抽出処理の終了判定を行う。
【0070】
アドレスポインタAPの内容がコード列の長さNA未満である場合には、ステップ312に進んで、アドレスポインタAPが指すコードがコマンドの第1オペランドとして有効か否かを判断する。該コードが第1オペランドとして無効であれば、上記コマンド抽出処理で抽出したコマンド自体を無効と判断し、ステップ313に進んでアドレスポインタAPをアドレスポインタスタックAPSの内容に”1”を加えた後にステップ302に戻り、該無効コマンドの次のコードについてのコマンド抽出処理に移行する。
【0071】
また、ステップ312において、アドレスポインタAPが指すコードがオペランドとして有効であれば、ステップ314に進んで該コードを第1オペランドとして確定し、ステップ315でオペランド数カウンタOCをインクリメントして、第2オペランドを抽出すべくステップ308に戻る。
【0072】
すなわち、ステップ308からステップ315までの処理を、必要オペランド数(NO)だけ繰り返し、該コマンドに対応するオペランドを確定して、ステップ309を介してステップ302に戻ることとなる。また、以上の処理(ステップ302からステップ315までの処理)を、コード列の最後まで繰り返し行う。
【0073】
尚、ステップ312においてオペランドとして無効とされた場合に、コマンド抽出処理に戻る処理(ステップ313)においては、図3のステップ313のように、現在コマンドとして解析しているコードの次のコードにポインタを移動する(AP=APS+1)ものの他に、現在オペランドとして解析しているコードの次のコードにポインタを移動する(AP=AP+1)といった変形が可能である。
【0074】
以上のようなコマンドおよびオペランド抽出処理によって、プログラム解析部102では、任意のコード列を解析して実行可能な機械語プログラムである有効コード列を出力することが可能となる。
【0075】
プログラム解析部102におけるコマンドおよびオペランド抽出処理を、具体例を使用して説明する。図4は、設定されるマシン語、すなわちプログラム実行部103における命令セットの説明図である。同図に示すように、命令セットは一般的なものであり、移動命令(MOV)、算術命令(INC,DEC,ADD,SUB,MUL,DEV)、論理演算命令(INV,AND,OR,EXOR)比較命令(IFG,IFGT,IFL,IFLT,IFEQ,IFNE)、分岐命令(JMP,JTR,JFL,LOOP,RET)等を備えている。尚、アドレスポインタAPおよびスタックポインタSPの詳細な動作は、通常のコンピュータに準拠している。
【0076】
また、通常のマイコン等のコンピュータでは、フラグの役割は固定化されており、ユーザがフラグの機能を自由に使いたいときは、通常のレジスタをフラグ代わりに利用するものが多いが、ここでは、自由なフラグを複数持つことで、任意に生成されるコード列の冗長性が上がることを防止している点に特徴がある。
【0077】
尚、通常、頻繁に用いられる命令に対して複数のコマンドコードを割り当てておいて、任意に生成されるコード列での出現頻度を確率的に高くしておき、生成されるコード列の有効性を高くといった工夫も考えられる。
【0078】
また、図5(a)には、プログラム実行部103のハードウェア仕様を、図5(b)には、プログラム解析部102に供給されるコード列を示す。
【0079】
上記第1のコマンドおよびオペランド抽出処理においては、図5(b)のコード列が供給された場合、図6(a)に示すような解析が順次なされていく。すなわち、まず第1番目のコード”01”についてMOVコマンドであると判断される。次に、該MOVコマンドは第1オペランドとして入力ポート番号を持ち、第2オペランドとしてレジスタ番号を持つので、オペランド抽出処理においては、第2番目のコード”84”は入力ポート数(8D)以上の数値であるので無効とされ、第3番目のコード”03”が第1オペランドとして確定される。また、第4および第5番目のコード”7e”,”2f”はレジスタ数(16D)以上の数値であるので無効とされ、第6番目のコード”0d”が第2オペランドとして確定されることとなる。以下、同様にして、コマンドおよびオペランド抽出処理が行われて、結果として図6(b)に示すような有効コード列を得ることとなる。
【0080】
次に、上記第2のコマンドおよびオペランド抽出処理においては、図5(b)のコード列が供給された場合、図7(a)に示すような解析が順次なされていく。すなわち、まず第1番目のコード”01”についてMOVコマンドであると判断されるが、該MOVコマンドは第1オペランドとして入力ポート番号を持つにも拘らず、第2番目のコード”84”は入力ポート数(8D)以上の数値であるので、該MOVコマンド自体が無効とされる。また、第2番目のコード”84”はコマンドとして無効である。次に、第3番目のコード”03”についてMOVコマンドであると判断されるが、該MOVコマンドは第1オペランドとしてレジスタ番号を持つにも拘らず、第4番目のコード”7e”はレジスタ数(16D)以上の数値であるので、該MOVコマンド自体が無効とされる。また、第4および第5番目のコード”7e”,”2f”はコマンドとして無効である。次に、第6番目のコード”0d”についてSUBコマンドであると判断される。該SUBコマンドは第1および第2オペランドとしてレジスタ番号を持つので、オペランド抽出処理においては、第7番目のコード”0a”が第1オペランドとして確定され、また、第8番目のコード”0f”が第2オペランドとして確定されることとなる。以下、同様にして、コマンドおよびオペランド抽出処理が行われて、結果として図7(b)に示すような有効コード列を得ることとなる。
【0081】
次に、プログラム実行部103では、プログラム解析部102により得られた有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力する。プログラム実行部103は、基本的には普通のマイコン等を用いたプログラム実行と同等である。すなわち、内部にはメモリ、レジスタ、スタックポインタ、フラグ等および制御部を備え、その外部には入力ポートおよび出力ポートを備える。尚、入力ポートには外部から信号が供給される。
【0082】
また、後述のようにジェネティックアルゴリズム部(以下、GA部という)105によって、コード列記憶部101上に任意のプログラムが勝手に生成されることから、プログラム実行部103では、無限ループに陥らないための制約が必要である。
【0083】
すなわち、第1に、分岐コマンドでは前方へのジャンプ以外認めない。ジャンプ先のアドレスが現アドレスより後方の場合は、ジャンプしない。つまり、プログラムの繰り返しは、繰り返しコマンドによってのみ行うこととし、またRETコマンドを備えて、前方分岐命令の後にRETコマンドが来る場合にはサブルーチンとして処理されることとする。
【0084】
第2に、プログラム実行部103内部に、繰り返しコマンド実行時に繰り返し残り回数を記憶する手段を備え、繰り返し回数が前回の繰り返し実行時より減っていない場合、つまり、繰り返し残り回数を指定するアドレスの数値が(書き換えられて)前回より減っていなかった場合は、そこで繰り返しを終了して該繰り返しコマンドを無効とすることである。
【0085】
このため、繰り返しコマンドを実装する場合には、本来のプログラムとは別個に、プログラムによって書き替えることのできないスタックを持つことが必要になる。このスタックの持ち方としては、第1に、繰り返し残り回数指定アドレスの内容をその都度コピーしておいて比較チェックする構成、第2に、直接、繰り返し残り回数を保持してその都度デクリメントする構成、等々のバリエーションがある。
【0086】
第3の制約としては、ジャンプ実行前(スタックポインタが空の状態で)のRETコマンドは無視されることである。尚、本実施形態では、割り込み等の実装は考慮していない。
【0087】
次に、実行結果評価部104では、プログラム実行部103による実行結果を評価する。つまり、入力ポートおよび出力ポートの値を取りこんで、一部は履歴データとして貯え、入力ポートおよび出力ポートの値(若しくは履歴データ)に基づいて所定の演算を行い、評価値を算出する。先に述べたように、自動プログラミング装置100の外部に実システム若しくはエミュレータ111を具備し、入力ポートおよび出力ポートの値を供給して該実システム若しくはエミュレータ111を動作させ、その動作の結果である入出力データおよび状態データを外部実行結果評価部112で評価して、外部評価値を自動プログラミング装置100に返すようにしても良い。
【0088】
さらに、GA部(ジェネティックアルゴリズム部)105は、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、評価結果に基づいて任意の個体を排除する淘汰手段(淘汰ステップ)と、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差手段(交差ステップ)と、任意の個体について遺伝子を変化させる突然変異手段(突然変異ステップ)とを備えて構成されている。
【0089】
ここで、「遺伝子」は個体の性質を規定する基本的構成要素であり、「染色体」は遺伝子の集合体である。また「個体」は染色体によって特徴づけられた自律的な個であり、「集団」は個体の集まりである。
【0090】
通常の遺伝子アルゴリズムにおいては、各遺伝子座の役割がアプリケーション毎に決まっているため、原則としてコード長は一定である。しかしながら、本実施形態のように、任意の機能を実現する機械語コード列を作り出すためには、適宜コード長を変更していかなくてはならない。また、一般にはコード長が長いほど複雑な機能が実現できる。このため、本実施形態の遺伝子アルゴリズムにおいては、コード長を変更するようなコード操作を付加している。
【0091】
すなわち、交差手段(交差ステップ)において、任意の2つの個体についてコード長(染色体の長さ)の変更を伴う交差を行い、また、突然変異手段(突然変異ステップ)において、任意の個体についてコード長(染色体の長さ)の変更を伴う突然変異を行う。これにより、従来の多くの自動プログラミングにおいて制約となっていた固定長コードの限定が排除され、任意のコード長命令や可変コード長命令を備えたより一般的な命令セットを扱うことが可能となる。
【0092】
まず、淘汰手段(淘汰ステップ)では、評価結果に基づいて任意の個体を排除する。つまり、評価値にしたがって悪い個体を排除する操作である。ここでは、ルーレット戦略を用いている。「ルーレット戦略」とは、個体の評価値の悪さに応じて淘汰確率を(評価値が悪いほど確率が大きくなるように)個体毎に設定し、乱数を発生させて、個体の淘汰を決定する戦略である。図8および図9には、ルーレット戦略による淘汰(淘汰確率0.4の場合)の代表的な操作を例示する説明図を示す。
【0093】
まず、図8は、全個体A,B,C,Dを確率に応じて並べ、発生した乱数値で淘汰する個体を決定するものである。同図では、個体数4に対し淘汰確率0.4であるので、2個体淘汰を行うものとし、乱数0.765が発生したとして個体Cが淘汰され、さらに乱数0.430が発生したとして個体Aが淘汰されている。尚、この方法によれば、1回の乱数発生で何れか1つの個体が淘汰されることとなる。
【0094】
また、図9は、各個体毎に乱数を発生させて、乱数が該個体の確率以下の場合に該個体を淘汰するものである。同図では、個体Aに対して乱数0.365が発生したとして該個体Aが淘汰され、個体Dに対して乱数0.138が発生したとして該個体Dが淘汰されている。尚、図8および図9に例示したものは代表的なもので、バリエーションは様々である。
【0095】
また、淘汰された個体の分は、淘汰された数だけ補充される。ここでは、残った個体の中から無作為に選択して複製している。尚、評価値に応じて選択確率を変えることも可能である。
【0096】
次に、交差手段(交差ステップ)では、任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる。まず、コード長の変更を伴わない交配(通常の交配)では、図10(a)に示すように、一点交差を用いている。すなわち、乱数を発生させて、交配を行う個体(2個体)と遺伝子を分断する交差位置(1箇所)とを決定し、切断された個体の前半と後半とを互いに交換して接続する。
【0097】
次に、コード長の変更を伴う交配では、図10(b)に示すように、乱数を発生させて、「交配を行う個体(1個体)と遺伝子を分断する位置(1箇所)」との組を2組決定し、切断された2つの個体の前半と後半とを互いに交換して接続する。
【0098】
さらに、突然変異手段(突然変異ステップ)では、任意の個体について遺伝子を変化させる。つまり、図11(a)に示すように、乱数を発生させて、突然変異を行う個体、突然変異を発生させる遺伝子座、並びに、突然変異した結果の遺伝子情報を決定して、遺伝子を変化させるものである。
【0099】
コード長の変更を伴う突然変異では、乱数を発生させて、突然変異を行う個体およびコード長増加か或いはコード長減少かを決定する。コード長増加の場合には、図11(b)に示すように、突然変異を行う個体Aについて新しい遺伝子座をどこに挿入するか、どの個体(個体B)のどの遺伝子座を挿入するかを決定する。また、コード長減少の場合には、図11(c)に示すように、突然変異を行う個体Aについてどの遺伝子座を削除するかを決定する。
【0100】
尚、コード長の変更を伴う突然変異においても、いくつ挿入するか、いくつ削除するか、などのバリエーションがある。例えば、図12(a)に示すコード長増加の突然変異の場合では、突然変異を行う個体Aについて新しい遺伝子座をどこに挿入するか、どの個体(個体B)のどの範囲の遺伝子座を挿入するかを決定して突然変異を行っており、また、図12(b)に示すコード長減少の場合には、突然変異を行う個体Aについてどの範囲の遺伝子座を削除するかを決定して突然変異を行っている。
【0101】
以上のようなジェネティックアルゴリズム部105の機能および動作により、任意のプログラム(コード列)を学習的に獲得することができる。
【0102】
以上説明したように、本実施形態の自動プログラミング装置では、プログラム解析部102により任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力し、プログラム実行部103により該有効コード列を所与入力について無限ループに陥ることなく実行して、該プログラム実行部103による実行結果を実行結果評価部104によって評価し、ジェネティックアルゴリズム部105では、該評価結果に基づいてコード列を修正するようにしており、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成としたので、従来の要素機能の組み合わせに限定されるといった制約が排除され、任意の機能を実現することができる。
【0103】
また、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備え、ジェネティックアルゴリズム部105において、淘汰手段(淘汰ステップ)により評価結果に基づき任意の個体を排除し、交差手段(交差ステップ)により任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせ、また突然変異手段(突然変異ステップ)により任意の個体について遺伝子を変化させるようにしているので、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習することができる。
【0104】
尚、プログラム解析部102におけるコマンドおよびオペランド抽出処理に関して、一般に、コードの生成率が低い場合(初期段階では)、第1の方法(図2参照)による方が新しい有効コードの生成効率は良い。また、学習が進み、コードの生成率が高くなった場合、過去に生成された有用な(評価値を向上させる)コードが消滅する危険性は、第2の方法(図3参照)の方が少ない。
【0105】
また評価値に関して、生成プログラムの評価には大きく2つのポイントがある。第1は「入力に対する出力の結果が適切か否か」であり、第2は「効率よくコードを生成しているか否か」である。主として、初期の段階では、第2のポイントが重要になり、学習が進むにつれて第1のポイントの重要性が増してくる。(実際問題として、初期の段階では、適切な動作はほとんどできない。)
【0106】
【発明の効果】
以上の説明から明らかなように、本発明によれば、プログラム解析手段(プログラム解析ステップ)により任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力し、プログラム実行手段(プログラム実行ステップ)により該有効コード列を所与入力について無限ループに陥ることなく実行して、該プログラム実行手段による実行結果を実行結果評価手段(実行結果評価ステップ)によって評価し、コード列修正手段(コード列修正ステップ)では、該評価結果に基づいてコード列を修正するようにし、任意のコード列を実行可能なプログラムとして解釈し、無限ループに陥ることなく実行できる構成としたので、従来の要素機能の組み合わせに限定されるといった制約が排除され、任意の機能を実現し得る自動プログラミング装置、自動プログラミング方法および記録媒体を提供することができる。
【0107】
また、本発明によれば、遺伝子アルゴリズムをベースとして、機械語コードに相当する整数型の値を遺伝子とし、遺伝子の集合体である染色体を含む個体の集団が機械語プログラムを形成するような遺伝子構造を備え、コード列修正ステップにおいて、淘汰ステップにより評価結果に基づき任意の個体を排除し、交差ステップにより任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせ、また突然変異ステップにより任意の個体について遺伝子を変化させるようにしているので、理論的には、規定される命令セットで実現し得る任意の機能を経験的に学習し得る自動プログラミング方法を提供することができる。
【0108】
また、本発明によれば、交差ステップにおいて、任意の2つの個体についてコード長(染色体の長さ)の変更を伴う交差を行い、また、突然変異ステップにおいて、任意の個体についてコード長(染色体の長さ)の変更を伴う突然変異を行うこととしたので、従来の多くの自動プログラミングにおいて制約となっていた固定長コードの限定が排除され、任意のコード長命令や可変コード長命令を備えたより一般的な命令セットを扱うことが可能となる。
【0109】
また、本発明によれば、プログラム解析ステップにおいて、コマンドとして有効なコードをコード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、コード列の終端まで繰り返すこととしたので、任意のコード列を実行可能なプログラムとして解釈できる。
【0110】
また、本発明によれば、プログラム実行ステップは、ジャンプ命令において、ジャンプ先を示すアドレスの値が現在のアドレスよりも小さい場合に、当該ジャンプ命令を無効とし、また、繰り返し命令において、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効としているので、任意のコード列による勝手なプログラムが生成されても無限ループに陥ることがなくなる。
【0111】
さらに、本発明によれば、実行結果評価ステップは、プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第1の評価結果を算出し、外部から第2の評価結果を取り込むステップを備え、さらに、有効コード列の有効コード数および有効コード列の長さに基づき所定の演算を行って有効コード生成度合いを算出し、該有効コード生成度合いおよび第1の評価結果若しくは第2の評価結果に基づき所定の演算を行って新たな第3の評価結果を算出するので、入力に対する出力結果が適切か否かを判断し、有意味のコード列生成を確認でき、また効率良くコード生成がなされているかの確認も可能である。
【図面の簡単な説明】
【図1】本発明の一実施形態に係る自動プログラミング装置の構成図である。
【図2】第1のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートである。
【図3】第2のコマンドおよびオペランド抽出方法を説明する詳細なフローチャートである。
【図4】設定されるマシン語(プログラム実行部における命令セット)の説明図である。
【図5】図5(a)はプログラム実行部のハードウェア仕様の説明図、図5(b)はプログラム解析部に供給されるコード列を例示する説明図である。
【図6】図6(a)は図5(b)のコード列が供給された場合の第1のコマンドおよびオペランド抽出処理における解析を説明する説明図、図6(b)はコマンドおよびオペランド抽出結果としての有効コード列の説明図である。
【図7】図7(a)は図5(b)のコード列が供給された場合の第2のコマンドおよびオペランド抽出処理における解析を説明する説明図、図7(b)はコマンドおよびオペランド抽出結果としての有効コード列の説明図である。
【図8】ルーレット戦略による淘汰の代表的な操作を例示する説明図(その1)である。
【図9】ルーレット戦略による淘汰の代表的な操作を例示する説明図(その2)である。
【図10】図10(a)はコード長の変更を伴わない交配(通常の交配)の説明図、図10(b)はコード長の変更を伴う交配の説明図である。
【図11】図11(a)は遺伝子情報の突然変異の説明図、図11(b)はコード長増加の場合の突然変異の説明図、図11(c)はコード長減少の場合の突然変異の説明図である。
【図12】図12(a)はコード長増加の突然変異の説明図、図12(b)に示すコード長減少の突然変異の説明図である。
【符号の説明】
100 自動プログラミング装置
101 コード列記憶部
102 プログラム解析部
103 プログラム実行部
104 実行結果評価部
105 ジェネティックアルゴリズム部(コード列修正手段)
111 実システム若しくはエミュレータ
112 外部実行結果評価部
Claims (16)
- 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返す、ことを特徴とする自動プログラミング装置。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返す、ことを特徴とする自動プログラミング装置。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング装置。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析手段と、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行手段と、
前記プログラム実行手段による実行結果を評価する実行結果評価手段と、
前記実行結果評価手段による評価結果に基づいて前記コード列を修正するコード列修正手段と、を有し、
前記プログラム解析手段は、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング装置。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初か ら探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法。 - 任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法。 - 前記コード列修正ステップは、機械語コードに相当する整数型の値を遺伝子とし、前記遺伝子の集合体である染色体を含む個体の集団が前記機械語プログラムを形成するとき、
前記評価結果に基づいて任意の個体を排除する淘汰ステップと、
任意の個体間の任意の位置で切れた遺伝子同士をつなぎ合わせる交差ステップと、
任意の個体について遺伝子を変化させる突然変異ステップと、
を有することを特徴とする請求項5〜8のいずれかに記載の自動プログラミング方法。 - 前記プログラム実行ステップは、繰り返し命令において、繰り返し命令を実行するたびに繰り返し残り回数を記憶するステップを備え、繰り返し回数が前回の繰り返し実行時より減っていない場合に、当該繰り返し命令を無効とすることを特徴とする請求項5〜9のいずれかに記載の自動プログラミング方法。
- 前記実行結果評価ステップは、前記プログラム実行ステップにおける入力および出力のデータに基づき所定の演算を行って第1の評価結果を算出することを特徴とする請求項5〜9のいずれかに記載の自動プログラミング方法。
- 前記実行結果評価ステップは、外部から第2の評価結果を取り込むステップを備えることを特徴とする請求項5〜9のいずれかに記載の自動プログラミング方法。
- コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、最後のオペランドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。 - コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、該無効コードは無視して次のコードを検査し、全オペランドの探索が終了した後は、前回までの探索でオペランドとして有効とされたコードを除いたコード列に対して、前回の探索におけるコマンドコードの次のコードからコマンドとして有効なコードの探索を繰り返すことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。 - コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、該無効コマンドの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。 - コンピュータに、
任意のコード列を解析し、実行可能な機械語プログラムである有効コード列を出力するプログラム解析ステップと、
前記有効コード列を、所与の入力について無限ループに陥ることなく実行し、実行結果を出力するプログラム実行ステップと、
前記プログラム実行ステップによる実行結果を評価する実行結果評価ステップと、
前記実行結果評価ステップによる評価結果に基づいて前記コード列を修正するコード列修正ステップと、を有し、
前記プログラム解析ステップは、コマンドとして有効なコードを前記コード列の最初から探索し、抽出されたコマンドにおける所要オペランド数にしたがって、該抽出コマンドより後方のコード列から該抽出コマンドのオペランドとして有効なコードを順次探索する 、という手順を、前記コード列の終端まで繰り返し、かつ
オペランドとして有効なコードを探索する際、オペランドとして無効なコードが現れた場合、そのコマンド自体を無効として、オペランドとして無効とされたコードの次のコードから新たにコマンドとして有効なコードの探索を行うことを特徴とする自動プログラミング方法を実行させるためのプログラムを記録した記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP21410297A JP3594106B2 (ja) | 1997-07-24 | 1997-07-24 | 自動プログラミング装置、自動プログラミング方法および記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP21410297A JP3594106B2 (ja) | 1997-07-24 | 1997-07-24 | 自動プログラミング装置、自動プログラミング方法および記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1139276A JPH1139276A (ja) | 1999-02-12 |
JP3594106B2 true JP3594106B2 (ja) | 2004-11-24 |
Family
ID=16650273
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP21410297A Expired - Fee Related JP3594106B2 (ja) | 1997-07-24 | 1997-07-24 | 自動プログラミング装置、自動プログラミング方法および記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3594106B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11062792B2 (en) * | 2017-07-18 | 2021-07-13 | Analytics For Life Inc. | Discovering genomes to use in machine learning techniques |
-
1997
- 1997-07-24 JP JP21410297A patent/JP3594106B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH1139276A (ja) | 1999-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Burch et al. | Symbolic model checking: 1020 states and beyond | |
US4821181A (en) | Method for converting a source program of high level language statement into an object program for a vector processor | |
KR19990077006A (ko) | 유전자 프로그래밍방법 및 시스템 | |
WO2000045255A2 (en) | Determining destinations of a dynamic branch | |
JPH10228382A (ja) | コンパイル方式 | |
US20040039894A1 (en) | Token data types in stream computers | |
JPH0721033A (ja) | 言語処理装置及びその方法 | |
JPH0795274B2 (ja) | 配列添字解析方法 | |
CN115017516A (zh) | 一种基于符号执行的模糊测试方法 | |
Xu et al. | Dsmith: Compiler fuzzing through generative deep learning model with attention | |
CN113536308B (zh) | 软件基因视角下多粒度信息融合的二进制代码溯源方法 | |
Huelsbergen | Toward simulated evolution of machine language iteration | |
CN114416105A (zh) | 一种量子操作的编译方法、系统、存储介质和电子设备 | |
JP3594106B2 (ja) | 自動プログラミング装置、自動プログラミング方法および記録媒体 | |
KR20180122870A (ko) | 프로그램 합성 방법 | |
Huelsbergen | Learning recursive sequences via evolution of machine-language programs | |
US4882691A (en) | Caching argument values in pattern-matching networks | |
CN115878498A (zh) | 一种基于机器学习预测程序行为的关键字节提取方法 | |
US6055529A (en) | Method, apparatus and computer program product for extracting known patterns from a data structure in a single pass | |
Giegerich et al. | Implementing algebraic dynamic programming in the functional and the imperative programming paradigm | |
Yan et al. | A survey of human-machine collaboration in fuzzing | |
CN115080974B (zh) | 一种恶意pe文件检测方法、装置、设备及介质 | |
Pavlatos et al. | Parallel hardware stochastic context-free parsers | |
JPH06208470A (ja) | 目的コード最適化装置 | |
JP2956591B2 (ja) | ループ外への条件付き飛び出しがあるループの並列化方法及び装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040506 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040705 |
|
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: 20040812 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040825 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080910 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080910 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090910 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090910 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100910 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100910 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110910 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110910 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120910 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130910 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |