Компьютерное моделирование

Компьютерное моделирование

Издавна человек применяет модели. Это полезно при изучении сложных процессов или систем, конструировании новых устройств или сооружений. Обычно модель более доступна для исследования, чем реальный объект (а есть такие объекты, экспериментировать с которыми невозможно или недопустимо). Как вы уже знаете, модель -- это некоторый материальный или идеальный (мысленно представляемый) объект, замещающий объект-оригинал, сохраняя его характеристики, важные для данной задачи. 

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

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

Математические модели, используемые при решении современных практических задач, настолько сложны, что исследовать их вручную практически невозможно. Приходится прибегать к помощи компьютера. Как же происходит процесс компьютерного моделирования?

Всякая модель создается для вполне определенной цели, и это в значительной степени определяет ее выбор. Поэтому первое, что необходимо сделать, -- поставить задачу, т.е. определить вопросы, ответы на которые мы хотим получить, и необходимые для этого исходные данные.

Во-вторых, нужно выбрать среди законов, которым подчиняется моделируемая система, существенные для поиска ответов на поставленные вопросы. Возможно, придется выдвигать и какие-то предположения. Найденные закономерности следует представить в форме математических соотношений. 

Рассмотрим простой пример22. 

Для производства вакцины на заводе выращивают культуру бактерий. Экспериментально установлена скорость размножения бактерий. Известно также, что при увеличении числа бактерий начинается самоотравление, причем количество погибающих бактерий пропорционально квадрату биомассы. Определенную массу забирают ежедневно на нужды производства. Требуется установить, как будет меняться масса бактерий с течением времени.

Начнем с того, что сформулируем задачу математическим языком. Итак, из эксперимента известно, что, если масса бактерий - X грамм, то за сутки появится AX и погибнет BX2 грамм бактерий. Коэффициенты A и B определяются опытным путем для каждого вида бактерий. Ежедневно забирается M грамм. Таким образом, к началу следующего дня масса будет равна

X+(AX-BX2)-M = X (A+1-BX)-M.

Этой формулы нам достаточно, чтобы рассчитать массу бактерий через день, если мы знаем начальную; затем -- пользуясь этой же формулой  -- найдем массу через 2 дня; используя уже это значение как исходное -- то, что будет через 3 дня и так далее. Такой способ вычисления последовательности называется рекуррентным23. 

Исходными данными будут:

X0 -- начальная масса бактерий; 

A, B -- экспериментально определенные коэффициенты; 

M -- масса бактерий, забираемая ежедневно на нужды производства. 

Результат -- масса бактерий через 1, 2, 3... дня. Обозначим ее "X". Для определенности будем вести расчет для 100 дней.

Итак, модель построена. Что дальше?

На следующем этапе нужно разработать алгоритм ее исследования (либо подобрать готовый). Потом -- составить программу, реализующую этот алгоритм.

Напишем программу для нашего примера. Как обычно, все начнется со ввода исходных данных, после чего нужно будет выполнить вычисления и вывести результаты. Поскольку нам нужно знать биомассу для каждого из ста дней, очевидно, что вычисления ее и вывод результатов нужно будет выполнять циклически. Представим все сказанное на языке Лого:

это биомасса

спроси [Коэффициент А]

пусть “A ответ

спроси [Коэффициент B]

пусть “B ответ

спроси [Ежедневный расход M] 

пусть “M ответ

спроси [Начальная масса X0]

пусть “X0 ответ

пусть “X :X0

повтори 100 

[

пусть “X следующее_значение :A :B :M :X 

пиши :X

]

конец

Для вычисления следующего значения воспользуемся выведенной нами формулой:

это следующее_значение :A :B :M :X 

пусть “Y :X * (:A + 1 - :B * :X) - :M

выход :Y

конец

Обратите внимание: здесь мы используем так называемую "процедуру-функцию" (или просто функцию). Последняя команда в ней -- "выход" (вых, output, op) -- указывает компьютеру, что нужно передать (или, как говорят программисты, "вернуть") основной программе.

После отладки программы и выполнения расчетов на компьютере, обязательно нужно проанализировать полученные результаты, убедиться в их правдоподобности. Только после этого компьютерную модель можно использовать.

Вполне вероятно, что придется проверять -- и корректировать -- программу, алгоритм, а может быть и модель.

В нашем примере весьма вероятно, что при запуске, мы увидим... отрицательную массу бактерий. Естественно, такого реально быть не может. Просто при заданных нами исходных данных все бактерии либо погибли, либо были израсходованы на производство вакцины. Очевидно, что продолжение расчета в такой ситуации -- бессмысленно. Значит, надо скорректировать нашу программу. Если при вычислении по формуле будет получено отрицательное число, нужно будет выводить соответствующее сообщение и останавливать программу. 

Для полной остановки программы в Лого служит команда "останов" (stopall). 

Внесем соответствующие изменения в функцию "следующее_значение".

это следующее_значение :A :B :M :X 

пусть “Y :X * (:A + 1 - :B * :X) - :M

если_иначе :Y > 0

[

выход :Y

]

[

сообщи [Все бактерии погибли!]

останов

]

конец

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

Модель которую мы только что рассмотрели относится к описательным24. Такие модели описывают -- воспроизводят в соответствии с известными математическими зависимостями -- действие реальных систем. Но не менее широко используются математические модели и других классов. В этом пособии мы их просто коротко перечислим.

Оптимизационные модели описывают некоторую систему совокупностью соотношений, причем ряд параметров в этих соотношениях -- во власти человека. Назначение таких моделей -- найти такое сочетание значений этих параметров, при котором будет получен наилучший результат из возможных. Наиболее широко они используются в экономических расчетах.

Первые два класса моделей применимы в случаях, когда нет сил, противодействующих выбранной цели. Реально же нередки ситуации, в которых различные участники имеют несовпадающие интересы. Яркими примерами являются игры "верю-не верю" или "камень-ножницы-бумага". Раздел математики, занимающийся моделированием таких ситуаций называется теорией игр, а соответствующие модели -- игровыми. Однако, это не значит, что это нечто несерьезное. Использовать такие модели приходится и в весьма серьезных обстоятельствах.

Наиболее сложным является имитационное моделирование, позволяющее исследовать сложные системы, прогнозировать будущее их состояние в зависимости от различных стратегий управления.

Примечания

Задача заимствована из учебника "Основы информатики и вычислительной техники" А. Г. Гейна, В. Г. Житомирского и др. 

Recurrent (англ. от лат.) -- возвращающийся, повторяющийся вновь 

Другое название -- дескриптивные модели (от англ. Description -- описание)