- •Содержание
- •Постановка задачи
- •Описание алгоритма решения задачи
- •Решение задачи вручную Теория
- •Решение в программе tora
- •Решение в программе msExcel
- •Разработка программы для решения задачи в общем виде (Delphi)
- •Заключение Ну и вывод , что реализовали типо во всех случаях и ответы получились Список используемой литературы
Решение в программе tora
Запускаем программу, в главном меню программы выбираем Transportation model (Транспортная модель).
Далее, выбираем необходимое количество ограничений и переменных (рис.1 а,б).
Рис.1 (а) Заполнение переменных
Рис.1 (б) Заполнение переменных
Теперь нужно ввести все значения переменных в созданную таблицу (рис.2).
Рис.2 Заполнение таблицы
Когда данные будут введены, нажимаем кнопку «SOLVE Menu» и выбираем метод Solve Problem => Iterations => Least-Cost starting solution (Метод наименьшего элемента) с помощью которого необходимо решить задачу.
Далее, появиться оптимальное решение транспортной задачи (рис.3).
Рис.3 Оптимальное решение
Пояснение …..Ответ к которому пришли
Решение в программе msExcel
Про маросы расписать со скринами.
Для того чтобы решить задачу в MSExcel (Версию которая использовалась), необходимо установить дополнительный модуль «поиск решения».
Для этого необходимо перейти на вкладку «Пуск », нажать кнопку «Параметры Ecxel» => «Надстройки» и выбрать компонент «Поиск решения» (рис.1)
Рис.1 Надстройки
Далее переходим к вводу данных задачи.
В ячейки B4-E5, В10-D10, G7;G8 вводим значения из условия задачи, которые необходимо оптимизировать. В ячейки E4 и E5 вставляем нули, так как это фиктивный потребитель, а ячейка E10 считается автоматически, как только будут заполнены ячейки с потребностями и запасами: =(G7+G8)-(B10+C10+D10). В ячейку D12 вписывается значение затрат на 1 единицу (рис.2).
Рис.2 Редактирование
На вкладке «Данные» нажимаем функцию «Поиск решения» (рис.3)
Тут устанавливаем целевую ячейку B12, так как нам нужно найти минимальные затраты ставим галочку на «Минимальное значение»
Расчеты и изменения будут происходить в ячейках B7-E8, поэтому и указываем эти ячейки в графе «Изменения ячейки»
Теперь укажем ограничения:
В ячейках B7-E8 введем параметр > 0,
B9;E9 = B10;E10,
F7;F8 <= G7;G8
Рис.3 Параметры функции «Поиск решения»
После того, как мы выставили все ограничения, нажимаем на кнопку «Выполнить». Программа рассчитает оптимальный грузооборот и выведет его в ячейку B12. А в ячейку С14 будут минимальные расходы на грузоперевозки и она равны 3700000 д.е. (рис.4).
Рис.4 Результат расчетов
Пояснение ….Ответ
Разработка программы для решения задачи в общем виде (Delphi)
Инструкция пользователю. Описание структуры программы.
Системные требования программы
Программа реализует интуитивно понятный интерфейс для расчета заданной задачи, а так же позволяет изменять условия и установленные ограничения.
Оболочка программы реализована на Delphi, однако расчеты производятся в файле Excel, выполненном ранее.
Чтобы начать пользоваться программой нужно запустить файл 16var.exe
Откроется окно с данными исходной задачи (рис.1).
Рис.1 Интерфейс программы (Для заполнения)
Предоставляется возможность редактировать данные в программе, а именно:
Поставщики (Элеватор 1, Элеватор 2), потребители (Хлебозавод 1, Хлебозавод 2, Хлебозавод 3), потребности и запасы. Есть возможность ввести «Затраты на единицу», если в условии указанны затраты на 1 единицу.
После того, как данные будут заполнены нажать на кнопку «Считать»
Программа произведет расчеты и будет выведен результат в строки «Оптимальный грузооборот» и «Минимальные затраты» (рис. 2).
После закрытия, программа вернет все начальные данные из условия задачи.
Рис.2 Интерфейс программы (Расчет результатов)
В коде нужно расписывать отдельный блок, и для чего использовался, а не полностью код
Листинг программы Delphi
unit MMIPU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtnrs, ComObj, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Edit14: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit9: TEdit;
Edit10: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit11: TEdit;
Edit12: TEdit;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ap: variant;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//При запуске программы создается OLE обьект. И программа открывает Excel файл, который производит все вычисления
Ap := CreateOleObject('Excel.Application');
Ap.Workbooks.Open(ExtractFilePath(ParamStr(0))+'\TZ.xlsx');
//Далее программа заполняет данные согласно варианту
Edit9.Text:='4200';
Edit10.Text:='1200';
Edit14.Text:='1000';
Edit15.Text:='2000';
Edit16.Text:='1600';
Edit17.Text:='25';
Edit1.Text:='20';
Edit2.Text:='30';
Edit3.Text:='50';
Edit5.Text:='60';
Edit6.Text:='20';
Edit7.Text:='40';
Edit11.Text:='0';
Edit12.Text:='0';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//при нажатии на кнопку считать происхадит записывание данных из программы в Exel файл и Exel производит вычисления
Ap.Range['B4']:=strtofloat(Edit1.Text);
Ap.Range['C4']:=strtofloat(Edit2.Text);
Ap.Range['D4']:=strtofloat(Edit3.Text);
Ap.Range['B5']:=strtofloat(Edit5.Text);
Ap.Range['C5']:=strtofloat(Edit6.Text);
Ap.Range['D5']:=strtofloat(Edit7.Text);
Ap.Range['G7']:=strtofloat(Edit9.Text);
Ap.Range['G8']:=strtofloat(Edit10.Text);
Ap.Range['B10']:=strtofloat(Edit14.Text);
Ap.Range['C10']:=strtofloat(Edit15.Text);
Ap.Range['D10']:=strtofloat(Edit16.Text);
Ap.Range['D12']:=strtofloat(Edit17.Text);
// После вычислений происходит считавание данных из Exel файла и запись готовых ответов в программу.
Edit1.Text:=Ap.Range['B4'];
Edit2.Text:=Ap.Range['C4'];
Edit3.Text:=Ap.Range['D4'];
Edit5.Text:=Ap.Range['B5'];
Edit6.Text:=Ap.Range['C5'];
Edit7.Text:=Ap.Range['D5'];
Edit9.Text:=Ap.Range['G7'];
Edit10.Text:=Ap.Range['G8'];
Edit11.Text:=inttostr(Ap.Range['B12']);
Edit12.Text:=inttostr(Ap.Range['C14']);
Edit14.Text:=Ap.Range['B10'];
Edit15.Text:=Ap.Range['C10'];
Edit16.Text:=Ap.Range['D10'];
Edit17.Text:=Ap.Range['D12'];
end;
procedure TForm1.Button2Click(Sender: TObject);
// кнопка EXIT.
// Закрытие Exel файла
begin
Ap.DisplayAlerts := False;
Ap.Workbooks.close;
Ap.Application.Quit;
Ap.Quit;
Application.Terminate; //Загрытие программы
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// кнопка EXIT.
// Закрытие Exel файла
Ap.DisplayAlerts := False;
Ap.Workbooks.close;
Ap.Application.Quit;
Ap.Quit;
Application.Terminate; //Загрытие программы
end;
end.