-
Экономическая модель в системе экономического планирования.
-
Структура экономической модели
-
Экономическая модель состоит из трех частей:
-
переменных
-
описания взаимосвязей между переменными
-
подмоделей
Под переменной подразумевается некий экономический параметр (например, доходы в процентах от ВВП). В системе каждый параметр представляется в виде табличной функции, где каждое значение (которое может быть как в виде определенного числа, так и в виде интервала, либо вообще не задано) - это значение переменной при дискретном значении индекса. Под индексами понимается значение квартала или года. На данном этапе развития проекта индексов может быть максимум два, т.е. переменная может зависеть либо от года либо от квартала и года. Индекс обязательно должен иметь диапазон изменения, например, для года - от 1994 до 2000 года; для квартала - от 1 до 4-х.
Описание взаимосвязей между переменными или система ограничений параметров представляет собой систему уравнений и неравенств. В системе она представляется в виде отдельного файла. Язык описания очень схож с описанием выражений на языках высокого уровня, таких как Basic, Pascal или C/C++.
Подмодель представляет вполне законченную экономическую модель, для которой также определены свои переменные, система ограничений и свои подмодели. Такая модель может рассчитываться автономно, причем ей «неизвестно», входит ли она сама в какую-либо большую модель как подмодель. В качестве примера большой экономической модели, например, можно взять бюджет Российской Федерации, а в качестве одной из подмоделей - бюджет Свердловской области.
Пример простейшей модели бюджета, на которой испытывался прототип данной системы, можно посмотреть на рис.2.1
Рис.2.1. Простейшая модель бюджета РФ.
-
Язык описания модели.
Под языком описания экономической модели понимается совокупность правил описания ограничений, т.е. формат записи уравнений и неравенств.
Этот язык можно разделить на внешний и внутренний. Под внешним языком подразумевается форма записи, которой придерживается экономист - разработчик. Внутренний язык - это формат записи, который «понимает» вычислитель системы. Фактически, в системе внешний язык идентичен внутреннему, но, чтобы добиться совместимости с первой версией (макетом), предусмотрена возможность распознавания текста модели макета.
-
Внутренний язык - язык вычислителя UniCalc.
Язык UniCalc - это правила по которым записывается модель для решателя UniCalc.
На языке решателя UniCalc пользователь можете записать модель в виде совокупности выражений, включающих переменные, константы, стандартные математические функции, пользовательские функции. Язык решателя максимально приближен к общепринятой математической нотации. Каждое выражение должно заканчиваться символом ";".
Алфавит входного языка решателя UniCalc состоит из всех букв латинского алфавита и русского алфавита, всех цифр и набора специальных символов: +, -, *, /, ^, (, ), [, ], =, <, <=, >, >=, <>, :=, ,, ;, and, or, not, ->, (*, *).
Имена служат для обозначения переменных и функций. Имя может состоять только из букв и цифр, причем первым символом обязательно должна быть буква.
Переменные в UniCalc’е рассматриваются двух типов: целые и вещественные. Тип переменной принимается по умолчанию. Имена целых переменных начинаются с букв i, j, k, l, m, n для латинского алфавита, и соответственно - с букв и, й, к, л, м, н для русского алфавита. Остальные переменные считаются вещественными. Большие и малые буквы в имени различаются.
-
Константы.
В системе определены константы двух типов: целые и вещественные. Целые константы - целые числа в диапазоне от -2147483646 до 2147483646. Пример записи целого числа:
-10, -5, 0, 15, 100,...
Вещественные константы - вещественные числа в диапазоне от -1e+19 до 1e+19. Пример записи вещественных констант: -0.03, 3.14, 0.9999999, 10.44e-5,...
Язык содержит встроенные константы для задания постоянных величин:
p= 3.14159,
e = 2.71828,
g = 9.80665.
Эти константы изображаются следующим образом:
p - @pi; e - @e; g - @g.
Пример:
l:=[-@pi/2, @pi/2];
S = @pi*r^2;
f = (@e^x - @e^(-x))/2;
F = M*@g^2/2.
-
Переменные
В UniCalc'e рассматриваются переменные двух типов: целые и вещественные. Тип переменной определяется первым символом ее имени. Имя может состоять из букв латинского и русского алфавита, а также цифр, причем первым символом обязательно должна быть буква. Имена распознаются по первым восьми символам. Большие и малые буквы в имени различаются. Имена целых переменных начинаются с букв i, j, k, l, m, n, для латинского алфавита, и соответственно с букв и, й, к, л, м, н, для русского алфавита. Для больших букв умолчание сохраняется. Остальные переменные считаются вещественными.
-
Стандартные математические функции
sin() синус;
cos() косинус;
asin() арксинус;
acos() арккосинус;
tg() тангенс;
ctg() котангенс;
atan() арктангенс;
ln() натуральный логарифм;
exp() экспонента;
abs() абсолютное значение;
sign() знак числа;
sqrt() квадратный корень;
dif() функция символьного дифференцирования
max(a,b,..,c) максимальное значение;
min(a,b,...,c) минимальное значение;
lower(0 нижнее значение;
upper() верхнее значение;
-
Пользовательские функции
Пользовательские функции записываются в виде:
имя_функции (список формальных параметров) := выражение;
Допускается использование только арифметических выражений.
Вызов функции:
имя_функции (список фактических параметров);
Пример описания пользовательской функции:
f(x,y) := x^2 + y^2 - 1;
Пример вызова функции:
f(23.1, z+5) = 0;
-
Комментарии.
Любая последовательность символов, заключенная между комбинациями символов "(*" и "*)", является комментарием и может вставляться в любое место программы.
-
Арифметические операции.
+ операция сложения;
- операция вычитания и унарный минус;
* операция умножения;
/ операция деления;
^ операция возведения в степень.
Арифметические операции по приоритету в порядке убывания располагаются следующим образом: ^, /, *, -, +. Фактически операции "+" и "-" имеют одинаковый приоритет, так же как и /" и "*". Для изменения приоритета операций используются круглые скобки. Результатом операции деления в случае обоих целых операндов является целая часть частного.
-
Логические операции.
OR логическое "ИЛИ";
AND логическое "И";
NOT логическое "НЕ";
-> импликация.
Логические операции по приоритету в порядке убывания располагаются следующим образом: NOT, AND, OR, ->.
-
Операции отношения.
= равно;
<> не равно;
< меньше;
> больше;
<= меньше или равно;
>= больше или равно.
-
Оператор присваивания.
Оператор присваивания используется для инициализации переменных и для задания начального интервала переменных. Вид оператора присваивания - := .
Пример операции присваивания:
х := 999;
Y := [5+6*10, 999].
-
Переменные – массивы.
В последних версиях решателя возможно использование массивов произвольной размерности:
<array_name>[index_expr1, index_expr2, ... , index_exprN]
Тип элементов массива определен в имени массива <array_name> согласно правилам, действующим для имен переменных. Индексные выражения <index_expri> должны быть целыми константами или выражениями, результат которых - целое число. Элемент массива - это та же самая переменная, только записанная в специфической форме.
-
Внешний язык.
Внешний язык модели полностью идентичен внутреннему, поскольку разработкой модели будет заниматься эксперт - экономист, что, в свою очередь, подразумевает некие навыки программирования. Но, для совместимости с первой версией системы возможно распознавание текста модели макета. Отличие внешнего языка от внутреннего в данном случае состоит в том, что в языке макета не существовало понятия циклов, поскольку вычислитель системы их не поддерживал, т.е. для него не было определено понятие массивов. Таким образом, чтобы описать в формуле зависимость параметра от индексов, нужно было вводить некоторые скобки - разделители, в которых записывались обозначения индексов. Таким образом, на внешнем языке формула, описывающая ограничение, была одна, а во внутреннем языке, после обработки препроцессором, получалось N формул, где N - число сочетаний индексов, используемых в формуле и не выходящих за границы диапазона изменения индекса. Вместо обозначения индекса во внутреннем языке подставлялось его значение.
-
Пример формулы на внешнем языке и внутреннем языке.
Пусть существует несколько параметров A, B и С которые зависят от индекса Y, изменяющегося в диапазоне от 1992 до 1995. Параметр С, кроме этого зависит от индекса K, изменяющегося в диапазоне от 1 до 4-х. Также от параметра К зависит параметр D. Между ними существует взаимосвязь:
C{K,Y}=A{Y}+B{Y-1}+D{K+2};
Фигурные скобки {} «показывают» препроцессору, что перед ним переменная, которая зависит от индексов, находящихся в этих скобках. После трансляции на внутренний язык получается система уравнений:
C[1,1993]=A[1993]+B[1992]+D[3];
C[1,1994]=A[1994]+B[1993]+D[3];
C[1,1995]=A[1995]+B[1994]+D[3];
C[2,1993]=A[1993]+B[1992]+D[4];
C[2,1994]=A[1994]+B[1993]+D[4];
C[2,1995]=A[1995]+B[1994]+D[4];
Но все это сделано для распознавания «старых» моделей. Эту формулу также можно записать в виде, применяемой в нынешней версии: