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
Похожие работы
Интересная статья: Основы написания курсовой работы