Идентификация параметров математической модели развивающейся экономики

ИДЕНТИФИКАЦИЯ ПАРАМЕТРОВ МАТЕМАТИЧЕСКОЙ МОДЕЛИ РАЗВИВАЮЩЕЙСЯ ЭКОНОМИКИ А.В. Козлицкая, А.В. Кощеев, А.И. Фетинина

Описывается создание математической модели межотраслевого баланса развивающейся экономики и идентификация параметров этой модели. Множества реальных отраслей экономики агрегировано в три сектора. Приведены программные коды идентификации параметров матрицы производственных затрат.

Введение

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

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

Моделирование развивающейся экономики - довольно сложный и трудоемкий процесс, так как развитие всегда сопровождается различными скачками, неопределенностью параметров модели. Поэтому с помощью статистических данных далеко не всегда можно сделать качественный анализ и прогноз будущих значений. С развитием высокопроизводительных систем эта задача может быть значительно упрощена и сведена к минимуму затрат. Благодаря этому создание математических моделей в наши дни осуществляется, в основном, с использованием различных компьютерных технологий [1].

Применение параллельных вычислений в моделировании экономики расширяет возможности разработчиков моделей. Появилась возможность идентифицировать внешние параметры сложных нормативных балансовых динамических моделей экономических систем в различных регионах и странах. Для этого разрабатываются специальные критерии близости и похожести для статистических и рассчитанных по модели временных рядов макропоказателей изучаемой экономической системы страны или региона. Кроме этого, применяются информационные технологии создания математических моделей с помощью интеллектуальных систем поддержки математического моделирования типа системы ЭКОМОД [2, 3], что позволяет уменьшить число независимых внешних параметров. Также совершенствуются методы глобальной оптимизации, которые сокращают время расчета.

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

Идентификация параметров матрицы производственных затрат

Идентификация сложной математической модели той или иной экономической системы заключается в определении внешних параметров этой модели. В подобных за-

дачах параллельные вычисления позволяют находить те решения, которые без применения технологии распараллеливания было невозможно найти [1, 4].

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

Простейшая имитационная модель развивающейся экономики может быть представлена в виде трехсекторной нормативной балансовой динамической математической модели [5]. В такой модели необходимо идентифицировать всего девять параметров, что является наиболее приемлемым. Поэтому такую модель целесообразно было применить для поставленной перед нами задачи. Расчеты по модели дают количественную оценку динамики макропоказателей экономики как региона, так и страны в целом. Динамика материальных и финансовых балансов в модели задана изменением запасов продуктов, факторов производства и денег. Выделены следующие сектора экономики: инновационный сектор, сырьевой сектор и промышленность и прочие отрасли.

Наша модель построена на основе статистических данных макроэкономических показателей России за 1985-1990 годы. Первоначальные данные были разделены на семнадцать отраслей. Такое количество предполагает идентификацию двухсот восьмидесяти девяти параметров, вычисление которых является затруднительным. Поэтому рационально было объединить имеющиеся данные в три различных сектора экономики.

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

Все семнадцать отраслей изначально представлены в виде матрицы межотраслевого баланса Леонтьева [6]. Поэтому агрегирование такой матрицы в трехсекторную предполагает выполнение определенных операций.

Экономико-математическая модель межотраслевого баланса (МОБ) отражает производство и распределение ВВП по отраслям, межотраслевые потоки, использование материальных и трудовых ресурсов, создание и распределение национального дохода (вектора конечного потребления).

Экономико-математическая модель МОБ представляет собой систему уравнений, отражающих взаимосвязь включенных в его систему элементов. В матричном виде эта модель может быть представлена как

X = АХ + 7,

где X = {Х1, X2, X3} - вектор валовой продукции, 7 = {71,72,73} - вектор конечного потребления, А = {а-} - матрица затрат, а элементы матрицы а- называют коэффициентами прямых затрат - это затраты /-ой отрасли на единицу валовой продукции ]-ой отрасли.

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

Матричное уравнение (1) можно записать в виде

X - АX = Т ^

Матричное уравнение (2) можно рассматривать для решения следующих задач:

1. определение объемов конечной продукции Т = {Т1, Т2, Т3} по заданным объемам валовой продукции X = {{, X 2, X 3};

2. определение объемов валовой продукции отраслей X = X2, X-,} по заданным объемам конечной продукции Т = {Т1, Т2, Т3}.

Матрицу прямых затрат можно агрегировать. Агрегированием матрицы прямых затрат называется преобразование исходной матрицы А = {л ]} размерности п х п в

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

