Транспортная задача. Метод минимального элемента

Суть математического программирования - оптимизационные задачи и разработка методов их решения. Определении наиболее удобного плана перевозок некоторого однородного груза. Проведение операционного исследования, построение и расчёт математической модели.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.03.2009
Размер файла 32,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Тульский экономический колледж

Пояснительная записка к курсовому проекту

По предмету: Компьютерное моделирование

На тему: Транспортная задача. Метод минимального элемента

Специальность:230105

«Программное обеспечение вычислительной технике и АС»

Подготовила: Аксёнова О.В.

Проверила: Юрченко В.Н

Щёкино 2009 год

План

Введение

1.Сущность задачи

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

3.Описание входной и выходной информации

4.Программно - технические средства, используемые при разработке программы

5.Тестирование программы

6. Описание программы

6.1 назначение программы

6.2 информационная совместимость с другими программами

6.3порядок постановки

6.4 завершаемая работа программы

6.5 система меню и экранных форм

Заключение

Литература

Приложение

Введение

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

Каждый из методов имеет ряд своих общих черт и недостатков.

В качестве потребности могут рассматриваться овещствительные потребности: люди, транспорт, средства труда и т. д.

Прежде всего, задачу математического программирования входит и линейное программирование. Линейное программирование- это область математики, разрабатывающею теорию и численные методы решения задач нахождения экстремума.

К этим задачам приводится широкий круг вопросов планирования экономических и техника - экономических процессов, где ставится задача поиска наилучшего решения. Существует несколько типов линейного программирования:

1.задача о комплексном использовании сырья;

2.задача о загрузке оборудования;

3.задача текущего производственного планирования;

4.задача перспективного оптимального планирования;

5.задача планирования экономического комплекса.

Задача будет не линейной, если указанные функции не соответствуют.

1.Сущность задачи

Общая постановка транспортной задачи состоит в определении оптимального плана перевозок, некоторого однородного груза.

Для разрешимости транспортной задачи необходимо и достаточно, чтобы запасы груза в пунктах отправления были равны потребностям в грузе пунктах назначения, т.е. чтобы выполнялось равенство (5).

В случаи превышения запаса над потребностью, т.е.

,

вводится фиктивный (n+1)-й пункт назначения с потребностью

и соответствующие тарифы считаются равными нулю , здесь выполняется равенство.

Если в опорном плане число отмеченных от нуля компонент рано в точности n+m-1, то план является невыраженным, а если меньше, то выражены. Смысл моей задачи: На четырёх складах оптовой базы сосредоточен однородный груз в количествах 100, 250, 200, и 300 единиц. Груз необходимо перевезти в четыре магазина, каждый из магазинов должен получить соответственно 200, 200, 100, 100 и 250 единиц груза. Тарифы перевозок единицы груза из каждого из складов во все магазины. Задача задаётся матрицей:

Составить такой план перевозок, при котором общая стоимость перевозок являлась минимальной. Для этого составим таблицу транспортных расходов:

200

200

100

100

250

100

10

-

7

-

4

-

1

100

4

-

250

2

200

7

50

10

-

6

-

11

-

200

8

-

5

-

3

-

2

-

2

200

300

11

-

8

150

12

100

16

-

13

50

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

После находим число F:

F=1*100+2*200+50*7+2*200+150*8+100*12+50*13=4300 единиц.

Теперь посмотрим удовлетворит ли задача потребностям:

F удовлетворяет потребностям. План является минимальным.

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

Под моделированием понимают изучение объекта не непосредственно, а косвенно при помощи изучения вспомогательных объектов, которые называются моделями. Модель - это образ или прообраз изучаемого объекта.

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

В настоящее время математические модели применяются для анализа, прогнозирования и выбора оптимальных решений в различных областях экономике. Впервые они были использованы в 30-х годах в Великобритании при создании системы противовоздушной обороны.

Все модели можно классифицировать на основе различных характеристик: по характеру моделируемых объектов, по сферам приложения, по глубине моделирования.

Рассмотрим общую модель транспортной задачи:

Станция отправления

Запасы груза

Пункты назначения и их потребности в грузе

В1

В2

В3

В4

в1

в2

в3

в4

А1

a1

c11

x11

c12

x12

c12

x13

c14

x14

А2

a2

c21

x21

c22

x22

c23

x23

c24

x24

А3

a3

c31

x31

c32

x32

c33

x33

c34

x34

Задача минимального элемента состоит в определение такого плана перевозок, при котором удовлетворяла:

