Сравнение различных методов расчета ПДВ для реального предприятия
Sign : TOperation;
isT : boolean;
end;
TSimplex = class
M,N : integer; { M - число строк, N - число столбцов}
RealN : integer; {реальное число переменных, изначально вошедших в задачу}
Cons : array of TConstrain;
C : TExtArray;
L : extended;
Basis : array of integer;
Max : boolean; { направление оптимизации: минимизация или максимизация }
Constructor Create(_C:TExtArray; MaximiCe:boolean=false);
Constructor CreateBasis(const Simplex:TSimplex);
Constructor Copy(const Simplex:TSimplex);
Procedure AddCons(_B:extended; _A:TExtArray; Sign:TOperation);
Procedure SetAllLengths(Len:integer);
Function SimplexStep:integer;
Function CheckBasis:boolean;
Function FoundInBasis(num:integer): integer;
Function DoPrec(num:extended): extended;
Procedure NormaliCe;
Procedure MulString(Number:integer; Value:extended);
Procedure AddString(Num1,Num2:integer; Value:extended); {суммирование строки 1 со строкой 2, домноженной на коэффициент Value }
Function Solve:integer;
Function GetMin:extended;
Function GetSolution:TExtArray;
Destructor Free;
end;
TIntSimplex = class(TSimplex)
// CurX : TExtArray;
//CurL : extended;
// CurFound : boolean;
Constructor Create(_C:TExtArray; MaximiCe:boolean=false);
// Procedure DelLastCons;
Function IntSolve:integer;
Function GetIntMin:extended;
Function IsInteger(value:extended):boolean;
Function GetIntSolution:TExtArray;
// Function SearchCons(_B:extended;_A:TExtArray):integer;
end;
implementation
uses Math;
{ TSimplex }
Function TSimplex.DoPrec(num:extended): extended;
begin
if ((num < MAX_VAL) and (num > -MAX_VAL)) then
num := 0;
Result := num;
end;
procedure TSimplex.AddCons(_B: extended; _A: TExtArray; Sign: TOperation);
var
j : integer;
begin
if (Length(_A)>N) then SetAllLengths(Length(_A));
inc(M);
SetLength(Cons,M);
//if ((_B=0) and (Sign=Less)) then Sign:=Equal; //???
Cons[M-1].B:=_B;
Cons[M-1].Sign:=Sign;
SetLength(Cons[M-1].A,N);
for j:=0 to Length(_A)-1 do Cons[M-1].A[j]:=_A[j];
if Length(_A)<N then for j:=Length(_A) to N-1 do Cons[M-1].A[j]:=0;
end;
{суммирование строки 1 со строкой 2, домноженной на коэффициент Value }
procedure TSimplex.AddString(Num1, Num2: integer; Value: extended);
var
j : integer;
begin
for j:=0 to N-1 do Cons[Num1].A[j]:=Cons[Num1].A[j]+Cons[Num2].A[j]*Value;
Cons[Num1].B:=Cons[Num1].B+Cons[Num2].B*Value;
end;
function TSimplex.CheckBasis: boolean;
var
i,j,k : integer;
f : boolean;
begin
SetLength(Basis,M);
for i:=0 to M-1 do Basis[i]:=-1;
for j:=0 to N-1 do begin
f:=true;
k:=-1;
i:=0;
while (f and (i<M)) do begin
if ((Cons[i].A[j]<>0) and (Cons[i].A[j]<>1)) then f:=false;
if (Cons[i].A[j]=1) then begin
if (k=-1) then k:=i
else f:=false;
end;
inc(i);
end;
if (f and (k<>-1)) then Basis[k]:=j;
end;
f:=true;
for i:=0 to M-1 do f:=f and (Basis[i]<>-1);
Result:=f;
end;
constructor TSimplex.Create(_C: TExtArray; MaximiCe:boolean);
var
j : integer;
begin
N:=Length(_C);
Экологические заметки
Социально-экологическое взаимодействие
В последние годы в современном обществе
наблюдается рост внимания к тем проблемам, которые традиционно составляют
предмет изучения экологической науки, и это вполне закономерное яв ...
Разработка предложений по очистке природного газа и переработки кислых газов с получением товарной продукции (серы) (на примере Карачаганакского месторождения)
Сформировавшемуся в последнее время нефтегазовому
комплексу Республики Казахстан отводится ведущая роль в топливно-энергетическом
балансе и экономике страны. При нынешних темпах ра ...
Управление загрязнением окружающей среды
Стремительное развитие всех отраслей
промышленности, энергетики, транспорта, увеличение численности населения,
урбанизация и химизация всех сред деятельности человека приводят к на ...