<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Нижегородский государственный университет им. Н.И. Лобачевского</article-title>
      </title-group>
      <pub-date>
        <year>2015</year>
      </pub-date>
      <fpage>411</fpage>
      <lpage>420</lpage>
      <abstract>
        <p>Представлены результаты исследования параллельного информационностатистического алгоритма глобальной оптимизации, разработанного в ННГУ им. Н.И. Лобачевского. Данный метод комбинируется с блочной схемой редукции размерности, что позволяет решать многомерные задачи путем их сведения к параллельному решению информационно-независимых подзадач меньшей размерности. Новым элементом, реализованным в рамках проводимого исследования, является использование нескольких графических ускорителей, задействованных на разных вычислительных узлах. Приводятся результаты решения тестовых задач на суперкомпьютере «Лобачевский» с использованием десятков тысяч GPU ядер.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Решение задач глобальной оптимизации на гетерогенных
кластерных системах*
на основе конечного числа k вычислений значений оптимизируемой функции. Относительно
класса рассматриваемых задач предполагается выполнение двух важных условий.</p>
      <p>
        Во-первых, предполагается, что оптимизируемая функция (y) может быть задана не
аналитически, а некоторым алгоритмом вычисления ее значений в точках области D; при этом
испытание (вычисление одного значения) является вычислительно-трудоемкой операцией.
Во-вторых, будем предполагать, что (y) удовлетворяет условию Липшица
(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )
(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )
печивается при повышении сложности самих численных методов глобального поиска.
Применение неравномерных покрытий позволяет повысить размерность решаемых задач глобальной
оптимизации в 2-3 раза, что является критичным в приложениях. Получаемые оценки
размерности (20-30) позволяют охватить большинство научно-прикладных задач, поскольку, как
правило, количество варьируемых параметров, по которым проявляется многоэкстремальность
оптимизируемых критериев, ограничено.
      </p>
      <p>Рассмотрим теперь основные способы распараллеливания вычислений, которые могут быть
применены при решении задач глобальной оптимизации.</p>
      <p>Во-первых, можно организовать разделение области решения между процессорами и
параллельно решать подзадачи в этих подобластях. Однако такой подход обладает низкой
эффективностью, поскольку при разделении области поиска только небольшая часть процессоров (в
худшем случае – только один из них) будет решать задачу в подобласти с искомым глобальным
минимумом; остальные процессоры будут работать в подобластях, в которых отсутствует
решение исходной задачи.</p>
      <p>Во-вторых, можно распараллеливать вычисление целевой функции, описывающей
оптимизируемый объект. Данный путь может давать ускорение, но является специфичным для каждой
конкретной решаемой задачи.</p>
      <p>В-третьих, можно распараллелить реализацию вычислительных правил алгоритма,
обеспечивающих выбор точки проведения очередного испытания. В этом случае способ
распараллеливания будет зависеть от конкретного класса алгоритмов и, кроме того, часто эти правила
достаточно просты и распараллеливать их нецелесообразно (накладные расходы на организацию
параллелизма могут свести к нулю возможное ускорение).</p>
      <p>Наконец, можно изменить схему алгоритма с целью параллельного выполнения нескольких
испытаний (именно этот подход и будет рассматриваться в данной работе). Он является
наиболее перспективным, т.к. характеризуется эффективностью (распараллеливается именно та часть
вычислительного процесса, в котором выполняется основной объем вычислений) и общностью
(применим для широкого класса характеристических алгоритмов многоэкстремальной
оптимизации). Одновременно данный подход позволяет эффективно задействовать гетерогенные
вычислительные ресурсы современных суперкомпьютеров (ядра на центральном процессоре,
графические ускорители, математические сопроцессоры).</p>
      <p>Данная статья продолжает серию исследований, начальные результаты которых были
отражены в [1, 2].
2. Базовый параллельный алгоритм глобального поиска</p>
      <p>Для снижения сложности алгоритмов глобальной оптимизации, формирующих
