УДК 004.8
НАУЧИМ МАШИНУ НАДЕЖДЕ?
Мельников Борис Феликсович,
профессор, доктор физико-математических наук,
ФГБОУ ВПО «Тольяттинский государственный университет», Тольятти, Россия B.Melnikov@tltsu.ru
Любого человека интересуют проблемы создания искусственного разума. Однако один из главных аргументов против проведения подобных работ - отсутствие у искусственного разума стремления к самосовершенствованию... Но во всех ли «интеллектуальных» программах нет такого стремления? Взгляд автора на «целеустремленные» программы (и их примеры) - предмет данной статьи.
Ключевые слова: искусственный интеллект; самосовершенствование; интеллектуальные игры; эвристические алгоритмы; задачи дискретной оптимизации.
LET US TEACH COMPUTER ТО HOPE, DON’T WE?
Melnikov Boris,
professor, doctor of physical and mathematical sciences, Togliatti State University, Togliatti, Russia B.Melnikov@tltsu.ru
Any person interested in the problem of creating artificial intelligence. However, one of the main arguments against this type of work is the lack of artificial intelligence to desire for self-improvement. But whether all the intelligence programs do not have such aspirations? The subject of this paper is the author’s opinion on the «purposeful» programs and some corresponding examples.
Key words: artificial intelligence; self-perfection; intelligence games; heuristic algorithms; discrete optimization problems.
1. Искусственный интеллект - без надежды?
В различных СМИ постоянно появляются популярные статьи про искусственный интеллект (до научно-популярных они часто не дотягивают) - и интерес к этой теме то несколько затихает, то вспы-
хивает вновь... Один из самых больших пиков этого интереса был лет 12-15 назад - вскоре после «исторической победы машинного разума» над шахматным чемпионом того времени Гарри Каспаровым. Возможно, 16 лет назад, 11 мая 1997 г., действительно была преодолена очередная ступенька - машина обыграла чемпиона мира, причем, по мнению многих шахматистов, не просто «13-го по счету», а одного из трех лучших, с которым из предыдущих поколений сравнивают лишь П. Морфи и А. Алехина ([1] и др.).
Итак, успехи в создании машинного разума есть; что же тормозит дальнейшие работы? Приведем одну интересную мысль, «замеченную» в последние несколько лет в различных научно-популярных статьях и на многих страницах сети Интернет, [2,3,4]: ну, нет у искусственного разума стимула к совершенствованию. нет и никогда не будет. Действительно: зачем ему (искусственному разуму) «самоулучшаться» - ведь подобными действиями «занимается» только человек.
Но: у всех ли «интеллектуальных» программ нет такого стремления? По мнению автора данной статьи, есть несколько примеров «целеустремленных» программ; приведем два. Во-первых, программы, играющие в интеллектуальные игры, [5,6] и мн. др. Во-вторых - программы, решающие специальные задачи с помощью так называемых «генетических алгоритмов», программы, в чем-то моделирующие эволюцию, естественный отбор, тому подобные понятия [7]. Конечно, «целеустремленность» таких программ можно и оспорить. но можно и согласиться с этой мыслью. И предметом данной статьи является краткое описание работ, связанных с «целеустремленными» программами.
2. Интеллектуальные игры - только ли шахматы?
В первую очередь отметим, что к интеллектуальным играм нельзя относиться несерьезно (то же самое касается и головоломок) - например, практически любой хороший учебник по искусственному интеллекту начинается с их рассмотрения, с описания возможных методов их решения (точнее - с программирования этих методов, и т. п. - см. [8]). Но обычно в учебниках рассматриваются довольно простые игры (оуа, калах, реверси, рэндзю, самые разные «национальные» версии шашек.) - а как насчет шахмат? И еще - шахматы ли являются «самой интеллектуальной игрой»?
Мы считаем, что в литературе по искусственному интеллекту программированию вышеупомянутых игр уделено слишком большое внимание. А о шахматах утвердилось мнение как о самой интеллектуальной игре, когда-либо изобретенной человеком - и будет ли кто оспаривать это утверждение? Однако автор придерживается иного мнения, считая такой игрой backgammon, мало отличающийся от своего «российского» варианта «короткие нарды». При игре в backgammon человек занимается не только прямым пересчетом, но и - в значительно большей степени, чем при игре в шахматы, - качественной оценкой позиции; за последнюю же, по-видимому, «отвечает» правое полушарие мозга - следовательно, оба полушария в этом случае «задействованы» полностью.
(Прослеживается аналогия между парой шахматы / backgammon с одной стороны, и парой классическая / нечеткая логика - с другой. Приведем по этому поводу мысль из книги математика и философа Барта Коско «Нечеткое мышление» [9]. Коско считает, что два тысячелетия назад человечество сделало роковую ошибку, заложив в фундамент науки не «зыбкую поэтику ранних восточных философий», а «выхолощенную двоичную логику Аристотеля». И с тех пор классическая «черно-белая» бинарная логика все более отдаляется от реального многоцветного мира, где нет ничего абсолютного, а все самое интересное «происходит в туманной области между «да» и «нет»».)
.Итак, нам надо «запрограммировать работу правого полушария». В чем же состоит наш подход к такому программированию, к backgammon^ - и к интеллектуальным играм вообще? (Точнее - к тем играм, где у игрока отсутствует полная информация. А эта информация в разных случаях может быть очень разной - о чужих картах, о будущих показаниях кубиков, и т. п. Все это суть так называемые недетерминированные игры.) Стоит сразу сказать, что подавляющее большинство современных программ для недетерминированных игр созданы на основе т. н. нейросетей и соответствующих алгоритмов - однако автор в своих программах ([6]) применяет альтернативный подход. Этот подход является развитием классического метода минимакса, примененного в наиболее полном объеме более 40 лет назад отечественной группой ученых под руководством Г. Адельсон-Вельского [5].
Сначала опишем классический вариант минимакса. У «дерева игры», приведенного на рис. 1, каждый кружок (так называемая вершина дерева) соответствует некоторой позиции; при этом уровни чередуются: на одном - ход белых (такие вершины не заштрихованы), на другом - черных (заштрихованы). В нашем случае корень дерева заштрихован - значит нам задана позиция с ходом черных. «В идеальном случае» такое дерево (на рис.1 - только небольшая его часть) очень велико - и хотя с точки зрения математики формально является конечным., для практики его удобно считать бесконечным. Поэтому при практическом программировании рассматривается не все дерево, а только его часть, - и значит, наш рисунок можно считать упрощенным изображением той части дерева игры, которое мы обрабатываем. (Не будем вдаваться в подробности, как именно выделяется обрабатываемая часть дерева).
Далее все вершины получают оценку. При этом «нижние» вершины («листья») оцениваются с помощью довольно сложных подпрограмм - построенных на основе информации, полученной программистом от специалиста в данной игре (эксперта). Мы и здесь не будем вдаваться в подробности таких подпрограмм, скажем только, что в тех же шахматах основным (но далеко не единственным) критерием является, конечно же, «суммарная сила фигур» каждого из противников. Можно считать, что оценка лежит в пределах от -1 (что соответствует победе черных) до +1 (белых).
А вершины, не являющиеся листьями, получают оценку с помощью так называемой минимаксной процедуры, заключающей-
ся в том, что «белым» вершинам присваивается максимальная из оценок «черных» вершин-«дочерей», а «черным» вершинам - минимальная из таких оценок. Часть работы этой процедуры также приведена на рис. 1: минимальная из оценок вершин А, В и С дает оценку вершины D (при этом считаем, что оценки вершин, помеченных многоточием, лежат в пределах от -0.5 до +0.6), а максимальная из оценок вершин D, Е и F дает оценку вершины G (используем аналогичное допущение).
Итак, каждая вершина дерева игры (в том числе - его корень) имеет оценку. Значит, среди ходов можно выбрать оптимальный (для данного дерева), т. е. ход, ведущий в вершину с максимальной оценкой при ходе белых либо с минимальной - при ходе черных. (Заметим, что мы при этом «убиваем двух зайцев» - заодно объясняем смысл минимаксного алгоритма.) Таким образом мы и решаем основную задачу - выбор оптимального хода в заданной позиции.
3. Что делать, если многое неизвестно?
А в чем же главное отличие backgammon>а (и других недетерминированных игр) от шахмат (и других детерминированных игр)? почему для них нельзя применить классический вариант ми-нимакса? Отличие состоит в том, что дерево игры, построенное для backgammon’а, включает не только вершины, в которых игрок должен выбрать конкретный ход, но и другие - те, в которых ему следует ожидать некоторой конкретной реализации случайного события. Поэтому метод минимакса в недетерминированных играх приходится обобщать; мы опишем это обобщение очень кратко.
В недетерминированных играх чередуются: конкретная реализация некоторого случайного события, ход одной из сторон, снова реализация случайного события, ход другой стороны. В результате в дереве игры появляются уровни, заключенные между уровнями очередности ходов соперников - уровни, отражающие исход случайного события. Пусть мы умеем строить статическую оценку позиции. (Т. е., как и для детерминированных игр, знаем оценки листьев дерева.) Временным удалением недетерминированности получаются предварительные оценки позиций дерева игры. Для этого мы сначала предполагаем, что уже реализовался конкретный исход случайного события, и вычисляем динамическую оценку для оцениваемой позиции - так же, как и в «обычном» минимаксе.
Затем вычисляем динамическую оценку позиции для следующего исхода случайного события, и так далее для всех исходов.
А окончательная динамическая оценка позиции определяется на основе всех детерминированных оценок, полученных для всех возможных значений случайного события. Полученные значения оценок специальным образом усредняются - это и есть получаемая динамическая оценка. С физической точки зрения такое усреднение дает положение центра тяжести одномерной системы тел с массами, определяемыми специально подобранной функцией (функцией риска). Координаты тел системы - значения соответствующей детерминированной оценки, которая определяется только детерминированными факторами игры - как в обычном минимаксе. Упрощенный вариант подобного дерева недетерминированной игры приведен на рис. 2 - дадим некоторые комментарии к нему.
Зная оценки листьев, «обычным минимаксом» получаем оценку «малых» вершин - отражающих ситуации, когда мы уже удалили недетерминированность (т.е. попросту знаем показания кубиков); при этом допущения об оценках «вершин-многоточий» -те же, что и на рис. 1. А оценка «большой» вершины (не листа; в нашем примере она единственная, это корень дерева) получается усреднением оценок «малых» вершин. Мы на рисунке в качестве такого усреднения используем среднее арифметическое - но на самом деле все гораздо сложнее.
-0,5 +0,1 -0,3 +0,3 +0,2 -0,7
рис. 2
Реально усреднение происходит с помощью так называемых функций риска. Не вдаваясь в излишние технические подробности, опишем эти функции очень кратко (хотя их реализация требует существенную часть времени работы программиста - причем как для игровых программ, так и для программ, о которых пойдет речь ниже). Если, например, предварительная оценка позиции близка к +1 (ожидается наш выигрыш), то при усреднении «хорошие» для нас исходы получают малые веса, а плохие - большие; если близка к -1 (проигрываем.), то наоборот («утопающий за соломинку хватается»). Но если близка к 0, то и в этом случае «хорошие» исходы получают меньшие веса (пусть и не такие малые, как в случае близкой к +1 предварительной оценки) - ведь и в реальной жизни мы должны быть «хоть немного да пессимистами»!
4. Самообучение игровых программ - а почему нет?
Самообучение можно рассматривать как повторяющиеся игры одной и той же программы с самой собой, при этом два играющих варианта одной и той же программы используют немного отличающиеся друг от друга множества коэффициентов (последние применяются просто для статической оценки позиции). Таким образом, «силу программы» можно рассматривать как функцию многих переменных. Однако - какую именно функцию? Этот вопрос в литературе практически не отражен; предполагается, что если одна программа (точнее - один набор коэффициентов) выиграла у другой (другого), то и значение такой функции на первом наборе коэффициентов больше.
Однако даже при этом предположении оптимизировать подобную функцию силы программы крайне сложно, т.к. она имеет большое количество локальных максимумов; кроме того, по-видимому, даже в некоторой локальной области невозможно исследовать подобную функцию на выпуклость. Еще большие проблемы, связанные с самим определением такой функции силы, вызывают «нетранзитивные наборы коэффициентов» - фактически представляющие собой нетранзитивные игры; по-видимому, самый простой пример подобной игры был описан у М. Гарднера, [10]. Хотя, заметим, самые простые методы поиска экстремума (автор в практическом программировании часто пользуется модификацией градиентного метода с неявным вычислением частных производных) дают неплохие практические результаты - несмо-
тря на описанные здесь и далее проблемы, связанные с определением функции силы.
При подобном самообучении практически все авторы (начиная с классических публикаций [11, 12] и до современных публикаций в журнале International Computer Games Association Journal, [13]) считают очевидным тот факт, что результатом самообучения должен быть набор коэффициентов, на котором у программы значение функции силы (кратко охарактеризованной выше) максимально возможное. Отметим, кстати, что в [5] ему отводится далеко не первостепенная роль. Большая роль отводится вопросам программирования эвристик, аналогичных применяемым игро-ком-человеком. Как следует из вышеизложенного, автор настоящей статьи вовсе не отрицает подобный подход, применяя его наряду с остальными.
Однако - почему более важна именно такая программа, «объективно более сильная»? Разве не опровергают эту мысль многочисленные примеры нетранзитивных игр? Интересно заметить, что и в реальной жизни, в самых разных игровых видах спорта, встречались и встречаются ситуации, когда в соревновании в итоге побеждает далеко не сильнейший (по общему признанию) участник. Конечно, частая причина этого - несовершенство системы проведения соревнований; кстати, статистическое исследование систем (как уже существующих, так и потенциально возможных), сравнение их по различным критериям - тема отдельного исследования.
Однако часто в реальной жизни встречаются и другие причины. Например, уже упомянутый выше А. Алехин в международных шахматных соревнованиях 1930-х годов постоянно проигрывал венгру Л. Асталошу, шахматисту практически неизвестному и ничем иным не прославившемуся. «Инверсные» примеры (из совершенно иного вида спорта) - победы сборных Уругвая и Западной Германии на чемпионатах мира по футболу 1950 и 1954 г.г. соответственно, вместо ожидавшихся всеми побед сборных Бразилии и Венгрии.
Итак, почему для пользователя «нужнее» «объективно более сильная» программа - т.е. почему именно такая программа должна стать «результатом» процесса самообучения? Ведь играть-то этой программе чаще всего предстоит вовсе не с «абсолютным» противником, неошибающимся супер-чемпионом, а с реальным -и неважно, с человеком или с какой-либо другой программой. И
именно с таким «усредненным» соперником наша программа должна показать хорошие результаты - настолько хорошие, насколько позволит процесс самообучения. Обобщая, скажем, что игровая программа должна показать свое превосходство не против какой-либо одной (пусть даже очень сильной) программы, а против нескольких, среди которых встречаются и не самые сильные.
.На основе подхода, кратко описанного здесь, автором статьи была создана программа ([6]), имевшая успехи и в соревнованиях программ, и в поединках с людьми. Но не менее важным представляется применение этого же подхода (тех же самых эвристик, можно даже сказать - «игровых эвристик») и в «более серьезных» задачах - в так называемых задачах дискретной оптимизации.
5. Применим игрушки в деле?
Ну, и что же это за задачи дискретной оптимизации? Как ни странно, начнем их перечисление с еще одной «несерьезной» темы - с решения так называемых японских кроссвордов. (Хотя почему «несерьезной»? Выше мы уже говорили, что хорошие учебники по искусственному интеллекту начинаются с головоломок и игр. И для хорошего программирования такой «несерьезной» задачи требуется гораздо больше «естественного интеллекта» - интеллекта программиста!, чем для практически любой «серьезной» программы по искусственному интеллекту, например, какой-либо экспертной системы. Именно поэтому определения «(не)серьез-ный» мы всегда приводим в кавычках.)
Итак, «японские кроссворды»; это - устоявшееся русское название, причем неправильное, т. к. к кроссвордам они никакого отношения не имеют; правильно - «японские картинки». Будем считать, что «постановка задачи» читателю известна, эта головоломка за последние годы стала в России очень популярной. А программы для ее решения уже лет 20 являются предметом для различных школьных и студенческих олимпиад по программированию (один из первых примеров - финальные соревнования одной из версий чемпионата мира по программированию среди школьников в 1991 г.), такие программы имеются в Интернете., но на сложных задачах эти программы «буксуют», не выдают окончательного ответа. А при применении описываемого нами подхода все обычно получается - а именно, получается ответ; при этом даже в случае сложных задач ответ получается за небольшое время работы компьютера.
На рис.3 приведена небольшая задача на описываемую тему -небольшая по размерности, но интересная. Рис.За - «заданная позиция». Рис.Зб - то, что получается из нее в результате стандартного начала вычислений (человеком или компьютером). После такого начала подавляющее большинство известных компьютерных программ останавливается, а ведь надо довести задачу до ответа (в нашем случае их два - рис.Зв и рис.Зг; задача специально подобрана так, чтобы ее решение было неоднозначно).
2 2 2 2
21321 21521 2 1 3 2 1 21321
а) б) в) г)
рис. 3
Что же делать в таких случаях, когда программа «останавливается раньше времени»? Делить рассматриваемую задачу на две подзадачи; в нашем случае мы выбираем некоторую клетку - и в одной подзадаче считаем, что эта клетка закрашена, а в другой - что нет. Очень сильно упрощая ситуацию, можно сказать, что в таком делении рассматриваемой задачи на две подзадачи состоит так называемый метод ветвей и границ, [7, 14, 15] и др. - но мы еще вернемся к алгоритмам, пока же продолжим рассмотрение решаемых задач.
«Японские картинки» - простая задача? Да, простая, - но еще у Козьмы Пруткова была по этому поводу мысль про бросание камешков в воду. И мы приведем примеры двух «значительно более серьезных» задач, решаемых абсолютно теми же методами. Точные алгоритмы для обеих задач получены давно - но в случае больших размерностей они не работают; значит, требуются приближенные алгоритмы.
Во-первых - задача минимизации дизъюнктивных нормальных форм, [16]. В ней задан п-мерный куб (не бойтесь! п-мерные пространства изучаются студентами любой технической специальности, экономистами и др.), и каждая его вершина помечена 0 или 1. Требуется выбрать минимальное число к-мерных плоскостей (здесь к - разные числа, не превосходящие п), содержащих только 1 и покрывающих все 1.
Во-вторых - задача минимизации недетерминированных конечных автоматов, [17]; сформулируем одну из ее подзадач следующим образом. Задана прямоугольная таблица, заполненная 0 и 1. Некоторые подмножества строк и столбцов назовем блоком, если, во-первых, на всех их пересечениях стоят 1, и, во-вторых, это множество нельзя пополнить ни строкой, ни столбцом - без нарушения первого свойства. Аналогично предыдущей задаче, требуется выбрать минимальное число блоков, содержащих только 1 и покрывающих все 1.
и V \УХ У ъ
1 1 1 1 0 0
1 1 1 0 1 0
1 1 1 0 0 1
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
На рис. 4 и 5 приведены примеры данных задач. При этом оба примера специально подобраны так, что так называемые «жадные» алгоритмы здесь работают плохо. На рис. 4 («еж») плоскость, соответствующая максимально возможному к (в нашем случае - п=4, к=2, такой плоскостью является единственный квадрат, отмеченный жирными линиями), в оптимальный ответ не входит; оптимальный ответ - четыре «жирных» отрезка, этому квадрату не принадлежащие («иголки»). А на рис. 5 в оптимальный ответ не входит максимальный блок - блок, соответствующий строкам А, В и С и столбцам и, Уи W; оптимальный ответ - три «блока-строки» (те же буквы А, В и С, но теперь каждая из них «включает все возможные 1»), плюс три аналогичных «блока-столбца».
Понятно, что в реальных условиях все примеры значительно сложнее приведенных здесь - но из «малых» примеров мы выбрали очень интересные. И важно отметить, что обе эти задачи - в описанной нами постановке - действительно сложнее задачи про японские картинки: здесь вследствие так называемого «комбинаторного взрыва» («на пальцах» он означает огромное увеличение объема вычислений при небольшом росте размерности задачи) мы практически никогда не можем гарантировать получение оп-
тимального решения. Поэтому «приходится довольствоваться» созданием алгоритмов реального времени (точнее - «постепенно приближающих псевдо-оптимальных алгоритмов реального времени»), дающих в каждый требуемый пользователем момент времени решение, являющееся оптимальным на данный момент; конечно же, последовательность таких псевдо-оптимальных решений должна сходиться к оптимальному.
Закончим описание используемых нами алгоритмов. Самое сложное в конкретных задачах - выбор варианта для описанного выше «деления» задачи на две подзадачи. Для этого нужны экспертные заключения («априорные оценки») о том, когда именно закончится решение в одном и другом случае - когда раньше? И ввиду невозможности «применить живых экспертов», для каждой задачи пишутся специальные эксперты-подпрограммы, отвечающие на такой вопрос. Подпрограмм несколько - как же выбрать единственный ответ? Для такого выбора мы применяем те же самые «игровые» эвристики и функции риска.
А одновременно с последними для усреднения мы применяем алгоритмы из еще одной области искусственного интеллекта - так называемые генетические самообучающиеся алгоритмы; в том числе - для игровых программ, описанных выше. Где, как ни в них, должно присутствовать «стремление программы к самосовершенствованию»? Но это - большая отдельная тема, которую хочется изложить впоследствии.
6. Так будет ли создан искусственный интеллект?
Итак, по мнению автора, одно из главных условий - «не забывать про надежду»: среди задач искусственного интеллекта наиболее интересными (и действительно «интеллектуальными»!) представляются именно те, в которых «у машины есть надежда, стимул к самоулучшению». Впрочем, приведенное мнение можно и оспорить - но ведь именно в спорах и рождается истина!
А будет ли когда-либо создан искусственный разум - в том объеме, в котором это уже давно «предсказали» писатели-фантасты? Не стоит однозначно отвечать на этот вопрос - ни положительно, ни отрицательно, ни сейчас, ни в обозримом будущем. А частичные ответы на этот вопрос (и ему подобные) дают работы в некоторых программистских областях, в том числе работы, описанные в предлагаемой статье.
Литература:
1. Крамник В. От Стейница до Каспарова. [Электрон. ресурс] URL: http://www.e3e5.com/article.php?id=190 (Kramnik V From Steinitz to Kasparov. URL: http://www.e3e5.com/article.php?id=190)
2. Хакансон Л. Новое открытие формализации / Экономические стратегии. № 6. - 2002. - С. 86-93. (Hakanson L. A new discovery of formalization / Economic strategies. № 6. - 2002. - С. 86-93).
3. Белоголовцев Киберофобы против искусственного интеллекта -счет 1:0. [Электрон. ресурс] URL: http://www.vokrugsveta.ru/telegraph/ theory/397/ (Belogolovtsev Cyberphobes against artificial intelligence -score 1:0. : http://www.vokrugsveta.ru/telegraph/theory/397/)
4. Философия сознания [Электрон. ресурс] URL: http://www.filosofio. ru/filosofiya-soznaniya.html (Philosophy of mind. URL: http://www. filosofio.ru/filosofiya-soznaniya.html)
5. Адельсон-Вельский Г., Арлазаров В., Донской М. Программирование игр. - М., Наука, 1978. (Adelson-Vel’skiy G., Arlazarov V., Donskoy M. Game programming. M., Nauka, 1978).
6. Мельников Б. Эвристики в программировании недетерминированных игр / Программирование (РАН). - № 5. - 2001. - С. 63-80. (Mel’nikov B. Heuristics in nondeterministic games programming / Programming (RAN). - № 5. - 2001. - P. 63-80).
7. Громкович Ю. Теоретическая информатика. Введение в теорию автоматов, теорию вычислимости, теорию сложности, теорию алгоритмов, рандомизацию, теорию связи и криптографию. - СПб., БХВ-Петербург, 2010. (Gromkovich Yu. Theoretical information science. Introduction to automata theory, theory of calculability, complexity theory, theory of algorithms, randomization, communication theory and cryptography. - SPb., BHV-Peterburg, 2010).
8. Братко И. Алгоритмы искусственного интеллекта на языке PROLOG. - М., Вильямс, 2001. (Bratko I. Algorithms of artificial intelligence in PROLOG language. - M., Williams, 2001).
9. Kosko B. Fuzzy Thinking. - N. Y., Hyperion, 1993.
10. Гарднер М.Математические досуги. - М., Оникс, 1995. (Gardner M. Mathematical leisure. - M.: Oniks, 1995).
11. Samuel A. Some studies in machine learning using the game of checkers. / IBM Journal, No. 11. - 1967. - P. 601-617.
12. Berliner H. Computer backgammon. / Scientific Am., No. 243. - 1980. -P. 64-72.
13. http://en.wikipedia.org/wiki/ICGA_Journal - ICGA Journal. - Режим доступа - свободный. - [Интернет-ресурс]. Easy access mode.
14. Мельников Б. Мультиэвристический подход к задачам дискретной оптимизации / «Кибернетика и системный анализ» (НАН Украины). -№3.- 2006.- С. 32-42. (Melnikov B. Multiheuristic approach to discrete optimization problems / «Cybernetics and systems analysis» (NAN of Ukraine). - № 3. - 2006. - P. 32-42).
15. Melnikov B. Discrete optimization problems - some new heuristic ap-
proaches / Proc. of the Eighth Int. Conf. on High-Performance Computing in Asia-Pacific Region, IEEE Comp. Society Washington. - 2005. - P. 7380.
16. Яблонский С. Введение в дискретную математику. - М., Высшая школа, 2010. (Yablonskiy S. Introduction to discrete mathematics. - M.: Vysshaja shkola, 2010).
17. Melnikov B. Once more about the state-minimization of the nondetermin-istic finite automata / The Korean J. of Computational and Applied Math., Vol. 6, No. 2. - 1999. - P. 277-290.