6.9.6. По-настоящему оптимальное пожарное ведро

(глава из книги "Mathcad 8 Pro для студентов и инженеров", созданная на основе статьи)

Эта оптимизационная задача (поиск максимального объема пожарного ведра) хорошо решается и численно (см. этюд 2), и аналитически (см. этюд 7). В ней под оптимизацией мы понимали максимизацию объема ведра при выбранной технологии его изготовления (вырезание сектора из круглой заготовки). Но при этом ведро теряло не только свою оптимальность, но и свое звание ведра: оно превращалось в пожарный тазик (его тоже нельзя поставить на пол и использовать не по назначению) или во вьетнамскую шляпу. Мы гнались за Числом (объем ведра) и потеряли Суть (функцию ведра — емкость для удобной переноски жидкости).

Тут автору вспоминается мультфильм о козленке, который научился считать и всех встречных-поперечных пересчитывал: “ Я — это раз, петух — это два, свинья — это три и т.д.” У козленка из-за этого со всей пересчитанной живностью возникали крупные неприятности: “ Ах! Ты меня сосчитал?! Ну, держись!” Но все кончилось хорошо. На то она и сказка.

В этой истории, как и в любой другой запоминающейся сказке, есть глубокий смысл. Стоит нам что-то пересчитать, как мы вступаем с этой пересчитанной субстанцией в глубокий конфликт. Природа не любит не только острых углов, но и счёта, который в ряде случаев просто убивает ее. Это можно наблюдать не только в биологии и физике, где инструменты познания часто неузнаваемо портят сам объект исследования, но и в computer science. И не только в области приложения компьютеров (счёта, грубо говоря) к решению естественнонаучных задач, но и в области применения компьютеров к самим компьютерам.

Врачу для установления диагноза незачем знать числовое значение температуры тела больного — 36.6, 38.9 и т.д. Достаточно выразить показания термометра диапазонами (категориями), о которых медики договорились заранее — “температура пониженная”, “нормальная”, “повышенная”, “высокая”, “очень высокая” (“жар”). Границы этих оценок хоть и четко зафиксированы, но тем не менее размыты — “пушисты”. Это определяется не только современными представлениями ТНМ, но и погрешностью самого термометра, методикой измерения температуры и др. Выпускник медицинского вуза не задумываясь скажет вам, где лежит граница между высокой и очень высокой температурой. Опытный же врач может этого и не знать, хотя диагнозы он выставляет не хуже начинающего доктора. Даже параметры больного, выраженные не в вещественном, а в булевом виде (реакция Вассермана, наличие палочки Коха, анализ на СПИД и т.д.), имеют “пушистые” границы. Об этом хорошо знают лаборанты, проводящие анализы. Если заглянуть в любой справочник терапевта, где описаны симптомы болезней, то, как правило, конкретных чисел (температура тела, артериальное давление, содержание гемоглобина в крови и т.д.) там не увидишь. Одни слова — повышено, понижено и т.д. Программы выставления диагноза по введенным в компьютер параметрам больного не получили широкого практического применения. Одна из трудностей в этом деле — перевод параметра (числа) в симптом (категорию).

Принято выделять три революции, переводившие программирование на новые уровни: структурное, обьектно-ориентированное и визуальное. Но эта революционность была больше обращена на программы (искусство ради искусства) и почти не касалась объекта программирования — тех моделей реального мира, свойства и события которого программно имитируются. Более того, ретроспективный взгляд может уловить и некую контрреволюционность в отказе, например, от аналоговых вычислительных машин и переход к цифровой технике. Хотя в последнее время здесь наблюдается какое-то подобие ренессанса — возрождение принципов аналогового моделирования на современных цифровых компьютерах (пример — среда MathConnex в составе Mathcad 7 и 8 Pro: см. приложение 7). Это можно отметить и в технологии визуального программирования, где воссоздаются прежние элементы управления (controls) — аналоги сумматоров, интеграторов и др. Но виртуальность этих неоаналоговых машин подразумевает и их строгую детерминированность (четкость), что влечет за собой не только положительные, но и отрицательные последствия. Сами же принципы ТНМ давно уже у программистов под рукой. В буквальном смысле. Мышка компьютера реагирует на два события — щелчок (click) и двойной щелчок (double click). А чем, собственно, один двойной щелчок отличается от двух одинарных? В длительности паузы между щелчками. Если ее выразить на языке человеческого общения (очень короткая, короткая, длинная и т.д.), то это будет типичным примером множеств с “пушистыми” границами. На сколько нужно увеличить короткую паузу, чтобы она превратилась в длинную и чтобы двойной щелчок распался на два одинарных? А сколько зернышек нужно добавить в горсть, чтобы она превратилась в кучу?

