Автор: Пользователь скрыл имя, 19 Марта 2012 в 14:50, курс лекций
В курсе изложены основы системного анализа, синтеза и моделирования систем, которые необходимы при исследовании междисциплинарных проблем, их системно-синергетических основ и связей. Курс предназначен для студентов, интересующихся не только тем, как получить конкретное решение конкретной проблемы (что достаточно важно), но и тем, как ставить, описывать, исследовать и использовать такие задачи, находить и изучать общее в развивающихся системах различной природы, особенно, в информационных системах
1. Лекция: История, предмет, цели системного анализа
2. Лекция: Описания, базовые структуры и этапы анализа систем
3. Лекция: Функционирование и развитие системы
4. Лекция: Классификация систем
5. Лекция: Система, информация, знания
6. Лекция: Меры информации в системе
7. Лекция: Система и управление
8. Лекция: Информационные системы
9. Лекция: Информация и самоорганизация систем
10. Лекция: Основы моделирования систем
11. Лекция: Математическое и компьютерное моделирование
12. Лекция: Эволюционное моделирование и генетические алгоритмы
13. Лекция: Основы принятия решений и ситуационного моделирования
14. Лекция: Модели знаний
15. Лекция: Новые технологии проектирования и анализа систем
Пример. Математическое и компьютерное моделирование подробно, поэтапно, мы рассмотрим на примере следующей простой модели производства. Итак, возьмем укрупненные этапы моделирования производства.
Современное производство характерно тем, что часть производимой продукции (в стоимостном выражении) возвращается в виде инвестиций (т.е. части конечной продукции, используемой для создания основных фондов производства) в производство. При этом время возврата, ввода в оборот новых фондов может быть различным для различного рода производства. Необходимо промоделировать эту ситуацию и выявить динамику изменения величины основных фондов производства (капитала).
Сложность и многообразие, слабая структурированность и плохая формализуемость основных экономических механизмов, определяющих работу предприятий, не позволяют преобразовать процедуры принятия решений в экономической системе в полностью эффективные математические модели и алгоритмы прогнозирования. Поэтому целесообразно использование простых, но гибких и надежных процедур принятия решения.
Рассмотрим одну такую простую модель социально-экономического процесса.
Динамика изменения величины капитала определяется в нашей модели, в основном, простыми процессами производства и описывается так называемыми обобщенными коэффициентами амортизации (расхода фондов) и потока инвестиций (часть конечного продукта, используемого в единицу времени для создания основных фондов). Эти коэффициенты - относительные величины (оцениваются за единицу времени). Необходимо разработать и исследовать модель динамики основных фондов. Считаем при этом допустимость определенных гипотез, определяющих систему производства.
Пусть x(t) - величина основных фондов (капитала) в момент времени t, где 0tN. Через промежуток времени Δt она будет равна x(t+Δt). Абсолютный прирост равен Δx=x(t+Δt)-x(t). Относительный прирост будет равен x=[x(t+Δt)-x(t)]/Δt.
Примем следующие гипотезы:
Считая Δt0, а также учитывая определение производной, получим из предыдущего соотношения следующее математическое выражение закона изменения величины капитала - математическую модель (дифференциальное уравнение) динамики капитала:
x´(t) = y(t) - mx(t), x(0)=х0,
где х(0) - начальное значение капитала в момент времени t=0.
Эта простейшая модель не отражает важного факта: социально-экономические ресурсы производства таковы, что между выделением инвестиций и их введением и использованием в выпуске новой продукции проходит время (лаг). Учитывая это, можно записать модель в виде
x´(t) = y(t-T)-mx(t), x(0)=х0
Этой непрерывной, дифференциальной, динамической модели можно поставить в соответствие простую дискретную модель:
хi+1=хi +yj - mхi , x0=с, i=0, 1, 2, :, n, 0<j<n,
где n - предельное значение момента времени при моделировании.
Дискретная модель следует из непрерывной при Δt=1, при замене производной x´(t) на относительное приращение (из определения производной, это справедливо при малых значениях Δt).
Возьмем для простоты режим моделирования, когда m, c - известны и постоянны, y - увеличивается на каждый следующий момент времени на 1%, а также рассмотрим наиболее простой алгоритм моделирования в укрупненных шагах.
Алгоритм, записанный на учебном алгоритмическом языке, имеет вид
алг Производство (арг вещ m, c, n, рез вещ таб х[1:366], лит p, q);
дано | производство с основными фондами, изменяющимися по закону:
| х[i+1]=х[i]+y-mx[i], x[0]=c, i=0, 1, 2, :, n, 0<j<n,
| t=i*h, h=1 - шаг по времени (день),
| i - текущий момент времени,
| m - коэффициент амортизации,
| х[0]=с - заданная начальная величина капитала,
| y - увеличиваемая на 1% каждый раз величина инвестиций
надо | промоделировать динамику основных фондов, т.е. выяснить:
| 1) чему они равны на момент времени n;
| 2) наступает ли гибель предприятия, т.е. обращается ли капитал
| (основные фонды) в нуль при некотором t, и найти это t;
| 3) наступает ли ситуация, когда капитал стабилизируется
нач | начало тела алгоритма
| описание типов переменных
цел i, | i - переменная цикла прогноза (текущее время)
j, | j - задаваемая величина лага
k, | k - момент гибели предприятия (если есть)
y | y - величина инвестиций, увеличиваемая по закону y:=1.01*y
ввод (m, n, c, y) | ввод исходных данных
p:='предприятие не гибнет' | задаем начальное значение s
q:='капитал не стационарен' | задаем начальное значение q
х[0]:=с | начальное значение капитала (не нулевое)
i:=0 | задаем начальный момент времени моделирования
нц пoка (i<=n) и (х[i]>0) | заголовок цикла прогноза капитала
| тело цикла прогноза капитала
х[i+1]=х[i]+y-mx[i] | вычисление прибыли в следующий момент
y:=1.01*y | и увеличиваем на 1% - для следующего момента
если х[i+1]<=0 | проверка гибели
то | если гибнет, - выполняется блок погибшего предприятия
p:="предприятие гибнет" | заменяем значение s
k:=i-1 | и фиксируем время гибели
нц для j от k до n | цикла вычисления всех
кц | конец блок обработки погибшего предприятия
если х[i+1]=х[i] | проверка стационарности прибыли
то q:="капитал стационарен" | заменяем старое значение q
кц
кон.
Приведем программу на Паскале для имитационного моделирования (программа реализована для функции типа y=at+b, где a, b - коэффициенты потока инвестиций; структурированность и интерфейс программы "принесены в жертву" компактности, простоте и понятности программы).
PROGRAM MODFOND;
{Исходные данные находятся в файле in.dat текущего каталога}
{Результаты записываются в файл out.dat текущего каталога}
Uses
Crt, Graph, Textwin;
Type
Vector = Array[0..2000] of Real;
Mas = Array[0..2000] of LongInt;
Var
Time, Lag, t, dv, mv, i, yi, p :Integer;
tmax, tmin
a, b, m, X0, maxx, minx, aa, bb, cc, sx, tk :Real;
x
ax, ay
ch
f1, f2
{-----------------------------
Procedure InputKeyboard; { Ввод с клавиатуры }
Begin
OpenWindow(10,5,70,20,' Ввод данных ',14,4);
ClrScr; WriteLn;
WriteLn('Введите время Т прогнозирования системы:');
Repeat
Writeln('Для удобства построения графика введите Т не меньше 2');
Write('Т='); ReadLn(Time);
until Time>=2;
WriteLn('Введите лаг:');
Repeat
Write('Лаг должен быть строго меньше Т - '); ReadLn(Lag);
until Lag<Time;
WriteLn('Введите коэффициенты для вычисления потока инвестиций');
Write('Введите a>0: a= '); ReadLn(a);
Write('Введите b>0: b= '); ReadLn(b);
Repeat
Write('Введите коэффициент амортизации ( 0<M<1 ) - '); Readln(m);
until (m<1) and (m>0);
Write('Введите значение фондов в начальный момент - '); Readln(X0);
CloseWindow;
end;
{-----------------------------
Procedure InputFile; { Ввод из файла }
Begin
Assign(f1,'in.dat'); Reset(f1); Readln(f1,time,lag,a,b,m,X0); Close(f1);
End;
{-----------------------------
Procedure OutputFile; { Запись результата работы в файл }
Begin
Assign(f2,'out.dat'); Rewrite(f2);
WriteLn(f2,' Результаты моделирования:');
WriteLn(f2,'Значение фондов в заданное время Т = ',x[time]:4:2);
WriteLn(f2,'Максимальное значение фондов = ',maxx:4:2);
Write(f2,'Минимальное значение фондов = ',minx:4:2);
Close(f2);
End;
{-----------------------------
Procedure InputRnd; { Ввод случайными числами }
Begin
Randomize;
Repeat Time:=Random(90); until Time>=2;
Repeat Lag:=Random(80); until Lag<Time;
a:=Random(10); b:=Random(10); m:=Random; X0:=Random(200);
End;
{-----------------------------
Procedure OutputScreen; { Вывод данных на экран }
Begin
OpenWindow(10,5,70,20,' Вывод данных: ',4,3); WriteLn;
WriteLn(' Данный набор входных параметров:'); WriteLn;
WriteLn(' Время Т - ',time);
WriteLn(' Лаг
WriteLn('Коэффициенты потока инвестиций:'); WriteLn;
WriteLn(' a
WriteLn(' b
WriteLn('Эмпирический коэффициент амортизации - ',m:4:3);
Write('Состояние фондов в начальный момент - ',X0:4:2);
ReadKey; CloseWindow;
End;
{-----------------------------
Procedure Worker; { Рабочая процедура }
Var
yt :real;
Begin
x[0]:=X0;
For t:=1 to Time do
Begin
If t<Lag+1 then yt:=0 else yt:=a*(t-1-Lag)+b; x[t]:=yt+(1-m)*x[t-1];
End;
maxx:=x[0]; minx:=x[0]; tmin:=0; tmax:=0;
For t:=1 to Time do
If x[t]>maxx
then begin maxx:=x[t]; tmax:=t; end
else if x[t]<minx then begin minx:=x[t]; tmin:=t; end;
OpenWindow(10,5,70,13,' Результат работы модели: ',14,7);
ClrScr; WriteLn;
WriteLn('Значение фондов в заданное время Т = ',x[time]:4:2);
If tmin<>0 then
WriteLn(' Величина фондов возрастает с ',tmin,' до ',tmax);
WriteLn(' Максимальное значение фондов = ',maxx:4:2);
Write(' Минимальное значение фондов = ',minx:4:2);
ReadKey; CloseWindow;
End;
{-----------------------------
Procedure Mas_OX; { Масштабирование по оси ОХ }
Var
st :String;
Begin
p:=1; While Time>p*24 do inc(p);
For i:=1 to 24 do Begin Str(p*i,st); OutTextXY(65+20*i,420,st) End;
For t:=0 to Time do ax[t]:=70+round(20*t/p);
End;
{-----------------------------
Procedure Mas_OY; { Масштабирование по оси ОУ }
Var
st :String;
k, r :Integer;
Begin
If maxx>16
then Begin
k:=1; While maxx>k*16 do inc(k);
For i:=1 to 16 do Begin Str(k*i,st);OutTextXY(35,407-
tk:=k;
End
else Begin
r:=1; While (maxx<=16/r) and (r<16) do inc®; dec®;
For i:=1 to (trunc(16/r-0.1)+1) do
tk:=1/r;
End;
For t:=0 to Time do ay[t]:=410-round(20*x[t]/tk);
End;
{-----------------------------
Procedure Ipol(x1,y1,x2,y2,x3,y3:Real); {Процедура интерполяции}
Var d1, da, db, dc :Real;
Begin
d1:=x1*x1*(x2-x3)+x2*x2*(x3-
da:=y1*(x2-x3)+y2*(x3-x1)+y3*(
db:=x1*x1*(y2-y3)+x2*x2*(y3-
dc:=x1*x1*(x2*y3-y2*x3)+x2*x2*
aa:=da/d1; bb:=db/d1; cc:=dc/d1;
End;
{-----------------------------
Procedure Graf; { Построение графика }
Begin
dv:=detect; InitGraph(dv,mv,''); SetBkColor(7); SetColor(6);
Rectangle(30,40,600,450);
Line(600,60,620,60); Line(620,60,620,470);
Line(50,450,50,470); Line(50,470,620,470);
SetFillStyle(1,1); FloodFill(610,450,6);
SetFillStyle(1,15); FloodFill(100,100,6);
SetColor(5); Circle(70,410,2);
Line(70,410,70,50); Line(70,410,590,410); { оси ОХ и ОУ }
OutTextXY(587,407,'>'); OutTextXY(67,47,'^'); OutTextXY(57,415,'0');
OutTextXY(80,45,'X(T) - (Величина основных фондов производства)');
OutTextXY(590,415,'T'); OutTextXY(540,430,'(Время)'); SetColor(2);
For i:=1 to 16 do Line(67,70+20*i,70,70+20*i);
For i:=1 to 24 do Line(70+20*i,410,70+20*i,413);
Mas_OX; Mas_OY;
For t:=0 to time do Вegin
SetColor(Blue); Circle(ax[t],ay[t],2);
SetFillStyle(SolidFill,Red); FloodFill(ax[t],ay[t],Blue);
Информация о работе Введение в анализ, синтез и моделирование систем