これは一般的な質問であり、その一部は回答されていると確信していますが、広範な議論よりも意見が必要です。進化計算と遺伝的プログラミングについて修士論文を書くつもりなのですが、遺伝的プログラムからソースコードファイルを作成し、gccを起動してコンパイルできない場合、Linux/C++の有識者の方からご意見をいただきたいです。コンパイルして、コンパイルされたプログラムを (新しいプロセスとして) 実行するためにコンパイルし、そのプログラムに入力を送信して、出力と発生した例外 (またはクラッシュ) をキャプチャできるようにする場合は、失敗した理由をキャプチャします。トピックが広すぎることは理解していますが、これは元に戻せない、試すのはばかげている、またはこれを行うためのより良い方法があると誰かが考えているかどうかを知りたいです.
2 に答える
はい、これを行うことは可能であり、実際には非常に簡単です。ソースコードを一時ファイル(mkstmp
)に出力しfork
、exec
コンパイルプロセス(一時ファイルに出力する)、fork/exec
結果のプログラム、その前に入力dup2
とpipe
出力をプラグインします。これは基本的なUnixプログラミングであり、ここでCで行うのはそれほど複雑ではありません。
コード生成自体を正しく行うのは難しいかもしれませんが、これはプロジェクトに大きく依存します。
また、数か月前から最新のツールがあります。Clangは、この種のものを探すのに間違いなく役立つかもしれないと私は信じています。実行する予定のコード生成が単純な場合(または単純ではないが構造化されている場合)、LLVMコードを直接出力することもできます。難しくはなく、コンパイルされたコードを適時に効率的に生成できます。
この遺伝子プログラムで何を最適化しようとしていますか? 実行するプログラムを探すだけでなく、どのような基準を探しますか? 要点がよくわからない…
明確にするために、私がこれを尋ねる理由は、ある種の最適化問題を解決しようとして遺伝的アルゴリズムを使用することしか理解していないからです。この場合、プロセスのすべての子を評価し、ヒューリスティックと選択基準に基づいて新しい子孫を繁殖させることができるある種のヒューリスティックがあります。このソースを生成することの望ましい結果が何であるか、またはそれを評価するためのヒューリスティックを作成する方法がわかりません。