Разработка программы "Организация перевозок"

Автор работы: Пользователь скрыл имя, 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
Приложение

Содержимое работы - 9 файлов

Cодержаниe.doc

— 75.50 Кб (Открыть файл, Скачать файл)

Cодержаниe2.doc

— 76.00 Кб (Открыть файл, Скачать файл)

~$адание.doc

— 162 байт (Скачать файл)

Математическая модель.cdr

— 66.37 Кб (Скачать файл)

Пояснительная записка 2.doc

— 831.00 Кб (Скачать файл)

             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]), ValueAtPoint(TTRCoord(L[I])) + F)

           else

             SetValueAtPoint(TTRCoord(L[I]), ValueAtPoint(TTRCoord(L[I])) - F);

       until False;

       DestFunction;

       FreeVars;

     end; 

     constructor TTransportTask.Create(SuppliersCount, ConsumersCount: Longword);

     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);

Пояснительная записка.doc

— 635.00 Кб (Открыть файл, Скачать файл)

Титульный лист.doc

— 31.50 Кб (Открыть файл, Скачать файл)

Функциональная схема.cdr

— 39.75 Кб (Скачать файл)

Задание.doc

— 41.50 Кб (Открыть файл, Скачать файл)

Информация о работе Разработка программы "Организация перевозок"