Читать курсовая по финансовому менеджменту, финансовой математике: "Задача составления оптимального графика ремонта инструмента" Страница 4

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

l=1,2, ..., n.

Правильность вычислений контролируют по формулам непосредственного счета:

(2.2.23)

(2.2.24)

В столбце Bx новой таблицы заменяют xi на xj, а в столбце С ci на cj.

5. Если все a0l(k+1)≥0, l=1,.,n, то новое базисное решение xi= ai0(k+1), i € Iб(k+1) - оптимально. В противном случае переходят к этапу 2 и выполняют очередную итерацию.

6. Второй, третий и четвертый этапы повторяют до тех пор, пока одна из итераций не закончится одним из двух исходов:

а) все a0l ≥0. Это признак (критерий) оптимальности базисного решения последней симплекс-таблицы;

б) найдется такой a0j=∆jE[i+1] then

begin

tmp:=E[i];

E[i]:=E[i+1];

E[i+1]:=tmp;

end;

Sort:=E;

end;

{------------------------------------------------------------------}

function NullCheck(j: integer; Fkoef: TFirstKoef): boolean; //функция проверки столбцов матрицы на наличие возможных базисных (одна "1" остальные "0")

var

k,mm:integer;

Summ: real;

begin

Summ:=0;

mm:=2*(Form1.TrackBar1.Position-1);

for k:=1 to mm do

Summ := Summ + Fkoef[k,j];

if summ=1 then

NullCheck:=true

else

NullCheck:=false;

end;

{------------------------------------------------------------------}

function AddVars(Basis: TE):TFullBas; //функция добавления столбцов с искусственными переменными

var

Base: TE;

newBase:TAddBas;

full:TFullBas;

j,k,count,inc,i,maxel,ncols,mm,nn,p,q: integer;

begin

p:=strtoint(Form1.Edit1.Text);

q:=strtoint(Form1.Edit3.Text);

mm:=2*(Form1.TrackBar1.Position-1);

nn:=1+2*(Form1.TrackBar1.Position-1)+(Form1.TrackBar1.Position-2-p)+(Form1.TrackBar1.Position-2-q);

for j:=1 to mm do

newBase[j]:=0;

NumOfNewVars:=0;

Base:=Sort(Basis);

count:=1;

//код ниже реализует поиск и добавление искусственных переменных в случае когда их требуется добавить в начало и середину единичной матрицы

for j:=2 to nn do

begin

k:=Base[j]-Base[j-1];

if (k0) and (k1) then

begin

inc:=1;

for i:=1 to k-1 do

begin

newBase[count]:=Base[j-1]+inc;

count:=count+1;

inc:=inc+1;

NumOfNewVars:=NumOfNewVars+1;

end;

end;

end;

//код ниже реализует поиск искусственной переменной находящейся максимально близко к правому нижнему углу единичной матрицы

maxEl:=newBase[1];

for i:=2 to mm do

if (newBase[i]>newBase[i-1]) then

maxEl:=newBase[i];

if maxel0 then

SelectCol:=napravCol

else

SelectCol:=-1;

end;

{------------------------------------------------------------------}

function SelectRow(fullSimp: FullSimplex; Col: integer):integer;

var

i,mm,napravRow:integer;

minel,tmp:real;

begin

mm:=2*(Form1.TrackBar1.Position-1);

tmp:=1000;

for i:=2 to mm+1 do

if fullSimp[i,Col]>0 then

begin

minel:=tmp;

tmp:=fullSimp[i,3]/fullSimp[i,Col];

if tmp3 then

FS[1,j]:=Tarfunc[j-3];

if i>1 then

for k:=1 to m+n do

if fullBasis[k]=basecount then

begin

FS[i,1]:=tarFunc[k-1];

FS[i,2]:=k-1;

end;

if (i>1) and (j>2) then

FS[i,j]:=Simp[i-1,j-2];

end;

basecount:=basecount+1;

end;

for j:=3 to nn+3+Numofnewvars do

FS[mm+2,j]:=Delta(FS,j);

err:=false;

iterCnt:=0;

EngFull:=FS;

repeat

FS:=form1.NewTable(FS,TarFunc);

if FS[1,1]=-1 then

err:=true;

if iterCnt>1000 then

err:=true;

iterCnt:=iterCnt+1;

until (form1.SelectCol(FS)=-1) or (err);

for i:=2 to m+1 do

if (fs[i,1]=1000) then

err:=true;

if err then

begin

MessageDlg('При заданных условиях задача неразрешима!', mtError, [mbAbort],0 );

form1.n3.Enabled:=false;

form1.n6.Enabled:=false;

end;

SimplexTables:=FS;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

form1.Task;

end;

procedure Tform1.Task;

var

i,j,p,q,inc,cntx,k,cnt,holiday: integer;

sklad: real;

Matr: TFirstKoef;

Tools: array[1..8] of integer;

NewTools: array[1..7] of integer;

Simp: Simplex;

Fsimp: fullsimplex;

begin

Tools[1]:=strtoint(Edit6.Text);

Tools[2]:=strtoint(Edit7.Text);

Tools[3]:=strtoint(Edit8.Text);

Tools[4]:=strtoint(Edit9.Text);

Tools[5]:=strtoint(Edit10.Text);

Tools[6]:=strtoint(Edit11.Text);

Tools[7]:=strtoint(Edit12.Text);

Tools[8]:=strtoint(Edit13.Text);

inc:=0;

for i:=1 to 8 do

if Tools[i]=0 then

holiday:=i;

for i:=1 to 7 do

if Tools[i]0 then

NewTools[i]:=Tools[i+inc]

else

begin

inc:=1;

NewTools[i]:=Tools[i+inc]

end;

p:=strtoint(Edit1.Text);

q:=strtoint(Edit3.Text);

cntx:=2;

for i:=1 to


Интересная статья: Основы написания курсовой работы