неравномерное покрытие области поиска, широко используются различные схемы редукции
размерности, которые позволяют свести решение многомерных оптимизационных задач к семейству
задач одномерной оптимизации. Поэтому в качестве базовой задачи мы будет рассматривать
одномерную задачу многоэкстремальной оптимизации</p>
      <p> *  (x*)  min{ (x) : x [0,1]},
в которой целевая функция (x) удовлетворяет условию Липшица. Дадим детальное описание
параллельного алгоритма глобального поиска (ПАГП), применяемого к ее решению.</p>
      <p>Пусть в нашем распоряжении имеется p  1 вычислительных элементов. Тогда на данной
итерации можно провести одновременно p испытаний. Тогда общее число испытаний,
выполненных после n параллельных итераций, составит k  pn .</p>
      <p>Предположим, что выполнено n  1 итераций метода (в качестве точек x1,...,x p первой
итерации выбираются произвольные различные точки отрезка [0,1]). Тогда точки xk 1,...,xk  p
текущей (n+1)-ой итерации определяются по следующим правилам.</p>
      <p>Правило 1. Перенумеровать точки множества</p>
      <p>Xk  {x1,...,xk} {0} {1}
которое включает в себя граничные точки интервала [0,1], а также точки предшествующих
испытаний, нижними индексами в порядке увеличения значений координаты, т.е.</p>
      <p>0  x0  x1  ... xk1 1
Правило 2. Полагая zi  (xi ),1 i  k , вычислить величины
r ,  0,
  max | zi  zi1 | , M  
1ik i  1,   0,
,
где r  1 является заданным параметром метода (параметр надежности), а i  xi  xi1.</p>
      <p>Правило 3. Для каждого интервала (xi1, xi ),1  i  k 1, вычислить характеристику в
соответствии с формулами</p>
      <p>
        z z
R(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )  21  4 1 , R(k 1)  2k 1  4 k ;
      </p>
      <p>M M</p>
      <p>2
R(i)  i  (zi  zi1)  2 zi  zi1 , 1 i  k 1</p>
      <p>M 2i M
R(t1)  R(t2)   R(tk1)  R(tk1)
xk  j  xt j  xt j 1 , t j  1 , t j  k 1</p>
      <p>2
xk  j  xt j  xt j 1  zt j  zt j 1 , 1  t j  k 1 .</p>
      <p>
        2 2M
(
        <xref ref-type="bibr" rid="ref3">3</xref>
        )
(4)
(5)
(6)
(7)
Правило 4. Характеристики R(i),1  i  k  1, упорядочить в порядке убывания
и выбрать p наибольших характеристик с номерами интервалов t j , 1  j  p .
      </p>
      <p>
        Правило 5. Провести новые испытания в точках xk j , 1  j  p , вычисленных по формулам
Алгоритм прекращает работу, если выполняется условие t j   хотя бы для одного
номера t j , 1  j  p ; здесь   0 есть заданная точность. В качестве оценки глобально-оптимального
решения задачи (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) выбираются значения
k*  1miink (xi ) , xk*  arg min (xi )
1ik
Обоснование данного способа организации параллельных вычислений приведено в работах
[3, 4]. Наиболее важным здесь является то, что используемые в алгоритме характеристики
интервалов (5) могут рассматриваться как некоторые меры вероятности локализации в данных
интервалах точки глобального минимума. Неравенства (6) упорядочивают интервалы по их
характеристикам, и испытания проводятся параллельно в первых p интервалах, имеющих
наибольшие вероятности. Различные модификации данного алгоритма и соответствующая теория
сходимости представлены в [4].
3. Редукция размерности
      </p>
      <p>Одним из подходов к решению многомерных задач глобальной оптимизации является
сведение их к одномерным и использование эффективных одномерных алгоритмов глобального
поиска к редуцированной задаче. Данном разделе будут кратко изложены два известных
способа редукции размерности, а также их обобщение.
3.1 Редукция размерности с использованием кривых Пеано</p>
      <p>Первым из рассматриваемых способов редукции размерности является использование