В разгар структурной революции, когда во всех программистских “храмах” предавали анафеме ключевое слово GOTO, часто можно было услышать такую фразу: “Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на BASIC: как потенциальные программисты они умственно оболванены без надежды на исцеление”. Встречались и более категоричные предупреждения типа: “Осторожно! Занятие программированием может лишить вас будущего. Не думайте, что научившись программировать, вы чего-то добьетесь в жизни”. Традиционное программирование как бы заставляет программиста смотреть на многоцветный мир сквозь черно-белые очки: булева переменная может принимать только два значения (да-нет), а вещественная — строго определенное в оговоренном диапазоне с фиксированной длиной мантиссы и т.д. Истина лежит посередине. Но и крайние точки зрения не бесполезны — они как бы подпирают истину с двух сторон, не давая ей скатиться к крайностям. Да и сами истины в чем-то “пушисты”. А одна из них может звучать так: “Если хочешь познать мир (нечеткий, “пушистый”, бесчисловой) и управлять им, то опасайся традиционных языков программирования и математических программ с их строгой детерминированностью”.

Но вернемся к нашей задаче о пожарном ведре и попытаемся решить ее уже с привлечением аппарата ТНМ и с учетом мнения людей, которым — не дай Бог! — придется воспользоваться этим нехитрым средством пожаротушения.

Проведем своеобразный опрос общественного мнения и узнаем как можно больше о параметрах оптимального пожарного ведра: о его удобной геометрии (радиусе основания конуса и высоте) и о его оптимальном объеме (о весе ведра с водой). Вот здесь-то и проявятся во всей своей красе положения ТНМ. Сколько нужно добавить в ведро воды, чтобы оно из легкого превратилось в тяжелое? На сколько нужно увеличить или уменьшить радиус или высоту ведра, чтобы оно перестало быть удобным? Вот эти сколько и являются типичными представителями нечетных множеств. В среде Mathcad, как и в других популярных пакетах, нет типов переменных для хранения таких величин. Но мы тем не менее мы постараемся решить поставленную задачу (рис. 6.41-6.45 — задача решена совместно с В.Усенко). Разберем ее по пунктам.

Рис. 6.41. Оптимальный радиус пожарного ведра

Пункт 1 (рис. 6.41). Матрица m r хранит представления людей об оптимальном (удобном) радиусе основания конуса пожарного ведра (r), выраженном в миллиметрах. Эти данные можно получить так: изготовить много ведер различной геометрии, дать людям поносить их и оценить по такой шкале:

· удобное (1);

· скорее удобное, чем неудобное (0.67);

· скорее неудобное, чем удобное (0.34);

· неудобное (0).

Можно принимать во внимание и другие оценки в диапазоне 0-1.

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

Пункт 2. Данные опроса обрабатываются методом наименьших квадратов (см. этюд 4). На рис. 6.41 (как, кстати, и на рис. 6.42 и 6.43) в качестве аппроксимирующей кривой взята кривая нормального распределения. Получена функция принадлежности по радиусу ведра m r, которая является одним из базовых понятий ТНМ: в привычной математике считается, что некая величина либо принадлежит, либо не принадлежит определенному множеству; в ТНМ допустимо говорить о том, что величина принадлежит множеству в некоторой степени (на столько-то процентов).

Пункт 3. Статистическую обработку принято заканчивать графиком.

Рис. 6.42. Оптимальная высота пожарного ведра

Пункты 4-6 (рис. 6.42) повторяют пункты 1-3, но уже для второго параметра ведра — его высоты.

Рис. 6.43. Оптимальный объем пожарного ведра

Пункты 7-9 повторяют пункты 1-3 и 1-6 для третьего важного параметра ведра — его объема (веса, массы). При этом предлагается дать такие оценки:

· ведро легкое (1);

· ведро скорее легкое, чем тяжелое (0.67);

· ведро скорее тяжелое, чем легкое (0.34):

· ведро тяжелое (0).

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

При проектировании технических систем, конечно, не проводят опрос общественного мнения, а прислушиваются к экспертам, к лицам, принимающим решения (ЛПР).

Рис. 6.44. “Перевернутое” оптимальное пожарное ведро

Пункт 10 на рис. 6.44. является ядром решения задачи: в нем генерируется двухпараметрическая функция принадлежности путем слияния (перемножения) ранее заданных функций принадлежности.

В ТНМ нет понятий сложения, вычитания, умножения и др., лежащих в основе традиционной математики и реализованных в среде Mathcad операторами “+”, “- ”, “Ч ” и т.д. В ТНМ умножение (пересечение множеств, And) заменено на операцию поиска минимума, а сложение (слияние множеств, Or) — на поиск максимума. Математика четких множеств является частным случаем математики нечетких множеств — в программах вместо функции (оператора) And можно использовать функцию поиска минимума, а вместо функции Or — функцию поиска максимума. В среде Mathcad, кстати, нет встроенных функций And и Or, но есть встроенные функции min и max — это мы уже отмечали в этюде 3. В нашей задаче функция принадлежности m rh получается путем нечеткого сложения (min) функций m r, m h и m v — нечеткое множество “удобное ведро” лежит на пересечении трех других нечетких множеств: “удобный радиус ведра”, “удобная высота ведра” (пункт 6) и “нетяжелое ведро” (пункт 9).

