Uploaded by Vi Meikshan

Сдвижков-2012

advertisement
О. А. Сдвижков
Дискретная математика
и математические методы
экономики с применением
VBA Excel
Москва, 2013
УДК 330.4:004.91MS Excel
ББК 65в631с515
C27
C27
Сдвижков О. А.
Дискретная математика и математические методы экономики
с применением VBA Excel. – М.: ДМК Пресс, 2012. – 212 с.
ISBN 978-5-94074-655-3
В книге приведены задачи по дискретной математике и математическим методам экономики, а такжепоказано их решение на компьютере с помощью специально созданных программ (макросов) в среде
VBA Excel. Материал книги охватывает булевы функции, конечные
автоматы, машины Тьюринга и Поста, нормальные алгоритмы, графы,
производство и потребление товаров, управление портфелем ценных
бумаг и запасами, замкнутые системы массового обслуживания, методы кластеризации. Отдельная глава посвящена задаче коммивояжера.
Издание ориентировано на студентов технических, информационных и экономических специальностей вузов, а также будет полезно и
более широкому кругу пользователей MS Excel.
УДК 330.4:004.91MS Excel
ББК 65в631с515
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без
письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство
не может гарантировать абсолютную точность и правильность приводимых
сведений. В связи с этим издательство не несет ответственности за возможные
ошибки, связанные с использованием книги.
ISBN 978-5-94074-655-3
© Сдвижков О. А., 2012
© Оформление, ДМК Пресс, 2012
Содержание
Предисловие ................................................................................................ 6
Часть I
Дискретная математика с применением VBA Excel ............................ 8
Глава 1
Функции алгебры логики ........................................................................... 9
§1. Элементарные функции алгебры логики ........................................... 9
§2. Разложение булевых функций по переменным .............................. 15
§3. Классы Поста ..................................................................................... 23
§4. Частично определенные булевы функции ......................................30
Глава 2
Машины Тьюринга, Поста и нормальные алгоритмы ........................ 37
§1. Понятие машины Тьюринга .............................................................. 37
§2. Программирование по Тьюрингу.................................................... 39
§3. Макрос нахождения выходного слова ........................................... 43
§4. Нормальные алгоритмы ................................................................... 45
§5. Машина Поста ...................................................................................50
Глава 3
Конечные автоматы ................................................................................... 55
§1. Автоматы Мили .................................................................................. 55
§2. Минимизация автоматов алгоритмом Мили ................................... 59
§3. Автоматы Мура ..................................................................................63
§4. Частично определенные автоматы .................................................67
4
Содержание
Глава 4
Элементы теории графов.........................................................................74
§1. Основные понятия ...........................................................................74
§2. Задача о минимальном дереве-остове ..........................................79
§3. Задача о назначениях ........................................................................ 82
§4. Алгоритм Дейкстры ......................................................................... 85
§5. Задача о гиперсфере минимального радиуса................................90
§6. Транспортная задача.........................................................................97
Глава 5
Задача коммивояжера ........................................................................... 100
§1. Свойства оптимальных контуров ................................................. 100
§2. Метод ветвей и границ .................................................................. 107
§3. Сведение к задаче линейного программирования ......................114
§4. Сведение к задаче квадратичного программирования ...............119
§5. Обобщения задачи коммивояжера ..............................................124
Часть II
Математические методы экономики с применением
VBA Excel ................................................................................................... 135
Глава 1
Математические модели производства и потребления
товаров .....................................................................................................136
§1. Модель В. Леонтьева ......................................................................136
§2. Задачи с функцией полезности ......................................................144
§3. Задачи с производственной функцией .........................................150
§4. Характеристики производства ...................................................... 155
Глава 2
Управление портфелем ценных бумаг ...............................................157
§1. Средние доходности и ковариационная матрица ......................157
§2. Задачи оптимизации портфеля ......................................................159
§3. Эффективная граница ......................................................................164
Содержание
5
Глава 3
Замкнутые системы массового обслуживания .................................168
§1. Одноканальные замкнутые СМО....................................................168
§2. Многоканальные замкнутые СМО ..................................................171
§3. Макрос для замкнутых систем МО .................................................175
Глава 4
Статические модели управления запасами .......................................184
§1. Макрос управления запасами ........................................................184
§2. Тестирование макроса ...................................................................192
Глава 5
Методы кластеризации ...........................................................................198
§1. Кластеризация методом k-средних ...............................................198
§2. Иерархическая кластеризация (макрос Joining)..........................201
§3. Иерархическая кластеризация (макрос Ward).............................204
§4. Кластеризация с помощью циклов ............................................... 206
Литература ................................................................................................211
Предисловие
В настоящее время уже недостаточно знать математические методы, надо еще знать компьютерные технологии их применения, так
как ими искомые результаты находятся быстрее. При этом особый
интерес представляют такие технологии, на применение которых затрачивается минимум времени. Подобным технологиям и посвящена
данная книга.
Дискретная математика и математические методы экономики –
важнейшие, тесно связанные математические разделы, имеющие
большое прикладное значение. Однако в информационных математических технологиях фактически нет инструментов для решения задач
этих разделов, а эти решения отличаются большой трудоемкостью.
Поэтому на процедурном языке VBA (Visual Basic for Applications)
программного комплекса MS Excel 2003 автором были разработаны
специальные программы (макросы), предназначенные для решения
на компьютере типовых задач этих разделов, вообще говоря, по принципу «ввод данных задачи → ответ», то есть автоматически.
Согласно справочным сведениям MS Excel:
• макрос – последовательность команд и функций, хранящаяся
в модуле VB, которую можно выполнить всякий раз, когда это
необходимо;
• проект макроса – совокупность компонентов, в том числе
форм, текста программы и модулей классов, которые составляют макрос.
В MS Excel имеется макрорекордер, но записать им разработанные
макросы нельзя, в основном потому, что они поддерживают произвольные объемы начальных данных. Их можно создать только непосредственным программированием. К программным кодам большинства макросов даны подробные комментарии.
В данной книге краткие сведения по дискретной математике и математическим методам экономики, необходимые для решения основ-
Предисловие
7
ных типов задач, дополнены сведениями по технологиям решения
этих задач на компьютере с помощью созданных макросов. В ней на
большом числе конкретных задач подробно показывается, как для
каждого типа задач надо вводить начальные данные, запускать вычисления и считывать результаты. Большое число рисунков, демонстрирующих, что будет на экране монитора в процессе решения той или
иной задачи, позволяет понять технологии применения макросов, не
включая компьютера. Условия задач в основном взяты из наиболее
популярных сборников задач и учебных пособий.
В частности, показывается, как макросами решаются такие трудоемкие задачи, как:
• минимизация ДНФ булевой функции алгоритмом Квайна;
• минимизация конечного полностью определенного автомата
алгоритмом Мили;
• нахождение объемов ресурсов, обеспечивающих максимальную прибыль.
Отдельная глава посвящена задаче коммивояжера и компьютерным технологиям ее решения. Кроме известных методов (ветвей и
границ, сведение к линейному программированию), в ней рассматриваются обобщения задачи коммивояжера и новые подходы (пронумерованные леммы и теоремы), с помощью которых можно получить
оптимальный контур, в частности позволяющие:
• упростить задачу коммивояжера;
• свести ее к задаче квадратичного программирования.
Подробно рассмотрена ставшая популярной в последние годы задача о гиперсфере (окружности) минимального радиуса. Для нее найдены алгоритмы решения и разработаны соответствующие макросы.
Макросы, всего их около 50, находятся в отдельных рабочих книгах Excel, собранных в папке VBAcodes, ссылка для скачивания:
http://www.oasdv.narod.ru.
Макросы поддерживаются в MS Excel 2007 и 2010.
Книга ориентирована на студентов технических, информационных и экономических специальностей вузов, но будет полезна и более
широкому кругу пользователей MS Excel.
ДИСКРЕТНАЯ
МАТЕМАТИКА
С ПРИМЕНЕНИЕМ
VBA EXCEL
ЧАСТЬ
I
Функции
алгебры логики
1
§1. Элементарные функции алгебры
логики
Функция f = f(x1, x2, …, xn) называется функцией алгебры логики, или
булевой функцией, если переменные f, x1, x2, …, xn, называемые логическими, двоичными или альтернативными, принимают значения из
множества E2 = {0,1}. Число булевых функций от n переменных, обозначаемое p2(n), выражается формулой
то есть существуют 4 булевые функции одной переменной, 16 булевых функций двух переменных, 256 булевых функций трех переменных и т. д.
Таблицей истинности булевой функции называется таблица, содержащая все наборы значений независимых переменных, приведенные в лексикографическом порядке, и соответствующие им значения
функции:
Таблица 1.1.1
№
1
x1
0
x2
0
…
…
xn–1
0
xn
0
Значения f
0 или 1
2
0
0
…
0
1
0 или 1
3
0
0
…
1
0
0 или 1
4
0
0
…
1
1
0 или 1
2n
1
1
…
1
1
0 или 1
Часть I. Дискретная математика с применением VBA Excel
10
Указанный порядок получается следующим образом. В столбце x1
первые p1 = 2n–1 клеток заполняются нулями, остальные p1 клеток –
единицами. В столбце x2 первые p2 = 2n–2 клеток – нули, следующие
p2 клеток – единицы, затем снова p2 нулей, затем снова p2 единиц. Аналогично, чередованием, с учетом pk = 2n–k, заполняются последующие
столбцы. В столбце xn значения 0 и 1 чередуются. При оговоренном
порядке записи наборов значений независимых переменных каждая
булева функция f задается значениями последнего столбца, что записывается в виде f = (f1 f2 … f2n).
Таблицы истинности элементарных булевых функций сведены
в табл. 1.1.2 и 1.1.3.
Таблица 1.1.2
x
0
1
f1
0
0
f2
1
1
f3
0
1
f4
1
0
f5
0
0
0
1
f6
0
1
1
1
f7
0
1
1
0
Таблица 1.1.3
x
0
0
1
1
y
0
1
0
1
f8
1
0
0
1
f9
1
1
0
1
f10
1
1
1
0
1)
2)
3)
4)
5)
f11
1
0
0
0
f1(x) = 0 – константа 0;
f2(x) = 1 – константа 1;
f3(x) = x – тождественная функция;
– отрицание (обозначается также );
f5(x, y) = x ∧ y – конъюнкция (логическое умножение), обозначается также x&y и x·y, x ∧ y = min(x, y);
6) f6(x, y) = x ∨ y – дизъюнкция (логическое сложение), x ∨ y =
max(x, y);
7) f7(x, y) = x ⊕ y – сложение по модулю 2, значение равно остатку
от деления x + y на 2;
8) f8(x, y) = x ~ y – эквиваленция, обозначается также x ↔ y,
9) f9(x, y) = x → y – импликация (логическое следствие),
Глава 1. Функции алгебры логики
11
10) f10(x, y) = x | y – штрих Шеффера, отрицание конъюнкции;
11) f11(x, y) = x ↓ y – стрелка Пирса, отрицание дизъюнкции.
Основные тождества алгебры логики:
1) коммутативность:
x ° y = y ° x,
символ ° обозначает один из символов ∧, ∨, ⊕, ~;
2) ассоциативность:
(x ° y) ° z = x ° (y ° z);
3) дистрибутивность:
(x ∨ y) · z = x · z ∨ y · z),
(x · y) ∨ z = (x ∨ z) · (y ∨ z);
4) закон двойного отрицания:
5) законы де Моргана:
6) закон противоречия:
7) закон исключения третьего:
8) законы идемпотентности:
x ∨ x = x,
x · x = x;
9) законы поглощения:
x · (x ∨ y) = x,
x ∨ (x · y) = x;
10) тождества с константами:
x · 0 = 0, x · 1 = x, x ∨ 0 = x, x ∨ 1 = 1;
11) свойство расщепления (при перестановке частей – свойство
склеивания):
12)
13)
14)
.
Аналитические выражения элементарных булевых функций и их
суперпозиций, то есть функций, полученных подстановками одних
функций в другие, называются формулами. Примеры формул:
12
Часть I. Дискретная математика с применением VBA Excel
При отсутствии скобок логические операции выполняются в порядке убывания приоритета: ¬, ∧, ∨, →, ~.
В Excel значения булевых функций вычисляются с помощью
встроенных функций, приведенных в табл. 1.1.4.
Таблица 1.1.4
Наименование функции Стандартное обозначение Синтаксис функции
Конъюнкция
x∧y
И(х;у)
Дизъюнкция
x∨y
ИЛИ(х;у)
_
Отрицание
x
НЕ(х)
Сложение по модулю 2
x⊕y
ОСТАТ(х+у;2)
Импликация
x→y
ЕСЛИ (x <= y;1;0)
Эквиваленция
x~y
ЕСЛИ(х=у;1;0)
Логическая единица
1
ИСТИНА()
Логический ноль
0
ЛОЖЬ()
Замечание 1. Вместо функции ЕСЛИ лучше пользоваться тождествами 12 и 13.
Замечание 2. В функциях ИСТИНА, ЛОЖЬ круглые скобки
можно опускать.
Задача
1.1.1.
Составить
таблицу
истинности
функции
Технология решения. В диапазон A2:C9 вводятся значения независимых переменных, в ячейке D2, учитывая
(тождество
12), записывается формула:
=ОСТАТ(И(НЕ(A2);B2)+ИЛИ(НЕ(C2);НЕ(A2));2)
Копирование ее в ячейки D3:D9 приводит к таблице истинности
заданной функции (рис. 1.1.1).
Рис. 1.1.1
Глава 1. Функции алгебры логики
13
Ответ: f = (11001010).
Переменная xi называется существенной переменной функции f =
f(x1, … xi, …, xn), если найдется такая пара наборов, что
В противном случае она называется несущественной, или фиктивной, переменной.
Макрос Fictive, применяемый стандартно, во введенной на лист
Excel таблице истинности булевой функции выделяет желтым цветом столбцы значений фиктивных переменных, если они имеются,
иначе возвращает сообщение, что фиктивных переменных нет.
Под стандартным применением макроса здесь и далее понимается:
1) вызов макроса (рабочей книги, содержащей макрос);
2) ввод m×n матрицы (таблицы) данных задачи в диапазон
R1C1:RmCn;
3) выделение диапазона данных;
4) запуск макроса на исполнение (Сервис/Макрос/Макросы/
Имя/Выполнить).
Задача 1.1.2. Найти фиктивные переменные функции f =
= (11001100).
Технология решения. Вызывается макрос Fictive, таблица истинности функции f вводится на рабочий лист и выделяется (рис. 1.1.2).
Рис. 1.1.2
Запуск макроса на исполнение возвращает выделенные желтым
цветом первый и третий столбцы (рис. 1.1.3).
Откуда следует, что переменные x1 и x3 являются фиктивными.
Ответ: x1, x3.
14
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.1.3
Задача 1.1.3. Найти фиктивные переменные функции f =
= (01011011).
Технология решения. Входные данные на рис. 1.1.4.
Рис. 1.1.4
Запуск макроса Fictive на исполнение возвращает сообщение
(рис. 1.1.5).
Рис. 1.1.5
Ответ: ∅.
Задача 1.1.4. Найти фиктивные переменные функции f =
= (1100001111000011).
Глава 1. Функции алгебры логики
15
Технология решения. Ввод данных и запуск макроса Fictive на
исполнение выделяют желтым цветом первый и четвертый столбцы
(рис. 1.1.6).
Рис. 1.1.6
Ответ: x1, x4.
§2. Разложение булевых функций
по переменным
Степень с булевыми переменными определяется формулой
Конъюнкция
(дизъюнкция
) называется элементарной, если значения индексов i1, i2, …, ir попарно различны.
Элементарная конъюнкция Е называется импликантой булевой
функции f, если
Импликанта называется простой, если после удаления из нее любой буквы она перестает быть импликантой.
Дизъюнкция некоторого числа попарно различных элементарных конъюнкций называется дизъюнктивной нормальной формой
(ДНФ). По аналогии определяется КНФ.
16
Часть I. Дискретная математика с применением VBA Excel
Сокращенной ДНФ функции f называется ДНФ функции f, в которую входят только простые импликанты.
Импликанта сокращенной ДНФ функции f называется ядровой,
если ее удаление из ДНФ изменяет значения функции.
Сокращенная ДНФ называется тупиковой, если удаление из нее
любой импликанты изменяет значения функции.
Сложностью ДНФ (КНФ) называется число символов переменных в ее записи. ДНФ (КНФ) булевой функции, имеющая наименьшую сложность, называется минимальной нормальной формой данной функции.
Каждая булева функция f = f(x1, x2, …, xn), отличная от константы
0, записывается формулой, называемой совершенной дизъюнктивной нормальной формой (СДНФ):
Например, если f = x ⊕ y, то по значениям функции, приведенным
в табл. 1.1.3, получаем:
Кроме того, каждая булева функция f = f(x1, x2, …, xn), отличная
от константы 1, записывается формулой, называемой совершенной
конъюнктивной нормальной формой (СКНФ):
Например, если f = x ⊕ y, то:
Для нахождения минимальных нормальных форм булевых функций разработаны специальные методы. Один из них – метод (алгоритм) Квайна, рассматриваемый далее на задачах.
Задача 1.2.1. Найти методом Квайна минимальную ДНФ
функции
Решение. 1. По таблице истинности заданной функции (рис. 1.1.1)
составляется табл. 1.1.5.
Ее первый столбец состоит из тех наборов, на которых f = 1, разбитых на группы по количеству единиц.
Второй столбец содержит результаты склеивания
каждой импликанты одной группы с каждой импликантой следую-
Глава 1. Функции алгебры логики
17
щей (соседней) группы, если это возможно, отсутствующие сомножители отмечаются прочерком. Например, наборам 000 и 001 соответствуют импликанты x0 · y0 · z0 и x0 · y0 · z1, их склеивание дает x0 · y0 · z0 ∨
∨ x0 · y0 · z1 = x0 · y0, что записывается во втором столбце в виде 00–.
Склеенные наборы отмечаются символом +.
Таблица 1.1.5
000 +
001 +
100 +
00–
–00
1–0
110 +
Третьего столбца не будет, так как в данном случае дальнейшее
склеивание невозможно.
Простые импликанты соответствуют тем наборам, которые не отмечены символом +, то есть ими будут
По ним выписывается представление f сокращенной ДНФ:
2. Составляется табл. 1.1.6, содержащая значения полученных импликант на тех наборах, на которых f = 1.
Таблица 1.1.6
x
y
z
0
0
1
1
0
0
0
1
0
1
0
0
1
1
0
0
1
0
1
0
0
0
1
1
Как видно из табл. 1.1.6, в каждой строке среди последних трех
значений есть хотя бы одна единица. Если единица только одна, то
импликанта, значением которой она является, будет ядровой, так
как ее удаление из сокращенной ДНФ изменяет значения функции.
В данном случае имеются две ядровые импликанты
и
, причем их единичные значения имеются в каждой строке табл. 1.1.6, то
есть тупиковая ДНФ записывается в виде:
Она же, поскольку она одна, является минимальной (сложность
равна 4).
18
Часть I. Дискретная математика с применением VBA Excel
Ответ:
Задача 1.2.2. Функция f(x, y, z, w) задана своими значениями
f = (1110 1110 1010 1101). Найти методом Квайна ее минимальную
ДНФ.
Решение. По таблице истинности заданной функции составляется табл. 1.1.7. В ее первый столбец выписываются наборы, на которых
f = 1, второй и третий столбцы содержат результаты последовательных склеиваний.
Таблица 1.1.7
0000 +
0001 +
0010 +
0100 +
1000 +
0101 +
0110 +
1010 +
1100 +
1101 +
1111 +
000– +
00–0 +
0–00 +
–000 +
0–0–
0––0
––00
–0–0
0–01 +
0–10 +
–010 +
010– +
01–0 +
–100 +
1–00 +
–101 +
110– +
11–1
–10–
Как следует из табл. 1.1.7, сокращенная ДНФ имеет вид:
Составляется табл. 1.1.8.
Таблица 1.1.8
x
y
z
w
x·y·w
0
0
0
0
1
0
0
0
0
0
1
0
1
1
0
0
1
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
1
0
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
0
0
0
0
1
0
1
0
Глава 1. Функции алгебры логики
x
y
z
w
x·y·w
1
1
1
1
0
1
1
1
1
0
0
1
0
0
1
1
0
0
1
1
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
19
0
1
1
0
Из табл. 1.1.8 следует, что импликанты
являются
ядровыми, исключить из сокращенной ДНФ обе импликанты
,
нельзя, так как тогда в девятой строке не останется единиц, а одну –
можно. Поэтому f имеет две тупиковые ДНФ:
и
Последние имеют одинаковую сложность,
то есть каждая из них является минимальной.
Ответ:
,
Макрос Quine возвращает обе таблицы метода Квайна, после чего
минимизация ДНФ выполняется элементарно.
Ввод данных и запуск макроса на исполнение:
1. Наборы значений переменных, на которых f = 1, вводятся посимвольно, один набор под другим, начиная с ячейки А1, разбивать на группы не надо;
2. Диапазон данных выделяется, и макрос запускается на исполнение (Сервис/Макрос /Макросы/Quine/Выполнить).
Считывание результатов:
1. Левее таблицы «истина–ложь» – первая таблица метода Квайна, простые импликанты соответствуют тем ее наборам, которые не выделены желтым цветом;
2. Таблица «истина–ложь» – основная часть второй таблицы
метода Квайна, столбцы ее содержат значения простых импликант по порядку их следования в первой таблице на заданных наборах.
Применение макроса Quine к задаче 1.2.1. Вводятся и выделяются
наборы, на которых f = 1 (рис. 1.1.7).
Рис. 1.1.7
20
Часть I. Дискретная математика с применением VBA Excel
Запуск макроса на исполнение возвращает (рис. 1.1.8) в составном
диапазоне A1:C4, D1:F3 первую таблицу метода Квайна, в составном
диапазоне A1:C4, G1:I4 – вторую таблицу метода Квайна, совпадающие с полученными ранее табл. 1.1.14, 1.1.15. Вместо знака «+» наборы выделяются желтым цветом.
Рис. 1.1.8
Применение макроса Quine к задаче 1.2.2. Входные данные показаны на рис. 1.1.9.
Рис. 1.1.9
Запуск макроса на исполнение возвращает (рис. 1.1.10) в диапазонах A1:D11, E1:H15, I1:L5 первую таблицу метода Квайна.
Рис. 1.1.10
Глава 1. Функции алгебры логики
21
Она отличается от табл. 1.1.7 только перестановкой наборов –0–0
и ––0 0. Вторую таблицу метода Квайна, отличающуюся от табл. 1.1.8
только перестановкой четвертого и пятого столбцов, макрос возвращает в диапазонах A1:D11 и M1:R11 (рис. 1.1.11).
Рис. 1.1.11
Применение метода Квайна к функции и взятие отрицания приводят к минимальной КНФ функции f.
Применим такой подход для нахождения минимальной КНФ
функции f задачи 1.2.1, таблица истинности которой показана на
рис. 1.1.1. Вызываем макрос Quine, вводим наборы, на которых f = 0,
и выделяем диапазон с данными (рис. 1.1.12).
Рис. 1.1.12
Запуск макроса на исполнение возвращает:
Рис. 1.1.13
Из данных диапазона D1:F3 следует, что представление
щенной ДНФ имеет вид:
сокра-
22
Часть I. Дискретная математика с применением VBA Excel
Из данных диапазона G1:I4 следует, что импликанты
ются ядровыми, представление минимальной ДНФ:
явля-
Взятие отрицания приводит к минимальной КНФ функции f:
Найдем минимальную КНФ функции f задачи 1.2.2. Вызываем
макрос Quine, вводим наборы, на которых f = 0, диапазон с данными
выделяем:
Рис. 1.1.14
Запуская макрос на исполнение, получаем:
Рис. 1.1.15
Откуда находим
– представление
сокращенной ДНФ,
– представление минимальной ДНФ. Следовательно, представление f минимальной КНФ
имеет вид:
Глава 1. Функции алгебры логики
23
Проверка:
Рис. 1.1.16
Формула ячейки E1:
=И(ИЛИ(НЕ(A1);НЕ(B1);НЕ(C1);D1);ИЛИ(A1;НЕ(C1);
НЕ(D1));ИЛИ(НЕ(A1);B1;НЕ(D1)))
Формулы ячеек E2:E16 получены копированием.
§3. Классы Поста
Замыканием [U] некоторого множества (класса) булевых функций
U называется множество всех суперпозиций функций множества U.
Класс U называется функционально замкнутым, если [U] = U.
Класс U называется функционально полным, если [U] совпадает
со множеством всех булевых функций.
Функция f называется сохраняющей константу 0, если f(0, …, 0) =
= 0. Например, функция f = (01000111) сохраняет константу 0,
а функция f = (11000111) ее не сохраняет. Множество функций, сохраняющих константу 0, так как для них выполняется
f(f1(0, …, 0), …, fn(0, …, 0)) = 0,
образуют замкнутый класс T0.
Функция f называется сохраняющей константу 1, если f(1, …, 1) =
= 1. Например, функция f = (01000111) сохраняет константу 1,
а функция f = (01000110) ее не сохраняет. Множество функций, сохраняющих константу 1, так как для них выполняется
24
Часть I. Дискретная математика с применением VBA Excel
f(f1(1, …, 1), …, fn(1, …, 1)) = 1,
образуют замкнутый класс T1.
Функция f называется монотонной, если для любых наборов (a1,
a2, …, an) и (b1, b2, …, bn), таких, что ai ≤ bi, i = 1, 2, …, n, выполняется
f(a1, a2, …, an) ≤ f(b1, b2, …, bn).
Например, функция f = (00000111) является монотонной, а функция f = (10101100) таковой не является. Множество монотонных
функций образуют замкнутый класс, обозначаемый M, так как для
них, если выполнены условия ai ≤ bi, выполняется:
f(f1(a1, a2, …, an), …, fn(a1, a2, …, an)) ≤ f(f1(b1, b2, …, bn), …,
fn(b1, b2, …, bn)).
Макрос Monotone, применяемый стандартно, проверяет заданную таблицей истинности булеву функцию на монотонность. После
запуска макроса на исполнение появляется сообщение о том, монотонна функция или нет. Кроме того, если она не монотонна, то желтым цветом выделяются две строки, в которых нарушается условие
монотонности.
Задача 1.3.1. Проверить функцию f = (00110111) на монотонность.
Технология решения. Вызываем макрос Monotone, вводим и выделяем таблицу истинности (рис. 1.1.17).
Рис. 1.1.17
Запуская макрос на исполнение, получаем сообщение (рис. 1.1.8).
Ответ: f ∈ M.
Рис. 1.1.18
Глава 1. Функции алгебры логики
25
Задача 1.3.2. Проверить функцию f = (10101100) на монотонность.
Технология решения. Входные данные:
Рис. 1.1.19
Запуск макроса Monotone на исполнение возвращает:
Рис. 1.1.20
Ответ: f ∉ M.
Задача 1.3.3. Проверить функцию f = (0001 0101 0111 0111)
на монотонность.
Технология решения. Применяя макрос Monotone, получаем:
Рис. 1.1.21
26
Часть I. Дискретная математика с применением VBA Excel
Ответ: f ∈ M.
Функция
называется двойственной
функцией для функции f(x1, x2, …, xn). Если f * = f, то функция f называется самодвойственной функцией, для нее выполняется
то есть она полностью определяется своими значениями на первой половине строк. Самодвойственные функции, так как для них выполняется
f *(f1*, f2*, …, fn*) = f(f1, f2, …, fn),
образуют замкнутый класс S.
Макрос Duality, применяемый стандартно, по заданной таблице
истинности булевой функции возвращает таблицу истинности двойственной функции и сообщение о построении. Если заданная функция является самодвойственной, то появляется сообщение об этом и
таблица истинности выделяется желтым цветом.
Задача 1.3.4. Найти двойственную функцию для функции f =
= (10101100).
Технология решения. Вызывается макрос Duality, стандартно вводится и выделяется таблица истинности заданной функции (рис. 1.1.22).
Рис. 1.1.22
Запуск макроса на исполнение возвращает результаты, показанные на рис. 1.1.23.
Рис. 1.1.23
Глава 1. Функции алгебры логики
27
Ответ: f * = (11001010).
Задача 1.3.5. Проверить самодвойственность функции f =
= (11001100).
Технология решения. Ввод данных и запуск макроса Duality на
исполнение дают:
Рис. 1.1.24
Задача 1.3.6. Найти двойственную функцию для функции f =
= (0001 0010 0110 0111).
Технология решения. Применяя макрос Duality, получаем:
Рис. 1.1.25
Ответ: f * = (0001 1001 1011 0111).
Полиномом Жегалкина (полиномом по модулю 2) называется
сумма по модулю 2 элементарных конъюнкций и константы 0 или 1.
Теорема Жегалкина И. И. Каждая булева функция единственным
образом представима в виде полинома Жегалкина.
Задача 1.3.7. Найти полином Жегалкина функции f = (10101100)
(рис. 1.1.22).
28
Часть I. Дискретная математика с применением VBA Excel
Решение. Должно выполняться:
Учитывая значения функции, получаем:
Ответ:
Макрос Jegalkin проводит проведенные вычисления автоматически, достаточно вызвать макрос, ввести в диапазон A1:D8 таблицу
истинности (выделять не обязательно) и запустить макрос на исполнение (Сервис/ Макрос/Макросы/Jegalkin/Выполнить). Например, для задачи 1.3.7, когда входные данные как на рис. 1.1.22, макрос
Jegalkin возвращает результаты, совпадающие с полученными непосредственными вычислениями:
Рис. 1.1.26
Функция f(x1, x2, …, xn) называется линейной, если
Линейные функции образуют замкнутый класс, обозначаемый L.
Макрос Linearity, применяемый стандартно, проверяет заданную
таблицу истинности булеву функцию на линейность и возвращает соответствующее сообщение.
Глава 1. Функции алгебры логики
29
Задача 1.3.8. Проверить на линейность функцию f = (10110110).
Технология решения. Вызываем макрос Linearity, стандартно вводим и выделяем таблицу истинности заданной функции (рис. 1.1.27).
Рис. 1.1.27
Запуская макрос Linearity на исполнение, получаем сообщение
(рис. 1.1.28).
Рис. 1.1.28
Ответ: f ∉ L.
Задача 1.3.9. Проверить на линейность функцию f = (1001 0110
0110 1001).
Технология решения. Входные данные:
Рис. 1.1.29
30
Часть I. Дискретная математика с применением VBA Excel
Запуск макроса Linearity на исполнение возвращает сообщение:
Рис. 1.1.30
Ответ: f ∈ L.
Классы T0, T1, L, S, M называются классами Поста.
Теорема Поста. Множество булевых функций U является функционально полным тогда и только тогда, когда для каждого из классов Поста в U найдется функция, не принадлежащая этому классу.
В частности, функция f = (10101100), как показывают задачи 1.3.2,
4, 7, условия f ∉ T0, f ∉ T1 очевидны, не принадлежит ни одному из
классов Поста. Следовательно, по теореме Поста функция f образует
функционально полный класс {f}, из которого суперпозициями можно получить любую булеву функцию.
§4. Частично определенные булевы
функции
Булева функция f, в векторе значений которой есть неопределенные
значения, называется частично определенной. Доопределением частично определенной функции f называют такую всюду определенную
функцию , значения которой совпадают со значениями функции f на
тех наборах, на которых функция f определена. Если в векторе значений функции f не определены k значений, то существуют 2k функций,
доопределяющих ее. Минимальной ДНФ (КНФ) частично определенной функции f называется минимальная среди всех минимальных
ДНФ (КНФ), доопределяющих ее функций. Для ее нахождения разработаны специальные методы, один из них – метод Квайна.
Макрос Part возвращает обе таблицы, необходимые для минимизации ДНФ частично определенной булевой функции методом
Квайна.
Ввод данных и запуск макроса на исполнение:
1) наборы значений переменных, на которых f = 1, вводятся посимвольно, один набор под другим, начиная с ячейки А1;
Глава 1. Функции алгебры логики
31
2) отступив одну строку, таким же образом вводятся наборы, на
которых f = 0;
3) диапазон f = 1 выделяется, и макрос запускается на исполнение
(Сервис/Макросы / Part /Выполнить).
Считывание результатов:
1) левее таблицы «истина–ложь», за исключением диапазона
f = 0, – первая таблица, простые импликанты соответствуют
тем ее наборам, которые не выделены желтым цветом;
2) таблица «истина–ложь» – основная часть второй таблицы
Квайна, столбцы ее содержат значения простых импликант по
порядку их следования в первой таблице на заданных наборах,
на которых f = 1.
Будем считать, что частично определенные функции трех переменных имеют аргументами x, y, z, а в случае четырех переменных –
аргументы x, y, z, w.
Задача 1.4.1. Минимизировать ДНФ функции f = (10–– 01–1).
Технология решения. Таблица истинности заданной функции показана на рис. 1.1.31.
Рис. 1.1.31
Вызываем макрос Part и по таблице истинности вводим наборы,
на которых f = 1 и, через строку ниже, f = 0, диапазон наборов f = 1
выделяем (рис. 1.1.32).
Рис. 1.1.32
32
Часть I. Дискретная математика с применением VBA Excel
Запуская макрос Part на исполнение, получаем данные, представленные на рис. 1.1.33 и 1.1.34.
Рис. 1.1.33
Рис. 1.1.34
Данные рис. 1.1.33 показывают, что простые импликанты
В таблице рис. 1.1.34 их значения на наборах f = 1. Откуда следует, что
импликанты
являются ядровыми,
– минимальная ДНФ.
Проверка:
Рис. 1.1.35
Ответ:
Задача 1.4.2. Минимизировать
КНФ функции f = (10–– 01–1).
Технология решения. Теперь наоборот, сначала вводим наборы, на которых
f = 0, а затем, через строку ниже, наборы
f = 1, наборы f = 0 выделяем (рис. 1.1.36).
Рис. 1.1.36
Глава 1. Функции алгебры логики
33
Запуская макрос Part на исполнение, получаем:
Рис. 1.1.37
Откуда следует, что
– минимальная ДНФ функции . Навешивание отрицания приводит к минимальной КНФ:
Проверка:
Рис. 1.1.38
Ответ:
Задача 1.4.3. Минимизировать ДНФ функции f = (1––0 –100
10–0 1––1).
Технология решения. Выписываем таблицу истинности:
Рис. 1.1.39
34
Часть I. Дискретная математика с применением VBA Excel
Вызываем макрос Part и вводим данные (рис. 1.1.40).
Рис. 1.1.40
Запуская макрос Part на исполнение, получаем данные, представленные на рис. 1.1.41 и 1.1.42.
Рис. 1.1.41
Рис. 1.1.42
Из данных, показанных на рис. 1.1.41, следует, что простые импликанты:
Из данных, показанных на рис. 1.1.42,
следует, что импликанта xy является ядровой, имеются несколько
Глава 1. Функции алгебры логики
35
минимальных ДНФ (сложности 6), ограничимся указанием одной из
них:
Проверка:
Рис. 1.1.43
Ответ:
Задача 1.4.4. Минимизировать КНФ функции f = (1––0 –100
10–0 1––1).
Технология решения. Ввод данных:
Рис. 1.1.44
Запуск макроса Part на исполнение возвращает данные, показанные на рис. 1.1.45, 1.1.46.
36
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.1.45
Рис. 1.1.46
Из данных рис. 1.1.45 следует, что простые импликанты:
Из данных рис. 1.1.46 следует, что импликанта
является ядровой, минимальная ДНФ:
Навешивание отрицания приводит к минимальной КНФ:
Проверка:
Рис. 1.1.47
Ответ:
Машины Тьюринга,
Поста и нормальные
алгоритмы
2
§1. Понятие машины Тьюринга
Машина Тьюринга – абстрактная вычислительная машина, состоящая [7] из элементов:
• бесконечная в обе стороны лента, разбитая на ячейки, в каждой
из которых может находиться один из символов алфавита A =
= {a0, a1, …, am}, имеющего «пустой» символ a0 (пробел);
• считывающе-записывающее устройство (СЗУ) символа текущей ячейки, имеющее алфавит состояний Q = {q0, q1, …, qm}, q1 –
начальное состояние, q0 – заключительное состояние;
• устройство управления (УУ) с алфавитом сдвигов
S = {L (влево), R (вправо), E (на месте)} = {d1, d2, d3};
• программа работы, состоящая из команд вида:
(qi, aj) → (qr, ap, dk),
(2.1)
где i ∈ {1, 2, …, n}, j ∈ {0, 1, 2, …, m}, r ∈ {0, 1, …, n), k ∈ {1, 2, 3}.
По команде (2.1), если СЗУ находится в состоянии qi и считывает
символ aj, СЗУ переходит в состояние qr, записывает в обозреваемой
ячейке символ ap и смещается на одну ячейку влево, если k = 1, вправо – если k = 2, и остается на месте, если k = 3.
Программа работы машины Тьюринга может быть задана
табл. 1.2.1, в которой ξij = (qr, ap, dk), если в программе есть команда
(2.1) с данными значениями i, j, в противном случае ξij ∈ ∅, то есть
некоторые клетки таблицы могут быть пустыми.
38
Часть I. Дискретная математика с применением VBA Excel
Таблица 1.2.1
a0
a1
…
am
q1
ξ10
ξ11
…
ξ1m
q2
ξ20
ξ21
…
ξ2m
qn
ξn0
ξn1
…
ξnm
Замечание. Команды можно записывать в виде:
(aj, qi) → (ap, qr, dk).
(2.2)
Для краткости обозначений скобки и запятые в 2.1 и 2.2 часто
опускают.
Машина Тьюринга работает в пошаговом режиме и переводит начальное слово α, вообще говоря, в некоторое заключительное слово
β = T(α).
Конфигурация машины – слово на ленте, обозреваемый символ и
состояние СЗУ, она обозначается α1qiα2, где α1 – часть слова до символа, обозреваемого СЗУ, α2 – оставшаяся часть слова, или записью
в слове под символом, обозреваемым СЗУ, текущего состояния qi.
Стандартной начальной конфигурацией называют конфигурацию
q1α – в ней СЗУ обозревает крайний левый символ начального слова
α и находится в состоянии q1. Соответственно, стандартная заключительная конфигурация q0β.
Графическое представление команды (2.1) в случае i ≠ r показано
на рис. 1.2.1.
Рис. 1.2.1
В случае i = r оно будет иметь вид:
Рис. 1.2.2
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
39
Графическое представление программы называется диаграммой
переходов, причем если из вершины qi в вершину qj ведут несколько
дуг, то их можно заменить одной дугой.
Тезис Тьюринга. Каждый вычислительный алгоритм можно
реализовать на машине Тьюринга.
§2. Программирование по Тьюрингу
Будем записывать команды в виде (2.2).
Задача 2.2.1. Входной алфавит A = {0, 1, λ}, λ – «пустой» символ. Построить машину Тьюринга, переводящую слово xy, где x ≠ y,
в слово yx.
Решение. Задача состоит в построении таблицы работы машины
Тьюринга, которая:
• «запоминает» символ х (0 или 1);
• удаляет х с ленты;
• вставляет после символа у символ х.
С учетом, что в машине Тьюринга «запоминание» сводится к переходу в новое состояние, сказанное реализует программа, записанная
в табл. 1.2.2.
Таблица 1.2.2
0
1
λ
q1
λq2R
λq3R
q2
1q2R
0q0L
Тестирование на слове 10:
q3
0q3R
1q0L
Часть I. Дискретная математика с применением VBA Excel
40
Диаграмма переходов:
Рис. 1.2.3
В случае, когда в условии задачи 2.2.1 нет требования x ≠ y, то есть
слово может иметь вид 00 или 11 и изменять его не надо, программа
записывается в виде:
Таблица 1.2.3
0
1
q1
0q2R
1q3R
Тестирование:
а)
б)
q2
0q0L
0q4L
q3
1q5L
1q0L
q4
1q0E
q5
0q0E
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
41
Диаграмма переходов:
Рис. 1.2. 4
Задача 2.2.2. В алфавите A = {0, 1, *, λ}, λ – «пустой» символ, на
ленте записано слово x * y, где x, y ∈ {0, 1}. Построить машину Тьюринга, переводящую это слово в символ, равный значению min{x, y}.
Решение. Так как
то работа машины Тьюринга сводится к:
• «запоминанию» символа x;
• удалению первых двух символов (слева);
• замене символа y искомым значением.
Следовательно, искомая машина Тьюринга задается табл. 1.2.4.
Таблица 1.2.4
0
1
*
q1
λq2R
λq3R
Проверка:
q2
0q0E
0q0E
λq2R
q3
0q0E
1q0E
λq3R
Часть I. Дискретная математика с применением VBA Excel
42
Диаграмма переходов:
Рис. 1.2.5
Задача 2.2.3. В алфавите A = {0, 1, =, λ}, λ – «пустой» символ,
на ленте записано слово xy =, где x, y ∈ {0, 1}. Построить машину
Тьюринга, возвращающую слово xy = xy (копирующую первые два
символа).
Решение. От начального состояния q1 переходим в состояние q2,
если считываемый символ равен 0, и в состояние q3, если он равен
1. Движемся направо, сохраняя состояние и все символы. Вставляем
символ 0 на место символа λ, если состояние q2, и вставляем символ
1, если состояние q3, что приводит к слову xy = x, и начинаем движение влево за вторым символом, с переходом в состояние q4, после
чего процедура повторяется. Следовательно, программа записывается табл. 1.2.5.
Таблица 1.2.5
0
1
=
λ
q1
0q2R
1q3R
q2
0q2R
1q2R
= q2R
0q4L
q3
0q3R
1q3R
= q3R
1q4L
q4
0q5L
1q5L
= q1L
q5
0q5L
1q5L
= q5L
λq0R
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
43
Тестирование:
.
Построение диаграммы переходов:
Рис. 1.2.6
§3. Макрос нахождения выходного
слова
Макрос Turing по введенной на лист Excel таблице работы машины
Тьюринга (МТ) возвращает пошаговые результаты работы МТ над
входным словом, указывая после каждого шага под текущей ячейкой
состояние СЗУ, пока не будет получено выходное слово.
Ввод таблицы работы МТ:
1) в первом столбце листа, начиная с ячейки А2, – номера состояний, в первой строке, начиная с ячейки В1, – символы алфавита, пустому символу соответствует пустая ячейка, которая
должна быть последней;
2) тройки (qr, ap, dk) вводятся в соответствующие ячейки в виде:
номер состояния, за ним символ алфавита (пустой символ –
44
Часть I. Дискретная математика с применением VBA Excel
пробел), последним указывается смещение (R – вправо, L –
влево, E – на месте), скобки и запятые не ставятся.
Ниже диапазона с табличными данными, отступив, по крайней
мере, одну строку, посимвольно вводится входное слово и выделяется. Запуск макроса на исполнение (Сервис/Макрос/Макросы/
Turing/Выполнить) возвращает всю цепочку слов и состояний, каждое следующее слово возвращается через строку под предыдущим.
Строка с выходным словом будет выделена.
Пусть машина Тьюринга задана программой, полученной в задаче 2.2.1. Посмотрим, как она работает над словом «10». Вводим программу и входное слово, выделяя его, на лист Excel (рис. 1.2.7).
Рис. 1.2.7
Запуская макрос на исполнение, получаем последовательность состояний ленты и СЗУ (рис. 1.2.8). Заключительное состояние ленты
выделено.
Рис. 1.2.8
Применение макроса Turing к программе ([4], стр. 157) сложения
унарных чисел. Ввод программы:
Рис. 1.2.9
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
45
Ввод входного слова:
Рис. 1.2.10
Запуск макроса на исполнение возвращает:
Рис. 1.2.11
§4. Нормальные алгоритмы
Нормальной схемой подстановок (схемой алгоритма) над алфавитом
A называется [9] последовательность формул подстановок, записываемых в виде Ri → Li или Ri → ·Li, i = 1, 2, …, k, где Ri, Li – слова в некотором алфавите B ⊇ A, не содержащем символов «.», «→». Подстановки первого вида называют простыми, второго – заключительными.
Символы множества B\A – дополнительные (вспомогательные),
позволяющие получить нужный результат. Пустой символ (пустое
слово) алфавита A часто обозначают специальным символом, например Λ, и считают, что с него начинается каждое заданное (входное)
слово алфавита A. В некоторых схемах предполагается, что им оно
46
Часть I. Дискретная математика с применением VBA Excel
и заканчивается. Ряд авторов обозначают пустой символ непосредственно в схеме, подстановкой → Λ, что не принципиально. Как правило, назначения дополнительных символов понятны из схемы алгоритма.
Нормальным алгоритмом обработки заданного (входного) слова
алфавита A называется алгоритм, работающий по нормальной схеме
следующим образом.
Шаг 1. В текущем слове ищется крайнее левое слово Ri, имеющее
наименьший индекс. Если такое имеется, то оно заменяется словом Li
и выполняется переход на шаг 2, в противном случае работа алгоритма заканчивается.
Шаг 2. Определяется тип подстановки, если она заключительная,
то работа алгоритма заканчивается, в противном случае переход на
шаг 1.
Результатом работы нормального алгоритма, вообще говоря, является выходное слово. Если алгоритм не останавливается, то он к заданному слову не применим. Понятие нормального алгоритма введено А. А. Марковым в 1947 году.
Макрос MarkovAlg имитирует на листе Excel работу нормального алгоритма, возвращая всю последовательность получаемых слов и
номера применяемых подстановок. Если последовательность получаемых слов зацикливается, то макрос возвращает первое слово, совпадающее с одним из полученных ранее, и выдает сообщение «К заданному слову алгоритм не применим». Для избежания неограниченного
увеличения длины слова макрос выполняет не более k · s подстановок,
где s – длина входного слова. Процесс подстановок можно продолжить, повторно запуская макрос на исполнение.
Ввод данных и считывание результатов. Нормальная схема алгоритма вводится в диапазон kґ3, левой верхней ячейкой которого является ячейка А1. Символ → вводится как «'->» (одиночная кавычка,
минус, больше), в случае заключительной подстановки добавляется
точка. Левая часть подстановки → Λ вводится как одиночная кавычка, пробел. В ячейку ниже диапазона, содержащего схему подстановок, или правее вводится входное слово, в соответствии с применяемой схемой, и выделяется. Запуск макроса на исполнение возвращает
ниже всю цепочку получаемых слов, справа от них – номера применяемых подстановок. Выходное слово будет выделено.
Задача 2.4.1. Нормальный алгоритм над алфавитом A = {a, b, c, d}
задан схемой:
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
47
Найти выходные слова для слов: 1. cdbacab; 2. abbc.
Технология решения. 1. Вызывается макрос MarkovAlg. Так как
схема не содержит дополнительных символов, то она вводится в диапазон А1:С4 так, как задана. В ячейку Е1 вводится входное слово
cdbacab и выделяется. Запуск макроса на исполнение возвращает
результаты работы алгоритма (рис. 1.2.12) и сообщение (рис. 1.2.13).
Рис. 1.2.12
Рис. 1.2.13
2. Непосредственные преобразования показывают, что алгоритм
работает над словом abbc циклически:
Применяя макрос MarkovAlg, получаем результаты трех подстановок (рис. 1.2.14) и сообщение (рис. 1.2.15).
Рис. 1.2.14
48
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.2.15
Ответ: 1) bbddd; 2) не применим.
Задача 2.4.2. Нормальный алгоритм увеличения натурального
числа на 1 задан схемой:
Проверить работу алгоритма над словом 789.
Технология решения. Вызываем макрос MarkovAlg и вводим заданную схему в диапазон A1:C12, заменяя символ «α», например,
символом «~», ячейку С12 оставляем пустой. Из схемы видно, что
символ «α» обозначает пустой символ (пробел), с которого должно
начинаться и которым должно заканчиваться входное слово. Поэтому входное слово вводим в ячейку Е1 в виде ~789~ и выделяем
ее. Запуская макрос на исполнение, получаем требуемый результат
(рис. 1.2.16).
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
49
Рис. 1.2.16
Задача 2.4.3. Нормальный алгоритм над алфавитом A = {1, *}
задан схемой:
Проверить, что он переводит слово 1*11 в слово 111.
Технология решения. Вызываем макрос MarkovAlg. Вводим заданную схему (в ячейке А5 символ одиночной кавычки и пробел):
Рис. 1.2.17
В ячейку Е1 вводим входное слово, как ~1*11, и выделяем ее. Запуск макроса на исполнение дает результаты подстановок (рис. 1.2.18)
и сообщение (рис. 1.2.13).
50
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.2.18
Ответ: верно.
§5. Машина Поста
Машина Поста – абстрактная вычислительная машина [15], состоящая из тех же элементов, из которых состоит машина Тьюринга, только в ней алфавит A имеет всего два символа, пустой (пробел) и непустой, называемый меткой, и нет других команд, кроме (i – номер
текущей команды):
1) i. ⇒ j – перемещение СЗУ на одну ячейку вправо и переход
к команде j;
2) i. ⇐ j – перемещение СЗУ на одну ячейку влево и переход
к команде j;
3) i. V j – вставка метки «V» и переход к команде j;
4) i. delete j – удаление метки и переход к команде j;
5) i. ? (j, k) – переход к команде j, если считанный символ является
пустым, и к команде k, если меткой;
6) i. Stop – стоп.
Работа машины, состоящая в переработке заданного на ленте
входного слова W, вообще говоря, в слово W* (выходное) всегда начинается с выполнения команды 1. Для определенности будем предполагать, что в начальном состоянии СЗУ обозревает крайнюю левую метку.
Команда i. V j считается невыполнимой, и работа машины останавливается, если в текущей ячейке уже есть метка. Аналогично команда
i. delete j считается невыполнимой и работа машины останавливается,
если в текущей ячейке нет метки. Все остановки, кроме остановок по
команде i. Stop, в том числе перечисленные, считаются безрезультатными.
Макрос Post имитирует работу машины Поста на листе Excel,
показывая состояние ленты после каждого шага через строку ниже,
текущая ячейка выделяется желтым цветом. После вызова макроса
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
51
программа работы машины Поста, без первого столбца, роль которого
выполняет столбец заголовков строк, записывается в столбцы А, В,
начиная с ячейки А1, в соответствии с обозначениями:
–1 – Left, 0 – ?, 1 – Right, 2 – Paste, 3 – Delete, 4 – Stop, v – marker.
Начальное состояние ленты задается в любой строке ниже, ячейка с крайней левой меткой выделяется, и макрос запускается на исполнение. После остановки появляется соответствующее сообщение
«Результат в последней строке», «Безрезультатная остановка» или
«Выполнено 100 шагов». Последнее – на случай, если программа такая, что работа машины не останавливается, в противном случае работу машины можно продолжить, запуская макрос на исполнение.
Натуральные числа записываются на ленте в унарной системе исчисления.
Задача 2.5.1. Проверить при n = 3, m = 2, что машина Поста, заданная приведенной ниже программой, находит сумму натуральных
чисел n + m, когда они разделены на ленте пробелом:
1) delete 2;
2) => 3;
3) ? (4,2);
4) V 5;
5) Stop.
Технология решения. Вызывается макрос Post, и водится заданная
программа (в ячейке В3 символы: одиночная кавычка, 4, пробел, 2):
Рис. 1.2.19
Через строку ниже показывается начальное состояние ленты,
крайняя левая метка выделяется:
Рис. 1.2.20
Запуск макроса на исполнение возвращает всю последовательность состояний ленты (рис. 1.2.21) и сообщение (рис. 1.2.22).
52
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.2.21
Рис. 1.2.22
Задача 2.5.2. Проверить при n = 3, m = 2, что машина Поста,
заданная приведенной ниже программой, находит
разность натуральных чисел n – m, n > m, когда
они разделены на ленте пробелом, и большее число слева:
1) delete 2
8) ? (9, 10)
2) => 3
9) Stop?
3) ? (4, 2)
10) <= 11
4) => 5
11) ? (10, 12)
5) ? (4, 6)
12) <= 13
6) delete 7
13) ? (14, 12)
7) => 8
14) => 1
Технология решения. Вызывается макрос
Рис. 1.2.23
Post, и вводится заданная программа (рис. 1.2.23).
Заполняется лента (строка 16), крайний левый символ выделяется. Запуск макроса на исполнение приводит к требуемому результату
(рис. 1.2.24, 1.2.25, 1.2.26).
Глава 2. Машины Тьюринга, Поста и нормальные алгоритмы
Рис. 1.2.24
Рис. 1.2.25
53
54
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.2.26
Конечные автоматы
3
§1. Автоматы Мили
Конечным полностью определенным автоматом с одним входом и одним выходом (автоматом Мили, абстрактным автоматом) называют
[7] совокупность объектов:
• A = {a1, a2, …, an} – входной алфавит;
• Q = {q1, q2, …, qm} – алфавит состояний;
• V = {v1, v2, …, vk} – выходной алфавит;
• δ: QґA → Q – функция переходов;
• λ: QґA → V – функция выходов.
Если в автомате выделено начальное состояние (q1), то он называется инициальным, в противном случае он неинициальный.
Функции δ, λ обычно задаются одной таблицей, называемой таблицей переходов автомата, или автоматной таблицей. Пример автоматной таблицы:
Таблица 1.3.1
A\Q
a
b
q1
q2, 0
q3, 1
q2
q3, 0
q2, 1
q3
q1, 1
q2, 0
По автоматной таблице автомат работает следующим образом:
если он находится в состоянии qi и считывает символ aj, то он записывает на его месте символ λ(qi, aj) и переходит в состояние δ(qi, aj),
после чего обрабатывает следующий символ.
Например, автомат, заданный табл. 1.3.1, запущенный из состояния q1, как видно из табл. 1.3.2, переводит слово «abba» в слово
«0110»:
Часть I. Дискретная математика с применением VBA Excel
56
Таблица 1.3.2
a
2
0
b
2
1
b
2
1
a
3
0
Автомат переводит слово ai1ai2…ain в слово vj1vj2…vjn, если обозначить
q(0) = q1, a(t – 1) = ait, v(t – 1) = vjt, t = 1, 2, …, n,
по закону, называемому законом функционирования автомата, или
автоматным отображением:
v(t – 1) = λ(q(t – 1), a(t – 1)), q(t) = δ(q(t – 1), a(t – 1)).
Таким образом, конечный автомат S – устройство, преобразующее
входные сигналы a(t) ∈ A, поступающие в моменты времени t = 0, 1,
2, …, n – 1, в выходные сигналы v(t).
Рис. 1.3.1
Промежуток времени между значениями t называют тактом.
Диаграммой состояний автомата называют ориентированный
граф, вершины qi которого соответствуют состояниям автомата, а из
вершины qi в вершину qj ведет дуга, если найдется ap, p = 1, 2, …, n, что
δ(qi, ap) = qj. В этом случае дугу отмечают символами ap, vr = λ(qi, ap),
r = 1, 2, …, k.
Например, диаграмма состояний автомата, заданного табл. 1.3.1,
имеет вид:
Рис. 1.3.2
Глава 3. Конечные автоматы
57
Состояния qi и qj неинициальных автоматов S1 и S2, соответственно, называются эквивалентными, если для любого входного слова
результаты работы автоматов, запущенных из состояний qi и qj, совпадают. Автоматы S1 и S2 называются эквивалентными, если для любого состояния qi автомата S1 найдется эквивалентное ему состояние
qj автомата S2, и наоборот.
Макрос Mealy по автоматной таблице, начальному состоянию и
входному слову возвращает выходное слово (таблицу работы автомата над входным словом), когда число состояний автомата n < 10.
Ввод автоматной таблицы:
1) в первую строку листа, начиная с ячейки В1, вводятся номера
состояний Q, в первый столбец, начиная с ячейки А2, – символы входного алфавита A;
2) пары QґV вводятся в соответствующие ячейки в виде: номер
состояния и символ алфавита V, без скобок и запятых.
Ниже диапазона с данными автоматной таблицы, отступив, по
крайней мере, одну строку, а также один столбец от левого края листа,
в строку посимвольно вводится входное слово. Начальное состояние
автомата указывается в ячейке ниже и левее первого символа входного слова.
После выделения входного слова макрос запускается на исполнение (Сервис/Макрос/Макросы/Mealy/Выполнить). Выходное слово возвращается через строку под входным словом, между ними – последовательность номеров состояний автомата.
Задача 3.1.1. Автомат задан таблицей:
Таблица 1.3.3
A\Q
a
b
1
5,0
2,1
2
3,1
1,0
3
7,0
4,1
4
5,0
3,1
5
6,1
7,1
6
2,0
5,1
7
6,1
5,0
Найти выходное слово, если входное слово «abba», начальное состояние 1.
Технология решения. Вызываем макрос Mealy, вводим автоматную таблицу, входное слово и номер начального состояния. Входное
слово выделяем (рис. 1.3.3).
Запуск макроса на исполнение возвращает в диапазоне C7:F7 выходное слово (рис. 1.3.4).
Ответ: 0101.
Часть I. Дискретная математика с применением VBA Excel
58
Рис. 1.3.3
Рис. 1.3.4
Задача 3.1.2. Проверить, что автомат, заданный табл. 1.3.4, запущенный из состояния 4, переводит слово «abbac» в слово «xzzzy»:
Таблица 1.3.4
A\Q
a
b
c
1
4,z
3,y
2,z
2
4,x
1,z
2,x
3
2,z
3,x
3,y
4
4,x
2,z
1,y
Технология решения. Вводим данные:
Рис. 1.3.5
Запуская макрос на исполнение, получаем требуемое слово:
Рис. 1.3.6
Глава 3. Конечные автоматы
59
§2. Минимизация автоматов
алгоритмом Мили
Автомат S0 называется минимальным для автомата S, если он эквивалентен S и имеет минимальное число внутренних состояний среди
всех автоматов, эквивалентных S. Для нахождения автомата S0 множество состояний Q автомата S разбивается на классы эквивалентности, и они заменяются их представителями. Существуют несколько
алгоритмов выполнения этого разбиения. Рассмотрим один из них.
Алгоритм Мили:
• Шаг 1. Состояния q и q' относятся в один класс C1j, если λ(q, a) =
= λ(q', a), ∀a.
• Шаг i + 1. Состояния q и q' из класса Cij относятся в один класс,
если классы, в которые попадают состояния δ(q, a) и δ(q', a),
совпадают при каждом значении a ∈ A.
Алгоритм завершает работу, когда очередной шаг не меняет разбиения.
Задача 3.2.1. Конечный автомат S задан табл. 1.3.5.
Таблица 1.3.5
A\Q
a
b
c
1
2,0
4,1
4,1
2
1,1
1,0
5,0
3
1,1
6,0
5,0
4
8,0
1,1
1,1
5
6,1
4,1
3,0
6
8,0
9,1
6,1
7
6,1
1,1
3,0
8
4,1
4,0
7,0
9
7,0
9,1
7,1
Построить эквивалентный минимальный автомат S0 и показать,
что результаты работы автоматов S и S0 над словом «abbaacca» совпадают.
Решение. Первый шаг приводит к трем классам:
1) {1,4,6,9}; 2) {2,3,8}; 3) {5,7}.
Шаг 2. После каждого состояния записываем следующие состояния, согласно заданной таблицей
Заменяем их номерами классов, в которые они попадают:
Часть I. Дискретная математика с применением VBA Excel
60
Отсюда следует, что состояния 1, 4, 6 относятся к одному классу,
то есть приходим к разбиению:
1) {1,4,6}; 2) {2,3,8}; 3) {5,7}; 4) {9}.
Шаг 3. Снова после каждого состояния записываем следующие за
ним состояния:
Заменяем их номерами классов, в которые они попадают:
Приходим к разбиению:
1) {1,4}; 2) {2,3,8}; 3) 5,7}; 4) {9}; 5) {6}.
Шаг 4. По аналогии с предыдущим шагом получаем:
1) {1,4};
2) {2,8};
3) {5,7};
4) {9}; 5) {6};
6) {3}.
Полученное разбиение является окончательным.
Выбираем из этих классов представителей 1, 2, 5, 9, 6, 3 и составляем таблицу работы эквивалентного минимального автомата S0:
Таблица 1.3.6
1
2,0
1,1
1,1
A\Q
a
b
c
2
1,1
1,0
3,0
3
5,1
1,1
6,0
4
3,0
4,1
3,1
5
2,0
4,1
5,1
6
1,1
5,0
3,0
Проверка (из состояния 1).
S:
Таблица 1.3.7
1
a
2
0
b
1
0
b
4
1
a
8
0
a
4
1
c
1
1
c
4
1
a
8
0
Глава 3. Конечные автоматы
61
S0:
Таблица 1.3.8
1
a
2
0
b
1
0
b
1
1
a
2
0
a
1
1
c
1
1
c
1
1
a
2
0
Результаты совпадают.
Макрос AlgMealy, применяемый стандартно, по заданной автоматной таблицей алгоритмом Мили находит таблицу работы минимального автомата, когда число состояний автомата n < 10. Автоматная
таблица вводится так же, как в макросе Mealy (см. предыдущий параграф).
Считывание результатов:
1) число классов разбиения равно числу ненулевых строк возвращаемого ниже диапазона, причем ненулевые элементы этих
строк – номера состояний, входящих в эти классы, соответственно;
2) еще ниже макрос возвращает таблицу работы минимального
автомата.
Найдем с помощью макроса AlgMealy минимальный автомат, эквивалентный автомату, заданному табл. 1.3.5, и сделаем проверку на
слове «abbaacca». Вызываем макрос AlgMealy, вводим и выделяем
данные табл. 1.3.5:
Рис. 1.3.7
Запуск макроса на исполнение в диапазоне A6:I12 возвращает
(рис. 1.3.8) разбиение на классы, в диапазоне B15:G18 – таблицу работы минимального автомата.
Часть I. Дискретная математика с применением VBA Excel
62
Рис. 1.3.8
Применяя макрос Mealy, делаем проверку:
Рис. 1.3.9
Результаты такие же, как в табл. 1.3.7.
Задача 3.2.2. Конечный автомат задан табл. 1.3.9:
Таблица 1.3.9
A\Q
a
b
1
2,x
4,y
2
1,z
3,x
3
3,y
6,z
4
8,x
1,y
5
6,z
4,x
6
8,x
9,y
7
6,z
1,x
8
4,z
3,x
9
7,x
9,y
Построить эквивалентный минимальный автомат и показать, что
результаты работы автоматов над словом «abbaabaa» совпадают.
Технология решения. Вызываем макрос AlgMealy, вводим и выделяем данные табл. 1.3.9 (рис. 1.3.10).
Рис. 1.3.10
Глава 3. Конечные автоматы
63
Запуская макрос на исполнение, получаем (рис. 1.3.11) разбиение на классы (A5:I10) и таблицу работы минимального автомата
(A14:G16).
Рис. 1.3.11
Проверка макросом Mealy из состояния 1 → 1 показывает, что результаты совпадают:
Рис. 1.3.12
Рис. 1.3.13
§3. Автоматы Мура
Конечный автомат Мили называют [7] автоматом Мура, если λ: Q →
V. В автомате Мура функция λ обозначается μ и называется функцией отметок, в диаграмме состояний они ставятся не при ребрах, а при
вершинах.
64
Часть I. Дискретная математика с применением VBA Excel
Табличное задание автомата Мура имеет вид:
Таблица 1.3.10
μ
A\Q
a1
a2
μ(q1)
q1
δ(q1, a1)
δ(q1, a2)
μ(q2)
q2
δ(q2, a1)
δ(q2, a2)
…
…
…
…
…
μ(qm)
qm
δ(qm, a1)
δ(qm, a2)
an
δ(q1, an)
δ(q2, an)
…
δ(qm, an)
v1
q3
q2
q4
v2
q4
q2
q3
Пример таблицы автомата Мура:
Таблица 1.3.11
μ
A\Q
a
b
v2
q1
q2
q3
v3
q2
q3
q1
Действие автомата Мура, заданного табл. 1.3.11 на слове abba:
Таблица 1.3.12
q1
a
q2
v3
b
q1
v2
b
q3
v1
a
q2
v3
Диаграмма переходов автомата Мура, заданного табл. 1.3.11, имеет вид:
Рис. 1.3.14
Глава 3. Конечные автоматы
65
Таблица 1.3.10 автомата Мура легко преобразуется в таблицу работы автомата Мили. В частности, для табл. 1.3.11 последняя будет
иметь вид:
Таблица 1.3.13
A\Q
a
b
q1
q2, v3
q3, v1
q2
q3, v1
q1, v2
q3
q2, v3
q4, v2
q4
q2, v3
q3, v1
Теорема. Для каждого автомата Мили существует эквивалентный ему автомат Мура.
Правило построения по заданному автомату Мили S = {A, Q, V, δ, λ}
эквивалентного автомата Мура SM = {AM, QM, VM, δM, μ}:
1) алфавиты сохраняются: AM = A, VM = V;
2) если алфавиты A = {a1, a2, …, am}, Q = {q1, q2, …, qn}, то QM содержит m·n + n состояний, m·n состояний qij соответствуют парам
(qi, aj) и n состояний qi0 (i = 1, 2, …, n) – самим состояниям;
3) функция переходов: δM(qij, ak) = qlk, если δ(qi, ak) = ql; δM(qi0, ak) =
= qik;
4) функция отметок: μ(qij) = λ(qi, aj), значения μ(qi0) не определены.
Пусть автомат Мили S задан диаграммой состояний (рис. 1.3.15).
Рис. 1.3.15
Тогда таблица работы автомата:
Таблица 1.3.14
a
b
q1
3,0
2,0
q2
3,0
2,1
q3
4,0
1,0
q4
3,1
3,1
Часть I. Дискретная математика с применением VBA Excel
66
Эквивалентный автомат Мура (М) будет содержать 2*4 + 4 = 12
состояний, которые обозначим:
1*, 2*, 3*, 4*, a1, a2, a3, a4, b1, b2, b3, b4.
В принятых обозначениях приведенное правило дает:
μ(ai) = λ(i, a),
δ(ai, a) = aδ(i, a),
δ(ai, b) = bδ(i, a),
μ(bi) = λ(i, b);
δ(bi, a) = aδ(i, b);
δ(bi, b) = bδ(i, b).
Поэтому таблица работы эквивалентного автомата Мура записывается в виде:
Таблица 1.3.15
μ
–
1*
a1
b1
a
b
–
2*
a2
b2
–
3*
a3
b3
–
4*
a4
b4
0
a1
a3
b3
0
a2
a3
b3
0
a3
a4
b4
1
a4
a3
b3
0
b1
a2
b2
1
b2
a2
b2
0
b3
a1
b1
1
b4
a3
b3
3. Проверка на слове «bbaba» из состояний 1 и 1*. Автомат S:
Таблица 1.3.16
1
b
2
0
b
2
1
a
3
0
b
1
0
a
3
0
b
b2
1
a
a2
0
b
b3
0
a
a1
0
Автомат М:
Таблица 1.3.17
1*
b
b1
0
Макрос Moore, применяемый стандартно, по заданной таблице работы автомата Мили возвращает через строку ниже таблицу работы
эквивалентного автомата Мура. Автоматная таблица вводится так же,
как в макросе Mealy (см. §1 этой главы).
Например, пусть вызван макрос Moore, введена и выделена автоматная табл. 1.3.14:
Глава 3. Конечные автоматы
67
Рис. 1.3.16
Тогда запуск макроса на исполнение возвращает таблицу, показанную на рис. 1.3.17, совпадающую с табл. 1.3.15.
Рис. 1.3.17
§4. Частично определенные автоматы
Макрос Anger по заданной таблице работы частично определенного
автомата, в котором число внутренних состояний m < 10, возвращает:
• таблицу Ангера–Полла;
• максимальную группировку состояний;
• таблицу работы покрывающего автомата.
Ввод данных:
1) вызывается макрос Anger;
2) в первую строку, начиная с ячейки В1, вводятся номера состояний Q, в первый столбец, начиная с ячейки А2, – символы входного алфавита A;
3) пары QґV вводятся в соответствующие ячейки в виде: номер
состояния, обратный слеш и выходной символ, неопределенный символ обозначается «е»;
4) входной диапазон (автоматная таблица) выделяется, и макрос
запускается на исполнение (Сервис/Макрос/Макросы/Anger/
Выполнить).
Считывание результатов:
1) ниже автоматной таблицы возвращается таблица Ангера–Полла, каждая ее клетка состоит из nґ2 ячеек, клетки, соответствующие несовместимым состояниям, выделяются желтым цветом;
2) цепочка разбиений, приводящая к максимальной группировке,
начинается через строку ниже таблицы Ангера–Полла и идет
вправо, число классов разбиения равно числу строк последнего
Часть I. Дискретная математика с применением VBA Excel
68
диапазона, причем ненулевые элементы этих строк – номера
состояний, входящих в эти классы, соответственно;
3) таблица работы покрывающего автомата выделена.
Задача 3.4.1. Частично определенный автомат задан таблицей:
Таблица 1.3.18
A\Q
a
b
1
2,–
–,–
2
3,x
–,y
3
–,–
1,y
4
5,x
–,–
5
–,–
6,x
6
–,–
–,x
7
1,–
4,y
8
5,y
–,–
9
–,x
6,–
Найти:
1) пары несовместимых состояний;
2) максимальную группировку состояний;
3) таблицу работы покрывающего автомата;
4) таблицу работы минимального покрывающего автомата;
5) выходные слова для всех автоматов по слову «babb» и начальному состоянию 7 заданного автомата.
Технология решения. Для выполнения первых трех пунктов вызываем макрос Anger. Вводим в диапазон A1:J3 заданную таблицу и
выделяем ее (рис. 1.3.18).
Рис. 1.3.18
Запуск макроса на исполнение возвращает таблицу Ангера–Полла (A5:Q21), показанную на рис. 1.3.19 частично, таблицу работы покрывающего автомата (выделена) и составляющие максимальной
группировки (CC23:CK31, рис. 1.3.20).
Глава 3. Конечные автоматы
69
Рис. 1.3.19
Рис. 1.3.20
Выполнение пункта 4. Вызываем макрос AlgMealy и вводим полученную автоматную таблицу:
Рис. 1.3.21
Запуск на исполнение дает классы эквивалентных состояний
(A5:J10) и таблицу работы минимального покрывающего автомата
(A14:G16):
70
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.3.22
Выполнение пункта 5. Вызываем макрос Mealy. Ввод автоматных
таблиц, входного слова, начальных состояний (7 → 1 → 1) и запуск
на исполнение, соответственно, возвращают результаты, показанные
на рис. 1.3.23–1.3.25.
Рис. 1.3.23
Рис. 1.3.24
Рис. 1.3.25
Ответы:
2. {{7,8}, {5,6,8}, {4,7,9}, {4,5,6,9}, {3,8}, {3,4,9}, {1,5,6,9}, {1,2,7,9},
{1,2,3,9}}.
3.
A\Q
a
b
1
7,y
3,y
2
2,y
2,x
3
7,x
4,y
4
2,x
2,x
5
2,y
7,y
6
2,x
7,y
7
8,x
2,x
8
9,x
4,y
9
9,x
7,y
Глава 3. Конечные автоматы
71
4.
A\Q
a
b
1
5,y
3,y
2
2,y
2,x
3
5,x
2,y
4
2,y
5,x
5
6,x
2,x
6
6,x
5,y
Задача 3.4.2. Частично определенный автомат задан таблицей:
Таблица 1.3.19
A\Q
a
b
c
d
1
2,1
–,0
3,–
2,1
2
3,1
5,0
2,1
–,–
3
3,1
4,0
–,–
5,1
4
–,–
1,0
2,–
–,–
5
–,–
–,–
1,0
–,–
Найти:
1) пары несовместимых состояний;
2) максимальную группировку состояний;
3) таблицу работы покрывающего автомата.
Технология решения. Вызываем макрос Anger и вводим
(рис. 1.3.26) данные табл. 1.3.19.
Рис. 1.3.26
Запуская макрос на исполнение, получаем таблицу Ангера–Полла (A7:I23, рис. 1.3.27), составляющие максимальной группировки
(Y25:AC28, рис. 1.3.28) и таблицу работы покрывающего автомата
(A27:E31, рис. 1.3.29).
72
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.3.27
Рис. 1.3.28
Рис. 1.3.29
Проверка макросом Mealy, с учетом, что состояние 5, как видно по
рис. 1.3.28, попадает в класс 1:
Рис. 1.3.30
Глава 3. Конечные автоматы
Рис. 1.3.31
73
Элементы теории
графов
4
§1. Основные понятия
Теория графов берет начало с задачи Л. Эйлера, опубликованной
в 1736 году, состоящей в поиске замкнутого маршрута обхода кенигсбергских мостов (рис. 1.4.1), который проходит через каждый мост
только один раз.
Рис. 1.4.1
В настоящее время теория графов – бурно развивающаяся область
математики, связанная с программированием, электрическими и информационными схемами, биологией, психологией и другими областями.
Под конечным графом G(X, U) понимают совокупность множества точек X = {x1, x2, …, xn}, называемых вершинами графа, и пар вершин
U = {u1, u2, …, um}, up = (xi, xj), p = 1, 2, …, m, называемых ребрами, где
i, j ∈ {1, 2, …, n}.
Если в графе есть ребро up = (xi, xj), то вершины xi, xj называются смежными, инцидентными up. Ребра up, uq называются смежными,
если есть вершина, инцидентная им. Ребра (xi, xi) называются петлями.
Вершина, не имеющая смежных вершин, называется изолированной.
Глава 4. Элементы теории графов
75
Граф G(X,U) называется ориентированным, если ориентированы
все его ребра, называемые в этом случае дугами. На рис. 1.4.2, 1.4.3
показаны неориентированный и ориентированный графы соответственно, в которых
X = {x1, x2, x3, x4}, U = {u1, u2, u3, u4, u5},
u1 = (x1, x2), u2 = (x2, x3), u3 = (x3, x1), u4 = (x4, x3), u5 = (x1, x4).
Рис. 1.4.2
Рис. 1.4.3
Число ребер, инцидентных вершине xi, называют степенью вершины и обозначают ρ(xi). Число ребер графа без петель связано со
степенями вершин формулой
Например, для графа рис. 1.4.2 выполняется 3 + 3 + 2 + 2 = 2 · 5.
Конечный граф, у которого отсутствуют петли и изолированные
вершины, называют регулярным. Регулярный граф, все вершины которого попарно смежные, называют полным, число ребер в нем:
Пример такого графа – на рис. 1.4.4, причем выполняется
Рис. 1.4.4
76
Часть I. Дискретная математика с применением VBA Excel
Граф, в котором, двигаясь по ребрам, можно попасть в любую
вершину, называется связным. Ориентированный граф называется
связным, если неориентированный граф, соответствующий ему, является связным. Граф, который не является связным, можно разбить
на конечное число p связных графов. Число R(G) = n – p называется
рангом графа.
Маршрутом называется последовательность ребер, получаемая
при переходе от одной вершины к другой. Одно и то же ребро может
встречаться в маршруте несколько раз. Длиной маршрута называется число ребер, входящих в маршрут, причем каждое ребро считается
столько раз, сколько оно входит в данный маршрут. Маршрут, в котором все ребра различны, называется цепью. Цепь называется простой,
если каждая вершина графа инцидентна не более чем двум ее ребрам.
Замкнутая цепь называется циклом (контуром, если граф ориентированный).
Цикл называется эйлеровым, если он содержит все ребра графа.
Граф, имеющий такой цикл, называется эйлеровым.
Теорема (Эйлера). Конечный связный неориентированный
граф G является эйлеровым тогда и только тогда, когда степени всех
его вершин четные.
Гамильтоновым циклом (контуром) называется простой цикл
(контур), проходящий через все вершины графа. С гамильтоновым
циклом тесно связана задача коммивояжера, рассматриваемая в следующей главе.
Конечный связный неориентированный граф, не содержащий
циклов, называется деревом (рис. 1.4.5). Совокупность деревьев называется лесом.
Рис. 1.4.5
Матрица S (sij), значения sij которой равны числу ребер (дуг), соединяющих вершину xi с вершиной xj, называется матрицей смежности графа G. Например, матрица
Глава 4. Элементы теории графов
77
является матрицей смежности графа, показанного на рис. 1.4.6.
Рис. 1.4.6
Матрица инцидентности T = (tip) неориентированного графа G
определяется условиями:
Например, для графа рис. 1.4.6 она имеет вид:
Матрица инцидентности T = (tip) ориентированного графа G определяется условиями:
Граф G(X,U) называется взвешенным, если задано весовое отображение:
78
Часть I. Дискретная математика с применением VBA Excel
c = c(xi, xj), (xi, xj) ∈ U, c(xi, xj) ≥ 0.
Матрицей весовых коэффициентов взвешенного графа G(X,U)
называется матрица C = (cij), где
Не нарушая общности, можно считать cij = 0, но для единообразия
имеет смысл пользоваться приведенной формулой.
Например, пусть задан взвешенный граф, рядом с ребрами указаны весовые коэффициенты:
Рис. 1.4.7
Тогда матрица его весовых коэффициентов записывается в виде:
Глава 4. Элементы теории графов
79
§2. Задача о минимальном
дереве-остове
Остовым деревом (деревом-остовом) графа G называется дерево T ⊆ G,
содержащее все вершины графа G. Задача о минимальном деревеостове состоит в нахождении дерева-остова T ⊆ G, имеющего минимальную сумму весовых коэффициентов.
Алгоритм «ближайшего соседа» для построения минимального дерева-остова состоит в последовательном разбиении множества
вершин X на два множества: X* – соединенные вершины, Х** – все
остальные, начиная с X* = ∅, Х** = Х.
Шаг 1. Выбирается произвольная вершина, исключается из множества Х** и включается во множество Х*.
Шаг 2. Среди всех ребер, соединяющих вершины из Х* и Х**, находится ребро, имеющее минимальный вес, если таких ребер несколько, то берется любое из них и включается в остов, соответственно,
вершина этого ребра из Х** исключается и включается в Х*.
Шаг 3. Если X** = ∅, то алгоритм завершает работу, в противном
случае переход на шаг 2.
Задача 4.2.1. Телевизионная компания планирует связать кабельной сетью пять высотных домов. Объемы средств, необходимые
для прокладки кабеля между домами, показаны на рис. 1.4.7. Найти
сеть, имеющую наименьшую стоимость.
Решение. 1. Выбираем, например, вершину с номером 1, то есть
принимаем X* = {1}, X** = {2,3,4,5}.
2. Наименьший весовой коэффициент среди ребер {1}ґ{2,3,4,5}
имеет ребро (1, 4), c14 = 2. Включаем ребро (1, 4) в сеть и принимаем
X* = {1,4}, X** = {2,3,5}.
3. Наименьший весовой коэффициент среди ребер {1,4}ґ{2,3,5}
имеет ребро (4, 2), c42 = 2. Включаем ребро (4, 2) в сеть и принимаем
X* = {1,2,4}, X** = {3,5}.
4. Наименьший весовой коэффициент среди ребер {1,2,4}ґ{3,5}
имеет ребро (2, 5), c25 = 5. Включаем ребро (2, 5) в сеть и принимаем
X* = {1,2,4,5}, X** = {3}.
5. Наименьший весовой коэффициент среди ребер {1,2,4,5}ґ{3}
имеет ребро (1, 3), c13 = 8. Включаем ребро (1, 3) в сеть и принимаем
X* = {1,2,3,4,5}, X** = ∅.
6. Так как выполняется X** = ∅, то алгоритм завершает работу.
80
Часть I. Дискретная математика с применением VBA Excel
Строим полученную сеть:
Рис. 1.4.8
Ответ: (1, 4), (4, 2), (2, 5), (1, 3).
Макрос Skeleton по матрице весовых коэффициентов взвешенного графа алгоритмом «ближайшего соседа» находит минимальное дерево-остов и сумму весовых коэффициентов ребер этого дерева.
Технология применения:
1) вызывается макрос Skeleton;
2) стандартно вводится матрица весовых коэффициентов, ячейки
по главной диагонали, как и соответствующие парам вершин,
не связанных ребрами, следует оставить пустыми;
3) диапазон данных (матрица весовых коэффициентов) выделяется, и макрос запускается на исполнение (Сервис/Макрос/
Макросы/Skeleton/Выполнить);
4) результаты возвращаются через строку ниже диапазона весовых коэффициентов;
5) номера вершин, связанных в минимальном дереве-остове ребрами, макрос возвращает в ячейках Ai, Bi, в ячейках Ci весовые коэффициенты ребер, ниже значений Ci – сумма весовых
коэффициентов.
Например, пусть вызван макрос Skeleton, введена и выделена матрица весовых коэффициентов последней задачи:
Глава 4. Элементы теории графов
81
Рис. 1.4.9
Тогда запуск макроса на исполнение возвращает полученные ранее ребра (1, 4), (4, 2), (2, 5), (1, 3):
Рис. 1.4.10
Сумма весовых коэффициентов в ячейке С11.
Задача 4.2.2. Доказать, что дерево-остов, показанное на
рис. 1.4.11, является минимальным.
Рис. 1.4.11
82
Часть I. Дискретная математика с применением VBA Excel
Технология решения. Вызывается макрос Skeleton, матрица весовых коэффициентов графа вводится (рис. 1.4.12) в диапазон A1:Y25
(показан частично) и выделяется.
Рис. 1.4.12
Запуск макроса на исполнение приводит к ребрам заданного дерева (рис. 1.4.13, 1.4.14).
Рис. 1.4.13
Рис. 1.4.14
§3. Задача о назначениях
Имеются n исполнителей и n видов работ. Стоимости выполнения
i-м исполнителем j-ой работы заданы матрицей C = (cij), i, j = 1, 2, …, n.
Задача о назначениях состоит в таком распределении исполнителей
по видам работ, чтобы каждый исполнитель выполнял только одну
работу и каждая работа выполнялась только одним исполнителем,
причем суммарная стоимость выполнения работ была наименьшей.
Венгерский математик Б. Эгервари в 1931 году предложил изящный алгоритм решения данной задачи, называемый теперь «венгерским».
Глава 4. Элементы теории графов
83
Шаг 1. Редукция строк и столбцов. В каждой строке находится
наименьшее значение и вычитается из всех значений строки. Затем
в каждом столбце находится наименьшее значение и вычитается из
всех значений столбца.
Шаг 2. Определение назначений. Если в редуцированной матрице
найдется группа из n нулей, стоящих в пересечении строк (столбцов),
номера которых попарно различны, то оптимальное решение получено. Исполнителю i поручается работа j, где i и j – номера строки и
столбца, в пересечении которых находится 0 из этой группы. В противном случае выполняется шаг 3.
Шаг 3. Модификация редуцированной матрицы. Минимальным
числом прямых вычеркиваются все нули. Из оставшихся значений
находится наименьшее, вычитается из них и прибавляется к значениям, стоящим в пересечении прямых. Переход на шаг 2.
Задача 4.3.1. Найти венгерским алгоритмом оптимальное решение задачи о назначениях, если стоимости выполнения работ заданы таблицей:
Таблица 1.4.1
4
12
11
5
9
6
12
8
10
8
15
13
7
14
10
16
Решения. 1. Редукция строк:
Рис. 1.4.15
2. Редукция столбцов:
Рис. 1.4.16
84
Часть I. Дискретная математика с применением VBA Excel
3. По полученным нулям выполнить оптимальные назначения
нельзя. Переходим к следующему шагу.
4. Вычеркиваем минимальным числом прямых нули, среди оставшихся значений наименьшее 3:
Рис. 1.4.17
Отнимаем его из них и прибавляем к значениям в пересечении:
Рис. 1.4.18
5. Проводим оптимальные назначения (выделены серым цветом).
Возвращаемся к первоначальной таблице и вычисляем наименьшую
суммарную стоимость работ: 4 + 8 + 8 + 10 = 30.
Ответ: 1 – 1, 2 – 3, 3 – 4, 4 – 2.
Задача о назначениях сводится к задаче линейного программирования. Пусть значение xij = 1, если i-му исполнителю поручается j-ая
работа, и xij = 0 в противном случае. Тогда математическая постановка
задачи:
ограничения:
Переменные xij принимают значения 0 или 1. Если m < n, то математическая постановка задачи:
Глава 4. Элементы теории графов
85
ограничения:
В случае m > n ограничения:
Макрос Appointment находит оптимальное решение задачи о назначениях независимо от соотношения, связывающего m (число исполнителей) и n (число работ). Достаточно вызвать макрос, стандартно ввести матрицу стоимостей, выделить данный диапазон и
запустить макрос на исполнение.
Например, пусть вызван макрос Appointment, введены и выделены данные задачи 4.3.1. Тогда запуск на исполнение возвращает в выделенном диапазоне (рис. 1.4.19) матрицу оптимальных назначений,
полученную ранее венгерским методом.
Рис. 1.4.19
§4. Алгоритм Дейкстры
Рассматриваемый алгоритм, относящийся к числу фундаментальных
динамических алгоритмов, предложил в 1959 году один из основоположников современного программирования Е. Дейкстра (1930–
2002).
Пусть надо найти кратчайшие расстояния от заданной вершины
взвешенного графа G(X,U), весовые коэффициенты – расстояния
между вершинами до всех остальных вершин. Такая задача решается с помощью алгоритма Дейкстры, в котором вершинам Х присваиваются значения (метки) m(xi), одни из которых – временные (могут
изменяться), другие – постоянные (изменяться не могут). В процессе
86
Часть I. Дискретная математика с применением VBA Excel
работы алгоритма все метки становятся постоянными, равными длинам кратчайших путей из начальной вершины до вершин xi соответственно.
Шаг 0. За текущую вершину x принимается начальная вершина,
метки присваиваются по правилу:
Метка начальной вершины m(x) = 0 – постоянная, все остальные
метки – временные.
Шаг 1. Временные метки пересчитываются по правилу:
m(xi) = min{m(xi), m(x) + c(x, xi)}.
Шаг 2. Наименьшая из полученных меток становится постоянной,
а вершина с этой меткой (если таких несколько, то любая) – текущей
вершиной x.
Шаг 3. Если все вершины имеют постоянные метки, то алгоритм
завершает работу, в противном случае переход на шаг 1.
По полученным длинам m(xi) кратчайших путей звенья (x, xi) этих
путей находятся из условия
m(xi) = m(x) + c(x, xi).
Задача 4.4.1. Алгоритмом Дейкстры найти кратчайшие расстояния от вершины, имеющей номер 1, до остальных вершин неориентированного графа, показанного на рис. 1.4.20.
Рис. 1.4.20
Глава 4. Элементы теории графов
87
Решение. Составляется и построчно заполняется таблица присвоения постоянных меток, клетки с постоянными метками выделяются серым цветом: первая строка заполняется автоматически:
Рис. 1.4.21
Из вершины 1, имеющей постоянную метку, достижимы вершины
2, 3, имеющие временные метки ∞. Пересчитываем эти метки:
m(2) = min{∞, 0 + 1} = 1;
m(3) = min{∞, 0 + 3} = 3.
Наименьшую из них m(2) = 1 принимаем за постоянную и заполняем вторую строку:
Рис. 1.4.22
Из вершины 2 достижимы вершины 3, 4, 5, имеющие временные
метки. Пересчитываем эти метки:
m(3) = min{3, 1 + 1} = 2;
m(4) = min{∞, 1 + 3} = 4;
m(5) = min{∞, 1 + 2} = 3.
Наименьшую из них m(3) = 2 принимаем за постоянную и заполняем третью строку:
88
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.4.23
Продолжая процесс, приходим к таблице:
Рис. 1.4.24
По ее постоянным меткам выписываем кратчайшие расстояния от
вершины 1 до вершин 2, 3, 4, 5, 6.
Ответ: 1, 2, 3, 3, 5.
Заметим, что в кратчайшую цепь, соединяющую начальную вершину, например, с вершиной под номером 6, войдут звенья (4,6), (3,4),
(2,3), (1,2), так как
m(6) = 5 = 3 + 2 = m(4) + c(4, 6);
m(4) = 3 = 2 + 1 = m(3) + c(3, 4);
m(3) = 2 = 1 + 1 = m(2) + c(2, 3).
Макрос Labels возвращает по стандартно введенной матрице весовых коэффициентов (символ ∞ не вводится) таблицу меток, получаемых алгоритмом Дейкстры.
Глава 4. Элементы теории графов
89
Применение макроса Labels к задаче 4.4.1. Входные данные – на
рис. 1.4.25.
Рис. 1.4.25
Запуск макроса Labels на исполнение возвращает полученную ранее таблицу:
Рис. 1.4.26
Задача 4.4.2. Найти кратчайшие расстояния от вершины, имеющей номер 1, до остальных вершин ориентированного графа, показанного на рис. 1.4.27.
Рис. 1.4.27
Технология решения. Вызывается макрос Labels, вводятся и выделяются входные данные (рис. 1.4.28).
90
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.4.28
Запуск макроса Labels на исполнение возвращает таблицу, показанную на рис. 1.4.29.
Рис. 1.4.29
Ответ: 3, 5, 6, 7, 4.
§5. Задача о гиперсфере
минимального радиуса
1. Пусть на евклидовой плоскости заданы n точек Mi(xi, yi), i = 1, 2,
…, n, и надо найти параметры (координаты центра и радиус) окружности минимального радиуса, охватывающей заданные точки, то есть
параметры круга минимального радиуса, содержащего заданные точки. Такая задача называется задачей об окружности минимального
радиуса (по заданным точкам).
Данная задача имеет многочисленные приложения, в том числе связанные с современными системами связи. В частности, пусть
имеются n населенных пунктов, спрашивается, в какой точке местности надо установить передатчик, радиус действия которого зависит
от потребляемой мощности, которая может регулироваться, чтобы в
зону его действия входили все населенные пункты, а потребляемая
мощность была минимальной? Понятно, что этой точкой будет центр
окружности минимального радиуса, охватывающей все населенные
пункты.
Глава 4. Элементы теории графов
91
Будем считать n ≥ 3, так как при значениях n = 1, 2 задача становится тривиальной. При n = 1 центром искомой окружности является
точка M1, r = 0, а при n = 2 – середина отрезка M1M2,
Обозначим заданное множество точек символом Ω. Окружность
минимального радиуса, охватывающая все точки множества Ω, обязательно проходит как минимум через две из них. Поэтому для каждой
пары точек Mi и Mj, i < j, надо установить, проходят через них окружности, охватывающие все точки множества Ω, или нет, и если проходят, то надо найти среди них окружность, имеющую минимальный
радиус. Пусть его значение r(i, j). Тогда радиус искомой окружности
будет равен наименьшему из чисел r(i, j) по всем парам таких (i, j).
Для реализации подобного подхода к нахождению параметров
искомой окружности поступим следующим образом. Пусть i, j = 1,
2, …, n, а индекс q принимает все целые значения от 1 до n, за исключением тех, которые приняли индексы i, j. Обозначим через α(i, j)
величину наименьшего из углов, под которыми отрезок MiMj виден
из точек Mq:
Вершину угла, равного α(i, j), обозначим M(i, j). Если таких углов
несколько, то за вершину M(i, j) примем вершину любого из них.
Лемма 4.1. Если для точек Mi, Mj выполняется
α(i, j) = 0,
(4.1)
то не существует окружности, проходящей через них, которая охватывает все точки множества Ω.
Утверждение следует из того, что в этом случае точки Mi, Mj, Mq
лежат на одной прямой, причем точка Mq является крайней.
Лемма 4.2. Если для точек Mi, Mj выполняется
α(i, j) ≥ 90°,
(4.2)
то окружность минимального радиуса, проходящая через них и охватывающая все точки множества Ω, имеет центр на середине отрезка
MiMj, то есть
92
Часть I. Дискретная математика с применением VBA Excel
(4.3)
Доказательство. Допустим противное, что некоторая точка Mq не
попадает в круг, ограниченный окружностью, о которой говорится
в условии теоремы. Сделаем рисунок:
Рис. 1.4.30
Тогда, как видно из рисунка, по формуле вычисления угла между
секущими выполняется:
В силу условия (4.2) отсюда следует:
то есть из точки Mq отрезок MiMj виден под меньшим углом, чем
α(i, j), чего быть не может. Следовательно, допущение неверно, данная окружность охватывает все точки множества Ω. Остается учесть,
что окружности меньшего радиуса, проходящей через точки Mi, Mj, не
существует, что завершает доказательство.
Пусть 0 < α(i, j) < 90°. Рассмотрим точки множества Ω, находящиеся в открытой полуплоскости, ограниченной прямой MiMj и не
содержащей точки M(i, j). Если множество этих точек не пустое, то обозначим через β(i, j) величину наименьшего из углов, под которыми из
них виден отрезок MiMj. В противном случае будем считать β(i, j) ∈ ∅.
Понятно, что α(i, j) ≤ β(i, j), если β(i, j) ∉ ∅.
Лемма 4.3. Если для точек Mi, Mj выполняется
0 < α(i, j) < 90°, β(i, j) ∈ ∅
(4.4)
Глава 4. Элементы теории графов
93
или
0 < α(i, j) < 90°, α(i, j) + β(i, j) ≥ 180°,
(4.5)
то окружность минимального радиуса, проходящая через них и охватывающая все точки множества Ω, проходит через точку M(i, j), то есть
(4.6)
Доказательство. Проведем его для случая (4.5), случай (4.4) рассматривается по аналогии с доказательством леммы 4.2. Допустим
противное, что некоторая точка Mq не попадает в круг, ограниченный окружностью, проходящей через точки Mi, Mj, M(i, j). Точки Mq
и M(i, j) могут находиться как в одной полуплоскости, так и в разных
полуплоскостях, ограниченных прямой MiMj. Ограничимся вторым
случаем, первый приводится к противоречию по аналогии, и сделаем
рисунок:
Рис. 1.4.31
Как видно по рисунку:
Следовательно, выполняется:
α + γ < 180°.
Однако γ ≥ β(i, j), то есть отсюда следует
α + β < 180°,
94
Часть I. Дискретная математика с применением VBA Excel
что противоречит второму из условий (4.5). Значит, допущение неверно. Формула (4.6) следует из теоремы синусов.
Лемма 4.4. Если для точек Mi, Mj выполняется
0 < α(i, j) < 90°, α(i, j) + β(i, j) < 180°,
(4.7)
то не существует окружности, проходящей через них, которая охватывает все точки множества Ω.
Доказательство аналогично доказательству леммы 4.3. В силу
лемм справедлива следующая теорема.
Теорема 4.1. Радиус окружности минимального радиуса, охватывающей все точки множества Ω, равен наименьшему из чисел, получаемых по формулам (4.3, 4.6), когда в формуле (4.3) значения i, j,
i < j, такие, при которых выполняется (4.2), а в формуле (4.6) – такие,
при которых выполняется (4.4) или (4.5).
Теорема реализуется макросом Mincircle, возвращающим по заданным координатам точек координаты центра окружности минимального радиуса, охватывающей заданные точки, и ее радиус.
Координаты точек xi, yi вводятся стандартно в ячейки Ai, Bi, соответственно, диапазон с данными выделяется, и макрос запускается на
исполнение. Координаты центра искомой окружности возвращаются
в ячейках С1, С2, а радиус – в ячейке С3.
Например, пусть входные данные, как на рис. 1.4.32.
Рис. 1.4.32
Тогда при запуске макроса Mincircle на исполнение получаем результаты, показанные на рис. 1.4.33.
Рис. 1.4.33
Глава 4. Элементы теории графов
95
Сделаем проверку. Записывая в ячейке E1 формулу =КОРЕНЬ
((A1-C$1)^2+(B1-C$2)^2) и копируя ее в ячейки Е2:Е4, получаем
(рис. 1.4.34) величины, не превышающие величину радиуса окружности (ячейка С3).
Рис. 1.4.34
2. Задача о гиперсфере минимального радиуса, обобщающая рассмотренную задачу, состоит в нахождении параметров гиперсферы минимального радиуса, охватывающей заданные n точек Mi(xi1, xi2, …, xim),
i = 1, 2, …, n, пространства Rm. При m = 2 она становится задачей об
окружности минимального радиуса.
Лемма 4.5. Математическая модель задачи нахождения центра
O(y1, y2, …, ym) гиперсферы минимального радиуса, охватывающей заданные точки, записывается в виде:
max{|OM1|, |OM2|, …, {|OMn|} → min.
(4.8)
В силу леммы 4.5 справедлива следующая лемма.
Лемма 4.6. Если гиперсфера минимального радиуса, охватывающая точки M1, M2, …, Mn, проходит через точку Mi, то координаты ее
центра Oi(yi1, yi2, …, yim) являются решениями задачи квадратичного
программирования
|OiMi|2 → min,
(4.9)
при n – 1 квадратичных ограничениях
|OiMj|2 ≤ |OiMi|2, j ≠ i.
(4.10)
В силу леммы 4.6 имеет место следующая теорема.
Теорема 4.2 (о гиперсфере минимального радиуса). Центром
гиперсферы минимального радиуса, охватывающей точки M1, M2, …,
Mn, является решение той из задач (4.9, 4.10), i = 1, 2, …, n, для которой
величина |OiMi| имеет наименьшее значение, это значение – радиус
искомой гиперсферы.
Замечание. При некоторых значениях i задача (4.9, 4.10) может и
не иметь решения.
96
Часть I. Дискретная математика с применением VBA Excel
Теорема реализуется макросом Sphere.
Например, пусть вызван макрос Sphere и на лист Excel введены
координаты пяти точек 4-мерного пространства, диапазон с данными
выделен (рис. 1.4.35).
Рис. 1.4.35
Тогда запуск макроса на исполнение возвращает (рис. 1.4.36) в выделенном диапазоне (A11:D11) координаты центра гиперсферы минимального радиуса, в ячейке F11 – радиус этой гиперсферы.
Рис. 1.4.36
Применение макроса Sphere к данным предыдущего примера
(рис. 1.4.32) приводит к результатам, показанным на рис. 1.4.37.
Рис. 1.4.37
Глава 4. Элементы теории графов
97
§6. Транспортная задача
Пусть на складах A1, A2, …, Am имеются a1, a2, …, am единиц однородного груза, который надо доставить n потребителям B1, B2, …, Bn, потребности которых b1, b2, …, bn соответственно. Известна матрица
C = (cij) стоимости перевозки единицы груза с i-го склада j-му потребителю, i = 1, …, m, j = 1, …, n. Транспортная задача состоит в нахождении плана перевозок (xij), при котором суммарные транспортные
расходы минимальны.
Данные задачи задаются табл. 1.4.2, называемой транспортной.
Таблица 1.4.2
Запасы\Потребности
a1
a2
…
am
Если
b1
c11
c21
…
cm1
b2
c12
c22
…
cm2
…
…
…
…
…
bn
c1n
c2n
…
cmn
то транспортная задача называется закрытой
(сбалансированной), в противном случае она открытая и сводится к
закрытой, введением фиктивного поставщика с запасами
или потребителя с потребностями
при нулевых стоимо-
стях перевозок.
Математическая модель транспортной задачи, если
имеет вид:
Если
то ограничения записываются в виде:
,
Часть I. Дискретная математика с применением VBA Excel
98
а если
то
Макрос Transport, применяемый стандартно, находит оптимальное решение транспортной задачи независимо от типа задачи.
Задача 4.6.1. Найти оптимальный план перевозок транспортной задачи, заданной табл. 1.4.3.
Таблица 1.4.3
40
30
20
25
3
6
2
55
7
4
3
Технология решения. Вызывается макрос Transport, вводится и
выделяется транспортная таблица (рис. 1.4.38).
Рис. 1.4.38
Запуск макроса Transport на исполнение возвращает оптимальный
план перевозок и минимальные транспортные расходы (рис. 1.4.39).
Рис. 1.4.39
Ответ:
Глава 4. Элементы теории графов
99
Задача 4.6.2. Найти оптимальный план перевозок транспортной задачи, заданной табл. 1.4.4.
Таблица 1.4.4
40
40
20
20
7
4
5
10
4
2
3
50
3
6
2
30
6
2
1
Технология решения. Применяя макрос Transport, получаем:
Рис. 1.4.40
Ответ:
Задача
коммивояжера
5
§1. Свойства оптимальных контуров
В 1859 году ирландский математик и астроном Вильям Гамильтон
опубликовал в одном из детских журналов головоломку о нахождении замкнутых путей, состоящих из ребер додекаэдра (рис. 1.5.1), которые проходят через каждую вершину только один раз. Она привела
к недетской задаче коммивояжера, относящейся к числу NP-полных
задач.
Рис. 1.5.1
Под задачей коммивояжера понимают нахождение во взвешенном графе G(A,U) гамильтонова контура S (оптимального), имеющего наименьший суммарный вес среди всех гамильтоновых контуров
этого графа. В случае, когда оптимальных контуров несколько, достаточно найти один из них.
Глава 5. Задача коммивояжера
101
Если матрица весовых коэффициентов C = (cij), где i, j = 1, 2, …, n,
графа G(A,U) имеет общий вид, то задача коммивояжера называется
общей.
Если cij = cji, то задача коммивояжера называется симметричной,
в этом случае S – оптимальный цикл. Если, кроме этого, выполняется
cik + ckj ≥ cij, то задача коммивояжера называется симметрично-треугольной. Наконец, если cij = d(Ai, Aj), где d – метрика, то задача коммивояжера называется метрической (геометрической).
Будем считать, что весовые коэффициенты являются длинами путей, то есть S – кратчайший контур (цикл).
Введем обозначения:
Δ(i, k, j) = cik + ckj – cij,
(5.1)
i ≠ k, j ≠ k, i ≠ j. Обозначим через Δ(k) множество всех значений
Δ(i, k, j) при допустимых значениях i, j, когда k = const.
Лемма 5.1. Если дуги (Ai, Ak), (Ak, Aj), (Ap, Aq) входят в оптимальный контур S, то
Δ(i, k, j) ≤ Δ(p, k, q).
(5.2)
Доказательство. Действительно, в противном случае
cik + ckj + cpq > cpk + ckq + cij.
Однако отсюда следует, что удаление из контура S дуг (Ai, Ak),
(Ak, Aj), (Ap, Aq) и включение дуг (Ap, Ak), (Ak, Aq), (Ai, Aj) приводит
к более короткому контуру (рис. 1.5.2), что противоречит оптимальности S.
Рис. 1.5.2
102
Часть I. Дискретная математика с применением VBA Excel
Пусть min Δ(k) – наименьшее среди значений Δ(k), k = const. Рассмотрим случай, когда этот минимум простой, то есть принимается
только на одной дуге (Ap, Aq):
minΔ(k) = Δ(p, k, q).
(5.3)
В этом случае допущение, что дуга (Ap, Aq) входит в оптимальный
контур S, так как вершина Ak обязательно инцидентна некоторым
двум дугам (Ai, Ak), (Ak, Aj) этого контура, приводит в силу леммы 6.1
к соотношению
Δ(i, k, j) ≤ minΔ(k),
что противоречит единственности дуги (Ap, Aq), на которой принимается minΔ(k). Следовательно, дуга, на которой принимается простой
минимум среди значений Δ(k), k = const, не может входить в оптимальный контур.
Пусть minΔ(k), k = const, принимается на двух дугах:
minΔ(k) = Δ(p, k, q) = Δ(i, k, j).
Тогда по крайней мере одна из дуг (Ai, Aj), (Ap, Aq) в оптимальный
контур не входит. Допущение, что это не так, приводится к противоречию по аналогии с предыдущим случаем. При этом в силу леммы
5.1, если в оптимальный контур входит дуга (Ai, Aj), входят и дуги
(Ap, Ak), (Ak, Aq), а если входит дуга (Ap, Aq), то входят и дуги (Ai, Ak),
(Ak, Ai). Учитывая это и то, что из условий на значение minΔ(k) следует
cpk + ckq + cij = cik + ckj + cpq,
приходим к выводу, что из числа дуг, которые могут входить в оптимальный контур, исключается одна из дуг (Ai, Aj), (Ap, Aq), причем
любая из них.
Аналогичные рассуждения имеют место, когда minΔ(k) принимается на трех и более дугах, снова одну из этих дуг, причем любую,
не нарушая общности рассмотрения, можно исключить из числа дуг,
которые могут входить в оптимальный контур. Поэтому справедлива
теорема, позволяющая упростить задачу коммивояжера.
Теорема 5.1. В оптимальный контур S задачи коммивояжера
для графа G(A,U), A = {A1, A2, …, An}, не входят дуги
, для которых выполняется:
minΔ(k) = Δ(ik, k, jk),
(5.4)
где k = 1, 2, …, n, каждый из индексов ik, jk при каждом значении k принимает только одно значение.
Глава 5. Задача коммивояжера
103
Задача 5.1.1. Найти звенья оптимального цикла задачи коммивояжера, заданной табл. 1.5.1.
Таблица 1.5.1
1
2
3
4
5
6
1
–
696
1207
3223
2797
1106
2
696
–
858
2527
2101
410
3
1207
858
–
2283
1863
1268
4
3223
2527
2283
–
579
2957
5
2797
2101
1863
579
–
2511
6
1106
410
1268
2957
2511
–
Решение. Задача симметричная, но не треугольная, так как
Δ(4, 2, 6) = 2527 + 410 – 2957 = –20.
Вычисления наименьших значений Δ(i, k, j), k = const, дают:
minΔ(i, 1, j) = Δ(3, 1, 6) = Δ(3, 1, 2) = 1045;
minΔ(i, 2, j) = Δ(4, 2, 6) = –20;
minΔ(i, 3, j) = Δ(1, 3, 4) = 267;
minΔ(i, 4, j) = Δ(3, 4, 5) = 999;
minΔ(i, 5, j) = Δ(4, 5, 6) = 133;
minΔ(i, 6, j) = Δ(1, 6, 2) = Δ(1, 6, 5) = Δ(2, 6, 3) = Δ(2, 6, 5) = 820.
Следовательно, по теореме 5.1 задачу можно упростить исключением из рассмотрения звеньев (3, 6), (4, 6), (1, 4), (3,5), (2, 5), как показано на рис. 1.5.3.
Рис. 1.5.3
104
Часть I. Дискретная математика с применением VBA Excel
В силу леммы 5.1 и вычислений minΔ(i, 1, j), если допустить, что
звено (3, 2) входит в оптимальный цикл, то в него должны входить
звенья (3, 1), (1, 6). С учетом исключенных звеньев имеется только один гамильтонов цикл, содержащий данные звенья (3, 1), (1, 6),
(6, 5), (5, 4), (4, 2), (2, 3). Однако он не является оптимальным, так как
в вершине 2 по лемме 5.1 должно выполняться Δ(3, 2, 4) ≤ Δ(1, 2, 6),
а в данном случае это не так:
Δ(3, 2, 4) = 858 + 2527 – 283 = 1102;
Δ(1, 2, 6) = 696 + 410 – 1106 = 0.
Следовательно, звено (3, 2) в оптимальный цикл не входит, значит, в него входят оставшиеся два звена (3, 1) и (3, 4), инцидентные
вершине 3. С учетом исключенных звеньев есть только два гамильтоновых цикла, содержащие их:
(3, 1), (1, 5), (5, 6), (6, 2), (2, 4), (4, 3);
(3, 1), (1,2), (2, 6), (6, 5), (5, 4), (4, 3).
Длина второго заведомо меньше длины первого и составляет 7686.
Ответ: (3, 1), (1,2), (2, 6), (6, 5), (5, 4), (4, 3)
По аналогии с леммой 5.1 доказывается
Лемма 5.2. Если дуги (Ai, Ak), (Ak, Aj), (Aj, Ar), (Ap, Aq) входят
в оптимальный контур, то
cik + ckj + cjr – cir ≤ cpk + ckj + cjq – cpq.
Теорема 5.2. Если оптимальный контур S задачи коммивояжера для графа G(A,U) содержит дугу(Ai, Aj), то он не содержит дуги
(Ap, Aq), на которой принимается минимум значений cpi + cij + cjq – cpq.
Перейдем к симметрично-треугольным задачам коммивояжера. Пусть
звенья (Ai, Ar), (Ar, Ak), (Ak, Aj), (Ap, Aq)
входят в оптимальный цикл S. Докажем,
что для них выполняется условие (5.2).
Сделаем рисунок:
Рис. 1.5.4
Глава 5. Задача коммивояжера
105
В силу неравенства треугольника можно записать:
cik + ckj – cij ≤ cpk + crk + ckj – cij.
(5.5)
С учетом, что при увеличении весовых коэффициентов звеньев,
не входящих в оптимальный цикл, последний не изменяется, такие
звенья, инцидентные вершине Ar, можно удалить. На этом же основании удаляется звено (Ai, Ak). В результате цикл S становится оптимальным циклом задачи размерности n – 1, в которой звенья (Ai, Ar)
и (Ar, Ak) заменяются одним звеном (Ai, Ar, Ak) с весовым коэффициентом cir + crk, но тогда по лемме 5.1 для этой задачи должно выполняться:
cir + crk + ckj – cij ≤ cpk + ckq – cpq.
(5.6)
Из неравенств (5.5, 5.6) по транзитивности следует требуемое неравенство (5.2).
Подобно тому, как исключалась вершина Ar, можно исключить не
одну, а любое необходимое количество вершин, чтобы получить неравенство (5.2), в котором cij будет весовым коэффициентом звена, не
входящего в S, а cpq – весовым коэффициентом звена, входящего в S.
Поэтому справедлива следующая теорема.
Теорема 5.3. Если в симметрично-треугольной задаче коммивояжера при некотором значении k = const выполняется
(5.7)
I ≠ k, J ≠ k, I ≠ J, причем максимум строгий, то звено (AI, AJ) входит
в оптимальный цикл.
Если максимум в (5.7) не является строгим, вопрос о том, входит
звено (AI, AJ) в оптимальный цикл или нет, требует отдельного рассмотрения.
Теорема дает простое правило нахождения звеньев оптимального
цикла, но, возможно, не всех, реализуемое стандартно применяемым
макросом Triangular, который:
1) проверяет выполнение неравенства треугольника, в случае невыполнения появляется окно сообщения;
2) находит для каждого значения k соответствующие значения I,
J, при которых максимум (5.7) является строгим, если такие существуют, и возвращает их в диапазоне nґ3, первый столбец –
порядковые номера вершин (строк диапазона), второй столбец – значения I, третий столбец – значения J, пустые ячейки
показывают, что строгого максимума нет.
106
Часть I. Дискретная математика с применением VBA Excel
Пусть задача коммивояжера задана матрицей:
Вызываем макрос Triangular, вводим матрицу задачи, заменяя
символ ∞ значением 0, на рабочий лист и выделяем (рис. 1.5.5).
Рис. 1.5.5
Запуская макрос на исполнение, получаем:
Рис. 1.5.6
Данные диапазона H7:I12 показывают, что в оптимальный цикл
входят звенья (6, 5), (4, 3), (6, 2), (2, 1), (3, 1). Недостающее звено
(5, 4) находится из условия непрерывности маршрута (односвязности цикла).
Для метрических задач коммивояжера справедлива следующая
теорема.
Глава 5. Задача коммивояжера
107
Теорема 5.4. Оптимальный цикл метрической задачи коммивояжера как путь метрического пространства является простым.
Доказательство. Допустим, что звенья (Ai, Aj), (Ap, Aq) оптимального цикла S как пути метрического пространства имеют общую точку M (рис. 1.5.7).
Рис. 1.5.7
Тогда в силу аксиомы треугольника должно выполняться:
cij + cpq ≥ cip + cjq,
причем в общем случае
cij + cpq > cip + cjq.
Поэтому перестройка (рис. 1.5.8) цикла S, состоящая в замене звеньев (Ai, Aj), (Ap, Aq) звеньями (Ai, Ap), (Aj, Aq), приводит к более короткому циклу, что противоречит оптимальности S. Частные случаи
также легко приводятся к противоречию.
Следствие. Оптимальным циклом метрической задачи коммивояжера, в которой вершины Ai являются вершинами выпуклого плоского геодезического n-угольника, является граница этого n-угольника.
Рис. 1.5.8
§2. Метод ветвей и границ
В 1963 году коллективом авторов, возглавляемых Дж. Литтлом, был
опубликован алгоритм решения задачи коммивояжера ограниченным перебором – алгоритм ветвей и границ, который и по сей день
108
Часть I. Дискретная математика с применением VBA Excel
остается наиболее популярным алгоритмом решения данной задачи.
Рассмотрим его на задаче при небольшом значении n = 4, чтобы избежать длинных вычислений.
Задача 5.2.1. Найти методом ветвей и границ оптимальный
контур задачи коммивояжера, заданной табл. 1.5.2.
Таблица 1.5.2
1
2
3
4
1
∞
1
3
2
2
2
∞
4
6
3
4
5
∞
3
4
3
2
6
∞
Решение. Находятся минимумы (штрафы) по строкам:
Рис. 1.5.9
Они вычитаются из элементов строк:
Рис. 1.5.10
Выполненные преобразования называются редукцией строк. Аналогично находятся минимумы по столбцам.
Глава 5. Задача коммивояжера
109
Рис. 1.5.11
Ненулевые значения вычитаются из элементов столбцов, и в правом нижнем углу записывается сумма всех минимумов:
Рис. 1.5.12
Таким образом, проведена и редукция столбцов, получена редуцированная матрица. Значение Z 0 = 10 – нижняя граница длин всех
допустимых контуров задачи.
Переходим к ветвлению. Определяем дугу ветвления. Находим по
строкам и столбцам минимумы 2-го порядка (вторичные штрафы):
Рис. 1.5.13
110
Часть I. Дискретная математика с применением VBA Excel
Находим клетку, содержащую нуль, которой соответствует наибольшая сумма вторичных штрафов. Таких клеток будет три: (1, 2),
(3, 1) и (4, 3), для них эта сумма равна 1. Выбираем любую из них,
например (1, 2), и принимаем дугу (1, 2) за первую дугу создаваемого
контура. Тогда множество всех допустимых контуров S 0 разбивается
на два множества:
– не содержащих дуги (1, 2),
– содержащих дугу (1, 2). Нижняя граница длин контуров
будет равна
10 + 1 = 11, а чтобы найти нижнюю оценку длин контуров
, необходимо выполнить ветвление, то есть следующие действия:
• удалить в последней матрице весовых коэффициентов первую
строку и второй столбец;
• поставить в пересечение строки и столбца, в которых нет символа ∞, символ ∞;
• провести редукцию строк и столбцов;
• найти сумму минимумов первого порядка, обозначим ее γ.
Тогда искомая оценка будет равна 10 + γ. Выполняем первое действие:
Рис. 1.5.14
Выполняем второе действие:
Рис. 1.5.15
Выполняем третье действие, так как все минимумы равны нулю,
то преобразовывать ничего не надо:
Глава 5. Задача коммивояжера
111
Рис. 1.5.16
Действие четвертое дает γ = 0. Следовательно, нижняя граниравна 10. Первое ветвление закончено, наца длин контуров
чинаем построение дерева ветвления и указываем нижние оценки
(рис. 1.5.17).
Рис. 1.5.17
Так как нижняя оценка длин контуров
меньше, чем для контуров
, то переходим к следующему ветвлению, по аналогии
с предыдущим. Дополняем последнюю таблицу минимумами второго
порядка:
Рис. 1.5.18
112
Часть I. Дискретная математика с применением VBA Excel
Наибольшую сумму минимумов второго порядка, равную 5, имеет
клетка, содержащая ноль, которая выделена серым цветом. Поэтому
дугу (2, 4) включаем в контур, тем самым множество
разбивается на множество
, содержащее дугу (2, 4), и множество
, ее
не содержащее. Нижняя оценка для множества
равна 10 + 5 =
= 15, а чтобы узнать ее для множества
, надо выполнить четыре
действия, подобные выполняемым ранее. Они приводят к следующей
таблице:
Рис. 1.5.19
Откуда следует, во-первых, что нижняя оценка для множества
также равна 10, во-вторых, что в контур следует включить дуги
(3, 1) и (4, 3), причем нижние оценки их невключения ∞. Продолжение построения дерева ветвления приводит к рис. 1.5.20.
Рис. 1.5.20
Глава 5. Задача коммивояжера
113
Так как нижние оценки оборванных ветвей не меньше 10, то построенный контур является оптимальным и длина его равна 10. Одпонако если окажется, что для некоторой оборванной ветви
добное условие не выполняется, то в матрице k-го шага в клетку (i, j)
ставится символ ∞ и проводится ветвление.
Ответ: (1, 2), (2, 4), (4, 3), (3, 1).
Проведенные вычисления автоматически выполняются макросом Little. Запуск макроса Little на исполнение, когда первые n строк
свободные, а ниже введена и выделена таблица задачи коммивояжера (клетки с диагональными элементами следует оставить пустыми),
возвращает:
• таблицы, получаемые применением метода ветвей и границ;
• дуги (Ai, Bi), включаемые в оптимальный маршрут;
• нижние границы включения и невключения этих дуг (в ячейках Ci, Di).
Например, пусть введены данные последней задачи (рис. 1.5.21).
Рис. 1.5.21
Тогда запуск макроса Little на исполнение возвращает окончательные результаты (выделены, рис. 1.5.22) и промежуточные таблицы (рис. 1.5.23).
Рис. 1.5.22
114
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.5.23
§3. Сведение к задаче линейного
программирования
В 1954 году в совместной статье Д. Данцига, Д. Фалкерсона и Т. Джонсона задача коммивояжера была сведена к задаче линейного программирования.
Математическая модель задачи коммивояжера как задачи линейного программирования с булевыми (альтернативными) переменными xij, для которых xij = 1, если дуга из вершины i в вершину j входит
в оптимальный контур, и xij = 0, если не входит, и дополнительными
целочисленными переменными up, обеспечивающими непрерывность
(односвязность) оптимального контура, записывается в виде:
up – uq + (n – 1) · xpq ≤ n – 2;
p, q = 2, 3, …, n; p ≠ q.
Глава 5. Задача коммивояжера
115
Идея введения дополнительных переменных (ограничений), обеспечивающих непрерывность контура, состоит в том, что вершины
непрерывного контура можно пронумеровать числами 1, 2, …, n по
порядку их следования в контуре, а для разрывного контура этого сделать нельзя. Например, если контур проходит через вершины
1 – 5 – 4 – …, то значения дополнительных переменных u1 = 1, u5 = 2,
u4 = 3, … При этом если вершина 1 принята за начальную вершину, то
выполняется:
up – uq + (n – 1) · xpq ≤ n – 2,
где p, q ∈ {2, 3, …, n}, up, uq ∈ {2, 3, …, n}, так как если xpq = 1, то uq = up + 1.
В случае xpq = 0 это условие принимает вид up – uq ≤ n – 2 и выполняется автоматически, в силу up, uq ∈ {2, 3, …, n}.
Найдем с помощью линейного программирования, применяя
надстройку Solver программного комплекса Excel, решение задачи
коммивояжера, матрица весовых коэффициентов которой задана
табл. 1.5.2. Открываем лист Excel и вводим данные, вместо символа
∞ ставим, например, значение 10, большее всех числовых значений
матрицы весовых коэффициентов (рис. 1.5.24).
Рис. 1.5.24
Ячейки диапазона E5:H8 оставляем за переменными xij, в ячейку I5 вводим формулу =СУММ(E5:H5) и копируем ее в ячейки
I6:I8, в ячейку E9 вводим формулу =СУММ(E5:E8) и копируем
ее в ячейки F9:H9, в ячейку I9 вводим формулу целевой функции
=СУММПРОИЗВ(A1:D4;E5:H8).
Оставляем ячейки F11:H11 за дополнительными переменными
up, в ячейки E12, E13, E14 вводим, соответственно, формулы =F11,
=G11, =H11. В ячейку F12 вводим формулу =$E12-F$11+3*F6 и копируем ее в остальные ячейки диапазона F12:H14. Так как p ≠ q, то
формулы ячеек F12, G13, H14 заменяем значением 0. Вызываем диалоговое окно Solver и задаем сценарий решения (рис. 1.5.25).
116
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.5.25
На вкладке Параметры устанавливаем значения параметров
(рис. 1.5.26).
Рис. 1.5.26
Закрываем ее кнопкой ОК. Команда Выполнить диалогового окна
Поиск решения возвращает сообщение, что решение найдено и в диапазоне E5:H8 оптимальные значения переменных xij, в ячейке I9 оптимальное значение целевой функции (рис. 1.5.27). Естественно, полученные результаты совпадают с полученными непосредственными
вычислениями методом ветвей и границ. Желтым цветом выделены
ячейки с дополнительными переменными.
Глава 5. Задача коммивояжера
117
Рис. 1.5.27
Аналогично решаются задачи больших размерностей. Пусть введена
матрица весовых коэффициентов задачи коммивояжера (рис. 1.5.28).
Рис. 1.5.28
После ввода формул целевой функции и ограничений задается
сценарий решения (рис. 1.5.29).
Рис. 1.5.29
118
Часть I. Дискретная математика с применением VBA Excel
Значения параметров – как на рис. 1.5.26. По команде Выполнить
получаем (рис. 1.5.30) звенья оптимального контура (1, 4), (4, 3),
(3, 5), (5, 6), (6, 2), (2, 1) и оптимальное значение целевой функции.
Рис. 1.5.30
Макрос Voyage, применяемый стандартно, автоматически сводит
задачу коммивояжера к задаче линейного программирования и возвращает матрицу смежности оптимального контура и сумму (ниже и
правее) его весовых коэффициентов.
Например, пусть входные данные задачи коммивояжера имеют
вид, как на рис. 1.5.31.
Рис. 1.5.31
Тогда запуск макроса Voyage на исполнение возвращает (рис. 1.5.32)
в диапазоне I9:P16 матрицу смежности оптимального контура 1 – 4 –
8 – 7 – 2 – 3 – 6 – 5 – 1 и в ячейке Q17 оптимальное значение целевой
функции.
Рис. 1.5.32
Глава 5. Задача коммивояжера
119
§4. Сведение к задаче квадратичного
программирования
Такой подход избавляет от дополнительных переменных, тем самым существенно уменьшая число ограничений, и позволяет решать не только
задачу коммивояжера, но и ее обобщения. В этом и следующем параграфах будем считать, что число вершин графа G равно n + 1 и I, J = 0, 1, 2,
…, n, значения строчных индексов, если не указано иное: 1, 2, …, n.
Введем в рассмотрение вспомогательные функции ϕk(v), v ∈ {1, 2,
…, n}:
(5.8)
Принимаемые ими значения:
(5.9)
Лемма 5.3. Матрица смежности A = (aIJ) гамильтонова контура S ⊂ G, последовательность индексов вершин которого имеет вид
(0, v1, v2, …, vn, 0), vi ∈ {1, 2, …, n}, состоит из элементов, записываемых
с помощью функций (5.8) в виде:
a0j = ϕj(v1),
(5.10)
(5.11)
ai0 = ϕi(vn), aII = 0.
(5.12)
Доказательство. Действительно, если дуга (A0, Aq) принадлежит
S, то v1 = q и формула (5.10) приводит, с учетом (5.9), к элементам
строки с индексом 0 матрицы смежности контура S:
Если дуга (Ap, Aq) принадлежит S, то найдется такое значение k,
k < n, что vk = p, vk+1 = q, причем этих значений, так как контур яв-
120
Часть I. Дискретная математика с применением VBA Excel
ляется гамильтоновым, нет среди остальных значений vi. Поэтому по
формуле (5.11) получаем:
и
Однако именно такой вид имеют элементы строки p и столбца q
в матрице смежности контура S. Аналогично проверяется справедливость формул (5.12).
Теорема 5.5. Задача коммивояжера с (n + 1)-ой вершинами сводится к задаче квадратичного программирования с n2 булевыми переменными xij, в которой целевая функция имеет вид
(5.13)
где
(5.14)
ограничения:
(5.15)
Доказательство. В силу леммы 5.3, считая vi ∈ {1, 2, …, n} независимыми переменными, значения которых попарно различны, целевую
функцию задачи коммивояжера можно записать в виде (5.13), где cIJ
выражаются через переменные vi по формулам (5.10–5.12). При этом
ограничения на переменные vi записываются с помощью функций,
определяемых формулами (5.8), в виде:
(5.16)
В силу первого из них выполняется vi ∈ {1, 2, …, n}, в силу второго вида ограничений (6.16) значения, принимаемые переменными
vi, попарно различны. Следовательно, задача коммивояжера в переменных vi имеет вид (5.13, 10–12, 16). Делая переход к булевым пере-
Глава 5. Задача коммивояжера
121
менным xij = ϕj(vi), так как это приводит формулы (5.10–5.12) к виду
(5.14), а ограничения (5.16) – к ограничениям (5.15), получаем задачу
(5.13–5.15).
Замечание. Последовательность проходимых оптимальным контуром вершин (0, v*1, v*2, … v*n, 0) находится по решению x*ij задачи
(5.13–5.15) как с помощью матрицы смежности (5.14), так и непосредственно по единичным значениям x*ij:
*
*
*
x ij = 1 ⇒ ϕj(v i) = 1 ⇒ v i = j.
Задача 5.4.1. Найти сведением к квадратичному программированию оптимальный контур задачи коммивояжера, заданной
табл. 1.5.3.
Таблица 1.5.3
A0
A1
A2
A3
A4
A0
0
27
43
16
30
A1
7
0
13
16
46
A2
20
16
0
25
27
A3
21
1
35
0
48
A4
12
30
5
18
0
Решение. Обозначаем через xij (i, j = 1, 2, 3, 4) независимые булевы
переменные. По формулам (5.14) получаем:
aII = 0, I = 0, 1, …, 4; a0j = x1j, i = 1, 2, 3, 4; ai0 = x4i, i = 1, 2, 3, 4;
a12 = x11x22 + x21x32 + x31x42, a21 = x12x21 + x22x31 + x32x41,
a13 = x11x23 + x21x33 + x31x43, a23 = x12x23 + x22x33 + x32x43,
a14 = x11x24 + x21x34 + x31x44, a24 = x12x24 + x22x34 + x32x44,
a31 = x13x21 + x23x31 + x33x41, a41 = x14x21 + x24x31 + x34x41,
a32 = x13x22 + x23x32 + x33x42, a42 = x14x22 + x24x32 + x34x42,
a34 = x13x24 + x23x34 + x33x44, a43 = x14x23 + x24x33 + x34x43.
Открываем Excel и вводим матрицу весовых коэффициентов:
Рис. 1.5.33
122
Часть I. Дискретная математика с применением VBA Excel
Ячейки диапазона A6:D9 оставляем за независимыми переменными xij, в диапазоне F6:J10 будет матрица смежности. Учитывая записанные выше формулы, ячейки F6, G7,H8, I9, J10 оставляем пустыми,
значение 0 в них по умолчанию. В ячейку G6 вводим формулу =A6
и копируем ее в ячейки H6:J6, в ячейкиF7:F10 вводим соответственно формулы =A9, =B9, =C9, =D9. Формулы ячеек G7:J10 приведены
в табл. 1.5.4.
Таблица 1.5.4
=A6*B7+A7*B8+A8*B9
=A7+B7*A8+B8*A9
=A7+C7*A8+C8*A9
=A7+D7*A8+D8*A9
=C6*B7+C7*B8+C8*B9
=D6*B7+D7*B8+D8*B9
=A6*C7+A7*C8+A8*C9
=B6*C7+B7*C8+B8*C9
=A6*D7+A7*D8+A8*D9
=B6*D7+B7*D8+B8*D9
=C6*D7+C7*D8+C8*D9
=D6*C7+D7*C8+D8*C9
В ячейку E6 вводим формулу =СУММ(A6:D6) и копируем ее
в ячейки E7:E9 – это формулы первой группы ограничений, в ячейку A10 вводим формулу =СУММ(A6:A9) и копируем ее в ячейки
B10:D10 – это формулы второй группы ограничений. Целевую функцию задаем в ячейке K11 формулой =СУММПРОИЗВ(A1:E5;F6:J10).
Вызываем диалоговое окно Solver и задаем сценарий решения
(рис. 1.5.34).
Рис. 1.5.34
По команде Выполнить в диапазоне F6:J10 получаем матрицу
смежности оптимального контура, в ячейке K11 – оптимальное значение целевой функции:
Глава 5. Задача коммивояжера
123
Рис. 1.5.35
В диапазоне A6:D9 возвращаются оптимальные значения независимых переменных xij:
Рис. 1.5.36
Из данных, показанных на рис. 1.5.35, следует, что оптимальный
контур:
(A0, A1), (A1, A3), (A3, A2), (A2, A4), (A4, A0).
Такой же результат вытекает из полученных значений, представленных на рис. 1.5.36.
x11 = 1 ⇒ ϕ1(v1) = 1 ⇒ v1 = 1; x32 = 1 ⇒ ϕ2(v3) = 1 ⇒ v3 = 2;
x23 = 1 ⇒ ϕ3(v2) = 1 ⇒ v2 = 3; x44 = 1 ⇒ ϕ4(v4) = 1 ⇒ v4 = 4.
Ответ: (A0, A1), (A1, A3), (A3, A2), (A2, A4), (A4, A0), min z = 68.
Макрос Travel избавляет пользователя Excel от необходимости
вводить формулы, достаточно ввести матрицу весовых коэффициентов задачи коммивояжера и запустить макрос на исполнение. Решим
с его помощью последнюю задачу, вводим данные как на рис. 1.5.33 и
выделяем их. Запуская макрос на исполнение, получаем (рис. 1.5.37)
в диапазоне A7:D10 оптимальные значения независимых переменных
xij, в диапазоне A12:E16 – матрицу смежности оптимального контура
(выделена желтым цветом), в ячейке F17 – оптимальное значение целевой функции:
124
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.5.37
Применение макроса Travel к данным, показанным на рис. 1.5.31,
также дает полученные ранее результаты (рис. 1.5.38).
Рис. 1.5.38
§5. Обобщения задачи коммивояжера
Задача коммивояжера имеет ряд обобщений. Рассмотрим некоторые
из них.
1. Задача коммивояжера с контуром, состоящим из указанного
числа дуг, проходящим через указанную вершину. Найти в графе
G с (n + 1)-ой вершинами простой контур, состоящий из m + 1 дуг,
1 ≤ m ≤ n, проходящий через указанную вершину, суммарный вес которых является минимальным.
Не нарушая общности, можно считать, что контур должен проходить через вершину A0. Пусть последовательность индексов вершин
Глава 5. Задача коммивояжера
125
контура имеет вид (0, v1, …, vm, 0), vr ∈ {1, 2, …, n}, r = 1, 2, …, m. Тогда,
как нетрудно показать, соотношения (5.14, 15), соответственно, запишутся в виде:
(5.17)
(5.18)
Откуда следует
Теорема 5.6. Задача нахождения в графе G с (n + 1)-ой вершинами простого контура, состоящего из m + 1 дуг, 1 ≤ m ≤ n, m = const,
проходящего через вершину A0, суммарный вес которых является минимальным, сводится к задаче (5.13, 17, 18) квадратичного программирования с mґn булевыми переменными xrj, r = 1, 2, …, m.
Понятно, что теорема 5.5 есть частный случай теоремы 5.6.
Задача 5.5.1. Найти по данным табл. 1.5.3 простой контур, состоящий из четырех дуг, проходящий через вершину A0, суммарный
вес которых является минимальным.
Решение. Обозначаем через xrj, r = 1, 2, 3, j = 1, 2, 3, 4, независимые
булевы переменные. По формулам (5.17) получаем:
aII = 0, I = 0, 1, …, 4; a0j = x1j, i = 1, 2, 3, 4; ai0 = x3i, i = 1, 2, 3, 4;
a12 = x11x22 + x21x32,
a21 = x12x21 + x22x31,
a13 = x11x23 + x21x33,
a23 = x12x23 + x22x33,
a14 = x11x24 + x21x34,
a24 = x12x24 + x22x34,
a31 = x13x21 + x23x31,
a41 = x14x21 + x24x31,
a32 = x13x22 + x23x32,
a42 = x14x22 + x24x32,
a34 = x13x24 + x23x34,
a43 = x14x23 + x24x33.
В ограничениях (5.18) принимаем n = 4, m = 3. Вводим на лист
Excel матрицу весовых коэффициентов (рис. 1.5.33). Ячейки A6:D8
оставляем за независимыми переменными xij, ячейки F6:J10 – за матрицей смежности. В ячейку E6 вводим формулу =СУММ(A6:D6) и
копируем ее в остальные ячейки диапазона E6:E8 – формулы первой
группы ограничений, в ячейку A9 вводим формулу =СУММ(A6:A8)
и копируем ее в ячейки B9:D9 – формулы второй группы ограничений. Ячейки F6, G7,H8, I9, J10 оставляем пустыми, в ячейку G6 вводим формулу =A6 и копируем ее в ячейки H6:J6, в ячейки F7:F10 вводим соответственно формулы =A8, =B8, =C8, =D8. Формулы ячеек
G7:J10 приведены в табл. 1.5.5.
126
Часть I. Дискретная математика с применением VBA Excel
Таблица 1.5.5
=A6*B7+A7*B8
=B6*A7+B7*A8
=C6*A7+C7*A8
=D6*A7+D7*A8
=C6*B7+C7*B8
=D6*B7+D7*B8
=A6*C7+A7*C8
=B6*C7+B7*C8
=A6*D7+A7*D8
=B6*D7+B7*D8
=C6*D7+C7*D8
=D6*C7+D7*C8
Целевую функцию задаем в ячейке K11 формулой:
=СУММПРОИЗВ(A1:E5; F6:J10).
Вызываем диалоговое окно Solver и задаем сценарий решения
(рис. 1.5.39).
Рис. 1.5.39
По команде Выполнить в диапазоне F6:J10 получаем (рис. 1.5.40)
матрицу смежности оптимального контура, в ячейке K11 – оптимальное значение целевой функции.
Рис. 1.5.40
Глава 5. Задача коммивояжера
127
В диапазоне A6:D8 возвращаются (рис. 1.5.41) оптимальные значения независимых переменных xij.
Рис. 1.5.41
Из данных рис. 1.5.40 следует, что оптимальный контур:
(A0, A2), (A2, A1), (A1, A3), (A3, A0).
Такой же результат вытекает из полученных значений xij
(рис. 1.5.41):
x12 = 1 ⇒ ϕ2(v1) = 1 ⇒ v1 = 2;
x21 = 1 ⇒ ϕ1(v2) = 1 ⇒ v2 = 1;
x33 = 1 ⇒ ϕ3(v3) = 1 ⇒ v3 = 3.
Ответ: (A0, A2), (A2, A1), (A1, A3), (A3, A0), min z = 50.
2. Задача коммивояжера с двойным возвращением в указанную
вершину. Найти в графе G с (n + 1)-ой вершинами два простых контура, состоящие из m + 1 и n – m + 1 дуг, 1 ≤ m ≤ n – 1, m = const, имеющие
только общую указанную вершину, суммарный вес которых является
минимальным.
Будем считать, что указана вершина A0. Пусть последовательность
индексов вершин первого контура имеет вид (0, v1, …, vm, 0), vr ∈ {1, 2,
…, n}, r = 1, …, m, а для второго контура она имеет вид (0, u1, …, un–m, 0),
up ∈ {1, 2, …, n}, p = 1, 2, …, n – m. Ввод двух видов булевых переменных xrj, ypj позволяет записать элементы матрицы смежности первого
контура в виде (5.17), а элементы матрицы смежности второго контура – в виде
(5.19)
Приходим к следующей теореме, в которой ограничения (5.23)
следуют из того, что через каждую вершину Ai должен проходить
только один из этих контуров.
Теорема 5.7. Задача нахождения в графе G с (n + 1)-ой вершинами двух простых контуров, состоящих из m + 1 и n – m + 1 дуг,
1 ≤ m ≤ n – 1, не имеющих других общих вершин, кроме вершины A0,
суммарный вес которых является минимальным, сводится к задаче
128
Часть I. Дискретная математика с применением VBA Excel
квадратичного программирования с n2 булевыми переменными xrj, ypj,
r = 1, …, m, p = 1, …, n – m:
(5.20)
где коэффициенты вычисляются по формулам (5.17, 5.19), ограничения:
(5.21)
(5.22)
(5.23)
Замечание. По аналогии ставятся и решаются задачи, когда число
контуров больше двух.
Задача 5.5.2. Найти по данным табл. 1.5.3 два простых контура,
каждый из которых состоит из трех дуг, не имеющих других общих
вершин, кроме вершины A0, суммарный вес которых является минимальным.
Решение. Вводим два вида булевых переменных xrj и yrj, r = 1, 2;
j = 1, 2, 3, 4. По формулам (5.17, 5.19) получаем:
aII = 0, I = 0, 1, …, 4; a0j = x1j, i = 1, 2, 3, 4; ai0 = x2i, i = 1, 2, 3, 4;
a12 = x11x22, a21 = x12x21,
a31 = x13x21,
a41 = x14x21,
a13 = x11x23, a23 = x12x23,
a32 = x13x22,
a42 = x14x22,
a14 = x11x24, a24 = x12x24,
a34 = x13x24,
a43 = x14x23,
bII = 0, I = 0, 1, …, 4; b0j = y1j, i = 1, 2, 3, 4; bi0 = y2i, i = 1, 2, 3, 4;
b12 = y11y22, b21 = y12y21,
b31 = y13y21,
b41 = y14y21,
b13 = y11y23, b23 = y12y23,
b32 = y13y22,
b42 = y14y22,
b14 = y11y24, b24 = y12y24,
b34 = y13y24,
b43 = y14y23.
Ограничения (5.21, 5.22) принимают вид:
Глава 5. Задача коммивояжера
129
Ограничения (5.23) записываются в виде:
Открываем лист Excel и вводим заданную матрицу весовых коэффициентов (рис. 1.5.33). Ячейки A6:D7 оставляем за переменными xrj,
ячейки A15:D16 – за переменными yrj. Матрицы смежностей контуров
будут в ячейках F6:J10 и F15:J19 соответственно. В ячейку E6 вводим
формулу =СУММ(A6:D6) и копируем ее в ячейку E7, в ячейку A8
вводим формулу =СУММ(A6:A7) и копируем ее в ячейки B8:D8. Аналогично в ячейку E15 вводим формулу =СУММ(A15:D15) и копируем ее в ячейку E16, в ячейку A17 вводим формулу =СУММ(A15:A16)
и копируем ее в ячейки B15:D15.
Ячейки F6, G7, H8, I9, J10, а также F15, G16, H17, I18, J19 оставляем пустыми. В ячейку G6 вводим формулу =A6 и копируем ее в ячейки H6:J6, в ячейки F7:F10 вводим соответственно формулы =A7, =B7,
=C7, =D7. Формулы ячеек G7:J10 приведены в табл. 1.5.6.
Таблица 1.5.6
=A6*B7
=B6*A7
=C6*A7
=D6*A7
=C6*B7
=D6*B7
=A6*C7
=B6*C7
=A6*D7
=B6*D7
=C6*D7
=D6*C7
В ячейку G15 вводим формулу =A15 и копируем ее в ячейки
H15:J15, в ячейки F16:F19 вводим соответственно формулы =A16,
=B16, =C16, =D17. Формулы ячеек G16:J16 приведены в табл. 1.5.7:
Таблица 1.5.7
=A15*B16
=B15*A16
=C15*A16
=D15*A16
=C15*B16
=D15*B16
=A15*C16
=B15*C16
=A15*D16
=B15*D16
=C15*D16
=D15*C16
В ячейке A25 записываем формулу =A6+A7+A15+A16 и копируем
ее в ячейки B25:D25. Наконец, в ячейках K11, K20, L21 записываем
формулы:
=СУММПРОИЗВ(A1:E5;F6:J10)
=СУММПРОИЗВ(A1:E5;F15:J19)
=K11+K20
130
Часть I. Дискретная математика с применением VBA Excel
Вызываем диалоговое окно Solver и задаем сценарий решения
(рис. 1.5.42).
Рис. 1.5.42
В блоке Ограничения есть еще одно ограничение E6:E7=1. Команда Выполнить возвращает сообщение, что решение найдено, и результаты (рис. 1.5.43–1.5.45) поиска решения. На рис. 1.5.43 матрицы
смежности оптимальных контуров и значение целевой функции на
них. На рис. 1.5.44, 1.5.45 – оптимальные значения независимых переменных.
Рис. 1.5.43
Глава 5. Задача коммивояжера
Рис. 1.5.44
131
Рис. 1.5.45
Из данных, показанных на рис. 1.5.43, следует, что оптимальные
контуры:
(A0, A1), (A1, A3), (A3, A0)
и
(A0, A2), (A2, A4), (A4, A0).
Такой же результат вытекает из полученных значений xrj, yrj
(рис. 1.5.44, 1.5.45):
x11 = 1 ⇒ ϕ1(v1) = 1 ⇒ v1 = 1; y12 = 1 ⇒ ϕ2(u1) = 1 ⇒ u1 = 2;
x23 = 1 ⇒ ϕ3(v2) = 1 ⇒ v2 = 3; y24 = 1 ⇒ ϕ4(u2) = 1 ⇒ u2 = 4.
Ответ: (A0, A1), (A1, A3), (A3, A0) и (A0, A2), (A2, A4), (A4, A0), min z =
= 79.
3. Задача коммивояжера с контуром, состоящим из указанного
числа дуг. Найти в графе G с (n + 1)-ой вершинами простой контур,
состоящий из m + 1 дуг, 1 ≤ m ≤ n, суммарный вес которых является
минимальным.
Далее строчные индексы, если не указано иное, принимают значения: 0, 1, …, n.
В этой задаче, если m < n, через любую из вершин графа G контур может проходить, а может и не проходить, поэтому ограничиться
функциями (6.8) нельзя, нужны их обобщения:
Тогда с учетом
132
Часть I. Дискретная математика с применением VBA Excel
элементы aij, i ≠ j матрицы смежности оптимального контура, считая,
что он последовательно проходит через вершины с индексами (v0, v1,
…, vm, v0), можно записать в виде
Переход к булевым переменным xkj = ψj(vk) дает:
(5.24)
Поэтому справедлива
Теорема 5.8. Задача нахождения в графе G с (n + 1)-ой вершинами простого контура, состоящего из m + 1 дуг, 1 ≤ m ≤ n, суммарный
вес которых является минимальным, сводится к задаче квадратичного программирования (5.13, 5.24) с (m + 1)ґ(n + 1) булевыми переменными xrj, r = 0, 1, …, m, j = 0, 1, …, n, при ограничениях
(5.25)
Задача 5.5.3. Найти по данным табл. 1.5.3 простой контур, состоящий из четырех дуг, имеющий минимальный суммарный вес.
Решение. Обозначаем через xrj, r = 0, 1, 2, 3, j = 0, 1, …, 4 независимые булевы переменные. По формулам (5.24) получаем:
a01 = x00x11 + x10x21 + x20x31 + x30x01,
a01 = x00x12 + x10x22 + x20x32 + x30x02,
a01 = x00x13 + x10x23 + x20x33 + x30x03,
a01 = x00x14 + x10x21 + x20x34 + x30x04,
a20 = x02x10 + x12x20 + x22x30 + x32x00,
a21 = x02x11 + x12x21 + x22x31 + x32x01,
a23 = x02x13 + x12x23 + x22x33 + x32x03,
a24 = x02x14 + x12x24 + x22x34 + x32x04,
a40 = x04x10 + x14x20 + x24x30 + x34x00,
a41 = x04x11 + x14x21 + x24x31 + x34x01,
a10 = x01x10 + x11x20 + x21x30 + x31x00,
a12 = x01x12 + x11x22 + x21x32 + x31x02,
a13 = x01x13 + x11x23 + x21x33 + x31x03,
a14 = x01x14 + x11x24 + x21x34 + x31x14,
a30 = x03x10 + x13x20 + x23x30 + x33x00,
a31 = x03x11 + x13x21 + x23x31 + x33x01,
a32 = x03x12 + x13x22 + x23x32 + x33x02,
a34 = x03x14 + x13x24 + x23x34 + x33x04,
a42 = x04x12 + x14x22 + x24x32 + x34x02,
a43 = x04x13 + x14x23 + x24x33 + x34x03.
Открываем лист Excel и вводим заданную матрицу весовых коэффициентов (рис. 1.5.33). Ячейки A8:E11 оставляем за переменными
xrj, ячейки H8:L12 – за коэффициентами матрицы смежности контура. В ячейку F8 вводим формулу =СУММ(A8:E8) и копируем ее
в ячейки F9:F11, в ячейку A12 вводим формулу =СУММ(A8:A11) и
копируем ее в ячейки B12:E12.
Глава 5. Задача коммивояжера
133
Ячейки H8, I9, J10, K11, L12 оставляем пустыми. В ячейки I8:L8
вводим соответственно формулы:
=СУММПРОИЗВ($A$8:$A$10;B9:B11)+A11*B8
=СУММПРОИЗВ($A$8:$A$10;C9:C11)+A11*C8
=СУММПРОИЗВ($A$8:$A$10;D9:D11)+A11*D8
=СУММПРОИЗВ($A$8:$A$10;E9:E11)+A11*E8
В ячейки H9:H12 вводим соответственно формулы:
=СУММПРОИЗВ($B$8:$B$10;A9:A11)+$B$11*A8
=СУММПРОИЗВ($C$8:$C$10;A9:A11)+$C$11*A8
=СУММПРОИЗВ($D$8:$D$10;A9:A11)+$D$11*A8
=СУММПРОИЗВ($E$8:$E$10;A9:A11)+$E$11*A8
В ячейки J9:L9 вводим соответственно формулы:
=СУММПРОИЗВ($B$8:$B$10;C9:C11)+$B$11*C8
=СУММПРОИЗВ($B$8:$B$10;D9:D11)+$B$11*D8
=СУММПРОИЗВ($B$8:$B$10;E9:E11)+$B$11*E8
В ячейки I10:I12 вводим соответственно формулы:
=СУММПРОИЗВ($C$8:$C$10;B9:B11)+$C$11*B8
=СУММПРОИЗВ($D$8:$D$10;B9:B11)+$D$11*B8
=СУММПРОИЗВ($E$8:$E$10;B9:B11)+$E$11*B8
В ячейки K10:L10 вводим соответственно формулы:
=СУММПРОИЗВ($C$8:$C$10;D9:D11)+$C$11*D8
=СУММПРОИЗВ($C$8:$C$10;E9:E11)+$C$11*E8
В ячейки J11:J 12 вводим соответственно формулы:
=СУММПРОИЗВ($D$8:$D$10;C9:C11)+$D$11*C8
=СУММПРОИЗВ($E$8:$E$10;C9:C11)+$E$11*C8
В ячейку L11 вводим формулу:
=СУММПРОИЗВ($D$8:$D$10;E9:E11)+$D$11*E8
В ячейку K12 вводим формулу:
=СУММПРОИЗВ($E$8:$E$10;D9:D11)+$E$11*D8
В ячейке M13 записываем формулу целевой функции:
=СУММПРОИЗВ(A1:E5;H8:L12)
Вызываем диалоговое окно Solver и задаем сценарий решения
(рис. 1.5.46).
134
Часть I. Дискретная математика с применением VBA Excel
Рис. 1.5.46
Команда Выполнить возвращает сообщение, что решение найдено, и результаты поиска решения (рис. 1.5.47, 1.5.48). На рис. 1.5.47 –
оптимальные значения независимых переменных. На рис. 1.5.48 –
матрица смежности оптимального контура (H8:K11) и оптимальное
значение целевой функции (M13).
Рис. 1.5.47
Рис. 1.5.48
Следовательно, оптимальный контур такой же, как в задаче 5.5.1.
МАТЕМАТИЧЕСКИЕ
МЕТОДЫ
ЭКОНОМИКИ
С ПРИМЕНЕНИЕМ
VBA EXCEL
ЧАСТЬ
II
Некоторые задачи (транспортная задача, коммивояжера и др.) этой
части и методы их решения, в том числе макросами VBA Excel, рассматривались в части I как задачи теории графов. Программные коды
макросов и примеры их применения для сетевого планирования, теории игр, открытых систем массового обслуживания и нахождения
максимальной пропускной способности сети приведены в [11].
Математические
модели производства
и потребления
товаров
1
§1. Модель В. Леонтьева
Пусть имеются n отраслей производства, и потребления, n видов продукции с матрицей коэффициентов прямых затрат (aij), i, j = 1, 2, …, n,
xj – валовой выпуск продукции j-ой отрасли, xij – объем продукции i-й
отрасли, потребляемый в j-ой отрасли. Тогда если yi – объем продукции i-й отрасли, предназначенный для внешнего потребления (объем
i-го конечного продукта), должны выполняться уравнения Леонтьева
(межотраслевого баланса)
Откуда находится план выпуска продукции отраслями, обеспечивающий заданный выпуск продукции для внешнего потребления:
X = (E – A)–1 · Y.
Матрица (E – A)–1 называется матрицей коэффициентов полных
затрат.
Матрица А называется продуктивной, если (E – A)–1 · Y ≥ 0, ∀Y ≥ 0.
Для продуктивности матрицы А достаточно, чтобы
причем хотя бы для одного значения j неравенство было строгим.
Задача максимизации суммарной стоимости конечного продукта
([5], стр. 158), когда задана матрица цен C = (c1 c2 … cn) на конечный
Глава 1. Математические модели производства и потребления
137
продукт и производственные мощности отраслей ограничены значениями матрицы D = (d1 d2 … dn)T, имеет вид:
Для решения задач межотраслевого баланса разработан макрос
Balance.
Проект макроса Balance (рис. 2.1.1) содержит стандартный модуль
и пользовательскую форму (рис. 2.1.2).
Рис. 2.1.1
Рис. 2.1.2
138
Часть II. Математические методы экономики с применением VBA Excel
Задача 1.1.1. Имеется трехотраслевая балансовая модель с матрицей коэффициентов прямых затрат:
Найти:
1) матрицу коэффициентов полных затрат;
2) план производства, если потребности сектора конечного спроса (800, 650, 400);
3) план производства, максимизирующий суммарную стоимость
конечного продукта, если производственные мощности отраслей ограничены значениями 500, 200, 100, а цены на конечный
продукт заданы вектором (20, 50, 10).
Технология решения. Запуск макроса Balance на исполнение открывает диалоговое окно (рис. 2.1.3).
Рис. 2.1.3
1. Вводится и выделяется матрица прямых затрат (рис. 2.1.4).
Рис. 2.1.4
Выбирается первая опция, команда Выполнить открывает диалоговое окно (рис. 2.1.5).
Глава 1. Математические модели производства и потребления
139
Рис. 2.1.5
Выделение, например, диапазона E1:G3, и команда ОК возвращают в нем (рис. 2.1.6) матрицу коэффициентов полных затрат.
Рис. 2.1.6
2. Выбирается вторая опция, команда Выполнить открывает диалоговое окно (рис. 2.1.7).
Рис. 2.1.7
Ввод 800 и ОК открывают следующее окно:
Рис. 2.1.8
Ввод 650 и ОК открывают очередное окно ввода данных:
140
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.1.9
Ввод 400 и ОК вызывают диалоговое окно для указания диапазона
вывода плана производства:
Рис. 2.1.10
Выделяя, например, диапазон G1:G3, и ОК, получаем в нем план
производства (рис. 2.1.11).
Рис. 2.1.11
3. Выбирается третья опция, технология ввода данных, как в предыдущем пункте. После заполнения всех диалоговых окон получаем
результаты (рис. 2.1.12) и сообщение (рис. 2.1.13).
Рис. 2.1.12
Глава 1. Математические модели производства и потребления
141
Рис. 2.1.13
Щелчок по кнопке ОК выделяет оптимальный план производства
(Е1:Е3), и появляется сообщение (рис. 2.1.14).
Рис. 2.1.14
По команде Да выделяется ячейка I1.
Задача 1.1.2. Балансовая модель задана матрицей коэффициентов прямых затрат:
Найти план производства, если потребности сектора конечного
спроса (100, 200, 400, 500).
Технология решения. Запускается макрос Balance, что открывает
диалоговое окно, показанное на рис. 2.1.1. Выбирается вторая опция,
вводится заданная матрица (рис. 2.1.15).
Рис. 2.1.15
142
Часть II. Математические методы экономики с применением VBA Excel
По команде Выполнить, после заполнения всех диалоговых окон и
выделения диапазона G1:G4, получаем в нем план производства:
Рис. 2.1.16
Задача 1.1.3. Трехотраслевая балансовая модель в стоимостном
выражении характеризуется матрицей прямых затрат
Известно, что для увеличения в будущем году валового выпуска
1, 2, 3-й отраслей на 1 ед. необходимо затратить капиталовложений:
в 1-ю отрасль – 0,6; во 2-ю – 0,2 и в 3-ю отрасль – 0,1. Определить
оптимальное распределение капиталовложений, обеспечивающее
максимальный прирост конечного продукта в следующем году, если
размеры капиталовложений в соответствующие отрасли ограничены
числами 100, 50 и 60, а стоимости единицы конечного продукта соответственно равны 1, 5, 4 ([5], стр.159).
Технология решения. Пусть размеры капиталовложений в отрасли соответственно равны x1, x2, x3. Тогда валовые объемы отраслей
увеличатся на величины x1/0,6, x2/0,2, x3/0,1, соответственно ограниченные значениями 100/0,6, 50/0,2, 60/0,1. Макрос Balance запускается на исполнение, вводится и выделяется матрица прямых затрат
(рис. 2.1.17).
Рис. 2.1.17
Выбирается третья опция, вводятся данные (рис. 2.1.18–2.1.23).
Нажатие кнопки ОК возвращает сообщение, что решение найдено, и результаты (рис. 2.1.24) поиска оптимального плана производства.
Глава 1. Математические модели производства и потребления
Рис. 2.1.18
Рис. 2.1.19
Рис. 2.1.20
Рис. 2.1.21
Рис. 2.1.22
Рис. 2.1.23
Рис. 2.1.24
Откуда находятся оптимальные объемы капиталовложений:
x1 = 75 · 0,6 = 45, x2 = 250 · 0,2 = 50, x3 = 600 · 0,1 = 60.
Ответ: (45, 50, 60).
143
144
Часть II. Математические методы экономики с применением VBA Excel
§2. Задачи с функцией полезности
Пусть известны функция полезности u = u(x1, x2, …, xn), xi – количество товаров i-го наименования, вектор цен (p10, p20, …, pn0) на эти товары
и объем денежных средств М потребителя. Поверхность u(x1, x2, …,
xn) = C, C = const, называется поверхностью безразличия, плоскость
– плоскостью бюджетного множества (ограничения).
Макрос IsoUtility по функции u = u(x1, x2), вектору цен (p10, p20) и
заданной точке (x10, x20) проводит построение проходящей через нее:
• линии безразличия;
• бюджетной прямой;
• линии безразличия и бюджетной прямой.
Кроме того, представляет таблицу значений, по которым они строятся.
Ячейки ввода данных показаны на рис. 2.1.25:
1
A
B
x10
x20
C
D
E
F
G
H
I
u
p10
p20
h
s
r
k
Рис. 2.1.25
При этом функция u вводится как формула ячеек, содержащих x1,
x2. Значения параметров h, s, r:
• h – шаг,
• s – число шагов влево от x10,
• r – число шагов вправо от x10.
Значения параметра k:
• 1 – линия безразличия,
• 2 – бюджетная прямая,
• 3 – линия безразличия и бюджетная прямая.
Например, пусть
Вызываем макрос IsoUtility, вводим данные (рис. 2.1.26).
Рис. 2.1.26
Глава 1. Математические модели производства и потребления
145
Запуск макроса на исполнение возвращает расчетную таблицу (рис. 2.1.27)
и график линии безразличия (рис. 2.1.28).
Рис. 2.1.27
Рис. 2.1.28
Заменяя значение ячейки I1 на 2 и запуская макрос на исполнение, получаем график бюджетной прямой (рис. 2.1.29).
Рис. 2.1.29
146
Часть II. Математические методы экономики с применением VBA Excel
Замена значения ячейки I1 на 3 и запуск макроса на исполнение
возвращают оба графика в одной системе координат (рис. 2.1.30).
Рис. 2.1.30
Макрос Utility решает задачу оптимизации:
Исходные данные вводятся в первую строку, как показано на
рис. 2.1.31.
A
1
x1
B
x2
…
…
…
xn
u
p10
p20
…
pn0
М
Рис. 2.1.31
Задача 1.2.1. Функция полезности
вектор цен (1,
2, 3), объем денежных средств M = 42. Определить вектор спроса, при
котором функция полезности принимает наибольшее значение.
Технология решения. Вызывается макрос Utility, вводятся данные (рис. 2.1.32) в соответствии с рис. 2.1.31, диапазон независимых
переменных выделяется.
Рис. 2.1.32
Глава 1. Математические модели производства и потребления
147
Формула ячейки D1:
=A1^(1/2)*B1^(1/4)*C1.
Запуск на исполнение возвращает (рис. 2.1.33) оптимальные значения.
Рис. 2.1.33
Ответ: (12, 3, 8).
По функции полезности u = u(x1, x2), вектору (p10, p20) и объему денежных средств М (доход), как известно ([6], стр. 167), можно найти
зависимости
xi = xi(p1, p20, M), xi = xi(p10, p2, M), i = 1, 2.
Таблица этих зависимостей и соответствующие графики, когда
указаны шаг и число шагов, находятся макросом Price_Demand с помощью функций Solver.
Для применения макроса надо:
1) ввести в ячейку С1 функцию полезности u(x1, x2) как функцию
ячеек А1, В1;
2) указать в ячейках А1, В1 значения, при которых u > 0;
3) в ячейки D1, E1 ввести элементы вектора цен, а в ячейку F1 –
значение М;
4) в ячейке G1 указать индекс варьируемой цены;
5) в ячейках H1, I1 указать, соответственно, шаг h и число шагов n;
6) запустить (Сервис/Макрос/Макросы/Price_Demand/Выполнить) макрос на исполнение.
Задача 1.2.2. По данным
М = 60, h = 2, n = 10 найти зависимости xi = xi(pj) и построить их графики.
Технология решения. Вызывается макрос Price_Demand, вводятся данные (рис. 2.1.34).
Рис. 2.1.34
148
Часть II. Математические методы экономики с применением VBA Excel
Значение 1 ячейки G1 показывает, что изменяться будет p1. Запуск
на исполнение возвращает таблицу значений функций xi = xi(p1) и их
графики (рис. 2.1.35, 2.1.36).
Рис. 2.1.35
Рис. 2.1.36
Изменяя в данных (рис. 2.1.34) значение ячейки G1 на 2 и запуская макрос на
исполнение, получаем результаты, показанные на рис. 2.1.37, 2.1.38.
Рис. 2.1.37
Глава 1. Математические модели производства и потребления
149
Рис. 2.1.38
Макрос Income_Demand по функции полезности u = u(x1, x2) и
вектору цен (p10, p20), когда указаны шаг h и число шагов n, строит таблицу функций xi = xi(M) и их графики. Ячейки ввода данных показаны на рис. 2.1.39:
A
1
B
C
D
E
F
G
H
Функция полез. от А1, В1
p10
p20
Произв. М > 0
h
n
Рис. 2.1.39
Запуск макроса на исполнение Сервис/Макросы/Income_Demand/Выполнить.
Пусть надо по данным задачи 1.2.2 найти таблицу значений функций xi = xi(M) и построить их графики. Вызывается макрос Income_
Demand, вводятся данные:
Рис. 2.1.40
Запуск макроса на исполнение возвращает искомую таблицу
(рис. 2.1.41) и графики (рис. 2.1.42).
150
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.1.41
Рис. 2.1.42
§3. Задачи с производственной
функцией
Пусть известны производственная функция u = u(x1, x2, …, xn), цена
единицы продукции p и вектор цен на ресурсы (w1, w2, …, wn). Тогда
[6] можно найти максимальную прибыль в долгосрочном периоде как
решение задачи
и краткосрочном периоде как решение задачи
Глава 1. Математические модели производства и потребления
151
величина c ограничивает затраты на ресурсы. Эти задачи решаются
макросом MaxProfit. Исходные данные вводятся в первую строку, как
показано на рис. 2.1.43.
1
A
x1
B
x2
…
…
xn
u
p
w1
w2
…
…
wn
c
Рис. 2.1.43
При этом:
1) функция u вводится как функция ячеек, содержащих x1, x2, …,
xn;
2) значения x1, x2, …, xn принимаются такими, что u > 0;
3) если решается первая задача, то c = 0;
4) диапазон, содержащий x1, x2, …, xn, выделяется,
Макрос запускается на исполнение: Сервис/Макросы/MaxProfit/
Выполнить. Оптимальное значение целевой функции будет выделено.
Задача 1.3.1. Производственная функция
p = 3, wK = 2, wL = 5. Найти оптимальные объемы ресурсов, обеспечивающих максимальную прибыль, в долгосрочном и краткосрочном
периодах, в последнем случае принять с = 50.
Технология решения. Вызывается макрос MaxProfit, и вводятся
данные (рис. 2.1.44).
Рис. 2.1.44
Значение 0 ячейки G1 показывает, что решается задача в долгосрочном периоде, в ячейке С1 формула =7*(A1^(0,75)/3+2*B1^(0,75)/3).
Запуск макроса на исполнение возвращает в ячейках A1:B1 оптимальные объемы ресурсов, в ячейке I1 – максимальную прибыль
(рис. 2.1.45).
Рис. 2.1.45
152
Часть II. Математические методы экономики с применением VBA Excel
Ввод в ячейку G1 значения 50, выделение диапазона A1:B1 и запуск макроса на исполнение возвращают (рис. 2.1.46) оптимальные
объемы ресурсов в краткосрочном периоде (А1:В1) и максимальную
прибыль (I1).
Рис. 2.1.46
Ответ: (47,48; 19,45), 64,07; (12,35; 5,06), 43,35.
Макрос MinCost решает задачу оптимизации:
Ячейки ввода исходных данных показаны на рис. 2.1.47.
1
A
x1
B
x2
…
…
xn
u
w1
w2
…
…
wn
u0
Рис. 2.1.47
Диапазон, содержащий x1, x2, …, xn, выделяется, и макрос запускается на исполнение.
Пусть по данным задачи 1.3.1 надо найти объемы ресурсов, обеспечивающих уровень выпуска u0 = 50 с минимальными издержками.
Вызывается макрос MinCost, и вводятся данные (рис. 2.1.48).
Рис. 2.1.48
Запуск макроса на исполнение возвращает искомые значения
(рис. 2.1.49).
Рис. 2.1.49
Макрос IsoProduct по заданной точке (x10, x20) проводит построение проходящей через нее:
Глава 1. Математические модели производства и потребления
153
• изокванты;
• изокосты;
• изокванты и изокосты.
Кроме того, представляет таблицу значений, по которым они строятся.
Ячейки ввода данных показаны на рис. 2.1.50.
1
A
B
C
D
E
F
G
H
I
x10
x20
u
w1
w2
h
s
r
k
Рис. 2.1.50
Значения параметров h, s, r:
• h – шаг;
• s – число шагов влево от x10;
• r – число шагов вправо от x10.
Значения параметра k:
• 1 – изокванта;
• 2 – изокоста;
• 3 – изокванта и изокоста.
Например, вводим (рис. 2.1.51) данные задачи 1.3.1, принимая за
(x10, x20) точку, полученную при решении задачи 1.3.1 для краткосрочного периода, k = 1.
Рис. 2.1.51
Тогда запуск макроса на исполнение
возвращает таблицу (рис. 2.1.52) и график изокванты (рис. 2.1.53).
Рис. 2.1.52
154
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.1.53
При k = 2 аналогичным образом получаем график изокосты
(рис. 2.1.54).
Рис. 2.1.54
Диаграмма, возвращаемая при k = 3, показана на рис. 2.1.55.
Глава 1. Математические модели производства и потребления
155
Рис. 2.1.55
§4. Характеристики производства
К основным характеристикам производства F = F(K, L), как известно
[6], относятся:
1) предельные производительности
2) коэффициенты эластичности
3) предельные нормы замещения
Их значения с точностью до трех знаков после запятой находит
макрос Effect.
Для применения макроса надо:
1) вызвать макрос;
2) ввести в ячейку С1 производственную функцию как формулу
ячеек А1, В1;
3) указать в ячейках А1, В1 значения ресурсов;
4) запустить макрос на исполнение.
Задача 1.4.1. Производственная функция F = K0,54 · L0,46, K = 3,
L = 1. Найти характеристики эффективности производства.
Технология решения. Вызывается макрос Effect, и вводятся данные (рис. 2.1.56).
156
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.1.56
Запуск на исполнение возвращает значения шести основных характеристик производства (рис. 2.1.57).
Рис. 2.1.57
Управление
портфелем
ценных бумаг
2
§1. Средние доходности
и ковариационная матрица
Пусть имеются статистические данные mij (i = 1, 2, …, k; j, h = 1, 2, …, n)
о доходностях n видов ценных бумаг за k периодов. Тогда можно найти выборочные средние – средние доходности
и выборочную ковариационную матрицу совместного распределения
доходностей C = (cjh),
Эти величины вычисляются макросом Covaring.
Задача 2.1.1. Статистические данные о доходностях трех видов ценных
бумаг (ЦБ) приведены на рис. 2.2.1.
Рис. 2.2.1
158
Часть II. Математические методы экономики с применением VBA Excel
Найти ковариационную матрицу и средние доходности ЦБ.
Технология решения. Вызываем макрос Covaring, вводим и выделяем данные (рис. 2.2.2).
Рис. 2.2.2
Запуск макроса на исполнение открывает диалоговое окно
(рис. 2.2.3).
Рис. 2.2.3
Выделение диапазона E1:G3, подтвержденное ОК, возвращает ковариационную матрицу (рис. 2.2.4), сообщение (рис. 2.2.5) и средние
значения доходностей ЦБ (рис. 2.2.6).
Рис. 2.2.4
Рис. 2.2.5
Рис. 2.2.6
Глава 2. Управление портфелем ценных бумаг
159
§2. Задачи оптимизации портфеля
Если в портфеле ценных бумаг каждого вида x1, x2, …, xn, соответствених средние доходности M1, M2, …, Mn, то средняя доход-
но,
ность ценных бумаг, называемая доходностью портфеля, составляет:
За меру риска, связанного с получением такой доходности, следуя создателю портфельной теории Гарри Марковицу, получившему
Нобелевскую премию по экономике в 1990 году, принимают среднее
квадратическое отклонение:
Обозначения долей (весовых коэффициентов) ценных бумаг
дают:
Полученные формулы, во-первых, позволяют по заданным долям
ценных бумаг, их ожидаемым доходностям и ковариационной матрице подсчитать доходность портфеля и риск. Во-вторых, приводят
к двум задачам оптимизации (прямой и обратной). В прямой задаче
надо максимизировать доходность при ограничении на риск (дисперсию портфеля):
В обратной задаче надо минимизировать риск при ограничении на
доходность:
160
Часть II. Математические методы экономики с применением VBA Excel
Задача 2.2.1. Имеются три вида ценных бумаг с ожидаемыми
доходностями 0,6% , 2,1% и 9,0%, доли которых в портфеле составляют 40%, 50% и 10%. Известна ковариационная матрица совместного
распределения доходностей:
Найти доходность портфеля и риск.
Технология решения. Вызывается макрос Risk, и вводятся данные, как на рис. 2.2.7, ковариационная матрица выделяется.
Рис. 2.2.7
Запуск макроса на исполнение последовательно возвращает сообщения о требуемых значениях (рис. 2.2.8 и 2.2.9).
Рис. 2.2.8
Ответ: 2,2 и 7%.
Рис. 2.2.9
Глава 2. Управление портфелем ценных бумаг
161
Задача 2.2.2. Ковариационная матрица совместного распределения доходностей трех видов ценных бумаг, ожидаемые доходы от
которых составляют 20%, 40% и 10%, соответственно, имеет вид:
Найти пропорции ценных бумаг, обеспечивающие доход 30% при
минимальном уровне риска.
Решение. Математическая постановка задачи, если обозначить
пропорции ценных бумаг через xi, i = 1, 2, 3, и умножить ковариационную матрицу на 50 000, что не изменяет точек экстремума, будет
иметь вид:
Для ее решения составляем функцию Лагранжа:
L = 10x12 + 15x22 + 5x32 + 6x1x2 – 8x1x3 – 4x2x3 +
+ λ1(2x1 + 4x2 + x3 – 3) + λ2(x1 + x2 + x3 – 1).
Вычисляя частные производные и приравнивая их к нулю, получаем систему:
Вычитая 3-е уравнение из первых двух, получаем уравнения:
28x1 + 10x2 – 18x3 + λ1 = 0;
14x1 + 34x2 – 14x3 + 3λ1 = 0.
Исключая из них λ1 и добавляя последние два уравнения системы,
приходим к системе:
162
Часть II. Математические методы экономики с применением VBA Excel
Откуда находим:
В силу критерия Сильвестра целевая квадратичная форма является положительно определенной, так как:
Поэтому полученные значения доставляют минимум.
Ответ:
Технология решения задачи 2.2.2 в диалоговом режиме Excel.
Вводим ковариационную матрицу и доходности ценных бумаг, как на
рис. 2.2.10.
Рис. 2.2.10
Ячейки D1:D3 оставляем за оптимальными пропорциями. В ячейки A4:C4, соответственно, вводим формулы =D1, =D2, =D3. В ячейку
D4 записываем формулу =A1 * $D1 * A$4 и копируем ее в остальные ячейки диапазона D4:F6. В ячейку G7 записываем формулу
=СУММ(D4:F6) – дисперсия портфеля. В ячейку F1 вводим формулу =СУММ(D1:D3), а в ячейку G1 – формулу =СУММПРОИЗВ(D1:
D3;E1:E3) – доходность портфеля. Вызываем диалоговое окно Поиск
решения и вводим данные (рис. 2.2.11).
По команде Выполнить получаем сообщение, что решение найдено, и результаты поиска решения (рис. 2.2.12), оптимальные пропорции выделены, они совпадают с полученными непосредственными
вычислениями.
Глава 2. Управление портфелем ценных бумаг
163
Рис. 2.2.11
Рис. 2.2.12
Технология решения задачи 2.2.2 макросом MinRisk. Вводим данные, как на рис. 2.2.10, и выделяем диапазон А1:С3. Запуская макрос
на исполнение, получаем диалоговое окно, в котором указываем доходность портфеля (рис. 2.2.13).
Рис. 2.2.13
По команде ОК получаем сообщение, что решение найдено, и результаты поиска решения, как на рис. 2.2.12.
164
Часть II. Математические методы экономики с применением VBA Excel
Задача 2.2.3. Денежные средства могут быть инвестированы
в три вида акций, доходы по которым составляют 9,5%, 13%, 21% годовых, и в сберегательный счет с процентной ставкой 8,5% годовых.
Ковариационная матрица совместного распределения доходностей,
соответственно, имеет вид:
Найти пропорции инвестирования, обеспечивающие доход 14%
в год при минимальном уровне риска.
Технология решения. Вызываем макрос MinRisk, ковариационную матрицу вводим в диапазон A1:D4, ожидаемые доходности –
в диапазон F1:F4, диапазон A1:D4 выделяем. Запуская макрос на исполнение, после указания 0,14 в диалоговом окне ввода доходности,
получаем сообщение, что решение найдено, и результаты, показанные на рис. 2.2.14.
Рис. 2.2.14
§3. Эффективная граница
Пусть портфель может быть сформирован из n видов ценных бумаг
с ожидаемыми доходами Mi, i = 1, 2, …, n, наименьший среди которых
M *, а наибольший M **. Тогда для каждого значения θ ∈ [M *, M **] можно найти портфель с минимальным риском r = r(θ). График функции
r = r(θ) называется эффективной границей.
Макрос Effictiv строит таблицу «доходность портфеля – минимальный риск» и проводит по ней построение эффективной границы.
Глава 2. Управление портфелем ценных бумаг
165
Пусть вызван макрос Effictiv, введены данные, как на рис. 2.2.10,
и диапазон A1:C3 выделен. Запуск макроса на исполнение приводит
к диалоговым окнам ввода дополнительных данных:
Рис. 2.2.15
Рис. 2.2.16
Рис. 2.2.17
Кнопка ОК возвращает таблицу (A6:J7, рис. 2.2.18) и предложение
представить ее графическую иллюстрацию (рис. 2.2.19).
Рис. 2.2.18
Рис. 2.2.19
166
Часть II. Математические методы экономики с применением VBA Excel
В случае Да появляется диаграмма эффективной границы:
Рис. 2.2.20
Математическая постановка задачи нахождения пропорций портфеля, для которых ордината эффективной границы имеет наименьшее значение, содержит n + 1 переменную и имеет вид:
Она решается макросом MinMinRisk.
Например, вызов макроса, ввод данных, как на рис. 2.2.10, выделение диапазона с ковариационной матрицей и запуск макроса на
исполнение дают пропорции портфеля (выделены, рис. 2.2.21) и сообщение (рис. 2.2.22).
Глава 2. Управление портфелем ценных бумаг
Рис. 2.2.21
Рис. 2.2.22
167
Замкнутые системы
массового
обслуживания
3
Системы массового обслуживания [1], в которых интенсивность потока поступающих заявок зависит от состояния системы, называют
замкнутыми, или системами Т. Энгсета, который первым дал их полный анализ. Программные коды макросов для открытых систем
массового обслуживания приведены в [11].
§1. Одноканальные замкнутые СМО
Одноканальная замкнутая система массового обслуживания (СМО)
имеет один канал обслуживания и m источников заявок на обслуживание. Если заявка поступает, когда канал занят обслуживанием заявки, то она становится в очередь на обслуживание. Интенсивность
обслуживания μ, как и интенсивность λ потока заявок, поступающих
от источника, предполагаются известными. Все потоки считаются
простейшими. Задача состоит в нахождении характеристик функционирования системы.
Такая система массового обслуживания имеет m + 1 состояний, по
числу заявок в системе:
• S0 – 0 заявок (канал свободен);
• S1 – 1 заявка (канал занят обслуживанием), …;
• Sk – k заявок (одна обслуживается, k – 1 ждут очереди), …;
• Sm – m заявок (одна обслуживается, m – 1 ждут очереди).
Граф состояний показан на рис. 2.3.1:
Рис. 2.3.1
Глава 3. Замкнутые системы массового обслуживания
169
Финальные вероятности вычисляются по формулам, где
p0 = [1 + mρ + m(m – 1)ρ2 + … + m!ρm]–1,
p1 = m · ρ · p0,
p2 = m(m – 1) · ρ2 · p0,
…………………
pm = m! · ρmp0.
Вероятность, что канал занят:
Pзан = 1 – p0.
Так как интенсивность обслуживания μ, то абсолютная пропускная способность
A = (1 – p0)μ.
Среднее число заявок на обслуживание:
Среднее число заявок в очереди:
Среднее время ожидания заявки в очереди:
где
Задача 3.1.1. Рабочий обслуживает 3 станка, каждый из которых отказывает с интенсивностью λ = 1 отказ в час, интенсивность
ремонта μ = 4 станка в час. Все потоки простейшие. Найти:
1) финальные вероятности;
2) абсолютную пропускную способность А;
3) среднее относительное время простоя рабочего;
4) среднее число станков в очереди;
5) среднее число неисправных станков;
6) среднее время пребывания станка в очереди.
170
Часть II. Математические методы экономики с применением VBA Excel
Решение. В данной задаче m = 3, ρ = 0,25. Воспользуемся диалоговым режимом Excel. Заполним данные первых двух столбцов, как
показано на рис. 2.3.2.
В ячейку С2 введем формулу =ФАКТР(3)/ФАКТР(3-A2)*0,25 ^A2
и скопируем ее в ячейки C3:C5. Формулу суммы значений C2:C5 запишем в ячейку С6, в ячейке С7 по формуле =1/С6 найдем значение
p0. В ячейке С8 по формуле =(1-C7)*4 найдем абсолютную пропускную способность.
В ячейку D2 введем формулу =C2*$C$7 и скопируем ее в ячейки D3: D5. В результате диапазон D2:D5 будет содержать финальные
вероятности. Суммированием (ячейка D6) можно сделать проверку.
В ячейку E2 введем формулу =D2*B2 и скопируем ее в ячейки E3:
E5. Формулу суммы значений E2:E5 запишем в ячейку E6 – средняя
длина очереди.
В ячейку F2 введем формулу =D2*А2 и скопируем ее в ячейки
F3:F5. Формулу суммы значений F2:F5 запишем в ячейку F6 – среднее число заявок.
Для вычисления
в ячейку G2 введем формулу =(3-A2)*D2 и
скопируем ее в ячейки G3:G4. Формулу суммы значений G2:G4 запишем в ячейку G5. Формула ячейки H2 имеет вид =G2/$G$5, она
копируется в ячейки H3:H4. Наконец, в I2 записываем =A2*H2 и копируем в I3:I4. Формула суммы I2:I4 записана в ячейке I5, в ячейке I6
формула = I5/4, которая дает среднее время ожидания заявки в очереди ( ).
Результаты вычислений показаны на рис. 2.3.2, где суммы выделены желтым цветом.
Рис. 2.3.2
Ответ: 1) D2:D5; 2) C8; 3) C7; 4) E6; 5) F6; 6) I6.
Глава 3. Замкнутые системы массового обслуживания
171
§2. Многоканальные замкнутые СМО
Пусть система массового обслуживания состоит из n > 1 каналов обслуживания и m источников заявок, m > n, каждый из которых порождает простейший поток заявок с интенсивностью λ. Заявка, пришедшая от источника в момент, когда все n каналов заняты, становится
в очередь и ждет обслуживания. При этом источник может подать
следующую заявку только в том случае, если поданная им предыдущая заявка уже обслужена. Среднее время обслуживания каждым каналом одной заявки (безразлично, из какого источника):
где μ – интенсивность простейшего потока обслуживаний.
Таким образом, СМО имеет конечное число источников заявок,
каждый из которых может находиться в одном из двух состояний:
«активном» или «пассивном». Активное состояние источника – это
такое состояние, при котором уже обслужена поданная им последняя заявка. Пассивное состояние характеризуется тем, что поданная
источником последняя заявка еще не обслужена, то есть либо стоит
в очереди, либо находится под обслуживанием. В активном состоянии источник может подавать заявки, а в пассивном – нет. Следовательно, интенсивность общего потока заявок зависит от того, сколько
источников находится в пассивном состоянии, то есть сколько заявок
связано с процессом обслуживания (стоит в очереди или непосредственно обслуживается).
Состояния системы нумеруются по числу источников, пребывающих в пассивном состоянии:
• S0 – все m источников находятся в активном состоянии, все
n каналов свободны, очереди нет;
• S1 – один источник находится в пассивном состоянии, один канал занят обслуживанием заявки, поданной этим источником,
остальные m – 1 источников находятся в активном состоянии,
n – 1 каналов свободны, очереди нет;
• S2 – два источника пребывают в пассивном состоянии, два канала заняты, m – 2 источника в активном состоянии, n – 2 канала свободны, очереди нет, …;
• Sn – n источников находятся в пассивном состоянии, все n каналов заняты, m – n источников в активном состоянии, очереди
нет;
Часть II. Математические методы экономики с применением VBA Excel
172
• Sn+1 – n + 1 источников в пассивном состоянии, все n каналов
заняты, одна заявка в очереди, m – (n + 1) источников в активном состоянии, …;
• Sm – все m источников в пассивном состоянии, n каналов заняты, m – n заявок в очереди.
Граф состояний СМО показан на рис. 2.3.3:
Рис. 2.3.3
Формулы финальных вероятностей:
Закон распределения случайной величины k – числа занятых каналов имеет вид:
Таблица 2.3.1
k
P
0
p0
1
p1
…
…
n–1
pn–1
n
pn + … + pm
Поэтому среднее число заявок, находящихся под обслуживанием:
то есть
Так как – среднее число занятых каналов, а μ – интенсивность
потока обслуживаний каждым каналом (среднее число обслуженных
каждым каналом заявок за единицу времени), то абсолютная про-
Глава 3. Замкнутые системы массового обслуживания
173
пускная способность СМО (среднее число заявок, обслуживаемых
всеми каналами за единицу времени) выражается формулой:
A=
· μ.
Она же выражает интенсивность выходящего потока v = A = · μ.
Поскольку каждая заявка, поступившая в СМО, будет обслужена,
то относительная пропускная способность СМО равна 1.
Очевидно, что среднее число заявок, находящихся в системе, то
есть в очереди и под обслуживанием, равно среднему числу
источников, находящихся в пассивном состоянии. В рассматриваемой
системе всего m источников заявок, из которых в среднем
находятся в пассивном состоянии. Следовательно, m –
источников
находятся в активном состоянии, и каждый из них порождает поток
заявок с интенсивностью λ. Тогда средний суммарный входящий поток (порождаемый активными источниками) будет иметь среднюю
интенсивность
заявок в единицу времени. Поскольку все эти заявки обслуживаются
каналами, то выполняется:
Формула показывает, что средняя интенсивность входящего потока равна интенсивности выходящего потока. Поэтому среднее число
пассивных источников
среднее число заявок в очереди:
среднее время ожидания заявки в очереди:
Полная система характеристик для краткости не приводится.
Задача 3.2.1. Бригада из трех человек обслуживает 6 автоматов. Интенсивность поломки каждого автомата λ = 1. Среднее
174
Часть II. Математические методы экономики с применением VBA Excel
время, которое тратит наладчик на ремонт автомата, равно 0,5 часа.
Определить:
1) предельные вероятности;
2) среднее число неисправных автоматов;
3) среднее число автоматов в очереди;
4) среднее число свободных наладчиков.
Решение. По условию задачи λ = 1, μ = 2, n = 3, m = 6, ρ = 0,5. Воспользуемся диалоговым режимом Excel. Составляем таблицу, показанную на рис. 2.3.4. В первой строке – заголовки. Первые три столбца – числовые, остальные содержат формулы.
Формула ячейки D2
=ФАКТР(6)*(0,5)^A2/ФАКТР(6-A2)/ФАКТР(A2)
копируется в ячейки D3:D5.
Формула ячейки D6
=ФАКТР(6)*(0,5)^A6/ФАКТР(6-A6)/ФАКТР(3)/3^(A6-3)
копируется в ячейки D7,D8.
В ячейке D9 формула:
=СУММ(D2:D8)
В ячейке D10 формула =1/D9. Она возвращает значение p0. Формулы остальных ячеек указаны в заголовках, суммы выделены желтым цветом. В результате получаем:
Рис. 2.3.4
Ответ: 1) Е2:Е8; 2) F9; 3) G9; 4) H9.
Глава 3. Замкнутые системы массового обслуживания
175
§3. Макрос для замкнутых систем МО
Макрос Isolat по данным замкнутой системы массового обслуживания, одноканальной или многоканальной, находит характеристики ее
эффективности.
Проект макроса Isolat содержит стандартный модуль и две пользовательские формы (рис. 2.3.5).
Рис. 2.3.5
Код стандартного модуля:
Sub Isolat()
UserForm1.Show vbModeless
End Sub
Первая пользовательская форма – ввод данных (рис. 2.3.6).
Рис. 2.3.6
176
Часть II. Математические методы экономики с применением VBA Excel
Код пользовательской формы 1:
Private Sub CommandButton1_Click()
'Скрытие формы:
UserForm1.Hide
'Очистка рабочего листа:
Cells.Select
Selection.ClearContents
Range("A1").Select
'Объявление переменных:
Dim n As Integer, m As Integer, la As Single, toch As Currency, _
mu As Single, r As Single, p As Single, _
q As Single, p0 As Single, s As Single
'Присваивание значений:
m = Val(TextBox1.Text)
n = Val(TextBox2.Text)
la = Val(TextBox3.Text)
mu = Val(TextBox4.Text)
'Коэффициент загрузки:
r = la / mu
'Вычисления вероятности р0:
p = 1: q = 1
For i = 1 To n
q = q * (m - i + 1) * r / i
p = p + q
Next i
For i = n + 1 To m
q = q * (m - i + 1) * r / n
p = p + q
Next i
p0 = 1 / p
[a1] = p0
'Вычисления остальных финальных вероятностей:
For i = 1 To n
Cells(1, i + 1).Value = (m - i + 1) / i * r * Cells(1, i).Value
Next i
For i = n + 1 To m
Cells(1, i + 1) = (m - i + 1) / n * r * Cells(1, i).Value
Next i
Range(Cells(1, 1), Cells(1, m + 1)).NumberFormat = "0.000"
'Вычисления среднего числа занятых каналов:
k = 0: v = Cells(1, 1).Value
For i = 1 To n - 1
k = k + i * Cells(1, i + 1).Value
Глава 3. Замкнутые системы массового обслуживания
177
v = v + Cells(1, i + 1)
Next i
k = k + n * (1 - v)
toch = (m - k * mu / la - k) / (k * mu)
'Вывод вероятности простоя каналов обслуживания:
UserForm2.TextBox1.Text = Str(p0)
'Вывод среднего числа занятых каналов обслуживания:
UserForm2.TextBox2.Text = Str(k)
'Вывод абсолютной пропускной способности:
UserForm2.TextBox3.Text = Str(k * mu)
'Вывод среднего числа техники, требующей ремонта:
UserForm2.TextBox4.Text = Str(m - k * mu / la)
'Вывод средней длины очереди:
UserForm2.TextBox5.Text = Str(m - k * mu / la - k)
'Вывод среднего времени пребывания в очереди:
UserForm2.TextBox6.Text = Str(toch)
UserForm2.Show
End Sub
Результаты возвращаются на второй пользовательской форме
(рис. 2.3.7).
Рис. 2.3.7
Например, пусть запущен на исполнение макрос Isolat и введены
данные задачи 3.1.1 (рис. 2.3.8).
178
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.3.8
Тогда кнопка Выполнить возвращает диалоговое окно с характеристиками эффективности системы (рис. 2.3.9) и финальные вероятности (рис. 2.3.10), совпадающие с полученными ранее.
Рис. 2.3.9
Рис. 2.3.10
Задача 3.3.1. Экскаватор погружает на самосвал за один цикл,
составляющий 30 с, одну тонну груза. Число самосвалов грузоподъемностью 6 тонн, обслуживающих экскаватор, равно 5, время обращения 15 мин. Найти характеристики эффективности работы комплекса «экскаватор – самосвалы».
Глава 3. Замкнутые системы массового обслуживания
179
Технология решения. Время погрузки одного самосвала составляет:
В час экскаватор загружает 60/3 = 20 самосвалов, то есть μ = 20.
Интенсивность поступления самосвалов
Запускается мак-
рос Isolat, и вводятся данные (рис. 2.3.11).
Рис. 2.3.11
Кнопка Выполнить возвращает характеристики эффективности
системы (рис. 2.3.12) и финальные вероятности (рис. 2.3.13).
Рис. 2.3.12
180
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.3.13
Применение макроса Isolat к задаче 3.2.1. Ввод данных показан на
рис. 2.3.14, возвращаемые характеристики – на рис. 2.3.15, финальные
вероятности – на рис. 2.3.16.
Рис. 2.3.14
Рис. 2.3.15
Рис. 2.3.16
Глава 3. Замкнутые системы массового обслуживания
181
При решении практических задач теории массового обслуживания может оказаться полезным макрос PoissonTest, проверяющий гипотезу о распределении случайной величины X по закону Пуассона.
Задача 3.3.2. Отдел технического контроля проверил n = 200
партий одинаковых изделий и получил следующие распределения
(в первой строке указано количество xi нестандартных деталей в одной партии, во второй – частота ni, то есть количество партий, содержащих xi нестандартных деталей):
Таблица 2.3.2
xi
ni
0
116
1
56
2
22
3
4
4
2
Требуется при уровне значимости α = 0,05 принять или опровергнуть гипотезу о том, что число нестандартных деталей распределено
по закону Пуассона.
Технология решения. Запуск макроса PoissonTest открывает диалоговое окно (рис. 2.3.17). Вводятся данные (рис. 2.3.18).
Рис. 2.3.17
Рис. 2.3.18
После щелчка по кнопке Выполнить появляется диалоговое окно
ввода уровня значимости критерия (рис. 2.3.19).
182
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.3.19
Кнопка ОК возвращает сообщение (рис. 2.3.20).
Рис. 2.3.20
На рабочем листе – вычисления (рис. 2.3.21).
Рис. 2.3.21
Задача 3.3.3. Каждый час (в течение 100 часов) отмечалось
число клиентов, пришедших в парикмахерский салон. Результаты
наблюдений приведены в табл. 2.3.3:
Таблица 2.3.3
Число
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
клиентов
Наблюдаемая
0 1 2 4 5 7 11 14 13 11 9 7 6 4 3 3 0
частота
Требуется при уровне значимости α = 0,05 принять или опровергнуть гипотезу о том, что поток клиентов является пуассоновским.
Глава 3. Замкнутые системы массового обслуживания
183
Технология решения. Запускаем макрос PoissonTest, вводим и
выделяем табл. 2.3.3 (рис. 2.3.22). После команды Выполнить и ввода уровня значимости (рис. 2.3.19) получаем расчетную таблицу
(рис. 2.3.22) и сообщение о том, что гипотеза принимается (рис. 2.3.23).
Рис. 2.3.22
Рис. 2.3.23
Статические модели
управления запасами
4
§1. Макрос управления запасами
Макрос Addition находит оптимальные значения параметров заказа
для следующих моделей:
• мгновенное выполнение заказа;
• выполнение заказа с заданным сроком;
• равномерное выполнение заказа без дефицита;
• равномерное выполнение заказа с дефицитом;
• мгновенное выполнение заказа с дефицитом.
Расчетные формулы [13] легко читаются из кода макроса.
В проект макроса Addition входят стандартный модуль и 11 пользовательских форм (рис. 2.4.1).
Рис. 2.4.1
Глава 4. Статические модели управления запасами
185
Код стандартного модуля:
Sub Addition()
UserForm1.Show vbModeless
End Sub
Первая пользовательская форма – выбор типа задачи (рис. 2.4.2).
Рис. 2.4.2
Код модуля пользовательской формы UserForm1:
Private Sub UserForm_Initialize()
'Задание списка моделей:
Dim v As Variant
v = Array("Мгновенное выполнение заказа", _
"Выполнение заказа с заданным сроком", _
"Равномерное выполнение заказа без дефицита", _
"Равномерное выполнение заказа с дефицитом", _
"Мгновенное выполнение заказа с дефицитом")
ListBox1.List = v
ListBox1.ListIndex = 0
End Sub
Private Sub ListBox1_Click()
Me.Caption = ListBox1.Text
End Sub
Private Sub CommandButton1_Click()
UserForm1.Hide
Select Case ListBox1.ListIndex
Case 0
UserForm2.Show vbModeless
Case 1
UserForm3.Show vbModeless
Case 2
UserForm5.Show vbModeless
186
Часть II. Математические методы экономики с применением VBA Excel
Case 3
UserForm7.Show vbModeless
Case 4
UserForm10.Show vbModeless
End Select
End Sub
Вторая пользовательская форма – ввод данных при мгновенном
выполнении заказа (рис. 2.4.3).
Рис. 2.4.3
Код модуля пользовательской формы UserForm2:
Private Sub CommandButton1_Click()
Dim y As Double, k As Double, d As Double, h As Double, tcu As
Double
k = Val(TextBox1.Text)
h = Val(TextBox2.Text)
d = Val(TextBox3.Text)
y = Sqr(2 * k * d / h)
tcu = k * d / y + h * y / 2
UserForm9.TextBox1 = Str(y)
UserForm9.TextBox2 = Str(tcu)
UserForm9.Show
End Sub
Полученные результаты возвращаются на 9-ой пользовательской
форме (рис. 2.4.4).
Третья пользовательская форма – ввод данных при выполнении
заказа с заданным сроком (рис. 2.4.5).
Глава 4. Статические модели управления запасами
187
Рис. 2.4.4
Рис. 2.4.5
Код модуля пользовательской формы UserForm3:
Private Sub CommandButton1_Click()
Dim y As Double, k As Double, d As Double, _
h As Double, L As Double, T As Double, tcu As Double, Lo As Double
k = Val(TextBox1.Text)
h = Val(TextBox2.Text)
d = Val(TextBox3.Text)
L = Val(TextBox4.Text)
y = Sqr(2 * k * d / h)
If y / d >= L Then
T = L * d
Else
T = (L - Int(L * d / y) * y / d) * d
End If
188
Часть II. Математические методы экономики с применением VBA Excel
Lo = y / d
tcu = k * d / y + h * y
UserForm4.TextBox1.Text
UserForm4.TextBox2.Text
UserForm4.TextBox3.Text
UserForm4.TextBox4.Text
UserForm4.Show
End Sub
/
=
=
=
=
2
Str(Int(y))
Str(Lo)
Str(T)
Str(tcu)
Результаты возвращаются на четвертой пользовательской форме
(рис. 2.4.6).
Рис. 2.4.6
Пятая пользовательская форма – ввод данных при равномерном
пополнении запасов без дефицита (рис. 2.4.7).
Рис. 2.4.7
Глава 4. Статические модели управления запасами
189
Код модуля пользовательской формы UserForm5:
Private Sub CommandButton1_Click()
Dim y As Double, k As Double, d As Double, _
h As Double, a As Double, T As Double, tcu As Double, m As Double
k = Val(TextBox1.Text)
h = Val(TextBox2.Text)
d = Val(TextBox3.Text)
a = Val(TextBox4.Text)
If a <= d Then
MsgBox "Программа закрывается, некорректные значения интенсивностей"
Exit Sub
Else
y = Sqr(2 * k * d / h / (1 - d / a))
End If
m = y /d
tcu = k * d / y + h * y * (1 - d / a) / 2
UserForm6.TextBox1.Text = Str(m)
UserForm6.TextBox2.Text = Str(y)
UserForm6.TextBox3.Text = Str(tcu)
UserForm6.Show
End Sub
Результаты вычислений возвращаются на 6-й пользовательской
форме (рис. 2.4.8).
Рис. 2.4.8
Седьмая пользовательская форма – ввод данных при равномерном пополнении запасов при допущении дефицита (рис. 2.4.9).
190
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.4.9
Код модуля пользовательской формы UserForm7:
Private Sub CommandButton1_Click()
Dim y As Double, k As Double, d As Double, _
h As Double, a As Double, lt As Double, tcu As Double, p As Double, _
w As Double, lw As Double
k = Val(TextBox1.Text)
h = Val(TextBox2.Text)
d = Val(TextBox3.Text)
a = Val(TextBox4.Text)
p = Val(TextBox5.Text)
If a <= d Then
MsgBox "Программа закрывается, некорректные значения интенсивностей:
Exit Sub
Else
y = Sqr(2 * k * d * (p + h) / p / h / (1 - d / a))
End If
w = Sqr(2 * k * d * h * (1 - d / a) / p / (p + h))
tcu = k * d / y + (h * (y * (1 - d / a) - w) ^ 2 + _
p * w ^ 2) / (1 - d / a) / 2 / y
lt = y / d
lw = w / d
UserForm8.TextBox1.Text = Str(Int(y))
UserForm8.TextBox2.Text = Str(w)
UserForm8.TextBox3.Text = Str(tcu)
UserForm8.TextBox4.Text = Str(lt)
UserForm8.TextBox5.Text = Str(lw)
UserForm8.Show
End Sub
Глава 4. Статические модели управления запасами
Результаты
(рис. 2.4.10).
возвращаются
на
пользовательской
191
форме
8
Рис. 2.4.10
Десятая пользовательская форма – ввод данных при мгновенном
выполнении заказа при допущении дефицита (рис. 2.4.11).
Рис. 2.4.11
Код модуля пользовательской формы UserForm10:
Private Sub CommandButton1_Click()
Dim y As Double, k As Double, d As Double, _
h As Double, tcu As Double, p As Double, _
192
Часть II. Математические методы экономики с применением VBA Excel
w As Double
k = Val(TextBox1.Text)
h = Val(TextBox2.Text)
d = Val(TextBox3.Text)
p = Val(TextBox4.Text)
y = Sqr(2 * k * d * (p + h) / p / h)
w = Sqr(2 * k * d * h / p / (p + h))
tcu = k * d / y + (h * (y - w) ^ 2 + p * w ^ 2) / 2 / y
UserForm11.TextBox1.Text = Str(Int(y))
UserForm11.TextBox2.Text = Str(w)
UserForm11.TextBox3.Text = Str(tcu)
UserForm11.Show
End Sub
Результаты вычислений возвращаются на пользовательской форме (рис. 2.4.12).
Рис. 2.4.12
§2. Тестирование макроса
Задача 4.2.1. Потребности сборочного предприятия в деталях некоторого типа составляют 120 000 деталей в год, причем они расходуются равномерно. Детали могут поставляться партиями одинакового
объема, и их дефицит недопустим. Поставка одной партии деталей
составляет 10 000 ден. ед., а хранение одной детали на складе обходится в 0,35 ден. ед. в сутки. Определить оптимальный объем заказа
деталей.
Технология решения. Вычисляется интенсивность расхода деталей в сутки:
Вызывается макрос Zapas и запускается
на исполнение, что открывает диалоговое окно (рис. 2.4.13).
Глава 4. Статические модели управления запасами
193
Рис. 2.4.13
Выбирается первая опция, кнопкой Выполнить вызывается окно
ввода данных (рис. 2.4.14).
Рис. 2.4.14
Кнопка Выполнить возвращает диалоговое окно (рис. 2.4.15).
Рис. 2.4.15
Ответ: 4334.
194
Часть II. Математические методы экономики с применением VBA Excel
Задача 4.2.2. Объем продажи некоторого магазина составляет
в год 500 упаковок супа в пакетах. Величина спроса равномерно распределяется в течение года. Цена покупки одного пакета равна 2 руб.
За доставку заказа владелец магазина должен заплатить 10 руб. Время доставки заказа от поставщика составляет 12 рабочих дней (при
6-дневной рабочей неделе). По оценкам специалистов, издержки
хранения в год составляют 40 коп. за один пакет. Необходимо определить: сколько пакетов должен заказывать владелец магазина для
одной поставки; частоту заказов; точку заказа. Известно, что магазин
работает 300 дней в году.
Технология решения. Макрос запускается на исполнение, выбирается вторая опция, что подтверждается командой Выполнить, и
вводятся данные:
Рис. 2.4.16
Кнопка Выполнить возвращает диалоговое окно:
Рис. 2.4.17
Ответ: 158, как только число упаковок уменьшится до 20.
Глава 4. Статические модели управления запасами
195
Задача 4.2.3. На некотором станке производятся детали в количестве 2000 штук в месяц. Эти детали используются для производства продукции на другом станке с интенсивностью 500 шт. в месяц.
По оценкам специалистов компании, издержки хранения составляют
50 коп. в год за одну деталь. Стоимость подготовки производства составляет 1000 руб. Каким должен быть размер партии деталей, производимой на первом станке, с какой частотой следует запускать производство этих партий?
Технология решения. Ввод данных (рис. 2.4.18).
Рис. 2.4.18
Кнопка Выполнить возвращает диалоговое окно (рис. 2.4.19).
Рис. 2.4.19
Задача 4.2.4. В условии предыдущей задачи допускается дефицит, приносящий убытки 1,5 руб. в год с одной детали. Определить
оптимальный объем заказа деталей, минимизирующий общие издержки.
196
Часть II. Математические методы экономики с применением VBA Excel
Технология решения. Выбирается четвертый тип модели, и вводятся данные (рис. 2.4.20).
Рис. 2.4.20
Кнопка Выполнить возвращает диалоговое окно (рис. 2.4.21).
Рис. 2.4.21
Задача 4.2.5. Потребности сборочного предприятия в деталях
некоторого типа, расходуемых равномерно, составляют 120 000 деталей в год. Детали могут поставляться партиями одинакового объема.
Поставка одной партии деталей составляет 10 000 ден. ед., а хране-
Глава 4. Статические модели управления запасами
197
ние одной детали на складе обходится в 0,35 ден. ед. в сутки. Спрос
на детали сохраняется и после исчерпания запасов на складе, причем
интенсивность накопления дефицита равна интенсивности расхода
деталей. Отсутствие на сборке одной детали приносит убытки 3,5 ден.
ед. в сутки. Определить оптимальный объем заказа деталей, минимизирующий общие издержки.
Технология решения. Выбирается пятый тип модели, и вводятся
данные (рис. 2.4.22).
Рис. 2.4.22
Кнопка Выполнить возвращает диалоговое окно (рис. 2.4.23).
Рис. 2.4.23
Методы
кластеризации
5
Кластерный анализ [8] – сравнительно новый раздел математики, в котором изучаются методы разбиения совокупности объектов, заданных
конечными наборами признаков, на однородные группы (кластеры).
Он широко применяется в психологии, социологии, экономике (сегментация рынка) и других областях (см. Интернет). Базисные методы
кластерного анализа реализованы в пакетах STATISTICA и SPSS.
§1. Кластеризация методом k-средних
Метод k-средних, которым m объектов, заданных значениями n количественных признаков, разбиваются на k групп (кластеров), можно
представить следующим образом:
• шаг 1. Выбираются k объектов, которые принимаются за начальные центры кластеров;
• шаг 2. Объекты, ближайшие к центрам, объединяются в кластеры. Если шаг 2 выполняется первый раз, то на шаг 3, в противном случае на шаг 4;
• шаг 3. Находятся центры тяжести (средние) полученных кластеров и на шаг 2;
• шаг 4. Если кластеры не изменились, то останов, иначе переход
на шаг 3.
Метод k-средних реализован в пакетах STATISTICA и SPSS, макрос K_means реализует его в MS Excel в метрике квадрата расстояния
Евклида. Ввод данных:
1) значения признаков объектов вводятся построчно, начиная
с ячейки А1;
2) отступив две строки, ниже вводятся значения признаков тех k
из этих объектов, которые принимаются за начальные центры
кластеров, их порядковые номера 1, 2,…, k – номера кластеров;
Глава 5. Методы кластеризации
199
3) диапазон данных первых m строк выделяется, и макрос запускается на исполнение.
Считывание результатов:
1) номера кластеров, в которые попадают объекты, возвращаются
справа от значений их признаков;
2) центры кластеров возвращаются в тех диапазонах, в которых
вводились их начальные значения.
Например, пусть вызван макрос K-means и введены данные
(рис. 2.5.1).
Рис. 2.5.1
Тогда запуск макроса на исполнение возвращает (рис. 2.5.2) в диапазоне D1:D6 номера кластеров, в которые попадают объекты, а в диапазоне A9:B11 – координаты центров кластеров.
Рис. 2.5.2
Графическая иллюстрация – на рис. 2.5.3.
Пусть введены экономико-статистические показатели (на душу
населения) по 22 странам (рис. 2.5.4).
200
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.5.3
Рис. 2.5.4
Тогда переход к нормированным показателям
и запуск
макроса, когда за начальные центры кластеров приняты первые четыре страны, возвращает разбиение на четыре кластера (рис. 2.5.5) и
центры кластеров (рис. 2.5.6).
Глава 5. Методы кластеризации
201
Рис. 2.5.5
Рис. 2.5.6
§2. Иерархическая кластеризация
(макрос Joining)
Макрос Joining проводит иерархическую кластеризацию m объектов,
заданных значениями n признаков, по принципу «ближайшего соседа» в метрике квадрата расстояния Евклида и возвращает все расчетные таблицы. Ввод данных:
1) значения признаков вводятся построчно, начиная с ячейки А1;
2) данные выделяются, и макрос запускается на исполнение.
Считывание результатов:
1) справа от входных данных возвращаются расчетные таблицы
(сверху вниз);
2) еще правее объединяемые компоненты и пороговые расстояния s, причем если объединяются компоненты i, j (i < j), то далее их объединение обозначается i.
202
Часть II. Математические методы экономики с применением VBA Excel
Например, пусть вызван макрос Joining, введены и выделены данные (рис. 2.5.7).
Рис. 2.5.7
Тогда запуск макроса на исполнение возвращает в диапазоне
D1:H14 расчетные таблицы (рис. 2.5.8), а в диапазоне J1:L4 – таблицу
объединения кластеров (рис. 2.5.9).
Рис. 2.5.9
Рис. 2.5.8
Дендрограмма кластеризации – на рис. 2.5.10.
Рис. 2.5.10
Глава 5. Методы кластеризации
Пусть введены данные (рис. 2.5.4) и
сделан переход к нормированным показателям (рис. 2.5.5). Тогда выделение диапазона A1:F22 и запуск макроса Joining на исполнение возвращают (рис. 2.5.11) таблицу
иерархической кластеризации (диапазон
AF1:AH22). По ней строится дендрограмма
кластеризации (рис. 2.5.12).
Рис. 2.5.11
Рис. 2.5.12
203
204
Часть II. Математические методы экономики с применением VBA Excel
§3. Иерархическая кластеризация
(макрос Ward)
Макрос Ward выполняет иерархическую кластеризацию m объектов,
заданных значениями n признаков, методом Ward’s, когда расстояние
между кластерами X, Y вычисляется по формуле
kX, kY – число объектов в кластерах,
– средние значения признаков.
Ввод данных:
1) значения признаков объектов задаются списком, начиная
с ячейки А2;
2) в столбце после заданных значений можно ввести имена объектов;
3) в первой строке вводятся номера (наименования) признаков;
4) диапазон, содержащий значения признаков, выделяется, и макрос запускается на исполнение.
Считывание результатов: номера объединяемых кластеров и расстояния между ними возвращаются в трех столбцах справа от диапазона данных, причем если в кластер объединяются кластеры i, j (i < j),
то далее i – номер этого кластера.
Например, пусть вызван макрос Ward и введены данные (рис. 2.5.13).
Рис. 2.5.13
Тогда запуск макроса на исполнение возвращает таблицу объединения кластеров (рис. 2.5.14).
Рис. 2.5.14
Глава 5. Методы кластеризации
205
Дендрограмма кластеризации – на рис. 2.5.15.
Рис. 2.5.15
Пусть введены данные (рис. 2.5.16) и сделан переход к нормированным показателям. Тогда выделение диапазона B2:G23 и запуск
макроса Ward на исполнение возвращают таблицу иерархической
кластеризации методом Ward’s (рис. 2.5.17).
Рис. 2.5.16
206
Часть II. Математические методы экономики с применением VBA Excel
Рис. 2.5.17
Дендрограмма – на рис. 2.5.18.
§4. Кластеризация с помощью циклов
Пусть объекты (точки)
заданы значениями m количественных признаков aik,
Спрашивается, можно ли считать их однородной группой объектов? И если нет, то на какие однородные группы они разбиваются? Для ответов на эти вопросы, а они в кластерном
анализе являются основными, предлагается следующий метод, состоящий в поиске кратчайшего цикла γ, проходящего через точки Ai,
когда расстояния dij между ними вычислены в некоторой выбранной
метрике (евклидовой, квадрата евклидовой и т. д.). Если окажется,
что цикл γ односвязный, то заданные объекты объединяются в одну
группу. Если цикл γ распадается на односвязные циклы γ1, γ2, …, γr,
то и заданная совокупность объектов распадается на такое же число
групп, состоящих из тех объектов, через которые проходит каждый
из этих циклов.
Для нахождения цикла γ по матрице D = (dij) в двоичных (булевых) переменных xij составляется и решается задача линейного про-
Глава 5. Методы кластеризации
207
Рис. 2.5.18
граммирования (математическая модель задачи коммивояжера без
ограничений на односвязность оптимального цикла):
dii = d, d > dij, i ≠ j.
208
Часть II. Математические методы экономики с применением VBA Excel
Преимуществом метода является то, что он сразу дает число кластеров и их компоненты.
Пример. Провести классификацию n = 10 объектов, заданных тремя признаками, значения которых приведены в таблице:
0,2
0,3
0,3
0,4
0,5
0,5
0,6
0,7
0,8
0,9
2,5
2,7
2,4
2,6
2,2
2,3
2,3
2,1
2,4
2,4
2,3
1,8
1,6
1,6
2,4
2,2
2,5
2,1
2,1
2,5
Технология решения. Вводим данные на рабочий лист Excel
(рис. 2.5.19).
Рис. 2.5.19
В ячейке F1 записываем формулу =СУММКВРАЗН(А1:С1, A$2:
C$2) и копируем ее в ячейки диапазона F3:F10. По аналогии заполняем остальные столбцы диапазона E1:N10, кроме диагональных ячеек,
в которые вводим значение 10, что дает матрицу D в метрике квадрата
расстояния Евклида (рис. 2.5.20).
Диапазон E12:N21 оставляем за независимыми двоичными переменными. В ячейку O12 вводим формулу =СУММ(E12:N12) и копируем ее в ячейки O13:O21. Аналогично в ячейку E22 вводим формулу =СУММ(E12:E21) и копируем ее в ячейки F22:N22. В ячейку
O22 вводим формулу целевой функции: =СУММПРОИЗВ(E1:N10;
Глава 5. Методы кластеризации
209
Рис. 2.5.20
E12:N21). Вызываем диалоговое окно Поиск решения и задаем следующий сценарий:
Рис. 2.5.21
Команда Выполнить в диапазоне E12:N21 возвращает:
Рис. 2.5.22
210
Часть II. Математические методы экономики с применением VBA Excel
Откуда следует, что заданная совокупность объектов разбивается
на два кластера: {1,2,3,4} и {5,6,7,8,9,10}. Графическая иллюстрация,
выполненная в пакете STATISTICA, дана на рис. 2.5.22.
Рис. 2.5.22
Разработка макроса для данного метода – задание для самостоятельного решения.
Литература
1. Вентцель Е. С., Овчаров Л. А. Прикладные задачи теории вероятностей. – М.: Радио и связь, 1983. – 416 с., ил.
2. Гаврилов Г. П., Сапоженко А. А. Сборник задач по дискретной математике. – М.: ФИЗМАТЛИТ, 2005. – 416 с.
3. Гарнаев А. Ю. MS Excel 2002: разработка приложений. – СПб.: БХВПетербург, 2003. – 768 с.: ил.
4. Ерусалимский Я. М. Дискретная математика: теория, задачи, приложения. – М.: Вузовская книга, 2000. – 280 с.
5. Калихман И. Л. Сборник задач по математическому программированию. – 2-е изд., доп. и перераб. – М.: Высшая школа, 1975. – 270 стр., ил.
6. Колемаев В. А. Математическая экономика: учеб. для вузов. – М.:
ЮНИТИ-ДАНА, 2002. – 399 с.
7. Кузнецов О. П., Адельсон-Вельский Г. М. Дискретная математика для
инженера. – М.: Энергоатомиздат, 1988. – 480 с.
8. Мандель И. Д. Кластерный анализ. – М.: Финансы и статистика, 1988. –
176 с.: ил.
9. Мендельсон Э. Введение в математическую логику. – М.: Наука, 1971. –
320 стр., ил.
10. Сдвижков О. А. Математика в Excel 2003. – М.: СОЛОН-Пресс,
2005. – 192 с.
11. Сдвижков О. А. Excel-VBA. Словарь-справочник пользователя. – М.:
Эксмо, 2008. – 224 с., ил.
12. Сдвижков О. А. Библиотека макросов Excel для дискретной математики и экономических данных // Труды Международной конференции «Информатизация инженерного образования». – М.: Издательский дом МЭИ,
2012. – С. 495–496.
13. Таха Х. А. Введение в исследование операций. – 6-е изд. / пер. с англ. –
М.: Издательский дом «Вильямс», 2001. – 913 с., ил.
14. Тишин В. В. Дискретная математика в примерах и задачах. – СПб.:
БХВ-Петербург, 2008. – 352 с.
15. Успенский В. А. Машина Поста. – 2-е изд., испр. – М.: Наука: Гл. ред.
физ.-мат. лит., 1988. – 96 с.
16. Филлипс Д., Гарсиа-Диас А. Методы анализа сетей / пер. с англ. – М.:
Мир, 1984. – 496 с., ил.
Книги издательства «ДМК Пресс» можно заказать в торгово-издательском холдинге «АЛЬЯНС БУКС» наложенным платежом, выслав
открытку или письмо по поч товому адресу: 123242, Москва, а/я 20 или
по электронному адресу: orders@alians-kniga.ru.
При оформлении заказа следует указать адрес (полностью), по которому должны быть высланы книги; фамилию, имя и отчество получателя. Желательно также указать свой телефон и электронный адрес.
Эти книги вы можете заказать и в интернет-магазине: www.alianskniga.ru.
Оптовые закупки: тел. (499) 725-54-09, 725-50-27; электронный
адрес books@alians-kniga.ru.
Сдвижков Олег Александрович
Дискретная математика
и математические методы экономики
с применением VBA Excel
Главный редактор
Мовчан Д. А.
dm@dmk-press.ru
Корректор
Верстка
Дизайн обложки
Синяева Г. И.
Чаннова А. А.
Мовчан А. Г.
Подписано в печать 17.08.2012. Формат 60×90 1/16.
Гарнитура «Петербург». Печать офсетная.
Усл. печ. л. 13.25. Тираж 300 экз.
Веб-сайт издательства: www.dmk-press.ru
Download