Может ли кто-нибудь указать мне на конкретный алгоритм, который используется для удаления интронов у людей с lgp?
Спасибо
Может ли кто-нибудь указать мне на конкретный алгоритм, который используется для удаления интронов у людей с lgp?
Спасибо
что касается удаления интронов, я бы посмотрел эту статью: A Сравнение линейного генетического программирования и нейронных сетей в интеллектуальном анализе медицинских данных.
В то время как фокус документа, вероятно, не представляет интереса, в разделе II-B (страницы 20-21, я думаю). Авторы обсуждают то, что я считаю довольно хорошим простым алгоритмом обнаружения интронов.
Это довольно старая статья, поэтому, вероятно, стоило бы поискать в документах, цитирующих эту статью, другие подходы, которые могли бы вам помочь.
В частности, я бы рекомендовал для более продвинутого подхода алгоритм, описанный в статье:
«Избыточность в линейном GP, каноническом преобразовании и его использовании: демонстрация синтеза признаков изображения» (Evolvable Machines, 2011 г.)
Чтобы получить эту вторую статью, просто введите название в Google, первая ссылка должна быть ссылкой на платную стену Springer, но если вы нажмете «Быстрый просмотр», вы сможете без проблем получить статью из Google Cache. (Дайте мне знать, если вы не можете добраться до него, я помогу)
Я реализовал проект с открытым исходным кодом по генетическому программированию, в котором есть эта функция. Пожалуйста, взгляните на мою реализацию линейного генетического программирования на Java:
https://github.com/chen0040/java-genetic-programming
Чтобы повысить производительность линейных программ во время оценки, библиотека содержит реализацию процедуры удаления интронов, как описано в главе 3 книги «Линейное генетическое программирование». Реализация может быть найдена в Program.markStructuralIntrons() в ее
Принцип работы markStructuralIntrons() довольно прост, ниже цитата из книги:
Источник: Brameier, M 2004 О линейном генетическом программировании (тезис).
Алгоритм 3.1 (обнаружение структурных интронов)
Ниже приведена процедура Program.markStructuralIntrons(), реализованная на Java:
public void markStructuralIntrons(LGP manager) {
int instruction_count=instructions.size();
for (int i = instruction_count - 1; i >= 0; i--) {
instructions.get(i).setStructuralIntron(true);
}
Set<Integer> Reff = new HashSet<>();
int io_register_count = manager.getRegisterCount();
for (int i = 0; i < io_register_count; ++i) {
Reff.add(i);
}
Instruction current_instruction = null;
Instruction prev_instruction = null; // prev_instruction is the last visited instruction from bottom up of the program
for (int i = instruction_count - 1; i >= 0; i--) {
prev_instruction = current_instruction;
current_instruction = instructions.get(i);
// prev_instruction is not an structural intron and the current_instruction
// is a conditional construct then, the current_instruction is not structural intron either
// this directly follows from Step 3 of Algorithm 3.1
if (current_instruction.getOperator().isConditionalConstruct() && prev_instruction != null) {
if (!prev_instruction.isStructuralIntron()) {
current_instruction.setStructuralIntron(false);
}
} else {
if (Reff.contains(current_instruction.getTargetOperand().getIndex())) {
current_instruction.setStructuralIntron(false);
Reff.remove(current_instruction.getTargetOperand().getIndex());
if (!current_instruction.getOperand1().isConstant()) {
Reff.add(current_instruction.getOperand1().getIndex());
}
if (!current_instruction.getOperand2().isConstant()) {
Reff.add(current_instruction.getOperand2().getIndex());
}
}
}
}
}