был бы точно удовлетворён спрос в каждом пункте назначения B1, B2, B3, B4;

был бы вывезен весь груз со станций отправления A1, A2, A3;

общие транспортные расходы были бы наименьшими.

Описание задачи описана в пункте “сущность задачи”.

Из таблицы составим расход при плане перевозок:

Z=c11x11+c21x21+c31x31+c12x12+c22x22+c32x32+c13x13+c23x23+

с33x33+c14x14+c24x24+c34x34,

можно записать короче

,

где

I-пункт отправления

J-пункт назначения

Xij-количество единиц груза перевезённого из i-го в j-ый пунк назначения

Cij-тарифы перевозок

Определение 1: всякое неотрицательное решение систем линейных уравнений (2) и (3), определимое матрицей X=(xij)(i=1, m)(j=1,n), называется планом транспортной задачи.

Определение 2: план x*=(x*ij) (i=1,m;j=1,n), при котором функция (1) принимает своё минимальное значение, называется оптимальным планом транспортной задачи.

Общее наличие груза у поставщиков равно , а общая потребность в грузе пунктах назначения равна . Если общая потребность в грузе в пунктах назначения равна запасу груза в пунктах направления, то есть

,

то модель называется закрытой, иначе открытой.

3. Описание входной и выходной информации

Основной входной информацией являются данные поставленной задачи, они представлены в таблице, в которой указаны количество поставщиков и количество потребителей.

200

200

100

100

250

100

10

-

7

-

4

-

1

100

4

-

250

2

200

7

50

10

-

6

-

11

-

200

8

-

5

-

3

-

2

-

2

200

300

11

-

8

150

12

100

16

-

13

50

При помощи этих данных находим минимальный элемент по поставщикам и по потребителям. Входная информация представлена в приложение

Результат нахождения метода в приложение

После того как данные введены сама задача будет сохраняться в файле и в любой момент времени можно будет распечатать и просмотреть.

4. Программно-технические средства, используемые при разработки программы

Программа «Метод минимального элемента» является приложением Windows, то есть для её работы необходимо, чтобы компьютер находился под управлением операционной системы Windows. Требованием к программе является:

1. Оперативная память - 16Мб;

2. Видео карта - 1Мб;

3. Частота процессора - 233МГц;

4. Места на жестком диске - 350Мб;

5. Операционная система - Windows 95;

6. Монитор с разрешением - 800*600;

7. Клавиатура и мышь.

Для разработки программы были использованы программно-технические средства:

Delphi 6.0 - это программное средство , которое необходимо для написания данной программы. В ней были использованы компоненты MainMenu, в которую входит форма с пунктами “Задача”, в которую входит “Новая задача”, “Контрольный пример1”,” Контрольный пример2”, “Выход” и пункт “?”, в которую входит “Вызов справки” и “О программе”. Компоненты SpeedButton, который в кнопке “1” устанавливаем False, StringGrid, которые выполняют действия при вводе данных, Bevel рамка в форме, Panel для удобного размещения кнопок.

PhotoShop 7.0 -для понятия описание курсовой работы.

3D StudioMax 4.0 - вставка рисунка.

5. Тестирование программы

Действие

Реагирование программы

1.

При вводе букв в Edit значение

Ввести не возможно

2.

Ввод отрицательного значения

Ввести не возможно

3.

Символы вводить

Нельзя

4.

Неправильный ввод

Реагирует отрицательно и выдаёт сообщение

5.

Изменение решённых данных в StringGrid

Нельзя

6.

Если данные не все введены

Решение не будет производится

7.

Очистка Edit, StringGrid

Производится

8.

Изменение количество поставщиков и потребителей

Производится

9.

Определение типа задачи

Определяется

10.

Пошаговое решение

Производится

11.

Закрытие проекта

Производится

12.

Выполнение проекта

Производится

13.

Изменение данных решённых в StringGrid на нули

Программа не решает

14.

Если значение в StringGrid не введено

Не реагирует на решение

Тестирование- проверка работы программы на правильность. Помогает правильно оценить программу на её решение. Её целью является влияние создания. Тестирование происходит с главного модуля. Быстро выявляются ошибки связанные с организацией взаимодействия с пользователем.

6. Описание программы

6.1 Назначение программы

Программа предназначена для нахождения минимального элемента транспортной задачи, а именно для того чтобы найти более оптимальный план перевозок. Программа может быть использована при проведение практических работ по предмету “Компьютерному моделиование”. Эта математическая модельанализирует ситуацию.

