Как автор продавал программы (быль)
Оглавление
Как автор продавал программы (быль)
Страница 2
Страница 2 из 2
Итак, перебор. Следуя вышеописанному правилу, новый метод решения задачи
необходимо совместить с новым программным средством для его реализации. Это,
конечно, можно было сделать и в среде Excel, составив таблицу всех решений и/или
написав программу перебора на языке Visual Basic for Applications (VBA),
встроенном в Excel. Но у Оли на компьютере был установлен еще и Mathcad (феномен
рояля в кустах). Он довольно успешно решает задачи самого разного плана (включая
и экономические) без обращения к чистому программированию (BASIC, С, Pascal и
др.). Кроме того, в то время я работал над книгой, которую читатель держит в
руках. Пример с краской эту книгу только украсит (нечаянный каламбур).
Протокол "контрольного взвешивания" краски в среде Mathcad приведен на рис.
3.22. Комментарии поясняют, что происходит в формулах. В Mathcad-документе
формируются две матрицы с именами Об и Ст, элементы которых хранят значения
объема (об) и стоимости (ст) краски в зависимости от комбинаций расфасовки.
Далее некоторым элементам матриц об и Ст присваиваются нулевые значения, если
данные комбинации расфасовки не проходят по стоимости. Остальное — ловкость рук
и никакой математики: с помощью функции match определяется номер строки
(переменная N15) и номер столбца (N55) матрицы Об, на пересечении которых
находится элемент с максимальным значением. Ответ (37 маленьких барабанов и 6
больших) неприятно удивил Олю. Она невольно обманывала меня на 175 тыс. руб.
Встроенная в Mathcad функция match всегда возвращает составной массив
-вектор, элементы которого — новые векторы с двумя компонентами. Число элементов
первого "внешнего" вектора зависит от того, сколько в анализируемой матрице (у
нас это матрицы об и Ст) элементов равны заданному значению (Мак_Об и Макс_Ст).
В нашем случае таких элементов оказалось по одному, но функция match и в этом
случае вернула составной массив, из которого ответ (нужный вектор) пришлось
изымать оператором .
Так Mathcad сэкономил мне 175 тысяч хоть и старых, но рублей. Деньги не такие
уж большие, но если присовокупить к ним новый компьютерный этюд в книгу, новую
тему лекции и новую лабораторную работу по информатике, а также гонорар за эту
книгу, то игра стоила свеч.
Вернувшись из Тамбова домой в Москву, я в спокойной обстановке у своего
родного компьютера еще раз проанализировал задачу. И вот что получилось.
Во-первых, заставить процедуру поиска решений Excel правильно "разъяснять"
задачу о краске можно было, изменив начальные установки. А для этого нужно было
не полениться и нажать кнопку Параметры в диалоговом окне Поиск решения. В новом
диалоговом окне Параметры поиска решения достаточно было допустимое отклонение уменьшить с 5 до 1%. После этого
правильное решение было бы найдено.
Рис. 3.22. Задача о краске — решение в среде Mathcad
Честно говоря, в Excel плоха не процедура поиска решений, а ее начальные
установки. Очень мало пользователей Excel, прибегающих к ее услугам, нажимают
кнопку Параметры. Тот же, кто разбирается в сути установок оптимизации, как
правило, с Excel не работает. Отсюда и недоразумения.
В табл. 3.2 представлен полный анализ оптимальных решений.
Таблица 3.2. Полный анализ оптимальных решений
Характеристика |
Варианты решения |
Вариант расфасовки
(число маленьких барабанов/число
больших барабанов) |
2/16 |
6/15 |
13/13 |
37/6 |
Объем краски (л) |
910 |
915 |
910 |
885 |
Остаток невыбранных денег (руб.) |
186 000 |
47 000 |
12 000 |
11 000 |
Во-вторых, когда я показал эту таблицу в отделе снабжения МЭИ, то мне было
сказано, что самый оптимальный вариант и для меня (мне важны деньги), и для МЭИ
(ему нужна краска) четвертый: у "Тамбовэнерго" были бы выбраны почти все деньги,
а 885 литров краски, как это ни кажется странным, больше, чем 910 и 915. Дело в
том, что при крупной расфасовке много краски теряется из-за переливов в меньшую
тару. 15-литровый барабан можно взять в ремонтируемую аудиторию и там полностью
использовать.
Задача о краске, опубликованная в предыдущем издании книги, имела интересное
продолжение. Один читатель написал, что он тоже подправил Excel, перешел на
перебор и получил большую премию за экономию средств на производстве (штамповка
пластмассовой посуды).
Неверное решение задачи получается не только из-за плохих методик или
дефектных программных средств, но и из-за того, что пользователь сам толком не
знает, чего он хочет. Все программы решения задачи линейного программирования
требуют четкого формулирования одной-единственной целевой функции. При решении
учебных задач цель ясна. А что является целью в жизни? Но это уже не математика,
а философия...
« Пред. - След.