Модель острова в 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.