Автор работы: Пользователь скрыл имя, 08 Апреля 2011 в 09:11, дипломная работа
Транспортная задача является классической задачей исследования операций. Множество задач распределения ресурсов сводится именно к этой задаче. Распределительные задачи связаны с распределением ресурсов по работам, которые необходимо выполнить. Задачи этого класса возникают тогда, когда имеющихся в наличии ресурсов не хватает для выполнения каждой работы наиболее эффективным образом. Поэтому целью решения задачи, является отыскания такого распределения ресурсов по работам, при котором либо минимизируются общие затраты, связанные с выполнением работ, либо максимизируется получаемый в результате общий доход
Введение 4
1 Исследовательская часть 5
1.1 Описание и анализ предметной области 5
1.2 Обзор используемых элементов языка и среды программирования 11
2 Технологическая часть 16
2.1 Постановка задачи 16
2.2 Реализация модели математическим методом 17
2.3 Выбор архитектуры приложения 28
2.4 Структурные и функциональные схемы 29
2.5 Проектирование интерфейса пользователя 30
3 Специальная часть 32
3.1 Описание разрабатываемых процедур и функций 32
3.2 Таблица идентификаторов 34
3.3 Выбор стратегии тестирования и разработка тестов 35
4 Мероприятия по охране труда и технике безопасности 39
4.1 Освещение 40
4.2 Микроклимат 40
4.3 Эргономичность 42
4.4 Техника безопасности 47
5 Экономическая часть 49
5.1 Расчет стоимости разработки 49
5.2 Расчет экономического эффекта от внедрения программного обеспечения 58
Заключение 60
Список используемых источников 62
Приложение
begin
Result := True;
L.Add(TTRCoord.Create(P.I, P.J));
Exit;
end;
if B[I, P.J] then
begin
Result := True;
AP.I := I;
AP.J := P.J;
if GetCycle(AP, not O) then
begin
L.Add(TTRCoord.Create(P.I, P.J));
Break;
end;
ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В
end;
end;
AP.Free;
end;
procedure CalculateIndexes;
var
I, J, M, UC, VC: Longword;
UB, VB: array of Boolean;
begin
SetLength(UB, SC);
SetLength(VB, CC);
for I := 0 to SC - 1 do
UB[I] := False;
for I := 0 to CC - 1 do
VB[I] := False;
U[0] := 0;
UB[0] := True;
UC := 1;
VC := 0;
repeat
for I := 0 to Max(SC, CC) - 1 do
begin
if (I < SC) and UB[I] then
begin
for J := 0 to CC - 1 do
if B[J, I] and not VB[J] then
begin
V[J] := C[J, I] - U[I];
VB[J] := True;
Inc(VC);
end;
end;
if (I < CC) and VB[I] then
for J := 0 to SC - 1 do
if B[I, J] and not UB[J] then
begin
U[J] := C[I, J] - V[I];
UB[J] := True;
Inc(UC);
end;
end;
until (UC = SC) and (VC = CC);
SetLength(UB, 0);
SetLength(VB, 0);
end;
procedure InitVars;
var
I, J: Longword;
begin
if FCalculated then
Exit;
L := TObjectList.Create;
L.OwnsObjects := True;
MinP := TTRCoord.Create(0, 0);
SetLength(X, CC);
SetLength(B, CC);
for I := 0 to CC - 1 do
ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В
begin
SetLength(X[I], SC);
SetLength(B[I], SC);
for J := 0 to SC - 1 do
begin
X[I, J] := 0;
B[I, J] := False;
end;
end;
SetLength(D, CC);
for I := 0 to CC - 1 do
begin
SetLength(D[I], SC);
for J := 0 to SC - 1 do
D[I, J] := 0;
end;
SetLength(U, SC);
SetLength(V, CC);
end;
procedure FreeVars;
var
I: Longword;
begin
for I := 0 to CC - 1 do
begin
SetLength(B[I], 0);
end;
SetLength(B, 0);
for I := 0 to CC - 1 do
SetLength(D, 0);
SetLength(D, 0);
SetLength(U, 0);
SetLength(V, 0);
L.Free;
MinP.Free;
end;
procedure CheckPlan;
var
I, J, K, MinI, MinJ, BC: Longword;
MinC: Double;
begin
BC := 0;
for I := 0 to CC - 1 do
for J := 0 to SC - 1 do
begin
B[I, J] := X[I, J] <> 0;
if B[I, J] then
Inc(BC);
end;
for K := 1 to SC + CC - 1 - BC do
begin
MinC := HighDouble;
for I := 0 to CC - 1 do
for J := 0 to SC - 1 do
if not B[I, J] and (C[I, J] < MinC) then
begin
MinC := C[I, J];
ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В
MinI := I;
MinJ := J;
end;
B[MinI, MinJ] := True;
end;
end;
procedure CalculateBasicPlan;
var
I, J, MinJ: Longword;
begin
MinJ := 0;
for I := 0 to CC - 1 do
for J := MinJ to SC - 1 do
begin
X[I, J] := Min(Need[I], Stock[J]);
B[I, J] := True;
Stock[J] := Stock[J] - X[I, J];
Need[I] := Need[I] - X[I, J];
if Stock[J] > 0 then
Break
else
Inc(MinJ);
end;
end;
procedure DestFunction;
var
I, J: Longword;
begin
DF := 0;
for I := 0 to CC - 1 do
for J := 0 to SC - 1 do
if X[I, J] <> 0 then
DF := DF + X[I, J] * C[I, J];
end;
begin
InitVars;
CalculateBasicPlan;
repeat
CheckPlan;
L.Clear;
CalculateIndexes;
MinD := 0;
for I := 0 to CC - 1 do
for J := 0 to SC - 1 do
if not B[I, J] then
begin
D[I, J] := C[I, J] - (U[J] + V[I]);
if D[I, J] < MinD then
begin
MinD := D[I, J];
MinP.I := I;
MinP.J := J;
end;
end else
D[I, J] := 0;
if MinD = 0 then
ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В
Break;
GetCycle(MinP);
F := HighDouble;
for I := 0 to L.Count - 1 do
if I mod 2 = 0 then
if ValueAtPoint(TTRCoord(L[I])) < F then
F := ValueAtPoint(TTRCoord(L[I]));
for I := L.Count - 1 downto 0 do
if I mod 2 = 1 then
SetValueAtPoint(TTRCoord(L[I])
else
SetValueAtPoint(TTRCoord(L[I])
until False;
DestFunction;
FreeVars;
end;
constructor
TTransportTask.Create(
var
I: Longword;
begin
CC := ConsumersCount;
SC := SuppliersCount;
SetLength(C, CC);
for I := 0 to CC - 1 do
SetLength(C[I], SC);
SetLength(Stock, SC);
SetLength(Need, CC);
FCalculated := False;
end;
destructor TTransportTask.Destroy;
var
I: Longword;
begin
for I := 0 to CC - 1 do
begin
SetLength(C[I], 0);
SetLength(X[I], 0);
end;
SetLength(C, 0);
SetLength(X, 0);
SetLength(Stock, 0);
SetLength(Need, 0);
end;
procedure TTransportTask.GetOutputData;
var
I, J: Longword;
begin
SetLength(XValues, CC);
for I := 0 to CC - 1 do
begin
SetLength(XValues[I], SC);
Информация о работе Разработка программы "Организация перевозок"