Транспортная задача. Метод минимального элемента
Суть математического программирования - оптимизационные задачи и разработка методов их решения. Определении наиболее удобного плана перевозок некоторого однородного груза. Проведение операционного исследования, построение и расчёт математической модели.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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- |
1100 |
4- |
|
250 |
2200 |
750 |
10- |
6- |
11- |
|
200 |
8- |
5- |
3- |
2- |
2200 |
|
300 |
11- |
8150 |
12100 |
16- |
1350 |
Выбираем из клетки самое меньшее число и в клетку записываем наименьшее значение запасов, после исключаем столбец или строку, который полностью удовлетворён. Далее находим следующее наименьшее число, и тоже записываем соответствующий запас. И так до окончания составления таблицы.
После находим число 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 |
c11x11 |
c12x12 |
c12x13 |
c14x14 |
|
А2 |
a2 |
c21x21 |
c22x22 |
c23x23 |
c24x24 |
|
А3 |
a3 |
c31x31 |
c32x32 |
c33x33 |
c34x34 |
Задача минимального элемента состоит в определение такого плана перевозок, при котором удовлетворяла:
был бы точно удовлетворён спрос в каждом пункте назначения 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- |
1100 |
4- |
|
250 |
2200 |
750 |
10- |
6- |
11- |
|
200 |
8- |
5- |
3- |
2- |
2200 |
|
300 |
11- |
8150 |
12100 |
16- |
1350 |
При помощи этих данных находим минимальный элемент по поставщикам и по потребителям. Входная информация представлена в приложение
Результат нахождения метода в приложение
После того как данные введены сама задача будет сохраняться в файле и в любой момент времени можно будет распечатать и просмотреть.
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