Схема головной подпрограммы

Общая схема головной подпрограммы сеточного алгоритма приведена на рис. 3. На шаге 1 выполняется подпрограмма Схема головной подпрограммы - student2.ru , выполняющая инициализацию переменных. Затем в цикле Схема головной подпрограммы - student2.ru с меткой 2 выполняется корректировка сеточной области в соответствии с описанием идеи алгоритма из раздела. Одна итерация соответствует одной корректировке. Головная подпрограмма сеточного алгоритма оформляется в виде независимого процесса, который выполняется до тех пор, пока переменная Схема головной подпрограммы - student2.ru не примет значение Схема головной подпрограммы - student2.ru (истина). Начальную установку переменной Схема головной подпрограммы - student2.ru в значение Схема головной подпрограммы - student2.ru (ложь) осуществляет головной процесс, соответствующий основной программе. Он же присваивает переменной Схема головной подпрограммы - student2.ru значение Схема головной подпрограммы - student2.ru , когда вычислительный процесс нужно остановить. В качестве текущего приближения решения задачи головная программа использует текущее значение нулевой вершины центральной ячейки Схема головной подпрограммы - student2.ru , координаты которой вычисляются по формуле .

В теле цикла Схема головной подпрограммы - student2.ru выполняются следующие действия. На шаге 3 организуется Схема головной подпрограммы - student2.ru параллельных потоков управления (нитей), которые независимо друг от друга вычисляют псевдопроекции из целевой точки Схема головной подпрограммы - student2.ru на пересечение i-той ячейки с многогранником M Схема головной подпрограммы - student2.ru . Напомним, что Схема головной подпрограммы - student2.ru равно количеству MPI-процессов, и в соответствии с формулой равно количеству ячеек в кубической сеточной области. Схема подпрограммы вычисления псевдопроекции детально описана в разделе.

Рис. 3. Головная подпрограмма сеточного алгоритма.

В цикле Схема головной подпрограммы - student2.ru с меткой 5 для полученных на шаге 3 точек псевдопроекций Схема головной подпрограммы - student2.ru вычисляется номер Схема головной подпрограммы - student2.ru ячейки, на которой достигается максимум C целевой функции. Для корректной работы цикла 5 переменным Схема головной подпрограммы - student2.ru и C на шаге 4 присваиваются начальные значения Схема головной подпрограммы - student2.ru и Схема головной подпрограммы - student2.ru соответственно. Значение Схема головной подпрограммы - student2.ru соответствует минимальному машинному значению целого типа, Схема головной подпрограммы - student2.ru – минимальному машинному значению вещественного типа. Подпрограмма, вычисляющая точку Схема головной подпрограммы - student2.ru псевдопроекции точки Схема головной подпрограммы - student2.ru на пересечение многогранника Схема головной подпрограммы - student2.ru с ячейкой с номером Схема головной подпрограммы - student2.ru , присваивает координате Схема головной подпрограммы - student2.ru значение Схема головной подпрограммы - student2.ru в том случае, когда точка Схема головной подпрограммы - student2.ru псевдопроекции не принадлежит многограннику Схема головной подпрограммы - student2.ru . Эта ситуация возникает в случае, когда пересечение многогранника Схема головной подпрограммы - student2.ru с ячейкой с номером Схема головной подпрограммы - student2.ru является пустым. Если же Схема головной подпрограммы - student2.ru принадлежит многограннику, то в силу предположения о том, что все процессы находятся в положительной области координат, значение Схема головной подпрограммы - student2.ru не может быть отрицательным. Указанное условие проверяется на шаге 6. Случаи Схема головной подпрограммы - student2.ru из рассмотрения исключаются. Если при выполнении цикла 5 оказывается, что ни одна из ячеек сеточной области не имеет непустого пересечения с многогранником Схема головной подпрограммы - student2.ru , то в переменной Схема головной подпрограммы - student2.ru сохраняется значение Схема головной подпрограммы - student2.ru . Этот факт проверяется на шаге 7. В этом случае шаг сетки Схема головной подпрограммы - student2.ru , длина Схема головной подпрограммы - student2.ru ребра сеточной области и координаты целевой точки Схема головной подпрограммы - student2.ru увеличиваются в Схема головной подпрограммы - student2.ru раз, где Схема головной подпрограммы - student2.ru – положительная константа, являющаяся параметром алгоритма (шаг 13 на рис. 3).

Если на шаге 7 выясняется, что Схема головной подпрограммы - student2.ru , значит найдена ячейка с номером Схема головной подпрограммы - student2.ru , имеющая непустое пересечение с многогранником, на которой достигается максимум целевой функции. В этом случае на шаге 8 вычисляется вектор Схема головной подпрограммы - student2.ru , представляющий нулевую вершину новой центральной ячейки сеточной области. Схема подпрограммы вычисления нулевой вершины ячейки с порядковым номером k𝛼 приведена на рис. 4. Вычисления осуществляются с использованием формул , и .