Наша исходная матрица представляет собой матрицу А = {а ] } прямых затрат размерности (17х17) за 1990 г. Также задан вектор валовых выпусков X = {{, X 2,..., X17 }. Требуется построить агрегированную матрицу для трех укрупненных отраслей.

Коэффициенты этой матрицы В = \Ьг]-} . = вычисляются следующим образом:

I I ]

Ък1 = ^Т-•

I X]

Реализация модели

В результате проделанной работы с использованием формулы (3) была получена агрегированная матрица за 1990 г. (таблица):

Инновационный сектор 0,2673 0,0726 0,0715

Сырьевой сектор 0,3301 0,269 0,093

Промышленность и прочие отрасли 0,1733 0,1406 0,3298

Таблица. Агрегированная матрица производственных затрат

По данной матрице были определены интервалы (сетка) изменения идентифицируемых параметров. Саму полученную матрицу нельзя использовать для составления прогнозов, поскольку она составлена по данным всего лишь одного года без учета предыдущих значений. Кроме этого, 1990 г. является одним из переломных годов в российской экономике. Поэтому для идентификации параметров данной матрицы и использования ее в дальнейшем для прогнозов была написана параллельная программа. Исходными данными для программы являются, во-первых, вектора валового и конечного выпусков за несколько лет (минимум - 5), а во-вторых - начальные и конечные значения по каждому из идентифицируемых параметров, в пределах которых осуществляется идентификация. В соответствии с теорией Леонтьева, матрица производственных затрат удовлетворяет условиям Фробениуса и Хоукинса-Саймона [6], поэтому все параметры - коэффициенты матрицы затрат - могут находиться в пределах от 0 до 1. Но в нашем случае для упрощения задачи интервалы были заданы по агрегированной матрице 1990 г. в виде «значение +/- значение, деленное пополам». Эти интервалы рас-

считываются непосредственно в программе и представлены в виде двух матриц - нижних и верхних границ интервалов.

Программа написана с использованием функций MPI в C++. Сначала была написана последовательная программа, а далее она была распараллелена на доступное число процессоров. Основная процедура, в которой непосредственно осуществляется распараллеливание и идентифицируются параметры матрицы производственных затрат, представлена ниже.

int main

{

float W[YEARS*OTRASL]; float X[YEARS*OTRASL]; float limits [OTRASL*OTRASL]; float limits 1[OTRASL*OTRASL]; float limits2[OTRASL*OTRASL]; float MY_X[YEARS*OTRASL]; float MY_A[OTRASL*OTRASL];

int numproc; // число процессоров int procind; // номер процессора

MPI_Status status; MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &numproc); MPI_Comm_rank(MPI_COMM_WORLD, &procind);

char perProcLogPath[20]; sprintf(perProcLogPath, "./log/%d.log", procind); perProcLog = fopen(perProcLogPath, "w"); clock_t start, finish; double duration; start = clock();

float bestK = 0.0;

float bestA[OTRASL*OTRASL];

float tmp[1];

readW("./data/acc.txt", tmp); float acc = tmp[0]; // точность readW("./data/w.txt", W); readW("./data/x.txt", X); readW("./data/a. txt", limits);

// границы поиска параметров матрицы A for (int i = 0; i < OTRASL * OTRASL; i++) { limits1[i] = limits[i] / 2.0; limits2[i] = limits[i] * 1.5;

}

