MathCAD

       

Задача о пожарных ведрах: перебор


В решении задачи о пожарных ведрах на рис. 3.9 в пунктах 1 (одноведерная задача) и пункт 2 (двухведерная задача) формируются векторы a, V и V2 по 361 элементу в каждом[9]. Ключевой оператор решения использует встроенную функцию max, возвращающую максимальное значение своего аргумента – вектора (матрицы). Функции, возвращающей номер максимального элемента вектора (матрицы), в среде Mathcad нет – с рассуждениями по этому поводу читатель может ознакомиться в этюде 4. Поэтому на рис. 3.9 (как и на рис. 3.6 и 3.7) задействован оператор суммы, перебирающий все варианты ведер и запоминающий угол вырезки для изготовления одного ведра максимального объема – 66 градусов (пункт 1) или двух ведер с максимальным суммарным объемом – 117 и 243 (360-117) градусов (пункт 2). Наш метод перебора опасен тем, что если у вектора (матрицы) два и более максимальных значений (как у вектора V2), то в лучшем случае появится сообщение об ошибке, а в худшем – неправильный ответ (см. пункт 2 на рис. 3.9 с aопт[10]=360). При решении трехведерной задачи (пункт 3) на область максимума была как бы наброшена сетка, в узлах которой просчитаны значения «трехведерной» функции. Далее были определены координаты сетки, где данная функция максимальна. Такой контрольный расчет перебором еще раз показал, что третье ведро лишнее – мы получили уточненное решение двухведерной задачи из пункта 2.

Наше решение выглядит несколько извращенным – в функцию max, составляющую ядро расчета на рис. 3.9, и в другие, ей подобные, также заложен перебор: что-то другое здесь вряд ли придумаешь.

Хотя как сказать. Представим такую житейскую ситуацию. Садовод собрал на своем дачном участке урожай яблок и решил похвастаться самым крупном

плодом перед соседями. Будет ли он перебирать все яблоки, чтобы выбрать предмет гордости? Конечно, нет. Самое большое яблоко никому не нужно. Нас интересует самое большое яблоко с определенной степенью вероятности. Кроме того, в термин «большое» мы вкладываем не вес яблока и не его геометрические размеры, а его зрительный образ.


Пусть у нас 100 плодов. Берем первое попавшееся более-менее крупное яблоко и считаем, что оно самое большое со степенью вероятности, намного превышающей 1% (1/100). Второе выбранное яблоко (а оно, естественно, должно быть больше первого) существенно повышает вероятность выбора самого большого. Так очень скоро, перебрав (взвесив, измерив или просто оценив на глаз) всего лишь несколько яблок, а не все сто, можно выбрать относительно самое большое яблоко. Кто-то возразит, что яблоки перед отбором могут быть кем-то
отсортированы так, что самое большое окажется в хвосте очереди (на дне корзины). Но это уже будет искусственная ситуация, враждебная человеку[11]. Мы же говорим о дружественных
ситуациях. Данный алгоритм станет совсем естественным, если отбирается не самое большое, а, например, самое красивое яблоко. Здесь полный перебор будет уж совсем диким. К понятиям большое и красивое можно приложить теорию нечетких множеств, о которой речь пойдет в этюде 6.
К сожалению, задачи, приведенные в данной книге, начиная с самой простой (задача о купце и сукне – см. этюд 1) и заканчивая самой сложной (это, наверное, задача о трехсторонней дуэли – см. этюд 6), нельзя отнести к разряду естественных. Все они довольно надуманные, призванные скорее иллюстрировать возможности Mathcad, а не показывать пути решения практических задач. Автора утешает и одновременно огорчает то, что таким недостатком грешат почти все книги по программным средам. Надуманная задача – это призма, сквозь которую вдумчивый читатель посмотрит на реальную задачу.

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