Автор: Пользователь скрыл имя, 07 Мая 2013 в 08:32, курсовая работа
Целями курсовой работы являются:
построить математическую модель задачи;
рассмотреть классификацию задач данного типа;
рассмотреть методы решения транспортных задач;
написать и отладить программу для решения транспортных задач с ограничениями на пропускную способность.
Работа состоит из введения, трёх глав, и приложения, содержащего исходный код программного продукта.
Во введении рассмотрена краткая история транспортной задачи, и поставлены цели работы.
Введение 3
1. Транспортная задача 5
1.1 Математическая модель задачи 5
1.2 Классификация транспортных задач 8
1.3 Методы решения транспортных задач 8
2. Решение практической задачи 13
3. Спецификация программного продукта 22
Заключение 24
Список использованной литературы 25
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#
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#
Caption = #1042#1099#1095#1080#1089#
Hint = #1042#1099#1095#1080#1089#
ImageIndex = 1
OnExecute = Action1Execute
end
object Action2: TAction
Category = #1056#1077#1096#1077#1085#
Caption = #1050#1086#1083'-'#1074#1086' '#1091#1079#1083#1086#1074
Hint = #1047#1072#1076#1072#1090#
ImageIndex = 12
OnExecute = Action2Execute
end
object Action3: TAction
Category = #1060#1072#1081#1083
Caption = #1054#1090#1082#1088#1099#
Hint = #1047#1072#1075#1088#1091#
ImageIndex = 7
OnExecute = Action3Execute
end
object Action4: TAction
Category = #1060#1072#1081#1083
Caption = #1057#1086#1093#1088#1072#
Hint = #1057#1086#1093#1088#1072#
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#
ImageIndex = 0
OnExecute = Action5Execute
end
object EditUndo1: TEditUndo
Category = #1055#1088#1072#1074#1082#1072
Caption = #1054#1090#1084#1077#1085#
Hint = #1054#1090#1084#1077#1085#
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#
Hint = #1042#1099#1088#1077#1079#
ImageIndex = 2
ShortCut = 16472
end
object EditPaste1: TEditPaste
Category = #1055#1088#1072#1074#1082#1072
Caption = #1042#1089#1090#1072#1074#
Hint = #1042#1089#1090#1072#1074#
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 = ApplicationEvents1ActionExecut
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 ApplicationEvents1ActionExecut
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(
{Изменение информации в выделенной ячейке}
var
Tit: string; {Название ячейки}
S: string; {Введённое число}
Default: string;{Значение по-умолчанию}
Code, i, j: integer;{Контроль преобразования}
label
loop;
begin
Tit:='A'+IntToStr(WaightGrid.
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(
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; {Количество отобранных ребер обхода на данной границе}