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

Дискретная математика & математическая логика

..pdf
Скачиваний:
47
Добавлен:
15.11.2022
Размер:
19.42 Mб
Скачать

Подставляем в правую часть первого уравнения вместо х2 второе уравнение, а во второе вместо х1 – первое:

 

= −

1

(2x1

4x3 + x5

+ 3000) 3x3

+ x4 + 2000,

5x1

 

 

5

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

5x2

= −

 

 

(x2

3x3 + x4

+ 2000) 4x3

+ x5 + 3000,

5

 

 

 

 

 

 

 

f = x1 + x2 + x3 min.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Упрощаем, умножая левую и правую части первых двух

уравнений на 5:

 

 

 

 

 

 

 

25x1 = 2x1 + 4x3 x5 3000 15x3 + 5x4 + 10 000,

 

 

+ 6x3 2x4 4000 20x3 + 5x5 + 15 000,

25x2 = 2x2

 

= x1 + x2

+ x3 min.

f

Далее

 

 

 

23x1 = −11x3 x5 + 5x4 + 7000,

 

 

 

 

23x2 = −14x3 2x4 + 5x5 + 11 000,

 

 

= x1 + x2 + x3 min.

 

f

Таким образом, упорядочивая переменные, получим

 

=

 

1

(7000

11x3

+ 5x4

x5 ),

x1

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

x2

=

 

 

 

(11 000

14x3 2x4 + 5x5 ),

 

 

 

 

 

23

 

 

 

 

f

= x1 + x2 + x3 min.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подставим первые два уравнения в третье:

141

 

=

1

 

(7000

11x3

+ 5x4 x5 ),

 

 

 

 

x1

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

=

 

 

 

 

 

(11 000 14x3 2x4 + 5x5 ),

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

=

1

(7000

11x3

+ 5x4 x5 ) +

1

(11 000

14x3 2x4 + 5x5 ) + x3 min.

f

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

23

 

 

Преобразуем f:

 

 

 

 

 

 

 

 

 

 

 

 

 

=

1

 

(7000 11x3 + 5x4

x5 ),

 

 

 

 

 

 

 

 

x1

 

 

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

=

 

 

 

(11 000

14x3 2x4 + 5x5 ),

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

1

 

(18 000 2x3 + 3x4

+ 4x5 ) min.

 

 

 

 

 

 

 

 

f

 

 

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Легко видеть, что при данном значении х3 наименьшее f получим при нулевых х4, х5. Это очевидно, поскольку х4, х5 – количество лишних заготовок. При возрастании х3 f будет убывать, но рост х3 ограничивается требованием положительности х4, х5.

Пусть х4 = х5 = 0:

 

=

 

 

1

(7000 11x3 ),

x1

 

 

 

 

 

23

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

=

 

 

 

(11 000 14x3 ),

x2

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

или

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

7000

 

 

x1 =

 

 

 

(

 

 

x3 ),

 

23

 

11

 

 

 

 

 

14 11000

 

 

 

=

x3 ).

x2

 

 

 

 

 

