Транспортна задача

Автор: Пользователь скрыл имя, 07 Мая 2013 в 08:32, курсовая работа

Описание работы

Целями курсовой работы являются:
построить математическую модель задачи;
рассмотреть классификацию задач данного типа;
рассмотреть методы решения транспортных задач;
написать и отладить программу для решения транспортных задач с ограничениями на пропускную способность.
Работа состоит из введения, трёх глав, и приложения, содержащего исходный код программного продукта.
Во введении рассмотрена краткая история транспортной задачи, и поставлены цели работы.

Содержание

Введение 3
1. Транспортная задача 5
1.1 Математическая модель задачи 5
1.2 Классификация транспортных задач 8
1.3 Методы решения транспортных задач 8
2. Решение практической задачи 13
3. Спецификация программного продукта 22
Заключение 24
Список использованной литературы 25

Работа содержит 1 файл

kursovaya_rabota_obrazets.doc

— 506.50 Кб (Скачать)

              end

              item

                Caption = '-'

              end

              item

                Action = Action5

                ImageIndex = 0

              end>

            Caption = #1060#1072#1081#1083

          end

          item

            Items = <

              item

                Action = EditUndo1

                ImageIndex = 5

                ShortCut = 16474

              end

              item

                Caption = '-'

              end

              item

                Action = EditCopy1

                ImageIndex = 3

                ShortCut = 16451

              end

              item

                Action = EditCut1

                ImageIndex = 2

                ShortCut = 16472

              end

              item

                Action = EditPaste1

                ImageIndex = 4

                ShortCut = 16470

              end

              item

                Caption = '-'

              end

              item

                Action = EditDelete1

                ImageIndex = 6

                ShortCut = 46

              end>

            Caption = #1055#1088#1072#1074#1082#1072

          end

          item

            Items = <

              item

                Action = Action1

                ImageIndex = 1

              end

              item

                Caption = '-'

              end

              item

                Action = Action2

                ImageIndex = 12

              end>

            Caption = #1056#1077#1096#1077#1085#1080#1077

          end

          item

            Items = <

              item

                Action = Action7

              end>

            Caption = #1055#1086#1084#1086#1097#1100

          end>

        ActionBar = ActionMainMenuBar1

      end

      item

        Items.CaptionOptions = coNone

        Items = <

          item

            Action = Action3

            ImageIndex = 7

          end

          item

            Action = Action4

            ImageIndex = 9

          end

          item

            Caption = '-'

          end

          item

            Action = EditUndo1

            ImageIndex = 5

            ShortCut = 16474

          end

          item

            Caption = '-'

          end

          item

            Action = EditPaste1

            ImageIndex = 4

            ShortCut = 16470

          end

          item

            Action = EditCut1

            ImageIndex = 2

            ShortCut = 16472

          end

          item

            Action = EditCopy1

            ImageIndex = 3

            ShortCut = 16451

          end

          item

            Caption = '-'

          end

          item

            Action = Action2

            ImageIndex = 12

          end

          item

            Action = Action1

            ImageIndex = 1

          end

          item

            Caption = '-'

          end

          item

            Action = Action5

            ImageIndex = 0

          end>

        ActionBar = ActionToolBar1

      end>

    Images = ImageList1

    Left = 712

    Top = 8

    StyleName = 'XP Style'

    object Action1: TAction

      Category = #1056#1077#1096#1077#1085#1080#1077

      Caption = #1042#1099#1095#1080#1089#1083#1080#1090#1100

      Hint = #1042#1099#1095#1080#1089#1083#1080#1090#1100' '#1088#1077#1079#1091#1083#1100#1090#1072#1090

      ImageIndex = 1

      OnExecute = Action1Execute

    end

    object Action2: TAction

      Category = #1056#1077#1096#1077#1085#1080#1077

      Caption = #1050#1086#1083'-'#1074#1086' '#1091#1079#1083#1086#1074

      Hint = #1047#1072#1076#1072#1090#1100' '#1082#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1091#1079#1083#1086#1074

      ImageIndex = 12

      OnExecute = Action2Execute

    end

    object Action3: TAction

      Category = #1060#1072#1081#1083

      Caption = #1054#1090#1082#1088#1099#1090#1100

      Hint = #1047#1072#1075#1088#1091#1079#1080#1090#1100' '#1076#1072#1085#1085#1099#1077' '

      ImageIndex = 7

      OnExecute = Action3Execute

    end

    object Action4: TAction

      Category = #1060#1072#1081#1083

      Caption = #1057#1086#1093#1088#1072#1085#1080#1090#1100' '#1082#1072#1082

      Hint = #1057#1086#1093#1088#1072#1085#1080#1090#1100' '#1090#1072#1073#1083#1080#1094#1091

      ImageIndex = 9

      OnExecute = Action4Execute

    end

    object Action5: TAction

      Category = #1060#1072#1081#1083

      Caption = #1042#1099#1093#1086#1076

      Hint = #1042#1099#1081#1090#1080' '#1080#1079' '#1087#1088#1086#1075#1088#1072#1084#1084#1099

      ImageIndex = 0

      OnExecute = Action5Execute

    end

    object EditUndo1: TEditUndo

      Category = #1055#1088#1072#1074#1082#1072

      Caption = #1054#1090#1084#1077#1085#1080#1090#1100

      Hint = #1054#1090#1084#1077#1085#1080#1090#1100' '#1076#1077#1081#1089#1090#1074#1080#1077

     ImageIndex = 5

      ShortCut = 16474

    end

    object EditCopy1: TEditCopy

      ImageIndex = 3

      ShortCut = 16451

    end

    object EditCut1: TEditCut

      Category = #1055#1088#1072#1074#1082#1072

      Caption = #1042#1099#1088#1077#1079#1072#1090#1100

      Hint = #1042#1099#1088#1077#1079#1072#1090#1100

      ImageIndex = 2

      ShortCut = 16472

    end

    object EditPaste1: TEditPaste

      Category = #1055#1088#1072#1074#1082#1072

      Caption = #1042#1089#1090#1072#1074#1080#1090#1100

      Hint = #1042#1089#1090#1072#1074#1080#1090#1100' '#1080#1079' '#1073#1091#1092#1077#1088#1072' '#1086#1073#1084#1077#1085#1072

      ImageIndex = 4

  object SaveDialog1: TSaveDialog

    Filter = 'MyFile|*.MyFile'

    Left = 104

    Top = 192

  end

  object OpenDialog1: TOpenDialog

    Filter = 'MyFile|*.MyFile'

    Left = 56

    Top = 192

  end

  object Timer2: TTimer

    Interval = 1

    OnTimer = Timer2Timer

    Left = 16

    Top = 192

  end

  object ApplicationEvents1: TApplicationEvents

    OnActionExecute = ApplicationEvents1ActionExecute

    Left = 272

    Top = 192

  end

  object Timer3: TTimer

    Interval = 1

    OnTimer = Timer3Timer

    Left = 312

    Top = 192

  end

