Mathcad и нечеткая булева алгебра

Валерий Очков

Василий Усенко

Этой статье можно было дать и другое название — “Казнить нельзя помиловать”. Но уж больно оно избитое. Традиционно читателя просят поставить запятую в этом предложении и проследить, как меняется смыл вердикта в зависимости от места невинного знака препинания.

А как вам понравиться такой ответ на вопрос о месте запятой: запятую нужно “размазать” по предложению — n процентов запятой поставить после слова “казнить”, а 100-n — после слова “нельзя”. Трактовать такую новую грамматическую (пунктуалистическую!?) конструкцию можно по-разному. Но сначала поговорим о самой постановке вопроса.

Рис. 1. Традиционные булевы функции с двумя аргументами в среде Mathcad

Для начала решим в среде Mathcad такую задачу. Имеется жюри присяжных, состоящее из трех человек и выносящее большинством голосов вердикт “казнить” или “помиловать”. Воздерживаться и уклоняться от голосования нельзя. Задача сводится к составлению функции трех аргументов (голоса присяжных), возвращающую решение жюри.

Один лидер “третьего рейха” любил повторять, что он всегда хватается за пистолет, слыша слово “культура”. Сталкиваясь с логической задачей, программисты “хватаются” за троицу булевых функции and, or и not. Но их-то и нет в списке встроенных функций Mathcad. Нет там и булевых (логических) переменных. Тут программист, чертыхнется (а зря — см. ниже) и напишет соответствующие пользовательские функции (см. рис. 1), заставляя числовые переменные выполнять по совместительству роль и булевых. После этого ничего не стоит написать булеву функцию Решение, возвращающую единицу (логическое “Да” в среде Mathcad) или нуль (“Нет”) в зависимости от итогов голосования — решение принимается, если двое или трое присяжных проголосуют “За”. В среде Mathcad функции с двумя аргументами (на рис. 1 это функции and и or) могут быть вызваны в виде древовидных операторов, что позволяет максимально визуализировать их работу. Самый лучший способ тестирования функции — это ее испытание при всех возможных значениях аргументов. Благо функция Решение возвращает всего лишь восемь результатов — четыре раза “Да” и четыре раза “Нет”.

Рис. 2. Тройка булевых функций в среде Mathcad

При желании в среде Mathcad можно написать булевы функции and и or с любым числом аргументов, объединенных в вектор-столбец, а также функцию not:

Рис. 3. Аппаратное решение задачи о голосовании

Решить задачу о голосовании можно не только программными, но и аппаратными средствами, собрав такую схему выключателей (рубильников):

Параллельное соединение рубильников — это логическое сложение, последовательное — умножение. Лампочка загорелась — решение принято.

Возвращаясь к началу статьи с дилеммой “казнить-помиловать” и допуская совмещение должностей присяжного, судьи и палача, можно попытаться заменить в вышеприведенной схеме электрическую лампочку на ... электрический стул. Говорят, что подобная схема рубильников на самом деле запитывает американское орудие казни. Каждый из трех, приводящих приговор в исполнение, надеется, что он включил не настоящий рубильник, а муляж рубильника.

Еще немного об “электрических цепях”. Последнее время в быту получают распространение выключатели, плавно меняющие накал лампочек от нуля до ста процентов. Еще раньше такие устройства (реостаты) стали применяться в театрах и в кинозалах. Медики уверяют, что плавный переход от света к темноте через полумрак благотворно действует на зрение.

А можно ли подобными регуляторами заменить выключатели в приведенной схеме аппаратной реализации процедуры голосования?! Может ли функция Решение иметь не только логические, но и вещественные аргументы и возвращать вещественное значение, плавно меняющееся от нуля до единицы (до 100 процентов)?! Очень часто, осуждая или оправдывая кого-либо, трудно прийти к однозначному решению. Даже на первый взгляд явное преступление может иметь такую оценку — “это скорее беда, чем вина подсудимого”. Но людей, принимающих решения, по-прежнему заставляют давать только черно-белые оценки.

