ОПТИМАЛЬНЕ КЕРУВАННЯ ПРОЦЕСАМИ З ЗАСТОСУВАННЯМ МЕТОДУ ЛІНІЙНОГО ПРОГРАМУВАННЯ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Систем управління
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
КН-32

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” АВТОМАТИЗОВАНІ СИСТЕМИ УПРАВЛІННЯ Лабораторна робота №1 ОПТИМАЛЬНЕ КЕРУВАННЯ ПРОЦЕСАМИ З ЗАСТОСУВАННЯМ МЕТОДУ ЛІНІЙНОГО ПРОГРАМУВАННЯ Мета роботи Вивчення і застосування методу лінійного програмування для рішення задач оптимального керування, у яких цільова функція, модель процесу й обмеження є лінійними функціями. Хід роботи ознайомитися з теоретичними зведеннями і прикладами використання методу лінійного програмування для рішення задач оптимального керування; представити цільову функцію і систему обмежень у вигляді функцій змінних керування шляхом заміни змінних стану змінних керування; скласти програму рішення задачі на мові delphi вивести на друк максимальне і мінімальне значення цільової функції, значення змінних керування; Індивідуальне завдання Варіант 1 Цільова функція  Модель процесу  Обмеження  Код програми unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label2: TLabel; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label3: TLabel; Label4: TLabel; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Label5: TLabel; Edit10: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Edit11: TEdit; Edit12: TEdit; Label6: TLabel; Label7: TLabel; Label8: TLabel; Edit13: TEdit; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Button4: TButton; DBMemo1: TDBMemo; DBMemo2: TDBMemo; Label18: TLabel; DBMemo3: TDBMemo; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; mfx:array [1..3] of integer; mcy:array [1..2] of integer; msr:array [1..2] of integer; x:array [1..20] of Extended; y:array [1..20] of Extended; xn:array [1..20] of Extended; yn:array [1..20] of Extended; o1:array [1..40] of integer; o2:array [1..40] of integer; mob:array [1..20,1..5] of integer; mobr:array [1..20,1..4] of integer; n,i,j,z,k,g,g1,g2,f,b,k1,p,nb,q,bn:integer; max,min: Extended; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin mfx[1]:=strtoint(edit1.Text); mfx[2]:=strtoint(edit2.Text); mfx[3]:=strtoint(edit3.Text); mcy[1]:=strtoint(edit4.Text); mcy[2]:=strtoint(edit5.Text); n:=strtoint(edit6.Text); end; procedure TForm1.Button1Click(Sender: TObject); begin i:=i+1; mob[i][1]:=strtoint(edit7.Text); mob[i][2]:=strtoint(edit8.Text); mob[i][3]:=strtoint(edit9.Text); mob[i][4]:=strtoint(edit10.Text); if edit13.Text='>' then mob[i][5]:=0 else mob[i][5]:=1; edit7.Text:=''; edit8.Text:=''; edit9.Text:=''; edit10.Text:=''; edit13.Text:=''; end; procedure TForm1.FormCreate(Sender: TObject); begin i:=0; p:=0; end; procedure TForm1.Button3Click(Sender: TObject); begin i:=1; j:=0; k:=0; msr[1]:=mfx[3]*mcy[1]+mfx[1]; msr[2]:=mfx[3]*mcy[2]+mfx[2]; for i:=1 to n do begin if mob[i][1]=0 then begin mobr[i][1]:=mob[i][2]; mobr[i][2]:=mob[i][3]; mobr[i][3]:=mob[i][4]; mobr[i][4]:=mob[i][5]; end else begin mobr[i][1]:=mob[i][1]*mcy[1]+mob[i][2]; mobr[i][2]:=mob[i][1]*mcy[2]+mob[i][3]; mobr[i][3]:=mob[i][4]; mobr[i][4]:=mob[i][5]; end; end; z:=1; k:=1; for i:=1 to n-1 do begin z:=z+1; for j:=z to n do begin g:=mobr[i][1]*mobr[j][2]- mobr[i][2]*mobr[j][1]; g1:=mobr[i][3]*mobr[j][2]-mobr[j][3]*mobr[i][2]; g2:= mobr[j][3]* mobr[i][1]- mobr[j][1]*mobr[i][3]; x[k]:=g1/g; y[k]:=g2/g; o1[k]:=i; o2[k]:=j; k:=k+1; end; end; k:=k-1; b:=1; nb:=n; i:=1; while(k<>0) do begin f:=0; while (n+1<>i) do begin if mobr[i][4]=0 then begin if ((mobr[i][1]*x[k])+(mobr[i][2]*y[k]))>=mobr[i][3] then i:=i+1 else begin f:=1; i:=i+1; end; end; if mobr[i][4]=1 then begin if ((mobr[i][1]*x[k])+(mobr[i][2]*y[k]))<=mobr[i][3] then i:=i+1 else begin f:=1; i:=i+1; end; end; end; if f=0 then begin xn[b]:=x[k]; yn[b]:=y[k]; b:=b+1; end; k:=k-1; // n:=nb; i:=1; end; b:=b-1; bn:=b; max:=(msr[1]*xn[b])+(msr[2]*yn[b]); min:=(msr[1]*xn[b])+(msr[2]*yn[b]); b:=b-1; while b<>0 do begin if ((msr[1]*xn[b])+(msr[2]*yn[b]))>max then max:=((msr[1]*xn[b])+(msr[2]*yn[b])); if ((msr[1]*xn[b])+(msr[2]*yn[b]))<min then min:=((msr[1]*xn[b])+(msr[2]*yn[b])); b:=b-1; end; edit11.Text:=FloatToStr(max); edit12.Text:=FloatToStr(min); end; procedure TForm1.Button4Click(Sender: TObject); begin dbmemo1.Lines.Clear; dbmemo2.Lines.Clear; dbmemo3.Lines.Clear; while bn<>0 do begin dbmemo1.Lines.Add(floattostrF (xn[bn],ffGeneral, 2, 2)); dbmemo2.Lines.Add(floattostrF (yn[bn],ffGeneral, 2, 2)); dbmemo3.Lines.Add(floattostrF ((msr[1]*xn[bn]+msr[2]*yn[bn]),ffGeneral, 5, 3)); bn:=bn-1; end; end; end. Результати роботи  Графік  Висновок: На даній лабораторній роботі я навчився запрограмовувати задачі оптимального керування, у яких цільова функція, модель процесу й обмеження є лінійними функціями. Програмно будувати їх графік, та визначати деякі максимальні і мінімальні точки
Антиботан аватар за замовчуванням

19.02.2013 22:09

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!