кривой Пеано y(x), однозначно отображающей отрезок вещественной оси [0,1] на n-мерный куб
y  RN : 21  yi  21,1  i  N y(x) : 0  x  1,
Вопросы численного построения отображений типа кривой Пеано и соответствующая теория
подробно рассмотрены в [3]. Здесь же отметим, что численно построенная развертка является
приближением к теоретической кривой Пеано с точностью порядка 2m , где m – параметр
построения развертки.</p>
      <p>
        Использование подобного рода отображений позволяет свести многомерную задачу (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) к
одномерной задаче
      </p>
      <p> ( y*)  ( y(x*))  min{ ( y(x)) : x [0,1]}.</p>
      <p>
        Важным свойством является сохранение ограниченности относительных разностей
функции: если функция (y) в области D удовлетворяла условию Липшица (
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) с константой L, то
функция (y(x)) на интервале [0,1] будет удовлетворять равномерному условию Гельдера
 ( y(x1))  ( y(x2))  H x1  x2 1 N , x1, x2 [0,1] ,
(8)
где константа Гельдера H связана с константой Липшица L соотношением
      </p>
      <p>H  4Ld N , d  max{bi  ai :1  i  N}.</p>
      <p>
        Соотношение (8) позволяет модифицировать приведенный в разделе 2 алгоритм решения
одномерных задач для решения многомерных задач, редуцированных к одномерным. Для этого
длины интервалов i , участвующие в правилах (
        <xref ref-type="bibr" rid="ref3">3</xref>
        )(5) алгоритма, заменяются на длины в
новой метрике
      </p>
      <p>i  (xi  xi1)1 N ,
а вместо формулы (7) вводится выражение
1 | zt j  zt j 1 |N
xk  j  xt j  xt j 1  sign (zt j  zt j 1) 2r   , 1  t j  k 1 .</p>
      <p>2  
3.2 Рекурсивная схема редукции размерности
Схема рекурсивной оптимизации основана на известном (см. [5]) соотношении
min{ ( y) : y  D}  min min ... min  ( y) ,</p>
      <p>
        a1 y1b1 a2  y2 b2 aN  yN bN
которое позволяет заменить решение многомерной задачи (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) решением семейства одномерных
подзадач, рекурсивно связанных между собой.
      </p>
      <p>Введем в рассмотрение множество функций</p>
      <p> N ( y1,..., yN )  ( y1,..., yN ) ,
i ( y1,..., yi ) </p>
      <p>min
ai1  yi1bi1</p>
      <p>i1( y1,..., yi , yi1) , 1 i  N 1.
1( y1*)  min{1( y1) : y1 [a1,b1]}.
Однако при этом каждое вычисление значения одномерной функции 1( y1) в некоторой
фиксированной точке предполагает решение одномерной задачи минимизации</p>
      <p>2( y1, y2*)  min{2( y1, y2) : y2 [a2,b2]},
и так далее до вычисления  N согласно (10).
3.3 Блочная рекурсивная схема редукции размерности</p>
      <p>Для изложенной выше рекурсивной схемы предложено обобщение (блочная рекурсивная
схема), которое комбинирует использование разверток и рекурсивной схемы с целью
эффективного распараллеливания вычислений.</p>
      <p>Рассмотрим вектор y как вектор блочных переменных</p>
      <p>y  ( y1, y2,...,yN )  (u1,u2,...,uM ) ,
где i-я блочная переменная ui представляет собой вектор размерности Ni из последовательно
взятых компонент вектора y, т.е. u1  ( y1, y2,...,yN1 ) , u2  ( yN1 1, yN1 2,..., yN1 N2 ) , … ,
u2  ( yN NM 1, yN NM 2,..., yN ) , причем N1  N2  ... NM  N .</p>
      <p>С использованием новых переменных основное соотношение многошаговой схемы (9)
может быть переписано в виде
min ( y)  min min ... min  ( y) ,
yD u1D1 u2D2 uM DM
(13)
где подобласти Di ,1  i  M , являются проекциями исходной области поиска D на
подпространства, соответствующие переменным ui ,1  i  M .</p>
      <p>
        Формулы, определяющие способ решения задачи (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) на основе соотношений (13) в целом