6.2 Информационная совместимость

Проект может совмещаться с другими программами, которые помогут для наилучшего оформления и понятной работы. Программа с которыми совмещается метод помогают узнать о разработчике программы и что он осуществляет в своём проекте.

6.3 Порядок установки

Программа находится на диске формата 3,5. При её запуске для начала необходимо скопировать на жёсткий диск. При помощи фаила её можно запустить. Порядок постановки происходит поэтапно шаг за шагом. Только после этого она будет выполнятся.

6.4 Завершение работы программы

Программа завершает свою работу, только при её выходе. Выход из главной формы осуществляется при помощи диалогового окна, которое выдаёт сообщение : ”Вы действительно хотите выйти из формы?”, если нет, то нажимаем кнопку ”отмена”, если "да", то "ok".

6.5 Система меню и экранных форм

Программа состоит на основе многоуровнего меню, так как в ней находятся 3 формы :

1. Расчёт транспортной задачи (приложение ).

2. О программе. (приложение ).

3. Заставка. (приложение ).

Все эти формы оформлены и выдаются при определённой команде. В форме 1 находятся все кнопки, которые необходимы для нахождения минимального элемента. В форме 2 кто создавал саму программу. В форме 3 красочное оформление.

При запуске программы появляется заставка, при её щелчке, открывается форма с расчетами она состоит из меню, при выборе которого производится решение. Для начала решения вводим данные по поставщикам и потребителям - шаг 1, далее активизируется шаг 2 он не будет действовать, в том случаи если не будут введены данные и будет выдавать окно, о том что их необходимо ввести. После этого нажимаем шаг 3 при, котором заполняется наша таблица. Шаг 4 говорит о том какого типа является задача. Шаг 5 находится минимальный элемент. Для того чтобы решить какой - нибудь пример, необходимо предварительно очистить форму.

Меню предназначена для быстрого доступа к файлам, которые сохранены в архиве. Само меню имеет кнопки быстрого доступа:

Новая задача - CTRL+N

Контрольный пример - CTRL+F1

Контрольный пример 2 - CTRL+F2

О программе - CTRL+A

Выход - F10

Заключение

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

Литература

Издательство "высшая школа" 1986 год, Акулич И.Л. Математическое программирование в примерах и задачах.

Издательство "экономика" 1985 год, Хазанов В.В. Математическое моделирование в экономике.

Издательство "экономика" 1976 год, Хруцкий Е.А. “”Экономико - технические методы в планирование материально - технического снабжения

Приложение

unit Unit1;

interface

uses

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

Dialogs, Grids, StdCtrls, ExtCtrls, Buttons, Menus;

type

TForm1 = class(TForm)

Label4: TLabel;

Label3: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Label5: TLabel;

StringGrid3: TStringGrid;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

Bevel1: TBevel;

N8: TMenuItem;

N9: TMenuItem;

SpeedButton4: TSpeedButton;

SpeedButton5: TSpeedButton;

N21: TMenuItem;

Panel1: TPanel;

StringGrid4: TStringGrid;

StringGrid9: TStringGrid;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Bevel3: TBevel;

SpeedButton6: TSpeedButton;

SpeedButton7: TSpeedButton;

SpeedButton8: TSpeedButton;

SpeedButton9: TSpeedButton;

SpeedButton10: TSpeedButton;

SpeedButton11: TSpeedButton;

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure SpeedButton1Click(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

procedure SpeedButton3Click(Sender: TObject);

procedure SpeedButton4Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure SpeedButton5Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure SpeedButton6Click(Sender: TObject);

procedure SpeedButton7Click(Sender: TObject);

procedure SpeedButton8Click(Sender: TObject);

procedure SpeedButton9Click(Sender: TObject);

procedure SpeedButton10Click(Sender: TObject);

procedure SpeedButton11Click(Sender: TObject);

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

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Zadacha: Integer;

m_st:array of array of integer; //матрица стоимости

m_izm:array of array of integer; // изменение

m_st_post:array of integer; //матрица по поставщикам

m_izm_post:array of integer;

m_st_potr:array of integer; //матрица по потребителям

m_izm_potr:array of integer;

m_zap:array of array of integer;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

var keys: set of '0'..'9';

begin

keys := ['0'..'9'];

if key in keys then else key:=#27;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject); //начало ввода данных

begin

Edit1.Enabled := True; //актив. поле потреб.

Edit2.Enabled := True; //актив. поле постав.

Label1.Enabled := True; //актив. метка потреб.

Label2.Enabled := True; //актив. метка постав.

Label3.Enabled := False; //неактив. метка кол-во потр.

Label4.Enabled := False; //неактив. метка кол-во пост.

StringGrid1.Enabled := False; //неактив. поле потр.

StringGrid2.Enabled := False; //неактив. поле пост.

Label5.Enabled := False; //неактив. метка ст-ть перевозки

StringGrid3.Enabled := False; //неактив. поле ст-ть перевозки

SpeedButton1.Enabled := False; //неактив. кн.1

SpeedButton2.Enabled := True; //актив. кн.2

SpeedButton3.Enabled := False; //неактив. кн.3

SpeedButton4.Enabled := False; //неактив. кн.4

End;

procedure TForm1.SpeedButton2Click(Sender: TObject); // производит контроль по поставщикам и потребителям

begin

if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit1.Text <> '0') and (Edit2.Text <> '0') then // проверка