end

 

  2.2 Файл Main.pas

unit main;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Spin, Grids, ExtCtrls, Buttons,

  Param, ImgList, ActnList, XPStyleActnCtrls, ActnMan, ActnCtrls, ToolWin,

  ActnMenus, ComCtrls, XPMan, StdActns, AppEvnts;

type

  TMainForm = class(TForm)

    WaightGrid: TStringGrid;

    ImageList1: TImageList;

    ActionMainMenuBar1: TActionMainMenuBar;

    Splitter1: TSplitter;

    ActionToolBar1: TActionToolBar;

    ActionManager1: TActionManager;

    Action1: TAction;

    Action2: TAction;

    StatusBar: TStatusBar;

    Timer1: TTimer;

    XPManifest1: TXPManifest;

    Action3: TAction;

    Action4: TAction;

    Action5: TAction;

    EditCut1: TEditCut;

    EditCopy1: TEditCopy;

    EditPaste1: TEditPaste;

    EditUndo1: TEditUndo;

    EditDelete1: TEditDelete;

    SaveDialog1: TSaveDialog;

    OpenDialog1: TOpenDialog;

    Timer2: TTimer;

    ApplicationEvents1: TApplicationEvents;

    Action6: TAction;

    Action7: TAction;

    Timer3: TTimer;

    procedure WaightGridDblClick(Sender: TObject);

    procedure ChangeTable;

    procedure FormCreate(Sender: TObject);

    procedure Action1Execute(Sender: TObject);

    procedure Action2Execute(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure Action5Execute(Sender: TObject);

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure Action4Execute(Sender: TObject);

    procedure Action3Execute(Sender: TObject);

    procedure Timer2Timer(Sender: TObject);

    procedure ApplicationEvents1ActionExecute(Action: TBasicAction;

      var Handled: Boolean);

    procedure Action7Execute(Sender: TObject);

    procedure WaightGridSelectCell(Sender: TObject; ACol, ARow: Integer;

      var CanSelect: Boolean);

    Function Query(const ACaption, APrompt, ADefault: string): string;

    procedure Timer3Timer(Sender: TObject);

  private

  public

  end;

const

  MaxVer = 49;  {Максимальное  кол-во вершин в графе}

type

  {Матрица весов  ориентированного графа}

  MatrType=array[1..MaxVer, 1..MaxVer] of Double;

var

  MainForm: TMainForm;

  {Главная матрица - веса в ориентированном графе}

  Matr: MatrType;

  N: 1..MaxVer; {Количество вершин в графе}

implementation

uses uOption, uAboutBox, uQuery;

{$R *.DFM}

procedure TMainForm.WaightGridDblClick(Sender: TObject);

{Изменение информации  в выделенной ячейке}

var

  Tit: string;  {Название  ячейки}

  S: string;    {Введённое  число}

  Default: string;{Значение  по-умолчанию}

  Code, i, j: integer;{Контроль преобразования}

label

  loop;

begin

  Tit:='A'+IntToStr(WaightGrid.Row)+'-A'+IntToStr(WaightGrid.Col);

  S:='';  {Начальная инициализация строки}

loop:

  {Ввод строки}

  Default:=S;

  S:=Query('Длина пути:','Введите расстояние между пунктами: '+Tit, Default);

  if S=Default then Exit;  {Нажали кнопку "Отмена"}

  S:=Trim(S); {Убираем окантовку из пробелов}

  Val(S, Matr[WaightGrid.Row, WaightGrid.Col], Code);

  if Code<>0 then goto loop; {Неправильный  ввод}

  {Отрисовываем изменённую  ячейку}

  With WaightGrid do

    Cells[Col, Row]:=FloatToStrF(Matr[Row, Col],ffFixed,10,6);

end;  {TMainForm.WaightGridDblClick}

procedure TMainForm.ChangeTable;

{Изменение и перерисовка  изобр. таблицы при изменении  матр.}

begin

end;  {TMainForm.ChangeTable}

procedure TMainForm.FormCreate(Sender: TObject);

{Начальная инициализация  условия}

begin

  N:=6;

  ChangeTable

end;  {TMainForm.FormCreate}

procedure TMainForm.Action1Execute(Sender: TObject);

type

  ShortPath = array [0..MaxVer+1] of ShortInt;  {Список вершин}

function BranchAndBound(var Matr: MatrType; N, Ver: Byte;

                        var Ans: ShortPath): Boolean;

             {Описание констант}

const

  ZERO = 1.E-15;     {Машинный ноль}

  INFINITY = 1.E+30; {Машинная бесконечность}

             {Описание структур данных}

type

  {Описатель границы  - вершины строящегося дерева}

  PBound = ^TBound;

  TBound = record

    M: MatrType;     {Матрица границы}

    Fi: Double;      {Значение оценочной функции на данной границе}

    RibCol: Byte;    {Количество отобранных ребер обхода на данной границе}

Информация о работе Транспортна задача