Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Скобцовы Моделирование и тестирование

.pdf
Скачиваний:
97
Добавлен:
03.03.2016
Размер:
3.61 Mб
Скачать

При горизонтальном скрещивании случайным образом в последовательностях-родителях выбираются точки разреза x1 и x2. Первый потомок получается соединением векторов первого родителя от начала последовательности до точки деления x1 и второго родителя от точки деления x2 до конца последовательности (рис.8.10). Второй потомок получается аналогично при перемене мест первого и второго родителя.

Вертикальное скрещивание производится не по наборам теста, а по входным сигналам схемы. Для получения потомка необходимо взять первый столбец из таблицы - теста первого родителя и случайным образом определить, будет ли он столбцом первого или второго потомка.

Легко заметить, что при горизонтальном пересечении длина последовательностей-особей может, как уменьшаться, так и увеличиваться, тогда, как при вертикальном скрещивании длина обоих потомков станет равной длине большего из родителей. При этом все «пустоты», получаемые из-за разности длин заполняются случайными битами.

Механизм мутации обеспечивает появление новых генов в особях. Он применяется с заранее заданной вероятностью Pm к результатам операции скрещивания. В алгоритме применяется три вида мутации, выбор между которыми происходит случайно:

мутация одиночного бита (каждый бит в последовательностях- потомках может изменить своё значение с вероятностью 0.5%);

добавление вектора (в случайную позицию в последовательности вставляется случайным образом сгенерированный вектор, что позволяет вводить и рассматривать тестовые последовательности с большей длиной);

удаление вектора (из случайно выбранной позиции удаляется вектор, если он был несущественным, то оценочная функция всей последовательности не должна уменьшиться).

Остановимся теперь подробнее на фазах алгоритма. Целью 1-й фазы является определение неисправности, которая может быть активизирована.

371

При этом значения сигналов в присутствии неисправности, отличные от значений исправной схемы, могут быть распространены на внешние псевдовыходы. Для этого производится моделирование неисправностей для нескольких последовательностей. После этого выбирается лучшая из последовательностей. Если она активизировала какую-либо неисправность, то эта неисправность выбирается в качестве целевой неисправности и происходит переход во вторую фазу алгоритма. В начале работы алгоритма в качестве лучшей последовательности выбирается та, которая обнаружила больше неисправностей. При этом, за несколько проходов моделирования строится тест для большинства легко тестируемых неисправностей. На более поздних этапах в качестве лучшей последовательности выбирается та, которая активизировала наибольшее число неисправностей или произвела наибольшую активность сигналов (изменений) в схеме. Для этой цели также используется генетический алгоритм. При этом оценочные функции будут аналогичны тем, которые используются в фазе 2, поскольку несут ту же смысловую нагрузку. Метод активизации неисправностей в алгоритме показывает переменная режим. Длина последовательностей в фазе 1 в начальный момент считается заданной, а далее полагается равной длине проверяющей последовательности, сгенерированной в фазе 2 алгоритма.

Целью 2-й фазы является улучшение активизирующей последовательность таким образом, чтобы она стала проверяющей для целевой неисправности. Эта фаза является ключевой в алгоритме. Её псевдокод приведён на рис.8.12. Здесь P текущая популяция, которая в начальный момент инициализируется особями из фазы 1 алгоритма, newP следующее поколение, s две новых последовательности, получаемых в результате операции скрещивания. Вычисление новых популяций производится ограниченное число раз (MAX_ПОКОЛЕНИЙ). Если за это время тестовая последовательность не найдена, то целевая неисправность

372

отмечается, как непроверяемая и больше не может быть вновь выбрана в качестве цели генетического алгоритма.

Поиск_проверяющей_последовательности(неисправность-цель)