(

 

 

23

14

 

 

 

 

 

 

 

 

 

 

При возрастании х3 отрицательное значение примет прежде всего х1, так как

142

7000

 

11000

 

 

 

<

 

 

.

 

11

14

 

 

 

 

 

Сделаем х1 свободной, а х3

зависимой переменной.

Вернёмся к уравнениям

 

 

 

 

5x1 + x2 + 3x3 x4

= 2000,

 

 

 

 

 

 

2x1 + 5x2 + 4x3 x5 = 3000,

 

+ x2 + x3

min

f = x1

и выразим х2, х3 через х1, х4, х5:

 

 

 

 

x2

= 2000 5x1

3x3 + x4 ,

4x3 = 3000 2x1 5x2 + x5 ,

 

= x1 + x2 + x3

min.

f

Необходимо убрать в первом уравнении х3, во втором – х2. Подставляем в правую часть первого уравнения вместо х3 второе уравнение, а во второе вместо х2 – первое:

 

= 2000 5x1

3

(3000 2x1 5x2 + x5 ) + x4

,

x2

 

4

 

 

 

 

 

4x3 = 3000 2x1 5(2000 5x1 3x3 + x4 ) + x5 ,

 

= x1 + x2 + x3

min.

 

f

 

 

 

 

 

 

 

Преобразуем:

 

 

 

 

4x2

= 8000 20x1 9000 + 6x1 +15x2 3x5 + 4x4 ,

 

= 3000 2x1 10 000 + 25x1 +15x3 5x4 + x5 ,

4x3

 

 

 

min.

 

f = x1 + x2 + x3

 

Получаем

 

 

 

 

 

11x2

= −14x1 10001 3x5 + 4x4 ,

 

 

 

= −7000 + 23x1 5x4 + x5 ,

 

 

11x3

 

 

 

+ x2

+ x3 min,

 

 

f = x1

 

143

т.е.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

1

 

(1000

+14x1

 

4x4 + 3x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

=

 

 

 

 

 

(7000

23x1

 

+ 5x4 x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f

= x1 + x2 + x3

 

min.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подставим первые два уравнения в третье:

 

 

 

 

 

 

 

=

1

 

(1000 +14x1

4x4 + 3x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

 

=

 

 

 

 

 

 

(7000 23x1 + 5x4 x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= x1

+

1

(1000 +14x1 4x4 + 3x5 ) +

1

 

(7000 23x1 + 5x4 x5 )

 

min.

f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

Преобразуем f:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

1

 

(1000 +14x1 4x4 + 3x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

=

 

 

 

 

 

 

(7000 23x1 + 5x4 x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

11

 

 

 

 

+

1

(1000 +14x1 4x4 + 3x5 ) +

 

1

(7000 23x1

+ 5x4

x5 )

min.

f

 

 

 

 

 

 

x1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

Окончательно получаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

1

 

 

(1000

+14x1

4x4 + 3x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

=

 

 

 

 

(7000

23x1

 

+ 5x4 x5 ),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f =

 

 

 

 

(8000 + 2x1 + x4

 

+ 2x5 ) min.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

144

Видим, что минимальное значение f получим в случае, если х1 = х4 = х5 = 0, при этом зависимые переменные х2, х3 будут положительны:

x

=

 

1

 

(1000),

 

 

 

 

2

 

11

 

 

 

 

 

 

 

=

1

 

 

 

x3

 

 

 

(7000),

 

 

 

 

 

11

 

 

 

 

=

1

(8000)

= min.

f

 

 

 

 

 

 

11

 

 

 

Таким образом, решение имеет вид

x

= 0,

 

1

 

 

 

1

x

=

 

 

 

 

2

11

 

 

=

1

x

 

 

 

3

11

x

= 0,

 

4

 

 

 

 

x5 = 0,

 

 

 

 

1

 

f

=

 

 

 

11

(1000) = 90,9...,

(7000) = 636,3...,

(8000) = min.

Но нам нужно целочисленное решение! Нетрудно убедиться, что для такого решения

f 1 (8000)= 727, 2..., 11

или даже f ≥ 728, так как число листов должно быть целым.

Можно ожидать, что такое решение мы получим, если немного изменим решение:

145

 

x1 = 0,

 

x2 = 91,

 

x3 = 637,

 

x4 = 0,

 

x5 = 0,

 

 

 

f = 728 = min.

 

 

Проверим:

 

5

0 + 91 + 3 637 0 = 2002 > 2000,

 

0 + 5 91 + 4 637 0 = 3003 > 3000,

2

 

= 0 + 91 + 637 = 728.

f

Таким образом, для выполнения заказа необходимо доставить со склада 728 листов и 91 из них кроить по второму, а остальные – по третьему способу.

4.5. ГЕНЕТИЧЕСКИЙ АЛГОРИТМ ОПТИМИЗАЦИИ

Генетический алгоритм оптимизации – это эвристический алгоритм поиска, используемый для решения задач оптимизации

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

Отцом-основателем генетических алгоритмов считается Джон Холланд (John Holland), книга которого «Адаптация в естественных

иискусственных системах» является основополагающим трудом в этой области исследований.

146

Задача кодируется таким образом, чтобы ее решение могло быть представлено в виде вектора («хромосомы»). Случайным образом создается некоторое количество начальных векторов («начальная популяция»). Они оцениваются с использованием «функции приспособленности», в результате чего каждому вектору присваивается определенное значение («приспособленность»), которое определяет вероятность выживания организма, представленного данным вектором. После этого с использованием полученных значений приспособленности выбираются векторы («селекция»), допущенные к «скрещиванию». К этим векторам применяются «генетические операторы» (в большинстве случаев «скрещивание» – crossover и «мутация» – mutation), создавая таким образом следующее «поколение». Особи следующего поколения также оцениваются, затем производится селекция, применяются генетические операторыит.д.

Так моделируется «эволюционный процесс», продолжающийся несколько жизненных циклов (поколений), пока не будет выполнен критерий остановки алгоритма. Таким критерием может быть:

нахождение глобального либо субоптимального решения;

исчерпание числа поколений, отпущенных на эволюцию;

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

решений в очень больших, сложных пространствах поиска.

Таким образом, можно выделить следующие этапы генети-

ческого алгоритма:

создание начальной популяции;

вычисление функций приспособленности для особей популяции (оценивание);

начало цикла;

выбор индивидов из текущей популяции (селекция);

скрещивание и/или мутация;

вычисление функций приспособленности для всех особей;

формирование нового поколения.

Если выполняются условия остального, то «конец цикла», иначе «начало цикла».

147

Чтобы применить генетический алгоритм к задаче, сначала выбирается метод кодирования решений в виде строки. По существу, такая кодировка соответствует разбиению пространства параметров на гиперкубы, которым соответствуют уникальные комбинации битов встроке-хромосоме. Для установления соответствия между гиперкубами разбиения области и бинарными строками, описывающими номера таких гиперкубов, кроме обычной двоичной кодировки использовался рефлексивный код Грея. Код Грея предпочтительнее обычного двоичного тем, что обладает свойством непрерывности бинарной комбинации: изменение кодируемого числа на единицу соответствует изменениюкодовойкомбинациитольководномразряде.

Рассмотрим пример кодирования для генетического алгорит-

ма (табл. 4.1).

Таблица 4 . 1

Пример кодирования вариантов для генетического алгоритма

 

Двоичное кодирование

 

Кодирование по коду Грея

D

 

B

 

H

D

B

H

0

 

0000

 

0h

0

0000

0h

1

 

0001

 

1h

1

0001

1h

2

 

0010

 

2h

3

0011

3h

3

 

0011

 

3h

2

0010

2h

4

 

0100

 

4h

6

0110

6h

 

 

 

 

 

 

 

 

5

 

0101

 

5h

7

0111

7h

6

 

0110

 

6h

5

0101

5h

7

 

0111

 

7h

4

0100

4h

8

 

1000

 

8h

12

1100

Ch

9

 

1001

 

9h

13

1101

Dh

10

 

1010

 

Ah

15

1111

Fh

 

 

 

 

 

 

 

 

11

 

1011

 

Bh

14

1110

Eh

12

 

1100

 

Ch

10

1010

Ah

13

 

1101

 

Dh

11

1011

Bh

14

 

1110

 

Eh

9

1001

9h

15

 

1111

 

Fh

8

1000

8h

148

Стандартные операторы для всех типов генетических алгоритмов – это селекция, скрещивание и мутация.

Оператор селекции (reproduction, selection) осуществляет от-

бор хромосом в соответствии со значениями их функции приспособленности. Существуют как минимум два популярных типа оператора селекции: рулетка и турнир.

Метод рулетки (roulette-wheel selection) отбирает особей с помощью n запусков рулетки. Колесо рулетки содержит по одному сектору для каждого члена популяции. Размер i-го сектора пропорционален соответствующей величине Psel(i), вычисляемой по некоторой формуле.

Турнирный отбор (tournament selection) реализует n турни-

ров, чтобы выбрать n особей. Каждый турнир построен на выборке k элементов из популяции и выбора лучшей особи среди них. Наиболее распространен турнирный отбор с k = 2.

Оператор скрещивания (crossover) осуществляет обмен частями хромосом между двумя (может быть и больше) хромосомами в популяции. Может быть одноточечным или многоточечным. Одноточечный кроссовер работает следующим образом. Сначала случайным образом выбирается одна из (l 1)-x точек разрыва. Точка

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

Одноточечный оператор скрещивания (точка разрыва равна трем) показан на рис. 4.11.

Рис. 4.11. Одноточечный оператор скрещивания

149

Мутация (mutation) – стохастическое изменение части хромосом. Каждый ген строки, которая подвергается мутации, с вероятностьюPmut (обычнооченьмаленькой) меняетсяна другойген(рис. 4.12).

Рис. 4.12. Мутация

Алгоритм работы классического генетического алгоритма приведен на рис. 4.13.

Рис. 4.13. Классический генетический алгоритм

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

150

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]