Толерантность сначала проникла в религию. Человечество, нахлебавшись крови в религиозных войнах, относительно поумнело. Сейчас цивилизованный человек может сказать о себе, что он на k процентов атеист, на l процентов мусульманин, на m процентов — католик, а на n процентов — протестант (гугенот — вспомним Варфоломеевскую ночь и Париж, который стоил мессы). И не обязательно, чтобы k+l+n+m равнялось ста процентам. Во многих церквях Америки по пятницам служит мулла, по субботам — раввин, а по воскресеньям — священник (поп, пастор, ксендз). Затем толерантность охватила мир искусства, размыв систему классических канонов и стилей. Сейчас главное — это талант художника и то, что он хочет сказать миру. И не важно кто он — реалист, импрессионист (нео-, пост- и т.д.) или просто примитивист, впервые взявшийся за кисть в 70 лет. Теперь стали говорить и о терпимости в науке. Ее проявления — теория нечетких множеств (fuzzy sets) и теория нечеткой логики (fuzzy logic). Неоднозначность оценок стала превалировать не только в гуманитарных дисциплинах (см. сноску 1 с деликатной подсказкой Word’а), но и в точных науках — в математике, например. Авторы где намеренно, а где по незнанию (по недопониманию — хороший пример нечеткого множества в живом языке) не совсем верно трактуют положения теории нечетких множеств. Раньше таких бы авторов с кашей съели. А теперь ничего — публикуют, читают.

Но это, конечно, не значит, что размываются все грани черно-белых оценок. Об этом хорошо сказано у Пушкина:

Ах! Чувствую: ничто не может нас
Среди мирских печалей успокоить;
Ничто, ничто… едина разве совесть.
Так здравая она восторжествует
Над злобою, над темной клеветою. —
Но если в ней единое пятно,
Единое, случайно завелося,
Тогда — беда! Как язвой моровой
Душа сгорит, нальется сердце ядом,
Как молотком стучит в ушах упрек,
И все тошнит, и голова кружиться,
И мальчики кровавые в глазах…

Давайте посмотрим, как нашу задачу о голосовании можно решить с учетом положений теории нечеткой логики. Задачу о голосовании можно обогатить элементами нелинейности, приняв во внимание условное деление голосующих на консерваторов, традиционно склонных к осуждающим приговорам, центристов и либералов. Степень радикальности жюри присяжных (парламента и, вообще, любого электората) будем учитывать через коэффициент k. Голосующие устанавливают степень своего решения “за” (от 0 до 1), но на исход голосования влияют функции y1, y2 и y3, демпфирующие крайние оценки. Графики на рис. 4 получились “пушистыми” (fuzzy). Но это и хорошо, т.к. четкие оценки здесь невозможны.

Рис. 4. Нелинейность голосования

“Цветная” функция Решение, построенная на функциях min и max (см. рис. 5), при логических значениях аргументов (0 или 1), как уже было отмечено, полностью эквивалентна своему “черно-белому” аналогу, использующему функции and и or. Привычных встроенных функций and и or в среде Mathcad нет. И слева Богу! Но есть встроенные функции min и max. Эти фкнкции способны работать и с логическими, и с вещественными, и даже с комплексными аргументами. Кроме того, функции min и max удобны тем, что их аргументами может быть вектор-столбец (аргумент функции max), вектор-строка (min) и даже матрица. Это позволяет комбинировать типы аргументов (горизонталь-вертикаль) создаваемой “цветной” логической функции, делая ее более компактной и более прозрачной для понимания.

Рис. 5. Функция “цветного” голосования

Рис. 6. “Дерево” функций min и max

При желании функции min и max можно переопределить для работы не с векторами (матрицами), а с традиционной парой аргументов:

Это позволит вызывать обновленные функции min и max в виде древовидных операторов, визуализирующих “логику” поиска ответа:

Ладно, скажет читатель, а что делать с вердиктом присяжных такого рода: “Виновен на 57%, невиновен на 43%”?! Что делать? Смотреть на графики, материализующие “цветное” решение!

На рис. 7, 8 и 9 визуализированы вердикты присяжных при трех значениях решения центриста: 0.1, 0.5 и 0.9. Mathcad позволяет средствами анимации просмотреть плавную деформацию решения жюри.

Рис. 7

Рис. 8

Рис. 9

Интерпретация цвета участков поверхности решения может быть такая:

· красный цвет графика говорит сам за себя — кровь, “вышка”;

· желтый — каторга;

· зеленый — тюремное заключение;

