Модель острова в ECJ

В генетическом программировании (GP), когда используется островная модель, означает ли это, что она разделит размер популяции между островами?

Например, если в файле параметров у нас есть

pop.subpop.0.size = 4000

и у нас есть 4 острова, значит ли это, что на каждом острове будет население 1000 человек? Что если мы поместим эту строку кода в файл параметров каждого острова? Возможно ли иметь разную численность населения для каждого острова?

Я использую пакет Java и ECJ для реализации островных моделей в GP.

2 ответа

Решение

Нет, в вашем примере вы определили только один остров из 4000 человек. Номер никогда не разделяется автоматически.

Есть два способа использовать модель островов в ECJ:

  • Использование класса InterPopulationExchanger:

Один уникальный процесс Java, который совместно использует переменные. Острова являются субпопуляциями объекта Население. Поэтому вам необходимо установить размеры для каждой подгруппы в файле параметров. В вашем примере вы только установили остров (подгруппу) от 0 до 4000 особей, но вы также должны установить другие размеры. Например, для 10 островов по 4000 особей каждый:

exch = ec.exchange.InterPopulationExchange
pop.subpops = 10
pop.subpop.0.size = 4000
pop.subpop.1.size = 4000
pop.subpop.2.size = 4000
...etc
pop.subpop.10.size = 4000
  • Используя класс IslandExchanger:

В этом случае каждый остров выполняется в отдельном Java-процессе, поэтому для каждого файла islandID.params (по одному на остров / процесс) необходимо установить только одну совокупность:

exch = ec.exchange.InterPopulationExchange
pop.subpop.0.size = 4000

А количество островов задается в файле server.params:

exch.num-islands = 10

Остальные параметры и дополнительную информацию вы можете увидеть на странице 223 документации ECJ pdf: https://cs.gmu.edu/~eclab/projects/ecj/docs/manual/manual.pdf

Я не изучал пакет ECJ, но это общая идея: у вас есть популяция, которая разделена на несколько подгрупп.

Я не знаю, почему вы хотите субпопуляции разных размеров. Есть ли выгода по сравнению с субпопуляциями фиксированного размера?

Во всяком случае, я сделал очень простую реализацию варианта генетического программирования с несколькими подгруппами. Вы можете скачать его здесь: http://www.mepx.org/source_code.html

Он написан на C++, но должен быть очень легок для понимания программистами Java.

Другие вопросы по тегам