Пункт 11. Вершина “горы” (поверхность функции m rh) — это то место, где “лежит” самое удобное пожарное ведро.

Рис. 6.45. Проектирование оптимального пожарного ведра

Пункт 12 (рис. 6.45). Искать максимум функции m rh в среде Mathcad можно различными способами (см этюды 2 и 3). Мы поступим так: изготовим от 2 до 10 одинаковых ведер из круглых заготовок различного радиуса R (от 10 до 500 мм с шагом 1 мм). Оптимальным (самым удобным) будем считать то ведро, у которого функция принадлежности m rh максимальна.

Даже не очень внимательный читатель заметит неточности, допущенные при решении задачи об удобном ведре. Вот три из них:

Однако стоит еще раз мельком взглянуть на графики, иллюстрирующие нечеткие множества на рис. 6.41-6.43, чтобы понять важнейшую особенность решения задач с привлечением аппарата ТНМ. Наше решение вычленяет, если так можно выразиться, суть задачи, оставляя без внимания различные мелочи: плотность воды, вес пустого ведра, степень его наполнения и др.

Эта особенность в настоящее время реализована, например, в системах автоматического регулирования, где регуляторы, настроенные с учетом положений ТНМ, более “внимательны” к основному сигналу и менее восприимчивы к шуму. Оказалось, хотя это и кажется парадоксальным, что традиционные “четкие” алгоритмы управления качественно проигрывают “нечетким” либо являются их частными случаями. В теории автоматического регулирования наблюдался некий застой, так как никакие новые алгоритмы не могли сравниться со старым добрым пропорционально-интегрально-дифференциальным (ПИД) алгоритмом (законом) управления. Принципы ПИД-регулирования можно узреть в процедуре принятия решения о выдаче кредита клиенту банка, когда принимающий решение банкир учитывает, во-первых, количество денег на текущем счете просящего (пропорциональная составляющая — чем богаче клиент, тем больше денег ему можно дать в долг), во-вторых, динамику изменения текущего счета (дифференциальная составляющая — дела клиента на подъеме или в упадке) и, в-третьих, среднее количество денег у клиента за последние, к примеру, пять лет (интегральная составляющая — не занял ли клиент вчера денег на стороне, чтобы создать видимость своего благополучия). Можно учитывать и другие составляющие, но… три — красивое число.

ПИД-алгоритм регулирования как-то незаметно был фетишизирован. Идеи нечеткого управления — это свежая струя в теории автоматического регулирования, основные положения которой в настоящее время подвергаются ревизии. Правда, есть и другое мнение. Некоторые ученые полагают, что использование аппарата ТНМ в теории автоматического регулирования и в кибернетике вообще — это попытки замены одной неопределенности на другую (шило на мыло, грубо говоря). Только и всего. Наблюдающиеся эффекты повышения качества управления скептики объясняют тем, что на регуляторы лишний раз обратили внимание (принцип доброго слова, которое и кошке приятно). Кроме того, некоторые исследователи полагают, что ТНМ (ей всего лишь 30 лет, а открыл ее миру Л.А.Заде — американец иранского происхождения) — это хорошо забытое старое. Мы не случайно перешли к задаче об оптимальном ведре от задачи о трехсторонней дуэли. По традиции, четкие множества принято иллюстрировать кругами с резко оконтуренными границами. Нечеткие же множества — это круги, образованные отдельными точками: в центре круга точек много, а ближе к периферии их густота уменьшается до нуля; круг как бы растушевывается на краях. Такие “нечеткие множества” можно увидеть... в тире ѕ на стене, куда вывешиваются мишени. Следы от пуль образуют случайные множества, математика которых известна. Оказалось, что для оперирования нечеткими множествами годится уже давно разработанный аппарат случайных множеств...