· голубой — условное осуждение;

· синий — общественное порицание.

Цветовую палитру можно сдвигать, учитывая тенденции в общественном сознании и изменения в законодательстве — мораторий на смертные казни, например. При этом нужно будет “сдвигать вниз” (в холодные тона) и другие виды наказаний. В наших тюрьмах условия содержания такие, что смертная казнь может оказаться просто наградой. Основной довод противников смертной казни в том, что жизнь — это дар Божий, и только всевышний может приговорить к высшей мере. Но и свобода не меньший дар! Второй довод в том, что смертная казнь делает невозможным исправление судебных ошибок. Но. Отсидел человек 20 лет в камере пожизненного заключения, а ему говорят, пардон, мы ошиблись. Кто вернет загубленную жизнь.

Строить “цветные” логические схемы поможет и нечеткая функция not.

Рис. 10

Функции min и max “выдернуты” нами из богатого арсенала статистических функций Mathcad. А там есть еще много интересного (среднее арифметическое, среднее геометрическое, дисперсия и пр.), способного обогатить “логический” поиск. Особо привлекательны для статистических испытаний (скажем так — для логико-статистических испытаний) функции, возвращающие случайные числа, сгенерированные по различным законам распределения. В [1] описана математическая модель трехсторонней дуэли (ftp://twt.mpei.ac.ru/ochkov/mcad7pro.book), реализованная в среде Excel (6_31.xls) и в среде Mathcad 7 Pro (6_32.mcd). Суть дуэли — Сэм, Билл и Джон стреляются по таким правилам:

Спрашивается, какой тактике необходимо придерживаться каждому участнику дуэли (бей в случайного, бей в самого меткого, намеренно стреляй в воздух и др.), чтобы иметь наивысшие шансы остаться в живых. Аргументами функции Дуэль, возвращающей номер победителя дуэли, являются значения меткости дуэлянтов. Если у Билла меткость 0.8, то это значит, что он на данной дистанции убивает противника в 80 случаях из 100. Но меткость (ум, скорость реакции человека и т.д. и т.п.) — это типичный представитель нечеткого множества. Меткость никогда не измеряется числами, но оценивается категориями (снайпер, отличный стрелок,… мазила).

Но увлекаться статистическими функциями (min, max, average, rnd, var и др.) при реализации логических схем нужно осторожно. Говорят, что есть Большая Ложь, Просто Ложь и… Статистика…

 

Три дивертисмента

1. Дивертисмент политический.

Наши политики, обсуждая статус Чечни, загоняют себя в угол. Мол, независимость — это как беременность: она либо есть, либо ее нет. Нельзя быть чуть-чуть беременной, нельзя быть чуть-чуть независимой и т.д. и т.п.

Это противоречие можно разрешить с помощью теории нечетких множеств. Рассказ о ее основах обычно начинают с парадокса кучи зерна. Сто зерен — это куча или нет? Конечно, нет, — это скорее горсть зерна. А если к этой горсти прибавить еще одно зерно, станет ли она кучей? Опять нет. А если еще зерно и еще зерно. Рано или поздно мы получим кучу. Люди пытались с позиций классической математики определить точное число зерен, разграничивающее горсть от кучи, но ничего путного из этого не получалось. Примерно так сейчас политики пытаются найти количество признаков (полномочий), отделяющих независимое государство от субъекта федерации. Все бы ничего, да кровь льется.

Дело в том, что понятие “независимое государство” традиционно (исторически) рассматривается как элемент четкого множества. Дескать, государственное образование может либо принадлежать, либо не принадлежать к этому множеству.

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

Проблема кучи зерна решается с позиции теории нечетких множеств так: насыпаются разные количества зерен, а люди (эксперты; лица, принимающие решения) дают такие оценки: “это горсть (0)”, “это скорее горсть чем куча (0,33)”, “это скорее куча чем горсть (0,67)”, это и не горсть и не куча, а что-то среднее (0,5), “это куча (1)” и т.д. (так сейчас, к примеру, проводят опрос общественного мнения). После этого строится функция принадлежности к нечеткому множеству “куча зерна”. График этой функции плавная и пушистая кривая, поднимающаяся от нуля (мало зерен) к единице (много зерен) без каких-либо скачков. Функция принадлежности к множеству “горсть зерна” имеет “горбатый” график: нули по краям (идем от отдельных зерен к куче) и единица посредине (горсть зерна).

Проблема Чечни — это проблема не только России, но и всего мирового сообщества в том плане, что в уставе ООН заложены два взаимоисключающих принципа — принцип нерушимости границ и право нации на самоопределение (на независимость). Решить эту проблему можно, приняв во внимание, что понятия “нация и “независимое государство” — это также нечеткие множества. Государственное образование (область, район, республика) может быть и чуть-чуть независимым и совсем независимым. Читатель может сам при желании составить такую таблицу: в первой колонке написать названия стран (включая субъекты Российской Федерации), а во второй — значение функции принадлежности этих стран к множеству “независимое государство”. Германия независимое государство или нет!? Вроде бы да, но многие ее суверенные полномочия ограничены членством в НАТО, в Европейском Союзе, в Общем Рынке и т.д. Такой важный атрибут независимости как национальная валюта и та скоро у Германии пропадет (евро!). Немецкий язык все больше становиться неким местным диалектом — все серьезные научные и культурные конференции проводятся на английском языке. Так что “независимости” у этой страны сейчас намного меньше, чем у той же Чечни. Говоря языком теории нечетких множеств, можно сказать, что значение функции принадлежности к множеству “независимые государства” у Германии ниже, чем у Чечни. То, что в Бонне много посольств иностранных государств, а в Грозном пока ни одного, ни о чем не говорит. Представим себе, что завтра все страны порвут с Германией дипломатические отношения. От этого статус Германии как независимого государства только повысится. На нашей планете самые независимые — это самые одиозные государства: “алкоголики” (поставщики наркотиков), “тунеядцы” (страны, живущие за счет помощи мирового сообщества), “хулиганы” (Ливия, Ирак, Северная Корея — маленькие “хулиганы”, Россия, США, Китай — взрослые “хулиганы”). “Алкоголиков” и “тунеядцев” называть не будем — где здесь вина, а где беда этих стран. “Казнить нельзя помиловать!”

Итак, будем считать, это все субъекты Российской Федерации — независимые государства, но значения функции принадлежности у них к этому нечеткому множеству разные: у Тверской области одно, у Татарстана — другое, а у Чечни третье, самое высокое. В процессе государственного строительства эти числа могут меняется плавно (реформы) либо скачками (революции, войны, но лучше — референдумы), но никогда они не упадут до нуля и не поднимутся до единицы.

2. Дивертисмент политико-компьютерный.

Теории нечетких множеств и нечеткой логики можно приложить и к проблеме компьютерного пиратства. Закон делит всех людей на два четких множества: “множество легальных пользователей программ” и “множество нелегальных пользователей (пиратов)”. В реальной жизни все намного сложней: нечетких множеств людей, причастных к компьютерам, великое множество (извините за тавтологию). Есть множество торгующих на Горбушке “черными” дисками и есть множество тех, кто принципиально работает только с легальными копиями и никогда не подаст руки согрешившим — нарушившим какое-либо лицензионное соглашение. Можно осью “грешник-праведник” построить горбатые статистические кривые, описывающие состояние компьютерного рынка в конкретной стране. Где находится максимум этой кривой, куда и с какой скоростью он перемещается во времени?

3. Дивертисмент компьютерный.

Даниил Хармс подметил, что память — это очень странная штука: иногда запомнишь одно, а вспомнишь потом совсем другое. А бывает и так, что запомнишь настолько крепко, что потом ни за что не вспомнишь.

Основное отличие памяти человека от “памяти” компьютера в том, что человек разную информацию запоминает по-разному. Одно дело запомнить телефон случайного знакомого, а другое дело такую информацию: “Еще раз сунешь сюда нос — голову оторву!”.

Элементарные ячейки памяти цифрового компьютера хранят либо нули, либо единицы, не делая никаких различий по важности информации. “Бит” информации в мозге человека — это нейронная связь различной “толщины”, меняющейся условно говоря от нуля до единице. Может быть, стоит заряжать конденсаторы компьютера не ступенькой, а плавно…

Литература:

  1. Очков В. “Mathcad 7 Pro для студентов и инженеров”. М.: КомпьютерПресс, 1998.