{

for( i=0 ; i<MAX_ПОКОЛЕНИЙ ; i++)

{

for( каждой особи s в популяции P ) вычислить_оценку(s, f ); newP= ;

for( k=0 ; k<ЧИСЛО_НОВЫХ_ОСОБЕЙ ; k++ )

{

выбрать_две_последовательности_в_P(); применить_операцию_скрещивания();//генерируются две особи применить_операцию_мутации_к_s_c_вероятностью_Pm(); newP=newP s;

}

P=(лучшие MAX_ОСОБЕЙ из newP и P ) for( каждой особи s в популяции P )

if( s обнаруживает f )

return s;

}

return( НЕТ_ПОСЛЕДОВАТЕЛЬНОСТИ )

}

Рис.8.12 Фаза 2 алгоритма построения тестов

Если в процессе второй фазы генетический алгоритм породил тестовую последовательность, то происходит переход к фазе 3. Здесь производится моделирование всех необнаруженных (на текущем этапе) неисправностей на данной тестовой последовательности. По данным моделирования (вновь) проверяемые неисправности вычёркиваются из списка неисправностей и далее не рассматриваются.

373

В качестве вспомогательного инструмента используются программы моделирования с неисправностями. Первая программа моделирования аналогична описанной в [37] со следующими изменениями. Во время фазы 1 алгоритма определяется лучшая из нескольких входных последовательностей. При этом необходимо знать, сколько неисправностей проверяет данная входная последовательность. Следует отметить, что при этом проверяемые неисправности не вычёркиваются из списка неисправностей, подлежащих дальнейшей обработке. Для этого в алгоритме моделирования с неисправностями вводится «пробный режим», который определяет качество тестовой последовательности, но не удаляет неисправности из списка. Данный режим применяется в фазе 1 алгоритма. При выключенном пробном режиме все проверяемые неисправности вычёркиваются из списка неисправностей. Этот режим используется в фазе 3 алгоритма.

Вторая программа моделирования неисправностей реализует алгоритм «параллельного моделирования по тестовым наборам» и написана специально для работы с генетическим алгоритмом. При этом во всех битах машинного слова моделируется одна и та же неисправность (в алгоритме целевая неисправность), но на каждый разряд подаётся своя тестовая последовательность-особь. Таким образом, реализуется параллельное моделирование по особям популяции. При этом после моделирования очередного тестового вектора происходит вычисление его оценочной функции. После моделирования всех тестовых последовательностей вычисляется оценочная функция всей последовательности. Вычисление оценочных функций особей является самым трудоёмким этапом в алгоритме. Поэтому применение данного подхода существенно повышает скорость вычисления оценочных функций особей в популяции и скорость работы алгоритма в целом. Недостатком такого подхода является ограниченное число особей в популяции: не более

374

32-х, что обусловлено разрядностью инструментальной ЭВМ. Однако это ограничение несущественно, поскольку число особей в популяции (МАХ_ОСОБЕЙ) обычно выбирается гораздо меньше: 8, 16 или 24 особи.

8.6Адаптивные ГА

Впервых работах для генерации тестов использовались ГА с постоянными значениями основных параметров: N мощность популяции,

вероятности генетических операторов кроссинговера Pc и мутации Pm .

При этом для каждой схемы для эффективной работа ГА приходилось индивидуально подбирать оптимальные значения этих параметров. Далее были разработаны адаптивные ГА, в которых в процессе поиска решения значения Pc и Pm "подстраиваются". Известны различные подходы к реализации адаптивных ГА, ниже излагается один из простейших возможных вариантов адаптации [26].

Работу классического ГА можно рассматривать как сбалансированную комбинацию расширения (освоения) новых областей в пространстве поиска и использования (эксплуатации) уже проверенных областей. Баланс между расширением и эксплуатацией таких областей существенно влияет на характеристики ГА и определяется выбором следующих параметров: вероятность кроссинговера Pc , вероятность мутации Pm , мощность популяции (число особей) – N p . Параметры Pc и

Pm определяют частоту применения к особямродителям из промежуточной популяции и являются константами для классического ГА . При этом нужно учитывать следующие факторы:

