- •Введение
- •1 Обзор существующих информационных систем оптимизации грузопотоков
- •1.1 Анализ состояния и перспективы роста грузопотоков в системе развития транзитного потенциала транспортной инфраструктуры Республики Казахстан
- •1.2. Высокопроизводительный механизм математического программирования ibm ilog cplex
- •1.2.1 Применение iLog в транспорте
- •1.3 Оптимизация транспортной логистики
- •1.4 Постановка исследуемой транспортной задачи
- •2 Модели и методы решения транспортных задач
- •2.1 Математическая модель исследуемой транспортной задачи
- •2.2 Постановка математической задачи оптимизации
- •2.3 Модель транспортной задачи
- •3 Выбор и обоснование метода реализации математической модели
- •3.1 Методы оптимизации транспортной задачи
- •3.2 Метод решения транспортной задачи
- •3.3 Разработка алгоритма решения исследуемой транспортной задачи
- •3.4 Пример решения исследуемой транспортной задачи
- •3.5 Разработка алгоритма и программного обеспечения
- •3.6 Диалоговая программная система для решения транспортных задач
- •3.7 Расчет примера транспортной задачи
- •Заключение
- •Список использованных источников
- •Приложение а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Продолжение приложения а
- •Приложение б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
- •Продолжение приложения б
Продолжение приложения б
plan.Top[index2] := plan.Top[index2]-t;
plan.Left[index] := plan.Left[index]-t;
if (plan.Top[index2] = 0) then
index2 := index2+1;
if (plan.Left[index] = 0) then
index := index+1;
end;
end;
procedure TForm1.Dump(data: TData; fl: integer);
function i2s( i: integer ): string;
var
r: string;
begin
r := IntToStr( i );
while( length(r) < 3 ) do
r := ' ' + r;
Result := r;
end;
var
index, index2: integer;
s: string;
begin
if ((fl and 2) <> 0) then
begin
s := ' ';
for index := 0 to data.Width-1 do
s := s + i2s( data.Top[index] );
Memo1.Lines.Add( s );
end;
if ((fl and 5) = 0) then
exit;
for index := 0 to data.Height-1 do
begin
if ((fl and 4) <> 0) then
s := i2s( data.Left[index] )
else
s := '';
if ((fl and 1) <> 0) then
for index2 := 0 to data.Width-1 do
s := s + i2s( data.Arr[index2,index] );
Продолжение приложения б
Memo1.Lines.Add( s );
end;
end;
function TForm1.CalcSum(data, plan: TData): integer;
var
index, index2, s: integer;
begin
s := 0;
for index := 0 to data.Height-1 do
for index2 := 0 to data.Width-1 do
s := s + data.Arr[index2,index] * plan.Arr[index2, index];
Result := s;
end;
function TData.Min: integer;
var
index, index2, m: integer;
begin
m := MaxInt;
for index := 0 to Height-1 do
for index2 := 0 to Width-1 do
if (m > Arr[index2,index]) then
m := Arr[index2,index];
Result := m;
end;
function TData.NoNulls: integer;
var
index, index2, c: integer;
begin
c := 0;
for index := 0 to Height-1 do
for index2:= 0 to Width-1 do
if (Arr[index2,index] > 0) then
inc(c);
Result := c;
end;
procedure TForm1.CalcMinEl( data: TData; var plan: TData );
var
index, index2, x_m, y_m, v_m, s, v: integer;
begin
s := 0;
plan.AssignLT( data );
for index := 0 to plan.Width-1 do
Продолжение приложения б
s := s + data.Top[index];
while (s > 0) do
begin
v_m := MaxInt;
x_m := -1;
y_m := -1;
for index := 0 to plan.Height-1 do
for index2 := 0 to plan.Width-1 do
if ((v_m > data.Arr[index2,index]) and
(plan.Arr[index2,index] = 0) and
(plan.Top[index2] > 0) and (plan.Left[index] > 0)) then
begin
v_m := data.Arr[index2,index];
x_m := index2;
y_m := index;
end;
if (v_m = MaxInt) then
break;
v := min( plan.Top[ x_m ], plan.Left[ y_m ] );
plan.Top[ x_m ] := plan.Top[ x_m ] - v;
plan.Left[ y_m ] := plan.Left[ y_m ] - v;
plan.Arr[ x_m, y_m ] := v;
s := s - v;
end;
end;
procedure TData.Reset;
begin
FillChar( Left, sizeof(Left), 0 );
FillChar( Top, sizeof(Top), 0 );
FillChar( Arr, sizeof(Arr), 0 );
end;
{ TEqSolve }
procedure TEqSolve.AddEq( p1,p2,s : integer );
begin
Eq[ fEqCount ].p1 := p1;
Eq[ fEqCount ].p2 := p2 + fH;
Eq[ fEqCount ].sum := s;
Eq[ fEqCount ].solved := false;
Form1.Memo1.Lines.Add( 'u' + IntToStr(p1+1) + ' + v' + IntToStr(p2+1) +
' = ' + IntToStr( s ) );
inc( fEqCount );
end;