Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Алгоритм венгерского метода

Читайте также:
  1. Quot;Алгоритм глупости"?
  2. А) ПРОБЛЕМА МЕТОДА
  3. Алгоритм
  4. Алгоритм 1
  5. Алгоритм 2.
  6. Алгоритм 3
  7. Алгоритм 6

 

Предварительный этап. На этом этапе формируется рабочая матрица из матрицы эффективностей. В каждом столбце матрицы эффективностей С(N,N) находится максимальный элемент, из которого вычитаются все элементы этого столбца. Далее в каждой строке получаемой матрицы выбирается минимальный элемент, который вычитается из всех элементов соответствующей строки. В первом столбце полученной матрицы выделяется произвольный нуль и отмечается (*). Затем просматриваются нули второго столбца и если среди них есть такие, которые не находятся в одной строке с нулем первого столбца, уже отмеченном звездочкой, то один из них отмечается звездочкой. Аналогично рассматриваются нули всех других столбцов. Отмеченные звездочками нули независимые, т.к. в каждой строке и каждом столбце может быть не более одного нуля со звездочкой.

Общий этап. Целью каждой последующей итерации является увеличение числа независимых нулей. Перед началом итерации выделяются знаком (+) столбцы матрицы, содержащие нули со звездочкой. Элементы, расположенные в выделенных столбцах (строках), называются выделенными, а остальные невыделенными. Итерация включает в себя три шага и устанавливает, имеются ли среди невыделенных элементов матрицы хотя бы один невыделенный нуль. Возможны два случая:

а) среди невыделенных элементов нет нулей.

В этом случае среди невыделенных элементов матрицы выбирается минимальный. Он вычитается из элементов, расположенных в невыделенных строках, и прибавляется к элементам выделенных столбцов. При этом новая матрица эквивалентна исходной по отношению к оптимальному значению.

б) среди невыделенных элементов имеется хотя бы один нуль. Тогда невыделенный нуль помечается штрихом (׳)и проверяется, содержит ли строка с невыделенным нулем также нуль со звездочкой. Если да, то строка, содержащая отмеченный штрихом нуль, помечается справа знаком (+) и снимается знак выделения (+) над столбцом, в котором расположен нуль со звездочкой. Если в строке с невыделенным элементом нуля со звездочкой нет, то строится цепочка элементов по правилу: движение начинается от последнего нуля со штрихом (׳) по столбцу к нулю со звездочкой (*), от нуля со (*) по строке к нулю со (׳), вновь от 0’ к 0* по столбцу и т.д. начало и конец цепочки – нули со штрихами. После построения цепочки звездочки над нулями цепочки уничтожаются, а штрихи над нулями цепочки заменяются звездочками. Уничтожаются также все знаки выделения в матрице (штрихи, плюсы) кроме звездочек. Т.к. в цепочке нулей со штрихами на один больше, то в результате общее число нулей со звездочками увеличивается на единицу. Затем подсчитывается число нулей со (*). Если их число равно N, то найден оптимальный план назначения. В противном случае повторяется общий этап.

Заключительный этап. Определяется оптимальный план назначений по положению независимых нулей на последней итерации.

 

Имеется исходная матрица эффективностей. Таблица 1

                 
                 
                 
                 
                 
                 
                 
                 
                 

В каждом столбце данной матрицы эффективностей находится максимальный элемент, из которого вычитаются все элементы этого столбца.

Таблица 2

                 
                 
                 
                 
                 
                 
                 
                 
                 

 

Далее в каждой строке получаемой матрицы выбирается минимальный элемент, который вычитается из всех элементов соответствующей строки. В первом столбце полученной матрицы выделяется произвольный нуль и отмечается (*). Затем просматриваются нули второго столбца и если среди них есть такие, которые не находятся в одной строке с нулем первого столбца, уже отмеченном звездочкой, то один из них отмечается звездочкой. Аналогично рассматриваются нули всех других столбцов. Выделяются знаком (+) столбцы матрицы, содержащие 0* .

Таблица 3

+ + + + +

                 
  0*              
      0*          
                0*
              0*  
                 
                 
        0*        
                 

 

Затем устанавливается, имеется ли среди невыделенных элементов матрицы хотя бы один невыделенный нуль. Тогда невыделенный нуль помечается (’) и проверяется, содержит ли строка с невыделенным нулем также нуль со (*). Строка, содержащая отмеченный штрихом нуль, помечается справа знаком (+) и снимается знак выделения (+) над столбцом, в котором расположен нуль со (*).

 

Таблица 4

+ + +

                 
  0* 0            
      0*          
                0*
  0           0*  
                 
              0  
        0*        
                 

 

Так как в седьмой строке с невыделенным нулем нет нуля со (*), то строится цепочка элементов, после чего (*) над нулями цепочки уничтожаются, а штрихи над нулями цепочки заменяются звездочками. Уничтожаются также все (’) и (+).

 

Таблица 5

+ + + + + +

                 
  0 0*            
      0*          
                0*
  0*           0*  
                 
              0*  
        0*        
                 

 

В первой строке имеется еще один невыделенный нуль, он помечается (’), а во втором столбце снимается знак (+). Затем находится минимальный элемент и производится пересчет таблицы.

Таблица 6

+ + + + + +

                 
  1 0*     0      
      0*          
                0*
  0*              
                 
              0*  
        0*        
                 

 

Невыделенные нули опять помечаются (’), строки, где они находятся (+), а со столбцов, соответствующих нулям со (*), находящихся в данной строке, снимается знак (+). И т.к. в пятой строке нет нуля со (*), поэтому строим цепочку элементов.

Таблица 7

+ + +

                 
  1 0* 1   0      
      0*   0      
                0*
  0* 0            
      0          
              0*  
        0*        
                 

 

Результирующая матрица примет следующий вид:

Таблица 8

+ + + + + + + +

                 
  1 0     1 0*    
          0*      
                0*
    0*            
  0*              
              0*  
        0*        
      0*          

 

Число (*) равно 8-ми, следовательно, решение найдено. Решение равно сумме элементов исходной матрицы, соответствующих нулям со (*) в конечной матрице, т.е. 6+6+8+6+9+12+8+8=63.


Дата добавления: 2015-08-21; просмотров: 115 | Нарушение авторских прав


Читайте в этой же книге: Получение уравнения гиперплоскости, проходящей через n заданных точек. | Сетевой график | Решение задачи о кратчайшем пути в графе на основе ЛП | Алгоритм построения всех остовных деревьев графа на основе полного перебора последовательности ребер или дуг | Алгоритм Прима определение минимального остовного дерева(случай многоуровнего графа) | Расчет сетевого графа на основе линейного программирования | Минимизация булевых функций в классе КНФ (Конъюнктивная нормальная форма). | Алгоритм метода ветвей и границ |
<== предыдущая страница | следующая страница ==>
Конечный автомат| Решение задачи коммивояжера

mybiblioteka.su - 2015-2024 год. (0.017 сек.)