Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 1223 / 124 | Оценка: 4.73 / 4.45 | Длительность: 18:17:00
ISBN: 978-5-94774-546-7
Специальности: Программист

Лекция 5: Параллельные методы расчета транспортной сети

Введем линейный массив переменных xij = yk, где k = (i - 1)n + j.

Исключим из рассмотрения последнее уравнение. Система уравнений граней (действительных и возможных) многогранника решений примет вид

y1 + y2 + y3 + y4 = 11

y5 + y6 + y7 + y8 = 11

y9 + y10 + y11 + y12 = 8 (5.7)

y1+y5+ y9=5

y2+y6+y10 = 9

y3+ y7+ y11 = 9

yk = 0, k = 1, 2, ... , 12.

Итак, на первом этапе задача свелась к выбору и анализу комбинаций по 12 - 6 = 6 нулевых значений координат искомой вершины многогранника решений. Выполняя подстановку выбранной комбинации в (5.7), мы можем решить образовавшуюся систему шести уравнений с шестью неизвестными. Таким образом, мы сможем найти координаты некоторой вершины.

Комбинации по шесть нулевых значений координат ("комбинации нулей") следует выбирать так, чтобы не обратилась в нуль левая часть хотя бы одного уравнения (5.7), включая исключенное уравнение. Например, комбинация, где y1 = y2 = y3 = y4 = 0, недопустима.

Найдем дополнительные контрольные ограничения: чтобы решение было не отрицательным, необходимо, чтобы любое значение yk, k = 1, ... , m x n, не превышало значение yk — величины правой части того уравнения, в котором оно участвует.

Тогда в нашем примере y1 <= min(11, 5) =y1 = 5, аналогично y2 <= y2 = 9, y3 <= y3 = 9, y4 <= y4 = 7, y5 <= y5 = 5, y6 <= y6 = 9, y7 <= y7 = 9, y8 <= y8 =7, y9 <= y9 = 5, y10 <= y10 = 8, y11 <=y11 = 8, y12 <= y12 = 7. Здесь при оценке y4, y8, y12 учтено последнее уравнение в (5.6).

Воспользуемся векторной формой представления, чтобы подготовить удобные, нетрудоемкие матричные преобразования. А именно, наша система m + n - 1 линейных уравнений-ограничений имеет вид

AY = B,

где A — нуль-единичная матрица, Y — столбец переменных, B — столбец свободных членов:

\begin{equation}
\setcounter{MaxMatrixCols}{20}
\begin{pmatrix}
\colorbox[gray]{0.8}1 & \colorbox[gray]{0.8}1 &1 & 1 & \colorbox[gray]{0.8}0 & 0 & \colorbox[gray]{0.8}0 & 0 & 0 & \colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}0 & 0\\
\colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}0 &0 & 0 & \colorbox[gray]{0.8}1 & 1 & \colorbox[gray]{0.8}1 & 1 & 0 & \colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}0 & 0\\
\colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}0 &0 & 0 & \colorbox[gray]{0.8}0 & 0 & \colorbox[gray]{0.8}0 & 0 & 1 & \colorbox[gray]{0.8}1 & \colorbox[gray]{0.8}1 & 1\\
\colorbox[gray]{0.8}1 & \colorbox[gray]{0.8}0 &0 & 0 & \colorbox[gray]{0.8}1 & 0 & \colorbox[gray]{0.8}0 & 0 & 1 & \colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}0 & 0\\
\colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}1 &0 & 0 & \colorbox[gray]{0.8}0 & 1 & \colorbox[gray]{0.8}0 & 0 & 0 & \colorbox[gray]{0.8}1 & \colorbox[gray]{0.8}0 & 0\\
\colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}0 &1 & 0 & \colorbox[gray]{0.8}0 & 0 & \colorbox[gray]{0.8}1 & 0 & 0 & \colorbox[gray]{0.8}0 & \colorbox[gray]{0.8}1 & 0\\
\end{pmatrix}
\times
\begin{pmatrix}
y_{1}\\
y_{2}\\
y_{3}\\
y_{4}\\
y_{5}\\
y_{6}\\
y_{7}\\
y_{8}\\
y_{9}\\
y_{10}\\
y_{11}\\
y_{12}\\
\end{pmatrix}
=\begin{pmatrix}
11\\
11\\
8\\
5\\
9\\
9
\end{pmatrix}
\end{equation} ( 5.8)

Тогда для нахождения хотя бы одного допустимого решения выберем допустимую комбинацию нулей по следующему алгоритму:

  1. Положим l = 0.
  2. Положим l := l + 1, yl = 0. Исключим из матрицы A столбец, соответствующий этой переменной.
  3. Проверяем, появилась ли в A строка, содержащая только нулевые элементы, или обратилась ли в нуль левая часть исключенного уравнения. (Предполагаем, что все свободные члены уравнений больше нуля.) При положительном результате анализа выполняем шаг 5. В противном случае — следующий шаг.
  4. Для каждой s -й строки A выделяем множество {ys} переменных, соответствующих единичным элементам. Проверяем: \sum\limits_s {\bar y_s }  \geqslant b_s?При отрицательном результате анализа (свободный член превышает сумму верхних оценок переменных) выполняем шаг 5. В случае успешной проверки 3 и 4 выполняем шаг 6.
  5. Данный шаг выполняется, если испытываемое значение yl = 0 выбрано неудачно. Отменяем исключение столбца, соответствующего переменной yl, и выполняем шаг 2.
  6. Фиксируем yl = 0, и если комбинация нулей сформирована не полностью, выполняем шаг 2.

Продолжим рассмотрение примера.

Полагаем y1 = 0. Это не приводит к нарушению оценок, указанных в алгоритме.

Полагаем y2 = 0. Это также не приводит к нарушению оценок.

Полагаем y3 = 0. Нулевые строки не появились. Однако в первой строке осталась единственная единица, соответствующая переменной y4. Т.к. y4= 7 < 11, отвергаем нулевое значение переменной.

Полагаем y4 = 0. Нулевые строки не появились, однако в первой же строке осталась единственная единица, соответствующая переменной y3. Т.к. y3 = 9 < 11, отвергаем и это значение.

Полагаем y5 = 0. Это не приводит к нарушению оценок.

Полагаем y6 = 0. В пятой строке остается единственная единица, соответствующая y10. Т.к. y10 = 8 < 9, отвергаем нулевое значение переменной.

Полагаем y7 = 0, что не приводит к нарушению оценок.

Значение y8 = 0 приводит к нарушению оценки во втором уравнении.

Значение y9 = 0 приводит к появлению нулевой строки.

Значение y10 = 0 не приводит к нарушению оценок.

Значение y11 = 0 также не приводит к нарушению оценок.

Итак, комбинация нулей найдена. Это отмеченные в (5.8) значения

y1 = 0, y2 = 0, y5 = 0, y7 = 0, y10 = 0, y11 = 0. (5.9)