− увеличение вероятности кроссинговера Pc приводит с одной стороны к повышению рекомбинации строительных блоков”, а с другой к разрушению уже существующих хороших решений;

375

− увеличение вероятности мутации Pm может превратить генетический поиск в случайный и, в то же время, приводит к большему введению нового генетического материала в популяцию;

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

Без сомнения, управляющие параметры следует выбирать с учетом взаимодействия основных операторов генетического алгоритма. Оптимальные управляющие параметры существенно зависят от вида целевой функции.

В адаптивных генетических алгоритмах в процессе эволюции изменяются вероятности кроссинговера и мутации Pc и Pm . Для оптимизации (особенно мультимодальных функций, имеющих много экстремумов) существенными являются две характеристики ГА:

способность сходиться к оптимуму (локальному или глобальному) после нахождения области, содержащей оптимум;

способность находить новые области в пространстве решений в поисках глобального оптимума.

Известно, что для мультимодальных функций существует серьезная проблема преждевременной сходимости к локальным экстремумам.

Чтобы изменять Pc и Pm адаптивно, с целью предотвращения

преждевременной сходимости к локальному экстремуму, надо научиться идентифицировать ситуации, когда ГА сходится к оптимуму.

Один из возможных способов обнаружения сходимости к оптимуму наблюдение разности среднего и максимального значения целевой функции в популяции ( fmax f ) . Обычно эта разность меньше для

376

популяции, которая сходится к оптимуму,

чем

для

популяции,

«разбросанной» по пространству решений.

 

 

 

 

 

 

 

 

Поэтому далее будем использовать разность

fmax

f

в качестве

основного признака сходимости к оптимуму, причем не обязательно к глобальному.

Так как вероятности Pc и Pm должны увеличиваться при

преждевременной сходимости

к

локальному оптимуму

 

(чтобы

"выпрыгнуть из ловушки локального оптимума"), то значения

 

Pc и Pm

 

 

 

 

 

 

 

 

должны изменяться обратно пропорционально разности ( fmax f

) :

Pc =

k1

,

Pm =

k2

 

 

 

 

 

 

 

 

 

 

 

fmax f

fmax f .

 

 

 

 

 

 

 

Здесь Pc и Pm не зависят от значений ЦФ для конкретной особи, а

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

Следовательно, для хороших решений с высокими значениями целевой функции, как и для плохих, используются одни и те же величины Pc и Pm , что, очевидно, не правильно. Когда популяция сходится к глобальному или локальному оптимуму, то вероятности Pc и Pm

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

Таким образом, мы избежали ловушки локального оптимума ценой снижения характеристик ГА по поиску глобальных оптимумов.

Чтобы решить эту проблему, нужно сохранять хорошие решения текущей популяции. Это можно сделать, полагая низкие значения вероятности Pc и Pm для особей с высоким значением ЦФ и высоких значений Pc и Pm для плохих особей с низкими значениями ЦФ. Тогда

377

лучшие решения способствуют сходимости, а худшие предотвращают ГА от локальных экстремумов.

Таким образом, значение Pc и Pm должны зависеть не только от

разности fmax f , а еще и от значений ЦФ конкретных особей. Чем ближе значение функции к максимальному, тем меньше должно быть значение Pc Pm. Поэтому полагаем:

P

= k

 

 

 

f max

f '

 

,

 

 

 

 

 

k

 

1

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

 

c

 

 

 

f max

f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

= k

 

 

 

f max

f

,

 

 

 

 

 

k

 

1

 

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

 

m

 

 

 

 

 

f max

f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где f лучшее значение целевой функции у двух родителей.

 

 

 

Заметим, что Pc = Pm = 0

для решений,

имеющих

максимальное

значение ЦФ. Кроме этого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pc = k1, для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f ′ = f

,

 

 

 

 

 

 

 

Pm = k2 , для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f ′ = f

.

 

 

 

 

 

 

 

 

 

 

 

f , f , <

 

)

