2015-06-04 5 views
2

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

Например, если в параметрах файла мы имеем

pop.subpop.0.size = 4000 

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

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

ответ

0

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

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

  • Использование 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 (по одному на остров/процесс) необходимо установить только одну популяцию:

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

И количество островов устанавливается в файле server.params:

exch.num-islands = 10 

Вы можете увидеть остальные параметры и больше информации на странице 223 СЕС документации PDF: https://cs.gmu.edu/~eclab/projects/ecj/docs/manual/manual.pdf

+0

что, если я поставлю «поп».subpop.0 = 4000 'в файле server.params и не упоминать об этом (размер популяции) в islandID.params. В этом случае разделил бы он 4000 между всеми островами? – ashkanent

+0

Если вы запустите server.params, вызывая ec.exchanger.IslandExchange (не ec.Evolve), этот параметр не будет использоваться. Если вы используете его с ec.Evolve, он создаст остров сервера с 4000 человек. –

+0

Итак, вы должны явно задавать населенность на каждом острове вручную, нет возможности автоматически делить число. В этом случае вы можете использовать скрипт для генерации файлов параметров. См. Мой сценарий в качестве примера запуска множества конфигураций параметров (включая разные количества островов): https://github.com/fergunet/HPMOON/blob/master/launch.py –

0

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

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

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

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

+0

Я пытался разные настройки на каждом острове, но и для последний эксперимент Я использовал фиксированный размер для всех из них. Я просто хотел убедиться, что на каждом острове будет население (численность населения)/(количество островов). Не было простого способа подтвердить это в ECJ. – ashkanent