Современные
языки
алгебраического
моделирования
для решения
задач
оптимизации.
Многочисленные
экономические
модели имеют
оптимизационный
характер, т.е.
состоят в
выборе
наилучшего
решения (по
некоторому
критерию)
среди некоторого
множества
решений, или
математически: min{(X): при
ограничениях
}, где (X) - целевая
функция,
определенная
на области C допустимых
решений.
Подобные
оптимизационные
задачи могут
быть реально
решены с
помощью
развитых в
настоящее
время
методов
оптимизации.
Экономико-математическое
моделирование
является трудоемким
итеративным
процессом,
состоящим из
следующих этапов:
1. постановка
задачи;
2. формулировка
задачи в виде
модели
оптимизации;
3. сбор
информации;
4. решение
полученной
математической
задачи;
5. анализ
и
интерпретация
результатов.
Шаги 1-3
особенно
трудоемки и
заканчиваются
построением математической
модели. Если
полученное решение
неудовлетворительно
с точки зрения
практики,
приходится
возвращаться
к шагу 1, корректировать
постановку
задачи и, соответственно,
строить новую
модель.
Понятно, что
каждый раз
корректировать
модель, переделывая программу
для решения
соответствующей
оптимизационной
задачи -
довольно
трудоемкое и
неблагодарное
занятие. Если
учесть, что реальные
экономические
модели могут
иметь тысячи
переменных и ограничений,
которые вряд
ли возможно
построить
вручную, то
становится
ясной
сложность
этой задачи.
Модель
может быть
записана и
решена с помощью
компьютера
различными
методами:
·
На
основе
неструктурированных
подходов, в
которых для
записи
модели и
данных используется
некоторый
язык
программирования
(например, FORTRAN, C/C++). При
этом в
результате
либо
формируется
матрица или
какой-то
другой
входной файл
для
коммерческого
пакета
решения
оптимизационных
задач (обычно
называемый решатель
или сольвер
- от solver -
решатель),
либо
подключается
дополнительно
алгоритм
решения (который
еще нужно
написать и
отладить).
Этот подход
имеет
несколько
недостатков,
некоторые из
них:
трудность
понимания
алгоритма
другими
людьми,
трудность
поддержания
программы в
работоспособном
состоянии, зависимость
от
операционных
систем и
компиляторов.
Тем не менее,
достаточно
часто
предпочитается
именно этот
подход.
·
На
основе
подходов,
использующих
табличные
процессоры
(например, Excel), в которых
математическая
структура
задачи
задана
табличными
шаблонами,
заполняемыми
данными. В
прошлом этот
подход часто
использовался
в
коммерческих
пакетах. При
этом обычно
решались
линейные
задачи оптимизации
или
нелинейные с
очень специальной
структурой.
Эти подходы
обычно вызывают
проблемы
управления
данными,
ограниченными
размерностью
2 (так как
таблицы предполагают
именно эту
размерность),
и требуют
много рутинной
работы.
·
Языки
алгебраического
моделирования
(ЯАМ) - намного
лучший
подход. Они
позволяют записывать
оптимизационные
задачи в
форме, близкой
к обычной
математической
записи, являются
гибкими и
позволяют
быстрое
изменение
моделей.
Наиболее
важные
особенности
ЯАМ:
Ш могут
использоваться
переменные и
ограничения
с
произвольными
именами
(идентификаторами);
Ш множества,
индексы,
алгебраические
выражения
(возможно,
нелинейные);
Ш обозначения
близки к
обычной
математической
записи;
Ш структура
(символическая
запись)
задачи не
зависит и
рассматривается
отдельно от данных;
Ш одни
и те же
модели могут
применяться
как для
решения
небольших
задач, так и
для решения
реальных
практических
задач
большой размерности;
Ш большинство
утверждений
(операторов)
являются
декларативными,
кроме
условных
операторов,
циклов и очень
немногочисленных
процедурных
операторов;
Ш гибкость
типов
определения
моделей;
Ш удобства
для
специалиста
по
моделированию;
Ш простота
интерфейса
между ЯАМ и
сольвером:
o должен
легко
соединять
сольвер с ЯАМ
и иметь простой
доступ к
модели,
данным и
производной информации,
такой как
производные
(автоматическое
дифференцирование);
o возвращение
данных
сольвером
обратно в ЯАМ
в виде
отчетов,
решений,
сообщений об
ошибках
должно быть
непосредственным;
o простая
и мощная
поддержка
работы с
данными (ODBC,
интерфейс с
табличным
процессором,
файлы данных).
Отметим,
что при
решении
достаточно
многих
практически
важных
прикладных
задач и моделей
были
использованы
именно языки
моделирования.
После
того, как
модель
запрограммирована,
далее
используется
решатель или сольвер,
т.е. часть
программного
обеспечения,
способного
решать
описанные
выше задачи
оптимизации.
В идеале сольвер
находит
оптимальное
решение, хотя
в действительности
бывает так, что
при решении
реальных
прикладных
оптимизационных
задач иногда
получают
сообщение
сольвера
"задача
недопустима"
или "задача
не имеет
допустимых
решений". В
связи с этим,
система
моделирования
должна также
поддерживать
идентификацию
задач,
не имеющих
допустимых
решений.
Языки
алгебраического
моделирования
(ЯАМ) берут на
себя задачу
перевода
математической
постановки задачи
в форму,
понятную для
соответствующего
сольвера.
ЯАМ
позволяют
работать с
моделями,
заданными во
входном
файле в виде
алгебраических уравнений и
неравенств.
ЯАМ
транслирует
входной файл в
понятный для
сольвера вид
и
осуществляет
вызов этого
сольвера. В
данном случае
сольвер
рассматривается
как "черный
ящик"
(известно, какие
исходные
данные
требуются
для него и
что будет
получено в
результате его
работы). В
ряде случаев
сольвер
может запросить
дополнительную
информацию, необходимую
для его
работы. Как
только
сольвер
решит задачу,
решение возвращается
ЯАМ, и
результаты
сообщаются пользователю
в удобной
форме.
ЯАМ
позволяют
специалисту
в области
экономико-математического моделирования
записать
модель в
математической
форме,
использующей множества
индексов,
параметры,
переменные и
константы.
Очень важна
возможность
ЯАМ
записывать
подобные
ограничения
в виде
множеств, к
которым затем
можно
обращаться,
используя
соответствующие индексы.
Это
позволяет
компактно
записывать
модели в
виде, близком
к естественной
математической
записи.
К
основным
языкам
моделирования
относятся AMPL, LINGO,
AIMSS, GAMS.