if (procind == 0) {

printf(" Accuracy: %.6f\n", acc); printf("W:\n");

printW(W, YEARS, OTRASL, stdout); printf("X:\n");

printW(X, YEARS, OTRASL, stdout); printf(Mlow limits on A:\n"); printW(limits1, OTRASL, OTRASL, stdout); printf("high limits on A:\n"); printW(limits2, OTRASL, OTRASL, stdout); fflush(stdout);

}

float slice = float (limits2[0] - limits1[0]) / numproc;

float a1 = limits1[0] + procind * slice;

float a2 = limits1[0] + (procind + 1) * slice;

fprintf(perProcLog, "a1 = %.6f, a2 = %.6f\n\n", a1, a2);

fflush(perProcLog);

initW(bestA, OTRASL * OTRASL);

initW(MY_X, YEARS * OTRASL);

MY_X[0] = X[0]; MY_X[1] = X[1]; MY_X[2] = X[2];

for (float aa = a1; aa < a2; aa += acc ) { MY_A[0] = aa;

fprintf(perProcLog, "starting 1 loop with %f\n", aa); fflush(perProcLog); for (float bb = limits1[1]; bb < limits2[1]; bb += acc ) { MY_A[1] = bb;

fprintf(perProcLog, "starting 2 loop with %f\n", bb); fflush(perProcLog); for (float cc = limits1[2]; cc < limits2[2]; cc += acc ) {

MY_A[2] = cc; for (float dd = limits1[3]; dd < limits2[3]; dd += acc ) {

MY_A[3] = dd; for (float ee = limits1[4]; ee < limits2[4]; ee += acc ){

MY_A[4] = ee; for (float ff = limits1[5]; ff < limits2[5]; ff += acc ) {

MY_A[5] = ff; for (float gg = limits1[6]; gg < limits2[6]; gg += acc ) {

MY_A[6] = gg for (float hh = limits1[7]; hh < limits2[7]; hh += acc ) {

MY_A[7] = hh; for (float ii = limits1[8]; ii < limits2[8]; ii += acc ) {

MY_A[8] = ii; for (int t = 0; t < YEARS-1; t++) {

FF(X, W, MY_A, t, MY_X);} bliz(X, MY_X, MY_A, bestK, bestA);

} }

// bestK, bestA - лучший результат, он посылается главному процессу

if (procind == 0) { fprintf(stdout, "%d %.12f\n", procind, bestK); fflush(stdout); int bestN = 0;

for (int tmp = 1; tmp < numproc; tmp++) { float bestK_;

MPI_Recv(&bestK_, 1, MPI_FLOAT, tmp, 77, MPI_COMM_WORLD, &status); MPI_Recv(MY_A, OTRASL*OTRASL, MPI_FLOAT, tmp, 77, MPI_COMM_WORLD, &status);

fprintf(stdout, "%d %.12f\n", tmp, bestK_);

fflush(stdout);

if (bestK_ > bestK) {

bestK = bestK_; bestN = tmp;

copyArray(MY_A, bestA, OTRASL * OTRASL);

} }

fprintf(stdout, "Best K = %.12f [%d]\n", bestK, bestN);

fflush(stdout);

fprintf(stdout, "Best A:\n");

printW(bestA, OTRASL, OTRASL, stdout);

finish = clock();

duration = (double)(finish - start) / CLOCKS_PER_SEC;

printf( "%2.1f seconds\n", duration );

}

else {

MPI_Send(&bestK, 1, MPI_FLOAT, 0, 77, MPI_COMM_WORLD);

MPI_Send(bestA, OTRASL*OTRASL, MPI_FLOAT, 0, 77, MPI_COMM_WORLD);

}

fclose(perProcLog); MPI_Finalize(); return 0;

}

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

X

После расчета векторов валовых продуктов по формуле (4) производится сравнение выходных временных рядов переменных модели (Х) с доступными статистическими временными рядами (Y) за 1985-1990 гг. При этом используется индекс Тейла E(X,Y). Но для удобства расчетов вместо индекса Тейла лучше применить коэффициент близости U(X, Y) = 1 - E(X, Y). Чем выше он, т.е. чем ближе он к единице, тем более близки ряды.

U ( X, Y ) = 1 -;

Z (Xt - Yt )2

i=1

n , n ,

Z Xt 2 + Z Y2

I /=1 /=1

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

Заключение

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

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

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

Литература

1. Оленев Н.Н. Основы параллельного программирования в системе MPI. - М.: ВЦ РАН, 2005. - 80 с.

2. Поспелов И.Г., Поспелова И.И., Хохлов М.А., Шипулина Г.Е. Новые принципы разработки макромоделей экономики и модель современной экономики России. -М.: ВЦ РАН, 2006. - 239 с.

3. Шатров А.В. Моделирование развивающейся экономики Кировской области с помощью интеллектуальной системы ЭКОМОД/II Всероссийская научная конференция с молодежной научной школой». / Математическое моделирование развивающейся экономики ЭКОМОД-2007. Сборник трудов. - Киров: изд-во ВятГУ, 2007. -С. 259-271.

4. Оленев Н.Н., Печенкин Р.В., Чернецов А.М. Параллельное программирование в MATLAB и его приложения. - М.: ВЦ РАН, 2007. - 120 с.

5. Оленев Н.Н., Стариков А.С., Шатров А.В. Параллельные вычисления с использованием GRID - технологий в математическом моделировании региональной экономики. / Высокопроизводительные вычисления на кластерных системах. Материалы шестого Международного научно-практического семинара. Том 2. / Под ред. проф. Р.Г. Стронгина. - СПб: Изд-во СПбГУ, 2007. - С. 84-92

6. Леонтьевский сборник: жизнь, учителя, идеи. - СПб: Издательство «Нестор - История», 2006. - 384 с.