Автор работы: Пользователь скрыл имя, 23 Июня 2013 в 23:07, курсовая работа
Рассмотрим алгоритм решения задачи линейного целочисленного программирования этим методом.
Решаем задачу симплексным методом без учета условия целочисленности. Если все компоненты оптимального плана целые, то он является оптимальным и для задачи целочисленного программирования. Если обнаруживается неразрешимость задачи, то и неразрешима задача целочисленного программирования.
Если среди компонент оптимального решения есть нецелые, то к ограничениям задачи добавляем новое ограничение, обладающее следующими свойствами:
- оно должно быть линейным;
- должно отсекать найденный оптимальный нецелочисленный план;
- не должно отсекать ни одного целочисленного плана.
5 Информационное обеспечение задачи
Входными данными
программы являются матрицы
5.2 Выходная информация
Для проверки правильности работы разрабатываемого продукта, проведем тестирование по ранее решенным задачам в главе 1.
Задача 1
Определим максимальное значение целевой функции F(X) = 16x1 + 9x2 при следующих условиях-ограничений.
5x1 + 2x2≤20
x1 + x2≤6
Ответ при ручном способе: Fопт(X) = 68, Хопт(2; 4)
Задача 2
Определим максимальное значение целевой функции F(X) = 7x1 + 9x2 при следующих условиях-ограничений.
- x1 + 3x2≤6
7x1 + x2≤35
Ответ при ручном способе: Fопт(X) = 55, Хопт(4; 3)
Задача 3
Определим максимальное значение целевой функции F(X) = 7x1 + 3x2 при следующих условиях-ограничений.
5x1 + 2x2≤20
8x1 + 4x2≤38
Ответ при ручном способе: Fопт(X) = 29, Хопт(2; 5)
Сопоставив ответы при решении ручным способом и разрабатываемым продуктом, было доказана правильность работы программного продукта.
6 Программное обеспечение задачи
Borland Delphi (по-русски обычно произносят [бо́рланд дэ́льфи] или [бо́рланд дэ́лфи]) — это интегрированная среда разработки ПО фирмы Borland. Delphi является средой RAD (от англ. rapid application development — быстрая разработка приложений).
Говоря о том или
ином средстве разработки приложений
всегда хочется понять какие тенденции приводят
к его появлению. Borland Delphi не является исключением
из правил. Итак, что же мы имели к середине
90-х?
Одно направление - объектно-ориентированный
подход, хорошо структурирующий задачу,
как таковую, так и ее решение в виде прикладной
системы.
Другое направление, возникшее во многом
благодаря объектной ориентации, - визуальные средства быстрой
разработки приложений (RAD - Rapid Application
Development), основанные на компонентной архитектуре.
Третья тенденция - использование компиляции, а не интерпретации.
Это объясняется тем, что скоростные характеристики
компилируемых приложений в десятки раз
лучше, чем у систем, использующих интерпретатор.
При этом повышается легкость отчуждаемости
готовых систем, так как отпадает необходимость
"таскать за собой" сам интерпретатор
(run-time), выполненный обычно в виде динамической
библиотеки и занимающий в лучшем случае
несколько сотен килобайт (а большинстве
случаев - два-три мегабайта). Отсюда и
меньшая ресурсоемкость у скомпилированных
систем.
Четвертая тенденция - возможность работы
с базами данных универсальными (единообразными)
методами. Если мы попытаемся оценить
процент систем, которые так или иначе
требуют обработки структурированной
информации (как для внутрикорпоративного
использования, так и для коммерческого
или иного распространения), то окажется,
что цифра 60- 70% может представлять лишь
нижнюю границу. Важным свойством средств
обеспечения доступа к базам данных является
их масштабируемость, как
возможность не только количественного,
но и качественного роста системы. Например,
обеспечение перехода от локальных ,в
том числе, файл-серверных данных к архитектуре
клиент-сервер или тем более к многоуровневой
N-tier схеме.
Delphi создавался как
продукт, в полной мере
1)Delphi использует язык 3-го поколения Object Pascal, обладающий полной реализаций основных признаков объектной ориентации (инкапсуляция, наследование, полиморфизм), поддержкой RTTI-RunTime Type Information и встроенной обработкой исключительных ситуаций (Exception handling). Компонентная архитектура Delphi является прямым развитием поддерживаемой объектной модели. Все компоненты являются объектными типами (классами), с возможностью неограниченного наследования. Компоненты Delphi поддерживают PME-модель (Property, Method, Events), позволяющую изменять поведение компонентов без необходимости создания новых классов.
2) Delphi 2 Client/Server Suite включает систему контроля версий Intersolv PVCS, поддерживает работу со словарем данных (Data Dictionary) и Репозитарием объектов (Object Repository). Среда визуальной разработки Delphi позволяет единообразно работать как с предопределенными, так и с пользовательскими компонентами, которые разрабатываются на том же языке (Object Pascal), на котором создаются и конечные приложения.
Borland Database Engine (BDE) обеспечивает
единообразную работу с
6.1 Описание программного продукта
Согласно методу Гомори задача линейного программирования сначала решается симплексным методом без учета целочисленности переменных
Поставленную описательную задачу переводят в математическую форму (целевая функция и ограничения).
Полученное математическое описание приводят к канонической форме.
Каноническую форму приводят к матричному виду.
Ищут первое допустимое решение. Для этого матрица должна быть правильной. Матрица в ЗЛП называется правильной, если она содержит минимум m правильных (базисных) столбцов, где m – число строк в матрице. Столбец в канонической ЗЛП называется правильным (базисным), если все его элементы равны нулю, кроме единственного равного единице.
Если матрица не является правильной, то ее нужно сделать таковой с помощью искусственного базиса. Для этого в матрицу нужно дописать столько базисных столбцов, чтобы их общее количество вместе с уже имеющимися базисными столбцами составляло m. После этого переходят к пункту 6. Если искусственный столбец выходит из базиса, то его удаляют из матрицы. Если удалены все искусственные столбцы, то получено первое допустимое решение. Если искусственные элементы не удается вывести из базиса, то система не имеет решений.
Строят последовательность матриц. Нужно определить ведущий столбец, ведущую строку и ведущий элемент. Элемент, соответствующий ведущей строке, удаляется из базиса, а на его место ставят элемент, соответствующий ведущему столбцу. Составляют уравнение пересчета матрицы, выполняют пересчет, а затем проверяют его результаты на оптимальность. Если решение не оптимально, то заново ограничивают ведущий элемент, ведущую строку и ведущий столбец
Составление дополнительного ограничения (сечения) и решение расширенной задачи обычным симплекс-методом. Дополнительное ограничение (сечение) отсекает нецелочисленные решения.
6.2 Руководство пользователю.
При открытии программы открывается главное окно, где возможно произвести ввод значений переменных целевой функции и ограничений, а также задать размерность задачи и количество ограничений, и количество шагов для решения задачи симплекс методом, оставлять поля пустыми нельзя.
Заполнив данные, необходимо нажать кнопку "Заполнить симплекс таблицу", она заполнит таблицу, как показанно на рисунке 2.Возможен только ввод целых чисел и чисел с десятичной дробной частью через запятую.
После этого активируется кнопка "Найти симплекс решение", которое найдет, если в данной задачи линейного программирования есть оптимальное решение (Рисунок 3).
Если же решения нет появится диалоговое окно
Теперь появилась кнопка "Целочисленный ответ", нажав на нее, программа построит отсечение и добавит новую переменную в симплекс таблицу, а дальше решит все симплекс методом, и в итоге выдаст ответ.
Для достижения поставленной цели потребовалось реализовать алгоритмы Гомори на языке программирования Object Pascal. При использовании среды разработки Borland Delphi 7.
Итогом написания
данной курсовой работы
Разработанная программа позволит упростить решение подобных задач непосвященными во все тонкости пользователям, а также послужит примером для интересующихся экономико-математическими методами людей.
Проверка качества
разрабатываемого продукта
В ходе курсового проекта были выполнены все поставленные задачи и была достигнута основная цель.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Grids, Spin, ExtCtrls, jpeg, XPMan;
type
TForm1 = class(TForm)
Chelevaya: TStringGrid;
SpinEdit1: TSpinEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
SpinEdit2: TSpinEdit;
Label2: TLabel;
Button1: TButton;
REshenie: TStringGrid;
Button2: TButton;
RadioGroup1: TRadioGroup;
Label3: TLabel;
Button3: TButton;
SpinEdit3: TSpinEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
GroupBox1: TGroupBox;
Label9: TLabel;
Label10: TLabel;
Q_str: TStringGrid;
Button4: TButton;
XPManifest1: TXPManifest;
Label11: TLabel;
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ChelevayaKeyPress(Sender: TObject; var Key: Char);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j,str_um,stolb_um,minmax_zn:
minmax_za:real;
implementation
uses Math;
{$R *.dfm}
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
with REshenie do
for i:=0 to colcount-1 do
for j:=0 to rowcount-1 do
Cells[i,j]:='';
with StringGrid1 do
for i:=0 to colcount-1 do
for j:=1 to rowcount-1 do
Cells[i,j]:='';
with Chelevaya do
for i:=0 to colcount-1 do
for j:=1 to rowcount-1 do
Cells[i,j]:='';
REshenie.Cells[0,1]:='Ci';
REshenie.Cells[1,1]:='Áï';
Chelevaya.ColCount:=SpinEdit1.
REshenie.ColCount:=SpinEdit1.
StringGrid1.ColCount:=
StringGrid1.Cells[SpinEdit1.
Chelevaya.Cells[SpinEdit1.
Информация о работе Решение задач целочисленного программирования методом Гомори