Globalizer Lite — программная система для параллельного поиска глобально-оптимальных решений

 

Краткое описание

Программная система Globalizer Lite предназначена для решения трудоемких задач многомерной многоэкстремальной глобальной оптимизации. Алгоритмическую основу системы составляет блочная многошаговая схема редукции размерности, комбинирующая использование разверток типа кривой Пеано и многошаговую схему редукции, что позволяет эффективно распараллеливать вычисления на большое число процессоров/ядер. Параллельная версия блочной многошаговой схемы реализована с использованием библиотеки MPI.

Демонстрация

 

Краткое руководство пользователя

В общем случае функционалы оптимизационной задачи должны быть оформлены в виде динамической библиотеки (dll). В представленной демонстрационной версии система настроена на поиск минимума функции Растригина (с размерностью 4). Версия с поддержкой динамических библиотек будет выложена на этой странице позднее.

При параллельном решении задачи строится дерево MPI-процессов. Соответственно, при запуске программы необходимо задать следующие параметры, определяющие конфигурацию дерева:

  • NumOfTaskLevels — количество уровней в дереве процессов. Данный параметр равен 1 если не используется MPI распараллеливание. Если NumOfTaskLevels > 1 то необходимо задать параметры DimInTaskLevel и ChildInProcLevel.
  • DimInTaskLevel — размерность задачи, решаемой на каждом уровне дерева. Таким образом, значения задаются для каждого уровня дерева и сумма размерностей должна быть равна размерности исходной задачи
  • ChildInProcLevel — количество потомков у узлов на каждом уровне. Поскольку последний уровень дерева – листья, для него этот параметр всегда будет равен 0.
  • MaxNumOfPoints – максимальное число итераций для процессов на каждом уровне.

Рассмотрим пример.

Пусть размерность задачи – 8.

Определим количество уровней в дереве NumOfTaskLevels = 3. Тогда DimInTaskLevel можно задать, например, следующим образом: 2_2_4 (2+2+4=8). А количество потомков на каждом уровне ChildInProcLevel = 2_3_0.

Получаем следующее дерево:

processtree

Количество узлов в дереве должно совпадать с числом MPI-процессов, указанным при запуске программы. В данном случае должно быть запущено 9 MPI-процессов.

Согласно NumOfTaskLevels = 2_2_4, процесс на нулевом уровне будет решать задачу по первым двум переменным (y1, y2), узлы первого уровня – по переменным y3, y4 при фиксированных значениях первых двух, а листья по оставшимся переменным y5,y6,y7,y8.

Таким образом, для запуска программы необходимо набрать следующую строку:

mpiexec.exe -np NP GlobalizerLite.exe [<key1> <value1> <key2> <value2> ...]

Здесь NP – количество запускаемых MPI-процессов.

Возможные ключи представлены в таблице 1.

Таблица 1 — Ключи командной строки

Ключ Назначение Значение по умолчанию
-Dimension Размерность задачи 4
-r Надежность метода 2.3
-Eps Точность решения для каждого уровня 0.010_0.010_0.010_0.010_
-m Точность построения развертки 10
-NumOfTaskLevel Количество уровней в дереве 1
-DimInTaskLevel Размерность задачи, решаемой на каждом уровне 4_0_0_0_
-ChildInProcLevel Количество потомков на каждом уровне 0_0_0_0_
-MaxNumOfPoints Максимальное количество точек для каждого уровня 7000000_1000000_1000000_1000000_

 

Скачать

Globalizer Lite v. 0.9

Документы

Руководство пользователя (здесь будет ссылка на документ)

Последние изменения

Globalizer Lite v. 0.9 03.11.2016

Публикации