совпадают с рекурсивной схемой (10)(12). Требуется лишь заменить исходные переменные
yi ,1  i  N , на блочные переменные ui ,1  i  M .
      </p>
      <p>При этом принципиальным отличием от исходной схемы является тот факт, что в блочной
схеме вложенные подзадачи
являются многомерными, и для их решения может быть применен способ редукции
размерности на основе кривых Пеано.</p>
      <p>
        Число векторов и количество компонент в каждом векторе являются параметрами блочной
многошаговой схемы и могут быть использованы для формирования подзадач с нужными
свойствами. Например, если M  N , т.е. ui  yi ,1  i  N , то блочная схема идентична
исходной; каждая из вложенных подзадач является одномерной. А если M  1 , т.е. u  u1  y , то
решение задачи эквивалентно ее решению с использованием единственной развертки,
отображающей [0,1] в D; вложенные подзадачи отсутствуют.
4. Организация параллельных вычислений на гетерогенном кластере
Для организации параллельных вычислений будем использовать небольшое (
        <xref ref-type="bibr" rid="ref2 ref3">2-3</xref>
        ) число
уровней вложенности, при котором исходная задача большой размерности разбивается на 2-3
вложенные подзадачи меньшей размерности. Тогда, применяя в блочной рекурсивной схеме
(13) для решения вложенных подзадач (14) параллельные характеристические методы
глобальной оптимизации, мы получим параллельный алгоритм с широкой степенью вариативности.
Например, можно варьировать количество процессоров на различных уровнях оптимизации
(т.е. при решении подзадач по различным переменным ui ), применять различные параллельные
методы поиска на разных уровнях и т.д.
Для описания параллелизма схемы рекурсивной оптимизации введем вектор
распараллеливания
  (1, 2,, M ) ,
(15)
где  i , 1  i  M , обозначает число параллельно решаемых подзадач (i+1)-го уровня
вложенности, возникающих в результате выполнения параллельных итераций на i-м уровне. Для M-го
уровня число  M означает количество параллельных испытаний в процессе минимизации
функции M (u1,,uM )  ( y1,, yN ) по переменной uM
u1,,uM 1 , т.е. количество параллельно вычисляемых значений целевой функции (y).
при фиксированных значениях
В общем случае величины  i , 1  i  M , могут зависеть от различных параметров и
меняться в процессе оптимизации, но мы ограничимся случаем, когда все компоненты вектора (15)
постоянны. Применение параллельных характеристических алгоритмов в соответствии с
блочной рекурсивной схемой и вектором распараллеливания (15) позволяет использовать для
решения задачи (
        <xref ref-type="bibr" rid="ref1">1</xref>
        )
      </p>
      <p>M i
  1  j ,</p>
      <p>i1 j1
параллельно работающих процессоров/ядер.</p>
      <p>Используя различные параметры вектора распараллеливания можно адаптировать
алгоритм для работы на гетерогенной вычислительной системе. При этом операцией, которую
можно эффективно реализовать на ускорителе, является параллельное вычисление сразу
многих значений целевой функции. Пересылки данных от CPU к GPU будут минимальные:
требуется лишь передать на GPU координаты точек испытаний, и получить обратно значения
функции в этих точках. Обработка результатов испытаний в соответствии с алгоритмом, требующая
работы с большим объемом накопленной поисковой информацией, может быть эффективно
реализована на CPU.</p>
      <p>Общая схема организации вычислений с использованием нескольких узлов кластера и
нескольких GPU приведена на рис. 1; процессы параллельной программы будут образовывать
дерево, соответствующее уровням вложенных подзадач. В соответствии с данной схемой
вложенные подзадачи
при i1,…,M–2 решаются только с использованием CPU. Непосредственно в данных
подзадачах вычислений значений оптимизируемой функции не происходит: вычисление значения
функции i (u1,...,ui )  это решение задачи минимизации следующего уровня. Каждая
подзадача решается в отдельном процессе; обмен вычисленными значениями организован с помощью
MPI.</p>
      <p>Подзадача последнего (M–1)-го уровня
M 1(u1,...,uM 1)  min M (u1,...,uM )</p>
      <p>uM DM