Мы говорим нечеткое множество. А множество чего? Если быть последовательным, то приходится констатировать, что элементом нечеткого множества оказывается... новое нечеткое множество новых нечетких множеств и т.д. Вернемся к классическому примеру — к куче зерна. Элементом этого нечеткого множества будет миллион зерен, например. Но миллион зерен это никакой не четкий элемент, а новое нечеткое множество. Ведь считая зерна (вручную или автоматически), не мудрено и ошибиться — принять за миллион 999 997 зерен, например. Тут можно сказать, что элемент 999 997 имеет значение функции принадлежности к множеству “миллион”, равное 0.999997. Кроме того, само зерно ѕ это опять же не элемент, а новое нечеткое множество: есть полноценное зерно, а есть два сросшихся зерна, недоразвитое зерно или просто шелуха. Считая зерна, человек должен какие-то отбраковывать, принимать два зерна за одно, а в другом случае одно зерно за два. Нечеткое множество не так-то просто запихнуть в цифровой компьютер с классическими языками: элементами массива (вектора) должны быть новые массивы массивов (вложенные вектора и матрицы, если говорить о Mathcad). Классическая математика четких множеств (теория чисел, арифметика и т.д.) — это крюк, с помощью которого человек разумный фиксирует (детерминирует) себя в скользком и нечетком окружающем мире. А крюк, как известно, ѕ инструмент довольно грубый, нередко портящий то, за что им цепляются. Термины, отображающие нечеткие множества (а их достаточно в этой и любой другой книге — “много”, “слегка”, “чуть-чуть” и т.д. и т.п.), трудно “запихнуть” в компьютер еще и потому, что они контекстно зависимы. Одно дело сказать “Дай мне немного семечек (зерна)” человеку, у которого стакан семечек, а другое дело — человеку, сидящему за рулем грузовика с семечками.

Можно ли усмотреть некий кризис в теории и практике программирования, связанный с противоречим между четкой структурой программ (данных) и нечетким миром? Следует ли разрабатывать “нечеткие” языки программирования для реализации “нечетких” алгоритмов и для размещения “нечетких” данных? Мнения здесь разные. Программисты (а за ними последнее слово) худо-бедно научились “запихивать” нечеткий мир в строго детерминированный компьютер. Пример на рис. 6.41-45.

6.10. A и B сидели на трубе

Сидели они не на простой трубе, а на пожарной, точнее — на пожарном ведре: сейчас будет рассказано об “общечеловеческом” смысле параметрических коэффициентов A и B (вернее Ar, Br, Ah, Bh, Av и Bv), входящих в аппроксимирующие выражения пунктов 2, 5 и 8 (рис. 6.41-43).

Давайте проведем глобальный статистический эксперимент — у всех взрослых людей на земле измерим какой-либо параметр: вес, рост, ум и т.д. ѕ словом все то, что можно измерить числом или оценить критерием (гений, талант, очень умный, просто умный... совсем дурак).

Полученные точки превратим в кривые (см. пункты 1-3 на рис. 6.41-43), где по оси X отложим параметр человека, а по оси Y — процент людей с данным параметром. При этом статобработку проведем отдельно для мужчин (м) и женщин (ж). Что мы получим?

Случай 1: Ам = Аж, но Вм > Вж:

Такие кривые получаются для тех параметров, значение которых у мужчин больше, чем у женщин (рост, вес, сила мышц и т.д.). Это связано с эволюцией — если мужская особь крупнее женской, то новые поколения укрупняются. У пауков, например, самцы намного меньше самок — пауки сейчас, слава Богу, более мелкие, чем в доисторические времена.

Случай 2: Ам < Аж, но Вм = Вж:

А так будут выглядеть кривые для параметров, значения которых у человека за последние несколько тысяч лет не менялись — ум, например. Многие вполне обоснованно полагают, что современный человек, если убрать налет образованности и культуры, ненамного умней древнего грека. Среди мужчин гениев (нобелевских и прочих лауреатов, великих изобретателей, писателей и художников — см. правый край графика) больше лишь потому, что и дураков среди мужчин достаточно (левый край графика). Но средняя женщина умнее среднего мужчины — центр “женской” кривой приподнят за счет меньшего разброса по краям: площади фигур под графиками одинаковы — никого не обижая, будем считать, что Господь Бог или Природа (кто как для себя считает) одинаково наделили умом обе половины человечества.

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

Отклики на статью

Добрый день!

Прочитав Вашу предыдущую статью в "Компьютер Пресс" (КП, 98, 1), я подумал: кто-то балуется. Появление 2-й статьи заставило взяться за письмо – не люблю профанаций. К сожалению, такова моя оценка тех примеров, которыми Вы оперируете.

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

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

То, как изложение выглядит сейчас (КП, 98"2), приводит в недоумение: зачем это все? для кого? что это даст? А ведь обработка нечеткой информации уже используется в фотоаппаратах и кинокамерах, в управлении технологическими процессами; в Японии интенсивно разрабатываются нечеткие интегральные схемы и т.д.

Конструктивное предложение: что если перейти на серьезный уровень статей по т.н.м., а в списке литературы давать ссылки и на основные публикации? В нынешнем виде это продолжать нельзя – Вы оттолкнете (если это уже частично не произошло) возможных пользователей и потенциальных исследователей.

С пожеланием успехов,

Александр Владимирович Алексеев,

член Российской ассоциации по нечетким системам.