begin

StringGrid1.ColCount := StrToInt(Edit1.text);

StringGrid2.ColCount := StrToInt(Edit2.text);

StringGrid3.ColCount := StrToInt(Edit2.text)+1;

StringGrid3.RowCount := StrToInt(Edit1.text)+1;

Edit1.Enabled := False;

Edit2.Enabled := False;

Label1.Enabled := False;

Label2.Enabled := False;

Label3.Enabled := True;

Label4.Enabled := True;

StringGrid1.Enabled := True;

StringGrid2.Enabled := True;

Label5.Enabled := False;

StringGrid3.Enabled := False;

SpeedButton2.Enabled := False;

SpeedButton1.Enabled := True;

SpeedButton3.Enabled := True;

SpeedButton4.Enabled := False;

end else

begin

MessageDlg('Введите данные по поставщикам и потребителям!' + #13 + '(Данные поля не должны быть пустыми или равны нулю)' , mtInformation,[mbOK],0);

end;

end;

procedure TForm1.SpeedButton3Click(Sender: TObject); // проверка по количесву товара, который есть у поставщиков и который треб потребит

var i,p: integer;

begin

p := 0; //переменная для проверки

for i := 0 to StringGrid1.ColCount - 1 do //проверка

if (StringGrid1.Cells[i,0] = '') and (StringGrid1.Cells[i,0] <> '0') then p := p + 1;

for i := 0 to StringGrid2.ColCount - 1 do

if (StringGrid2.Cells[i,0] = '') and (StringGrid2.Cells[i,0] <> '0') then p := p + 1;

if p = 0 then //если заполнены все клетки у пост и потреб

begin

for i := 0 to StringGrid2.ColCount do //

StringGrid3.Cells[i+1,0] := StringGrid2.cells[i,0];

for i := 0 to StringGrid1.ColCount do

StringGrid3.Cells[0,i+1] := StringGrid1.cells[i,0];

StringGrid3.Cells[0,0] := ' ';

Edit1.Enabled := False;

Edit2.Enabled := False;

Label1.Enabled := False;

Label2.Enabled := False;

Label3.Enabled := False;

Label4.Enabled := False;

StringGrid1.Enabled := False;

StringGrid2.Enabled := False;

Label5.Enabled := True;

StringGrid3.Enabled := True;

SpeedButton3.Enabled := False;

SpeedButton2.Enabled := True;

SpeedButton1.Enabled := True;

SpeedButton4.Enabled := True;

end else

begin

MessageDlg('Введите данные по колличеству товара!' + #13 + '(Данные поля не должны быть пустыми или равны нулю)' , mtInformation,[mbOK],0);

end;

end;

procedure TForm1.SpeedButton4Click(Sender: TObject);// проверка по стоимости перевозки товара

var t1, t2, t, i, j, p:integer;

begin

p := 0;

For i := 1 to StringGrid3.ColCount - 1 do // проверка стоимости перевозок

For j := 1 to StringGrid3.RowCount - 1 do

if (StringGrid3.Cells[i,j] = '0') or (StringGrid3.Cells[i,j] = '') then p := p + 1;

if p = 0 then

begin

t1 := 0;

t2 := 0;

zadacha := 0; //Задача закрытого типа(по умолчанию)

StringGrid4.ColCount := StringGrid3.ColCount;

StringGrid4.RowCount := StringGrid3.RowCount;

for i := 0 to StringGrid3.ColCount do

for j := 0 to StringGrid3.RowCount do

StringGrid4.Cells[i,j] := StringGrid3.Cells[i,j];

for i := 0 to StringGrid1.ColCount - 1 do

t1 := t1 + StrToInt(StringGrid1.Cells[i,0]); // сумма t1

for i := 0 to StringGrid2.ColCount - 1 do

t2 := t2 + StrToInt(StringGrid2.Cells[i,0]); // сумма t2

if t1 > t2 then // поиск фиктив потреб

begin

t := t1 - t2;

StringGrid4.ColCount := StringGrid4.ColCount + 1;

StringGrid4.Cells[StringGrid3.ColCount,0] := IntToStr(t) + 'Ф';

for i := 1 to StringGrid4.RowCount do

StringGrid4.Cells[StringGrid3.ColCount,i] := IntToStr(0);

MessageDlg('Задача открытого типа. Вводим фиктивного потребителя с потребностью = ' + IntToStr(t) + ' ед. товара.', mtInformation,[mbOK],0);

zadacha := 1; //Задача открытого типа(потребитель)

end;

if t1 < t2 then // поиск фиктив постав

begin

t:= t2 - t1;

StringGrid4.RowCount := StringGrid4.RowCount + 1;

StringGrid4.Cells[0,StringGrid3.RowCount] := IntToStr(t) + 'Ф';

for i := 1 to StringGrid4.ColCount do

StringGrid4.Cells[i,StringGrid3.RowCount] := IntToStr(0);

MessageDlg('Задача открытого типа. Вводим фиктивного поставщика с ' + IntToStr(t) +ед. товара.', mtInformation,[mbOK],0);

zadacha := 2; //Задача открытого типа(поставщик)

end;

SetLength(m_st, StringGrid3.ColCount - 1); //созд матрица

for i := 1 to StringGrid3.ColCount - 1 do

begin

SetLength(m_st[i - 1], StringGrid3.RowCount - 1);

end;

SetLength(m_izm, StringGrid3.ColCount - 1);

for i := 1 to StringGrid3.ColCount - 1 do

begin

SetLength(m_izm[i - 1], StringGrid3.RowCount - 1);

end;

SetLength(m_zap, StringGrid3.ColCount - 1);

for i := 1 to StringGrid3.ColCount - 1 do

begin

SetLength(m_zap[i - 1], StringGrid3.RowCount - 1);

end;

SetLength(m_st_post, StringGrid1.ColCount);

SetLength(m_st_potr, StringGrid2.ColCount);

SetLength(m_izm_post, StringGrid1.ColCount);

SetLength(m_izm_potr, StringGrid2.ColCount); //завер. созд матриц

For i := 0 to StringGrid3.ColCount - 2 do //заполнеие матриц

For j := 0 to StringGrid3.RowCount - 2 do

m_st[i,j] := StrToInt(StringGrid3.Cells[i+1,j+1]);

For i := 0 to StringGrid2.ColCount - 1 do

m_st_potr[i] := StrToInt(StringGrid2.Cells[i,0]);

For i := 0 to StringGrid1.ColCount - 1 do

m_st_post[i] := StrToInt(StringGrid1.Cells[i,0]);

SpeedButton1.Enabled := False;

SpeedButton2.Enabled := False;

SpeedButton3.Enabled := False;

SpeedButton4.Enabled := False;

SpeedButton5.Enabled := True;

StringGrid3.Enabled := False;

Label5.Enabled := False;

if zadacha = 0 then MessageDlg('Задача закрытого типа!', mtInformation,[mbOK],0);

end

else

MessageDlg('Пожалуйста проверьте введенные данные по стоимости перевозки товара!' + #13 + '(таблица не должна содержать пустые клетки и стоимость должна быть больше нуля)', mtInformation,[mbOK],0);

end;

procedure TForm1.N3Click(Sender: TObject); // контрольный пример

begin

Form1.N2.Click;

//Кол-во поставщиков:

Edit1.Text := '4';

//Кол-во покупателей:

Edit2.Text := '5';

SpeedButton2.Click;

//Кол-во товара у поставщиков:

StringGrid1.Cells[0,0] := '100';

StringGrid1.Cells[1,0] := '250';

StringGrid1.Cells[2,0] := '200';

StringGrid1.Cells[3,0] := '300';

//Кол-во товара необходимое потребителю:

StringGrid2.Cells[0,0] := '200';

StringGrid2.Cells[1,0] := '200';

StringGrid2.Cells[2,0] := '100';

StringGrid2.Cells[3,0] := '100';

StringGrid2.Cells[4,0] := '250';

SpeedButton3.Click;

//Стоимость перевозки:

StringGrid3.Cells[1,1] := '10';

StringGrid3.Cells[2,1] := '7';

StringGrid3.Cells[3,1] := '4';

StringGrid3.Cells[4,1] := '1';

StringGrid3.Cells[5,1] := '4';

StringGrid3.Cells[1,2] := '2';

StringGrid3.Cells[2,2] := '7';

StringGrid3.Cells[3,2] := '10';

StringGrid3.Cells[4,2] := '6';

StringGrid3.Cells[5,2] := '11';

StringGrid3.Cells[1,3] := '8';

StringGrid3.Cells[2,3] := '5';

StringGrid3.Cells[3,3] := '3';

StringGrid3.Cells[4,3] := '2';

StringGrid3.Cells[5,3] := '2';

StringGrid3.Cells[1,4] := '11';

StringGrid3.Cells[2,4] := '8';

StringGrid3.Cells[3,4] := '12';

StringGrid3.Cells[4,4] := '16';

StringGrid3.Cells[5,4] := '13';

end;

procedure TForm1.N2Click(Sender: TObject); // кнопка новая задача

var i,j: integer;

begin

Edit1.Clear; // очистка

Edit2.Clear;

zadacha := 0;

Panel1.Visible := False; // скрытие панели

SpeedButton5.Enabled := False;

for i := 0 to StringGrid3.ColCount-1 do // очистка

for j := 0 to StringGrid3.RowCount-1 do

StringGrid3.Cells[i,j] := '';

for i := 0 to StringGrid4.ColCount-1 do

for j := 0 to StringGrid4.RowCount-1 do

StringGrid4.Cells[i,j] := '';

for i := 0 to StringGrid1.ColCount-1 do StringGrid1.Cells[i,0] := '';

or i := 0 to StringGrid2.ColCount-1 do StringGrid2.Cells[i,0] := '';

SpeedButton1.Click;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.N7Click(Sender: TObject); // о программе

begin

Form2.ShowModal;

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);//решение самой задачи

var i,j,i1,j1,i2,j2,i3,j3,i4,j4,i5,j5:integer; //для циклов

min,max,mini,minj,F,temp: integer;

begin

F := 0;

temp := 0;

mini := 0;

minj := 0;

Panel1.Top := 8;

Panel1.Left := 96;

Panel1.Visible := True;

StringGrid9.ColCount := StringGrid4.ColCount;

StringGrid9.RowCount := StringGrid4.RowCount;

StringGrid9.Visible := True;

For i := 1 to StringGrid2.ColCount do // копирование инф из матрицы в др

m_izm_potr[i-1] := m_st_potr[i-1];

For i := 1 to StringGrid1.ColCount do // копир пост

m_izm_post[i-1] := m_st_post[i-1];

For i1 := 1 to StringGrid3.ColCount - 1 do

For j1 := 1 to StringGrid3.RowCount - 1 do

if m_zap[i1-1,j1-1] = 0 then temp := temp + 1;

For i1 := 1 to StringGrid3.ColCount - 1 do

For j1 := 1 to StringGrid3.RowCount - 1 do

if temp <> 0 then

begin

For i5 := 1 to StringGrid3.ColCount - 1 do

For j5 := 1 to StringGrid3.RowCount - 1 do

if (m_zap[i5-1,j5-1] = 0) then

begin

max := 0;

For i4 := 1 to StringGrid3.ColCount - 1 do //поиск максимума

For j4 := 1 to StringGrid3.RowCount - 1 do

if (m_st[i4-1,j4-1] > max) and (m_zap[i4-1,j4-1] < 1) then

max := m_st[i4-1,j4-1];

max := max * 2;

min := max;

For i := 1 to StringGrid3.ColCount - 1 do

For j := 1 to StringGrid3.RowCount - 1 do

begin

if (m_st[i-1,j-1] < min) and (m_zap[i-1,j-1] = 0) then //поиск минимума

begin

min := m_st[i-1,j-1];

mini := i-1;

minj := j-1;

end;

end;

if m_izm_post[minj] = m_izm_potr[mini] then //проверка равен ли поставщик потребителю

begin

m_izm[mini, minj]:= m_izm_post[minj];

m_izm_post[minj] := 0;

m_izm_potr[mini] := 0;

For i2 := 1 to StringGrid3.ColCount - 1 do

For j2 := 1 to StringGrid3.RowCount - 1 do

begin

m_zap[i2-1,minj] := 1;

m_zap[mini,j2-1] := 1;

end;

end;

if m_izm_post[minj] > m_izm_potr[mini] then //проверка поставщик больше потребителя

begin

m_izm_post[minj] := m_izm_post[minj] - m_izm_potr[mini];

m_izm[mini, minj]:= m_izm_potr[mini];

m_izm_potr[mini] := 0;

For j2 := 1 to StringGrid3.RowCount - 1 do

begin

m_zap[mini,j2-1] := 1;

end;

end;

if m_izm_potr[mini] > m_izm_post[minj] then //проверка потребитель больше поставщика

begin

m_izm_potr[mini] := m_izm_potr[mini] - m_izm_post[minj];

m_izm[mini, minj]:= m_izm_post[minj];

m_izm_post[minj] := 0;

For i2 := 1 to StringGrid3.ColCount - 1 do

begin

m_zap[i2-1,minj] := 1;

end;

end;

{ For i3 := 1 to StringGrid3.ColCount - 1 do //заполнение SG5

For j3 := 1 to StringGrid3.RowCount - 1 do

StringGrid5.Cells[i3,j3] := IntToStr(m_zap[i3-1,j3-1]);

For i3 := 1 to StringGrid3.ColCount - 1 do //заполнение SG8

For j3 := 1 to StringGrid3.RowCount - 1 do

StringGrid8.Cells[i3,j3] := IntToStr(m_izm[i3-1,j3-1]);

For i3 := 1 to StringGrid2.ColCount do //заполнение SG6

StringGrid6.Cells[i3-1,0] := IntToStr(m_izm_potr[i3-1]);

For i3 := 1 to StringGrid1.ColCount do //заполнение SG7

StringGrid7.Cells[i3-1,0] := IntToStr(m_izm_post[i3-1]);}

end;

end;

For i := 1 to StringGrid3.ColCount - 1 do //вывод результата решения

For j := 1 to StringGrid3.RowCount - 1 do

begin

StringGrid9.Cells[i,j] := IntToStr(m_izm[i-1,j-1]);

end;

For i := 1 to StringGrid4.ColCount do

StringGrid9.Cells[i-1,0] := StringGrid4.Cells[i-1,0];

For j := 1 to StringGrid4.RowCount do

StringGrid9.Cells[0,j-1] := StringGrid4.Cells[0,j-1];

if zadacha = 1 then

begin

For i := 0 to StringGrid2.ColCount - 1 do

StringGrid9.Cells[StringGrid4.ColCount-1,i+1] := IntToStr(m_izm_post[i]);

end;

if zadacha = 2 then

begin

For i := 0 to StringGrid1.ColCount do

StringGrid9.Cells[i+1,StringGrid4.RowCount-1] := IntToStr(m_izm_potr[i]);

end;

For i1 := 1 to StringGrid3.ColCount - 1 do // расчитыв F

For j1 := 1 to StringGrid3.RowCount - 1 do

begin

F := F + m_izm[i1-1,j1-1]*m_st[i1-1,j1-1];

end;

Label8.Caption := 'F = ' + IntToStr(F);

SpeedButton5.Enabled := False; // конец решения

end;

procedure TForm1.N21Click(Sender: TObject); // контрол п-р 2

begin

Form1.N2.Click;

//Кол-во поставщиков:

Edit1.Text := '3';

//Кол-во покупателей:

Edit2.Text := '3';

SpeedButton2.Click;

//Кол-во товара у поставщиков:

StringGrid1.Cells[0,0] := '150';

StringGrid1.Cells[1,0] := '250';

StringGrid1.Cells[2,0] := '200';

//Кол-во товара необходимое потребителю:

StringGrid2.Cells[0,0] := '100';

StringGrid2.Cells[1,0] := '200';

StringGrid2.Cells[2,0] := '300';

SpeedButton3.Click;

//Стоимость перевозки:

StringGrid3.Cells[1,1] := '5';

StringGrid3.Cells[2,1] := '3';

StringGrid3.Cells[3,1] := '1';

StringGrid3.Cells[1,2] := '6';

StringGrid3.Cells[2,2] := '4';

StringGrid3.Cells[3,2] := '2';

StringGrid3.Cells[1,3] := '2';

StringGrid3.Cells[2,3] := '1';

StringGrid3.Cells[3,3] := '8';

end;

procedure TForm1.SpeedButton6Click(Sender: TObject); // ввод данных произвольно

var i:integer;

begin

Randomize;

for i := 0 to StringGrid1.ColCount-1 do StringGrid1.Cells[i,0] := InttoStr(Random(1000));

end;

procedure TForm1.SpeedButton7Click(Sender: TObject); // ввод данных произвольно

var i:integer;

{ temp: array['0'..'9'] of integer; //'1'..'10'; //'0'..'9';}

begin

//temp := [50,100,150,200,250,300,350,400,450,500];

Randomize;

for i := 0 to StringGrid2.ColCount-1 do StringGrid2.Cells[i,0] := InttoStr(Random(1000));

end;

procedure TForm1.SpeedButton8Click(Sender: TObject); // ввод данных произвольно

var i,j:integer;

begin

Randomize;

for i := 1 to StringGrid3.ColCount-1 do

for j := 1 to StringGrid3.RowCount-1 do

StringGrid3.Cells[i,j] := InttoStr(Random(10)+1);

end;

procedure TForm1.SpeedButton9Click(Sender: TObject); // очистка

var i:integer;

begin

for i := 0 to StringGrid1.ColCount-1 do StringGrid1.Cells[i,0] := '';

end;

procedure TForm1.SpeedButton10Click(Sender: TObject); // очистка

var i:integer;

begin

for i := 0 to StringGrid2.ColCount-1 do StringGrid2.Cells[i,0] := '';

end;

procedure TForm1.SpeedButton11Click(Sender: TObject); // очистка

var i,j:integer;

begin

for i := 1 to StringGrid3.ColCount-1 do

for j := 1 to StringGrid3.RowCount-1 do

StringGrid3.Cells[i,j] := '';

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);// запрос на выход пр-мы

begin

CanClose := False;

if Application.MessageBox('Вы дествительно хотите выйти из программы?','Выход из программы',idOk)=mrOk then

CanClose := True;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

Form3.ShowModal;

end;

end.


Подобные документы

  • Стандартная и каноническая форма записи задачи линейного программирования. Ее запись на листе MS Excel. Математическая модель транспортной задачи, состоящей в определении оптимального плана перевозок некоторого однородного груза, результаты ее решения.

    контрольная работа [1,1 M], добавлен 25.01.2016

  • Преимущества применения математических методов в планировании перевозок. Постановка транспортной задачи, отыскание начального решения методом минимального элемента. Проверка опорного плана на невырожденность. Написание программы для автоматизации решения.

    курсовая работа [1,5 M], добавлен 19.01.2016

  • Составление математической модели решения транспортной задачи. Описание входной и выходной информации. Программно-технические средства, используемые при разработке программы. Общее описание программы, ее назначение, информационная совместимость.

    курсовая работа [49,1 K], добавлен 24.05.2013

  • Алгоритм симплекс-метода. Задача на определение числа и состава базисных и свободных переменных, построение математической модели. Каноническая задача линейного программирования. Графический метод решения задачи. Разработки математической модели в Excel.

    курсовая работа [1,1 M], добавлен 18.05.2013

  • Метод решения математической модели на примере решения задач аналитической геометрии. Описание согласно заданному варианту методов решения задачи. Разработка математической модели на основе описанных методов. Параметры окружности минимального радиуса.

    лабораторная работа [310,6 K], добавлен 13.02.2009

  • Условия математической транспортной задачи для ее решения методом потенциалов. Опорный план и проверка целевой функции. Окончательный вариант плана поставок товара предоставленный программой "АОС транспортная задача". Стоимость доставки единицы груза.

    лабораторная работа [1,4 M], добавлен 15.10.2015

  • Создание математической модели, приведение ее к виду задачи линейного программирования. Геометрическая трактовка решения. Определение области допустимых значений. Составление симплекс-таблиц. Разработка опорного плана задачи методом минимального элемента.

    контрольная работа [260,2 K], добавлен 22.12.2013

  • Транспортная задача как одна из самых распространенных специальных задач линейного программирования: понятие, основное назначение. Формальное описание метода минимального элемента. Характеристика этапов разработки алгоритма решения поставленной задачи.

    курсовая работа [713,3 K], добавлен 19.10.2012

  • Краткий обзор решения транспортных задач. Экономическая интерпретация поставленной задачи. Разработка и описание алгоритма решения задачи. Построение математической модели. Решение задачи вручную и с помощью ЭВМ. Анализ модели на чувствительность.

    курсовая работа [844,3 K], добавлен 16.06.2011

  • Особенности решения транспортной задачи распределительным методом и анализ результатов. Построение математической модели, алгоритма. Создание программы для решения транспортной задачи распределительным методом в программной среде Borland Delphi 7.

    курсовая работа [1000,7 K], добавлен 23.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.