Но здесь есть одна неприятность: для плохих решений (

f

значения вероятности Pc и

 

 

Pm

могут

быть

больше 1,

что

очевидно

неправильно. Поэтому для плохих решений примем:

 

 

 

 

 

Pc

 

= k3 , для

 

 

 

,

 

 

 

 

 

 

 

 

f ′ ≤ f

 

 

 

 

 

 

 

Pm = k4 , для

 

 

 

 

.

 

 

 

 

 

 

 

 

 

f ′ ≤ f

 

 

 

 

 

 

Здесь константы k3 , k4 1. В итоге получаем следующие формулы для вычисления вероятностей выполнения операторов скрещивания и мутации:

 

fmax f

 

 

k1

 

 

 

, для f ′ > f

 

 

 

fmax f

Pc =

 

 

 

 

, иначе;

 

 

 

k3

 

 

 

378

Pm =

Обычно k1 = k3 = 1, k2 = k4

 

 

fmax f

 

 

f ′ > f

k2

 

 

 

 

, для

 

 

 

 

 

 

 

 

 

 

fmax f

 

 

 

, иначе.

 

 

k4

 

 

= 0.5.

Заметим, что лучшие решения при этом сохраняются и переходят в следующее поколение. Этот факт может привести к чрезмерному росту популяции, что чревато преждевременной сходимостью. Поэтому иногда дополнительно вводится одна (default) мутация (с вероятностью Pd=0.005) для всех особей популяции.

Существуют и "более строгие" адаптивные ГА, где Pc и Pm

вычисляются аналитически, но они сильно привязаны к конкретным задачам в отличие от рассмотренного эвристического, но универсального подхода. Применение адаптации позволяет повысить эффективность ГА при генерации тестов на несколько процентов.

8.7Параллельные ГА

Внастоящее время при генерации тестов достаточно широко применяются параллельные ГА [113-117]. Разработаны различные методы параллелизации ГА. Рассмотрим некоторые из них.

Присущий ГА "внутренний" параллелизм и заложенная в них возможность распределенных вычислений способствовали развитию параллельных ГА (ПГА). Первые работы в этом направлении появились в 60-х годах, но только в 80-е годы, когда были разработаны доступные средства параллельной реализации, исследования ПГА приняли систематический массовый характер и практическую направленность. В этом направлении разработано множество моделей и реализаций, некоторые из которых представлены ниже [119].

При параллелизации ГА ожидаются следующие преимущества:

1)поиск альтернативных решений одной и той же проблемы;

379

2)параллельный поиск из различных точек в пространстве решений;

3)допускают хорошую реализацию в виде островов или клеточной структуры;

4)большая эффективность поиска даже в случае реализации не на параллельных вычислительных структурах;

5)хорошая совместимость с другими эволюционными и классическими процедурами поиска;

6)существенное повышение быстродействия на многопроцессорных системах.

Рассмотрим современные основные методы реализации ПГА. Наиболее известной является представленная на рис.8.13 а) глобальная параллелизация. Эта модель основана на простом (классическом) ГА с вычислениями, выполняемыми параллельно. Она быстрее, чем классический ГА, выполняемый последовательно, и обычно не требует баланса по загрузке, поскольку на разных процессорах чаще всего вычисляются значения фитнесс-функций для различных особей (имеющие примерно одинаковую вычислительную сложность). Исключение составляет генетическое программирование, где различные особи могут сильно отличаться по своей сложности (древовидные или граф- структуры). Эту модель часто называют "рабочий - хозяин". Многие исследователи используют пул процессоров для повышения скорости выполнения алгоритма, поскольку независимые запуски алгоритма на различных процессорах выполняются существенно быстрее, чем на одном процессоре. Отметим, что в этом случае нет никакого взаимодействия между различными прогонами алгоритма. Это чрезвычайно простой метод выполнения одновременной работы (если это возможно) и он может быть очень полезным. Например, он может быть использован для решения одной и той же задачи с различными начальными условиями. В силу своей вероятностной природы ГА позволяют эффективно использовать этот

380