отличается от всех предыдущих подзадач – в ней происходит вычисление значений
оптимизируемой функции, т.к. M (u1,...,uM )  ( y1,..., yN ) . Данная подзадача также решается на CPU, но
вычисление значений функции производится на ускорителе. При этом на CPU выполняются
правила 1 – 4 параллельного алгоритма глобального поиска. Координаты p точек испытаний,
вычисленные на шаге 4 алгоритма, накапливаются в промежуточном буфере, а затем
передаются на графический процессор. На GPU происходит вычисление значений функции в этих
точках, после чего результаты испытаний (снова через промежуточный буфер) передаются на
CPU.</p>
      <p>Самый простой вариант использования данной схемы будет соответствовать
двухкомпонентному вектору распараллеливания   ( 1, 2 ) . Здесь  1 1 будет соответствовать числу
MPI-процессов, а  2  количеству используемый ядер на GPU; тем самым общее количество
задействованных ядер (CPU и GPU) будет определяться как 1 1  1 2 .</p>
      <p>Отметим также, что в случае невозможности эффективно реализовать процесс вычисления
значения оптимизируемой функции на GPU на последнем уровне распараллеливания можно
использовать ядра центрального процессора или ускорителя Xeon Phi в многопоточном
режиме.</p>
      <p>1(u1)
…
…
…………………...
3(u1,u2,u3)
…
3(u1,u2,u3)
3(u1,u2,u3)
…
3(u1,u2,u3)
M1(u1,..,uM1)
M(u1,…,uM)</p>
      <p>…………………...</p>
      <p>Рис. 1. Схема организации параллельных вычислений на кластере
5. Результаты вычислительных экспериментов</p>
      <p>Вычислительные эксперименты проводились на суперкомпьютере «Лобачевский»
(операционная система – CentOS 6.4, система управления – SLURM). Один узел суперкомпьютера
располагает 2-я процессорами Intel Sandy Bridge E5-2660 2.2 GHz, 64 Gb RAM, и 2-я GPU
NVIDIA Kepler K20Х. Центральный процессор является 8-и ядерным (т.е. всего на узле
доступно 16 ядер CPU), а на графическом процессоре доступны 14 потоковых мультипроцессоров
(2688 CUDA-ядер). Использовался компилятор Intel C++ 14.0.2 и CUDA Toolkit 6.0.</p>
      <p>В качестве тестовых задач были выбраны задачи, порождаемые с помощью
GKLSгенератора [6]. Данный генератор позволяет получать задачи многоэкстремальной оптимизации
с заранее известными свойствами: количеством локальных минимумов, размерами их областей
притяжения, точкой глобального минимума, значением функции в ней и т.п. С целью имитации
вычислительной трудоемкости, присущей прикладным задачам оптимизации, расчет целевой
функции во всех проводимых экспериментах был усложнен дополнительными вычислениями,
не меняющими вид функции и расположение ее минимумов (суммированием ряда из 20 тыс.
элементов).</p>
      <p>Для примера на рис. 2 приведены линии уровня двумерной функции, порождаемой
GKLSгенератором. Темные точки соответствуют 464 испытаниям, потребовавшимся для решения
данной задачи с точностью 0.01 по координате; при этом число итераций составило 58 (на
каждой итерации проводилось 8 испытаний). Линии уровня наглядно демонстрируют
многоэкстремальность задачи, а расположение точек – неравномерное покрытие, сгущающеюся только в
районе глобального минимума.
Рис. 2. Решение двумерной задачи
Эксперимент с использованием одного графического ускорителя проведем для решения
серии из 100 шестимерных задач. Глобальный минимум y* в тестовой задаче будем считать
найденным, если алгоритм сгенерировал точку испытания yk в -окрестности глобального
минимума, т.е. yk  y*  . Размер окрестности   0.01 b  a , где a и b – границы области
поиска D. Параметр надежности метода был выбран r  4.5; параметр построения развертки –
m  10 . Максимально допустимое число параллельных итераций составляло Kmax = 10 000. Так
как задача решалась с использованием единственного ускорителя, то разбиения размерностей
не проводилось.</p>
      <p>Среднее время решения задачи с использованием GPU составило 10.78 с., тогда как