Рис.4. Схема подпрограммы zero вычисления нулевой
вершины ячейки с порядковым номером k
𝛼.

На шаге 9 (рис. 3) анализируется, насколько новая центральная ячейка далеко отстоит от предыдущей. Если расстояние между новой и старой центральными ячейками превышает Схема головной подпрограммы - student2.ru (где Схема головной подпрограммы - student2.ru – длина ребра кубической сеточной области), то длина ребра кубической сеточной области Схема головной подпрограммы - student2.ru , шаг сетки Схема головной подпрограммы - student2.ru и координаты целевой точки Схема головной подпрограммы - student2.ru на шаге 10 увеличиваются в 1.5 раза. Если расстояние между новой и старой центральными ячейками меньше Схема головной подпрограммы - student2.ru , то длина ребра кубической сеточной области Схема головной подпрограммы - student2.ru , шаг сетки Схема головной подпрограммы - student2.ru и координаты целевой точки Схема головной подпрограммы - student2.ru на шаге 11 уменьшаются в 2 раза. Величина Схема головной подпрограммы - student2.ru , используемая в шагах 10 и 11, в общем случае является параметром алгоритма. Если же отклонение лежит в пределах от Схема головной подпрограммы - student2.ru до Схема головной подпрограммы - student2.ru , то корректировка значений Схема головной подпрограммы - student2.ru , Схема головной подпрограммы - student2.ru и Схема головной подпрограммы - student2.ru не производится. Величины Схема головной подпрограммы - student2.ru и Схема головной подпрограммы - student2.ru также являются в общем случае параметрами алгоритма.

На шаге 12 сеточная область сдвигается по вектору Схема головной подпрограммы - student2.ru , и в качестве текущей нулевой вершины Схема головной подпрограммы - student2.ru центральной ячейки сеточной области берется точка Схема головной подпрограммы - student2.ru .

2.2. Схема подпрограммы инициализации переменных init

Подпрограмма инициализации переменных Схема головной подпрограммы - student2.ru выполняет ввод исходных данных и инициализацию переменных. Схема подпрограммы Схема головной подпрограммы - student2.ru приведена на рис. 5. На шаге 1 вводятся значения переменных: n – размерность пространства решений; m – число неравенств в системе ограничений; R – начальное значение длины ребра сеточной области, обеспечивающее покрытие многогранника M; p – количество итераций при построении псевдопроекции, выполняемое между обновлениями входных данных (этот параметр используется в подпрограмме Схема головной подпрограммы - student2.ru обновления исходных данных); K – количество ячеек в сеточной области по одному измерению; u – размерность подвектора; L – число независимых фейеровских итераций на подвекторах в подпрограмме вычисления псевдопроекции (см. рис. 6); T – масштабирующий коэффициент для вычисления координат целевой точки z. На шаге 2 проверяется условие (assert) Схема головной подпрограммы - student2.ru , означающее, что размерность пространства решений Схема головной подпрограммы - student2.ru кратно размерности подвектора Схема головной подпрограммы - student2.ru . На шаге 3 осуществляется ввод исходных данных задачи линейного программирования: A – матрица коэффициентов неравенств; b – столбец свободных членов; c – вектор коэффициентов целевой функции. Также здесь вводится вектор G, содержащий начальные координаты нулевой вершины кубической сеточной области. Шаг 4 присваивает переменной P значение, равное количеству доступных MPI‑процессов и вычисляемое с помощью системной функции Схема головной подпрограммы - student2.ru .

Рис. 5. Схема подпрограммы инициализации переменных init.

На шаге 5 проверяется условие (assert) Схема головной подпрограммы - student2.ru , означающее, что общее количество ячеек сеточной области равно количеству процессов. На шаге 6 формируется инвариантная часть расширенного столбца Схема головной подпрограммы - student2.ru свободных членов, определяемого по формуле . На шаге 7 происходит инициализация матрицы Схема головной подпрограммы - student2.ru путем присваивания всем ее элементам нулевых значений. На шаге 8 определяются ненулевые элементы матрицы Схема головной подпрограммы - student2.ru в соответствии с системой неравенств . На шагах 9 и 10 строится расширенная матрица Схема головной подпрограммы - student2.ru , определяемая формулой . На шаге 11 в качестве начального значения длины r ребра сеточной области определяется значение R, обеспечивающее покрытие многогранника M, и вычисляется значение Схема головной подпрограммы - student2.ru длины ребра ячейки. На шаге 12 в качестве начальной нулевой вершины g кубической сеточной области берется точка G, определяющая такое положение сеточной области, при котором она полностью покрывает многогранник M. На шаге 13 вычисляются координаты целевой точки z по формуле Схема головной подпрограммы - student2.ru . На шаге 14 вычисляется нулевая вершина q центральной ячейки сеточной области по формуле . На последнем шаге вычисляется вектор Схема головной подпрограммы - student2.ru начальных целочисленных координат центральной ячейки по формуле .

Наши рекомендации