Генетическое программирование на C ++: вызов компоновщика / компилятора, выполнение скомпилированной программы и конвейерный ввод / вывод - PullRequest
6 голосов
/ 07 апреля 2011

Это общий вопрос, и хотя я почти уверен, что на некоторые его части дан ответ, мне нужны мнения, а не широкая дискуссия. Я намереваюсь сделать магистерскую диссертацию по эволюционным вычислениям и генетическому программированию, и мне хотелось бы узнать мнение экспертов по Linux / C ++ о том, можно ли создать файлы исходного кода из генетической программы, вызвать gcc для их компиляции, если они не смогут компилировать, чтобы зафиксировать причины, по которым они потерпели неудачу, если они выполнят компиляцию, чтобы выполнить скомпилированную программу (как новый процесс), а затем иметь возможность отправлять входные данные в эту программу и захватывать выходные данные и любые возникающие исключения (или сбои). Я понимаю, что эта тема слишком широка, но я хотел бы знать, если кто-то думает, что это невозможно исправить, глупо пытаться или даже есть ли лучший способ сделать это.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Да, это возможно сделать, и на самом деле довольно просто. Вы выводите исходный код во временный файл (mkstmp), вы fork / exec - процесс компиляции (который выводит во временный файл), вы fork/exec результирующую программу, перед этим вы dup2 и pipe подключить вход и выход. Это базовое программирование в Unix, здесь нет ничего сложного, чтобы сделать его на C.

Сам процесс генерации кода может быть сложнее понять, но это сильно зависит от проекта.

Кроме того, у нас есть современные инструменты уже через пару месяцев: я считаю, что Clang , безусловно, может быть чем-то, на что можно посмотреть для такого рода вещей. Если генерация кода, которую вы планируете сделать, проста (или не проста, но структурирована), вы также можете напрямую выводить код LLVM . Это не сложно, и позволяет вам генерировать эффективный и своевременно скомпилированный код.

1 голос
/ 07 апреля 2011

Что вы пытаетесь оптимизировать в этой генетической программе?Какие критерии вы бы искали, кроме поиска запущенных программ?Я не совсем понимаю суть ...

Чтобы было ясно, причина, по которой я спрашиваю это, состоит в том, что я понимаю только использование генетических алгоритмов в попытке решить какую-то проблему оптимизации.В этом случае у вас будет какая-то эвристика, где вы сможете оценить всех потомков процесса, а затем развести новое потомство на основе эвристики и критериев отбора.Я не понимаю, каким будет желаемый результат генерации этого источника или как вы будете создавать эвристические методы для его оценки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...