MathCAD

       

По-настоящему оптимальное пожарное ведро (English version of text)


Эта оптимизационная задача хорошо решается и численно (см. этюд 2), и аналитически (см. этюд 7). В ней под оптимизацией мы понимали максимизацию

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

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

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

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


Принято выделять три революции, переводившие программирование на новые уровни: структурное, обьектно-ориентированное и визуальное. Но эта революционность была больше обращена на программы
(искусство ради искусства) и почти не касалась объекта программирования – тех моделей реального мира, свойства и события которого программно имитируются. Более того, ретроспективный взгляд может уловить и некую контрреволюционность в отказе, например, от аналоговых вычислительных машин и переход к цифровой технике. Хотя в последнее время здесь наблюдается какое-то подобие ренессанса – возрождение принципов аналогового моделирования на современных цифровых компьютерах (пример – среда MathConnex в составе Mathcad 7 и 8 Pro: см. приложение 7). Это можно отметить и в технологии визуального программирования, где воссоздаются прежние элементы управления (controls) – аналоги сумматоров, интеграторов и др. Но виртуальность этих неоаналоговых машин подразумевает и их строгую детерминированность (четкость), что влечет за собой не только положительные, но и отрицательные последствия. Сами же принципы ТНМ давно уже у программистов под рукой. В буквальном смысле. Мышка компьютера реагирует на два события – щелчок (click) и двойной щелчок (double click). А чем, собственно, один двойной щелчок отличается от двух одинарных? В длительности паузы между щелчками. Если ее выразить на языке человеческого общения (очень короткая, короткая, длинная и т.д.), то это будет типичным примером множеств с «пушистыми» границами. На сколько нужно увеличить короткую паузу, чтобы она превратилась в длинную и чтобы двойной щелчок распался на два одинарных? А сколько зернышек нужно добавить в горсть, чтобы она превратилась в кучу[56]?
В разгар структурной революции, когда во всех программистских «храмах» предавали анафеме ключевое слово GOTO[57], часто можно было услышать такую фразу: «Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на BASIC: как потенциальные программисты они умственно оболванены без надежды на исцеление». Встречались и более категоричные предупреждения типа: «Осторожно! Занятие программированием может лишить вас будущего. Не думайте, что научившись программировать, вы чего-то добьетесь в жизни». Традиционное программирование как бы заставляет программиста смотреть на многоцветный мир сквозь черно-белые очки: булева переменная может принимать только два значения (да-нет), а вещественная – строго определенное в оговоренном диапазоне с фиксированной длиной мантиссы и т.д. Истина лежит посередине. Но и крайние точки зрения не бесполезны – они как бы подпирают истину с двух сторон, не давая ей скатиться к крайностям. Да и сами истины в чем-то «пушисты». А одна из них может звучать так: «Если хочешь познать мир (нечеткий, «пушистый», бесчисловой) и управлять им, то опасайся традиционных языков программирования и математических программ с их строгой детерминированностью».


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

Содержание раздела