Переведем проблему в практическую плоскость и обсудим, можно ли указать некую общую для различных задач последовательность действий, если для их решение предполагается применение компьютера?
Ранее (см. п. 8.2. и рис. 8.1.) нами были выделены две группы форм представления алгоритмов, различающихся уровнем формализации: естественное и формальное. В группу естественного представления были отнесены некоторые виды строчной записи и графическая форма, а в группу формального - теоретические алгоритмические модели и формальные языковые конструкции. На основании этой классификации, а также понятий, обсуждавшихся в данной главе, можно построить следующий общий порядок решения задачи с использованием компьютера:
(1) Выделение исходной системы. Постановка задачи в естественной форме.
(2) Формализация задачи; построение информационной модели (проекта).
(3) Доказательство возможности решения задачи.
(4) Структурирование алгоритма; представление его в естественной форме.
(5) Выбор инструментальной среды.
(6) Построение схемы обработки данных.
(7) Формальное представление схемы обработки на языке исполнителя.
(8) Тестирование модели, исправление ошибок.
(9) Эксплуатация модели.
Относительно приведенной последовательности необходимо сделать ряд замечаний:
1) Этап (1) - постановка задачи - является неформализованным. Его начало - это замена прототипа, поведение которого предполагается изучать или описывать, некоторой системой, что само по себе является упрощением реальной ситуации, т.е. моделированием. Другими словами, при компьютерном решении задач моделирование начинается не с построения информационной модели на этапе (2), а с определения перечня тех компонентов. которые будут включены в систему и взаимодействие которых предстоит учесть. Любое подобное построение приводит к появлению различий между прототипом и представляющей его системой. Эти различия повлекли бы расхождения в результатах компьютерной обработки и естественными явлениями (процессами) даже в том случае, если все последующие этапы были бы выполнены абсолютно точно. Таким образом, «исходная система» - это модель; однако на данном этапе она может носить неформальный характер, например, быть описанной на естественном языке.
2) Этап (2) - формализация задачи - это, по сути, построение формальной системы, соответствующей исходной неформальной и представляющей собой ее информационную модель. Частным (распространенным, хотя не единственно возможным) вариантом описания такой модели является математическое. Из сказанного становится понятна важность формализации как этапа решения задачи на компьютере: именно он определяет принципиальную разрешимость задачи (существование алгоритма ее решения), эффективность использования ресурсов компьютера (объема памяти и времени работы центрального процессора), точность моделирования. Наряду с этим возможна и довольно широко распространена ситуация, когда компьютер используется в качестве инструментального средства для создания искусственной системы -документа, рисунка, базы данных и т.п. В этом случае говорить о модели не приходится - отсутствует прототип; однако, все равно должен быть построен (с явным представлением или в воображении пользователя) формализованный проект конечного продукта.
3) Этап (3) включает две позиции: во-первых, это доказательство принципиальной алгоритмической разрешимости задачи (см. п. 7.7.); а во-вторых, оценка сложности алгоритма (см. п. 7.6.) и доказательство того, что имеющихся технических ресурсов достаточно для решения задачи требуемого уровня сложности.
4) После того, как произведена формализация и доказана разрешимость задачи, наступает этап конкретизации алгоритма: он структурируется, т.е. производится разбиение общей задачи на модули, определяется порядок доступа к модулям, их взаимосвязи. Описание структуры может быть неформализованным - на естественном языке или с применением графических форм.
5) На этапе (5) производится выбор оптимального для решения данной задачи инструмента. Критериями оптимальности могут быть простота получения результата, удобство интерфейса пользователя, точность и скорость обработки и пр. Выбор осуществляется в два шага: на первом решается вопрос, будет ли для решения задачи использоваться существующая программная система (назовем такой подход пакетным) или программа будет разрабатываться (программный подход). Разнообразие и удобство современного стандартного программного обеспечения компьютера столь велико, что позволяет решать многие весьма сложные задачи моделирования без разработки программ. Это заметно расширяет круг пользователей, избавляет от необходимости организации программного интерфейса, позволяет многие задачи решить быстрее, нежели путем программирования. Именно по этим причинам при выборе инструментальной среды пакетному подходу следует отдавать предпочтение по сравнению с программным; усилия по разработке оригинальной программы можно признать целесообразными только в тех случаях, когда отсутствуют стандартные аналоги или они не позволяют решить задачу. Второй шаг инструментального выбора при пакетном подходе состоит в определении наиболее подходящей для данной задачи прикладной программы. Например, для математического моделирования могут сопоставляться пакеты MS Excel, MathCAD, MathLab, Matematica, Derive, Maple V и др. При программном подходе на втором шаге осуществляется выбор наиболее соответствующего характеру данной задачи языка программирования. В этом случае критериями выбора может служить удобство описания исходной модели в данном языке, эффективность технологии программирования и, безусловно, эффективность конечного программного кода.
6) Этап (6) связан с выбором или построением последовательностей алгоритмической обработки данных в модулях основного алгоритма. Весьма часто одно и то же формальное представление допускает различные варианты непосредственной обработки. Например, задача о движении материальной точки под действием произвольной силы описывается дифференциальным уравнением второго порядка, для решения которого могут применяться различные численные методы: Эйлера, касательных, хорд, Рунге-Кутта и др. Одним из факторов, определяющих выбор метода, является точность исходного моделирования.
Довольно очевидным представляется утверждение: обработка данных не может повысить их точность. Речь идет о том, что погрешность, возникающая в ходе начальных допущений на этапе формализации, не может быть компенсирована последующей сколь угодно тщательной и точной обработкой данных. Например, в модели, описывающей движение брошенного тела без учета сопротивления воздуха, принципиально невозможно получить верное значение дальности полета, сколь бы точно не велся расчет. Аналогично точность вычислений не может компенсировать или уменьшить относительной погрешности результатов измерений, используемых в качестве исходных данных задачи. По указанным причинам при выборе схемы обработки данных нет смысла всегда стремиться к использованию схемы максимально точной из всех возможных - как правило, они заметно повышают сложность алгоритма и, следовательно, требуют гораздо больших технических ресурсов или времени обработки. Для расчетных алгоритмов оптимальной с точки зрения эффективного использования компьютера будет выбор вычислительной схемы, в которой точность расчетов (промежуточных данных) лишь на 1 - 2 порядка превышает точность исходных данных (этого требует теория приближенных вычислений). Ограничение точности исходной информации необходимо учитывать и при описании типов данных в программах. Например, при программировании в PASCAL нет смысла применять тип Double (15 десятичных разрядов) или даже Real (12 разрядов) для представления вещественных чисел, определенных с точностью 0,1% (относительная погрешность 10"3) - вполне достаточным окажется тип Single (7 разрядов), занимающий в ОЗУ в два раза меньше места, чем Double.
Схема обработки определяется также выбранным на предыдущем этапе инструментальным средством. Например, при моделировании с применением MS Excel (как и в любом другом пакете) ориентируемся на его возможности и его внутренний язык представления команд (указаний по обработке); по этой причине схема обработки будет иной, нежели, скажем, в пакете MathCAD или при решении задачи с использованием языков программирования.
7) Смысл этапа (7) совершенно очевиден - представление алгоритмической схемы обработки в виде последовательности допустимых команд исполнителя. В пакетном варианте это может быть просто цепочка действий, осуществляемых пользователем, или их запись на внутреннем языке программной системы (макрос). В программном подходе - запись алгоритма с помощью выбранного языка программирования.
8) Этап (8) состоит в локализации и исправлении возможных ошибок. Выделяются несколько источников и, соответственно, типов ошибок. Наиболее простыми и легко устранимыми являются ошибки синтаксиса, т.е. нарушение принятых для данного исполнителя правил построения предписаний действий. Как правило, синтаксический анализ производится самой программной системой - она информирует пользователя об ошибках и не позволяет производить дальнейшую обработку данных при их наличии. Второй класс ошибок - смысловые, которые проявляются в том, что при определенных комбинациях входных данных их обработка производится некорректно.
Локализация подобных ошибок производится тестированием, т.е. применением построенной схемы решения для задач (ситуаций) с известными результатами и сопоставление с ними. Необходимо напомнить (см. п. 7.6.), что тестирование, в общем случае, не обеспечивает устранение всех возможных ошибок. К следующему классу следует отнести ошибки выбора схемы обработки (на этапе (6)). Они проявляются в том, что схема не обеспечивает нужной точности результатов или скорости их получения - в этом случае требуется замена схемы обработки или исполнителя. Наконец, наиболее трудоемкими для устранения являются ошибки моделирования. Они могут возникать на начальных этапах (1) и (2) и связаны с грубостью выделения системы или построения ее модели (т.е. пренебрежением какими-то существенными для задачи компонентами и связями). Устранение подобной ошибки состоит в смене модели и, как следствие, необходимости решать задачу полностью заново.
9) Этап (9) - эксплуатация модели - является основным с точки зрения конечного пользователя. В подавляющем большинстве случаев, разработка компьютерной модели, обеспечивающей решение какой-то прикладной задачи, и ее практическая эксплуатация осуществляется разными людьми. На этом этапе существенным оказывается наличие обратной связи между пользователем и разработчиком, что позволяет устранять выявленные в процессе эксплуатации ошибки и совершенствовать модель.
10) В указанной последовательности решения задачи обращает на себя внимание некоторая цикличность этапов, имеющих естественное и формальное представление: на этапе (1) описание задачи может осуществляться на естественном языке; этап (2) предполагает построения формализованной информационной модели; на этапе (3) также используются формальные методы доказательства разрешимости; этапы (4, 6) представляет собой структуризацию алгоритма и представление отдельных его фрагментов его в естественной форме (с учетом системы команд выбранного исполнителя); этап (7) - вновь формальное описание (на языке программирования). Таким образом, решение задачи на компьютере требует умения пользоваться как формальными, так и естественными способами представления алгоритмов.
Выше рассмотрена общая последовательность действий при решении прикладной задачи с использованием компьютерных средств. Безусловно, отдельные этапы последовательности в каких-то конкретных задачах могут отсутствовать или представляться в ином виде.