среднее время решения задачи с использованием всех 16 ядер CPU на узле – 53.8 с.; наблюдается
почти пятикратное ускорение.</p>
      <p>Более масштабный вычислительный эксперимент был проведен для задач размерности
N = 8 и N = 10: было использовано 12 узлов кластера с 36 графическими ускорителями (по три
ускорителя на узел), тем самым было задействовано 96 768 CUDA-ядер.</p>
      <p>В соответствии с блочной рекурсивной схемой (13) было использовано два уровня
подзадач с размерностями N1  N2  4 для восьмимерной задачи и N1  N2  5 для десятимерной.
Вектор распараллеливания (15) был выбран как   (36,2688) в соответствии с общим числом
используемых GPU (компонента  1 ) и CUDA-ядер на одном ускорителе (компонента  2 ).
Время решения восьмимерной задачи составило 405.6 с., ускорение по сравнению с CPU версией
алгоритма составляет 5.9 раз. Время решения десятимерной задачи составило 2055.8 с.
Десятимерная задача ввиду большой сложности вычислений на CPU не решалась, поэтому оценить
ускорение не представляется возможным.
6. Заключение</p>
      <p>Результаты проведенных экспериментов на серии тестовых задач разной размерности
показывают, что предложенная блочная многошаговая схема редукции размерности в сочетании с
параллельным алгоритмом глобального поиска эффективно реализуется на современных
вычислительных системах. Данная схема обладает:
 высоким запасом параллелизма (было задействовано порядка 105 ядер);
 малой информационной зависимостью параллельно выполняемых вычислений (между
параллельными процессами нужно было передавать лишь точки и результаты испытаний,
полученные на текущей итерации метода).</p>
      <p>Полученные результаты позволяют сделать предположение, что предложенная схема
организации параллельных вычислений будет эффективна и при использовании большего (порядка
106) числа ядер. Дальнейшее развитие также будет заключаться в использовании локальной
информации о поведении оптимизируемой функции [7], учете ограничений в задачах условной
оптимизации [8], адаптации алгоритмов для решения многокритериальных задач [9].
Литература
Solving the global optimization problems on heterogeneous cluster
systems
Konstantin Barkalov, Victor Gergel, Ilya Lebedev and Alexander Sysoyev
Keywords: global optimization, parallel algorithms, heterogeneous computing
The paper presents the results of investigation of parallel information-statistical algorithm of
global optimization that developed in University of Nizhny Novgorod. This method is
combined with multilevel scheme of dimension reduction. It allows us to solve
multidimensional problems by reducing it to parallel solving a series of data-independent
subtasks of lower dimension. New suggestion developed in the framework of current research
is the method of using several graphics accelerators on different nodes of cluster. Results of
solving a series of test problems on supercomputer Lobachevsky using tens of thousands GPU
cores are given.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>K.</given-names>
            <surname>Barkalov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Gergel</surname>
          </string-name>
          .
          <article-title>Multilevel scheme of dimensionality reduction for parallel global search algorithms</article-title>
          // OPT-i
          <year>2014</year>
          .
          <source>An International Conference on Engineering and Applied Sciences Optimization (Kos Island, Greece</source>
          ,
          <fpage>4</fpage>
          -
          <lpage>6</lpage>
          June 2014).
          <year>2014</year>
          . pp.
          <fpage>2111</fpage>
          -
          <lpage>2124</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2. И.Г. Лебедев, К.А. Баркалов.
          <article-title>Реализация параллельного алгоритма глобального поиска на GPU // Вестник ПНИПУ</article-title>
          . Аэрокосмическая техника.
          <year>2014</year>
          . № 39. С.
          <volume>64</volume>
          -
          <fpage>82</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>R.G.</given-names>
            <surname>Strongin</surname>
          </string-name>
          , Ya.D. Sergeyev,
          <article-title>Global optimization with non-convex constraints. Sequential and parallel algorithms</article-title>
          . Kluwer Academic Publishers, Dordrecht,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>