скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Анализ на чувствительность двойственных оценок

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

видим, что оно совпадает с максимальным значением целевой функции исходной задачи

.

При подстановке оптимальных двойственных оценок в систему ограничений двойственной задачи получаем

Первое ограничение двойственной задачи выполняется как строгое неравенство. Это означает, что двойственная оценка сырья, используемого на производство одного изделия вида А, выше цены этого изделия и, следовательно, выпускать изделия вида А невыгодно. Его производство и не предусмотрено оптимальным планом прямой задачи. Второе и третье ограничения двойственной задачи выполняются как строгие равенства. Это означает, что двойственные оценки сырья, используемого для производства единицы соответственно изделий В и С, равны в точности их ценам. Поэтому выпускать эти два вида продукции по двойственным оценкам экономически целесообразно. Их производство и предусмотрено оптимальным планом прямой задачи.

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

2.6 Обоснование выбора программного инструментария

На сегодняшний день существует достаточно языков и сред программирования, при помощи которых можно создавать приложения. Наиболее известные: Delphi, Pascal, C++ и т.д.

C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

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

Delphi, также замечательный инструмент программирования. При помощи Delphi с минимальными затратами времени создаются различные приложения для Windows 95/98. Поскольку в основе лежит концепция быстрого создания приложений.

Основное внимание сосредоточено на следующих ключевых особенностях среды Delphi:

-  интегрированная среда разработки приложений – позволяет создавать, компилировать, тестировать и редактировать проект или группу проектов в единой среде программирования;

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

-  библиотека компонентов содержит множество стандартных компонентов, которые можно использовать при создании приложений. Сюда относятся элементы управления в стиле Windows 95/98, а также шаблоны для форм;

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

-  32-битовый компилятор Delphi генерирует исполняемые exe-файлы. При этом существует возможность генерировать либо простые exe-файлы, либо сложные приложения, требующие подключения dll-библиотек.

На основе анализа рассмотренного программного обеспечения можно сделать вывод, что для реализации поставленной задачи наиболее подходящим программным обеспечением является именно Delphi.

Вывод:

В практической части было рассмотрен анализ двойственных оценок основной задачи линейного программирования. При ручном способе вычислении задачу симплексным методом максимальное значение целевой функции равна X* = (0,230,0,230, 0,105), а оптимальный план равен

,

При ручном способе вычислении задачу двойственным симплекс методом минимальное значение целевой функции равна,а оптимальный план равен

Так же были определены интервалы устойчивости

.,,,

а так же влияние количества ресурса I типа при уменьшении на 130, II и III ресурсы увеличения на 120 и 110 денежных единиц. При этом оптимальным планом двойственной задачи остается  

 денежных единиц

Это означает, что уменьшение количества ресурсов I типа на 130 единиц и увеличение ресурсов II и III типов на 120 и 110 единиц к возможности построения такого плана производства продукции, реализация которого обеспечит выпуск изделии на 355 денежных единиц больше, чем при плане производства продукции, обусловленным первоначальным количеством ресурсов.

Заключение

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

В теоретической части пояснительной записки к курсовой работе приведен краткий теоретический материал о формах представления задач линейного программирование, симплексный метод и метод двойственной задачи, необходимый для решения задач линейного программирования

В практической части было рассмотрено анализ двойственных оценок основной задачи линейного программирования. При ручном способе вычислении задачу симплексным методом максимальное значение целевой функции равна X* = (0,230,0,230, 0,105), а оптимальный план равен

,

при ручном способе вычислении задачу двойственным симплекс методом минимальное значение целевой функции равна , а оптимальный план равен

.

Так же были определены интервалы устойчивости

., , ,

а так же влияние количества ресурса I типа при уменьшении на 130, II и III ресурсы увеличения на 120 и 110 денежных единиц. При этом оптимальным планом двойственной задачи остается

.

 

денежных единиц

Это означает, что уменьшение количества ресурсов I типа на 130 единиц и увеличение ресурсов II и III типов на 120 и 110 единиц к возможности построения такого плана производства продукции, реализация которого обеспечит выпуск изделии на 355 денежных единиц больше, чем при плане производства продукции, обусловленным первоначальным количеством ресурсов. Так же приведена экономическая интерпретация двойственной оценки.

После выше перечисленного делаю заключение, что цель данной курсовой работы была достигнута.


Список использованной источников

1.  К.В. Балдин, Н.А. Брызгалов, А.В. Рукосуев «Математическое программирование», «Дашков и К» 2009 г.

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

3.  Кузнецов Ю.Н., Кузубов В.И., Волощенко А.Б Математическое программирование – М.: Высшая школа, 1980.


Приложение А

Листинг программы

unit Unit1;

interface

uses

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

Dialogs, Grids, Menus, StdCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

Label1: TLabel;

StringGrid3: TStringGrid;

Label2: TLabel;

N11: TMenuItem;

StringGrid4: TStringGrid;

Label3: TLabel;

procedure FormCreate(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure tab1;

procedure tabrez;

procedure vich;

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure StringGrid2SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure N4Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure StringGrid4SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

ns,ms:string;

n,m,mm,nm,b:integer;

mas,mas2:array[1..20,1..20] of currency;

ma:array[1..20,1..2] of currency;

m1:array [1..20,1..2] of currency;

bz:array [1..2,1..20] of currency;

min,min2,razr:currency;

y: array [1..10] of currency;

implementation

{$R *.dfm}

procedure TForm1.vich;

var i,j,l,k,o:integer;

lg:currency;

begin

for i:=1 to nm do m1[i,1]:=0;

for i:=1 to nm do m1[i,2]:=0;

for i:=1 to mm do bz[i,1]:=0;

for i:=1 to mm do bz[i,2]:=0;

for j:=1 to mm-1 do

for i:=2 to nm-1 do

begin

m1[i-1,1]:=m1[i-1,1]+mas[i,j];

if (m1[i-1,1]=1) and (m1[i-1,2]=0) then m1[i-1,2]:=j;

end;

for j:=1 to m do

for i:=1 to n do

if (m1[i,1]=1) and (j=m1[i,2]) then

begin

bz[1,j]:=i;

end;

for j:=1 to m do

bz[2,j]:=ma[trunc(bz[1,j]),1];

for i:=1 to n do ma[i,2]:=0;

for i:=1 to n do

begin

for j:=1 to m do

ma[i,2]:=ma[i,2]+(mas[i+1,j]*bz[2,j]);

ma[i,2]:=ma[i,2]-ma[i,1];

end;

min:=ma[1,2];

l:=0;

o:=0;

for i:=2 to n do

if min>ma[i,2] then begin min:=ma[i,2]; k:=i+1 end;

min2:=0;

for j:=1 to m do

if mas[k,j]>0 then begin l:=1; min2:=mas[1,j]/mas[k,j]; o:=j end;

if min2=0 then begin b:=1;ShowMessage('Решений нет'); Form1.Free end

else begin

for j:=1 to m do

if mas[k,j]>0 then

if min2>(mas[1,j]/mas[k,j]) then

begin

min2:=mas[1,j]/mas[k,j];

o:=j;

end;

end;

if (mas[k,o]<>0) then razr:=mas[k,o];

for j:=1 to m do

for i:=1 to n+1 do

begin

if j>o then mas2[i,j]:=mas[i,j];

if j=o then mas2[i,j]:=mas[i,j]/razr;

if j<o then mas2[i,j]:=((mas[i,j]*mas[k,o])-(mas[i,o]*mas[k,j]))/razr;

end;

for j:=1 to m do

mas2[1,j]:=abs(mas2[1,j]);

// ShowMessage(currtostr(razr)+' '+inttostr(k)+' '+inttostr(o));

end;

procedure TForm1.tabrez;

var i,j:integer;

l1:currency;

begin

Form1.StringGrid4.Visible:=True;

Form1.StringGrid3.Visible:=True;

Form1.Label2.Visible:=True;

for j:=1 to mm-2 do

for i:=3 to nm-1 do

Form1.StringGrid3.Cells[i,j]:=currtostr(mas[i-2,j]);

// for i:=1 to n do

// Form1.StringGrid3.Cells[i+3,m+1]:=inttostr(ma[i]);

for j:=1 to m do

Form1.StringGrid3.Cells[1,j]:='P'+inttostr(trunc(bz[1,j]));

for j:=1 to m do

Form1.StringGrid3.Cells[2,j]:=currtostr(bz[2,j]);

l1:=0;

for j:=1 to m do

l1:=l1+mas[1,j]*bz[2,j];

Form1.StringGrid3.Cells[3,m+1]:=currtostr(l1);

for i:=1 to n do

Form1.StringGrid3.Cells[i+3,m+1]:=currtostr(ma[i,2]);

end;

procedure TForm1.tab1;

var i,j:integer;

begin

Form1.StringGrid1.ColCount:=2*n+2;

Form1.StringGrid1.RowCount:=m;

Form1.StringGrid2.ColCount:=2*n+2;

Form1.StringGrid2.RowCount:=1;

Form1.StringGrid1.Width:=((2*n)+2)*36+5;

Form1.StringGrid1.Height:=(32*m);

Form1.StringGrid2.Width:=((2*n)+2)*36+5;

Form1.StringGrid2.Height:=(32*1);

for i:= 0 to n*2 do

begin

if (i mod 2 =1) then

begin

Form1.StringGrid2.Cells[i,j]:='X'+inttostr((i div 2)+1);

end;

if (i mod 2 =0) then Form1.StringGrid2.Cells[i,j]:='0';

Form1.StringGrid2.DefaultColWidth:=35;

Form1.StringGrid2.DefaultRowHeight:=30;

end;

Form1.StringGrid2.Cells[2*n,j]:='->';

Form1.StringGrid2.Cells[2*n+1,j]:='min';

for j:= 0 to m do

begin

for i:= 0 to n*2 do

begin

if (i mod 2 =1) then Form1.StringGrid1.Cells[i,j]:='X'+inttostr((i div 2)+1);

if (i mod 2 =0) then Form1.StringGrid1.Cells[i,j]:='0';

Form1.StringGrid1.DefaultColWidth:=35;

Form1.StringGrid1.DefaultRowHeight:=30;

end;

Form1.StringGrid1.Cells[2*n,j]:='=';

Form1.StringGrid1.Cells[2*n+1,j]:='0';

end;

Form1.StringGrid2.Top:=(32*m)+15;

Form1.StringGrid3.Top:=(32*m)+65;

Form1.StringGrid3.Width:=((2*n)+2)*36+5;

form1.StringGrid3.Height:=(32*m);

Form1.Label1.Top:=32*m;

Form1.Label2.Top:=32*m+50;

Form1.Label1.Visible:=True;

Form1.StringGrid1.Visible:=True;

Form1.StringGrid2.Visible:=True;

end;

procedure TForm1.FormCreate(Sender: TObject);

var i,j:integer;

begin

end;

procedure TForm1.N2Click(Sender: TObject);

begin

ns:=InputBox('Число переменных','Введите чесло переменных','4');

n:=strtoint(ns);

Form1.tab1;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

ms:=InputBox('Число функций','Введите чесло функций','3');

m:=strtoint(ms);

Form1.tab1;

end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if ((ACol mod 2 =0)and(ACol<(2*n))) or (ACol=(2*n+1)) then

begin

Form1.StringGrid1.Cells[ACol,ARow]:=InputBox('Число','Введите чесло

при X'+inttostr((ACol div 2)+1)+' для функции '+inttostr(ARow+1),'0');

if ((ACol mod 2 =0)and(ACol<(2*n)))then mas[(ACol div

2)+2,ARow+1]:=strtoint(Form1.StringGrid1.Cells[ACol,ARow]);

// if (ACol=(2*n+1)) then

mas[1,ARow+1]:=strtoint(Form1.StringGrid1.Cells[ACol,ARow]);

end;

end;

procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if ((ACol mod 2 =0)and(ACol<(2*n))) {or (ACol=(2*n+1))} then

begin

Form1.StringGrid2.Cells[ACol,ARow]:=InputBox('Число','Введите чесло

при Х'+inttostr((ACol div 2)+1)+' для целевой функции ','0');

// if ((ACol mod 2 =0)and(ACol<(2*n)))then ma[(ACol div

2)+2,1]:=strtoint(Form1.StringGrid2.Cells[ACol,0]);

end;

end;

procedure TForm1.N4Click(Sender: TObject);

var i,j,l:integer;

label 10;

begin

mm:=m+2;

nm:=n+4;

Form1.StringGrid3.RowCount:=mm;

Form1.StringGrid3.ColCount:=nm;

Form1.StringGrid3.FixedCols:=1;

Form1.StringGrid3.FixedRows:=1;

Form1.StringGrid3.DefaultRowHeight:=30;

Form1.StringGrid3.DefaultColWidth:=35;

Form1.StringGrid4.DefaultRowHeight:=30;

Form1.StringGrid4.DefaultColWidth:=35;

Form1.StringGrid4.Width:=m*36+5;

Form1.StringGrid4.Height:=32*2;

Form1.StringGrid4.ColCount:=m;

Form1.StringGrid4.RowCount:=2;

Form1.StringGrid4.FixedRows:=1;

for i:=0 to m-1 do

begin

Form1.StringGrid4.Cells[i,0]:='Y'+inttostr(i+1);

Form1.StringGrid4.Cells[i,1]:='0';

end;

Form1.StringGrid4.Left:=Form1.StringGrid1.Width+10;

Form1.StringGrid3.Width:=nm*36+5;

Form1.StringGrid3.Height:=32*mm;

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

Form1.StringGrid3.Cells[1,0]:='Бз';

Form1.StringGrid3.Cells[2,0]:='СБз';

Form1.StringGrid3.Cells[0,m+1]:='m+1';

// заполнение таблицы решения

for i:=3 to nm-1 do

Form1.StringGrid3.Cells[i,0]:='P'+inttostr(i-3);

for j:=1 to mm-2 do

Form1.StringGrid3.Cells[0,j]:=inttostr(j)+'.)';

for i:=1 to n do

for j:=0 to m do

mas[i+1,j+1]:=strtoint(Form1.StringGrid1.Cells[(i-1)*2,j]);

for j:=1 to m do

mas[1,j]:=strtoint(Form1.StringGrid1.Cells[2*n+1,j-1]);

for i:=1 to n do

ma[i,1]:=strtoint(Form1.StringGrid2.Cells[(i-1)*2,0]);

b:=0;

l:=0;

while b=0 do

begin

l:=l+1;

if l=100 then begin ShowMessage('Решений нет'); goto 10 end;

Form1.vich;

Form1.tabrez;

for i:=1 to n+1 do

for j:=1 to m do

mas[i,j]:=mas2[i,j];

for i:=1 to n do

if ma[i,2]>0 then b:=1 else b:=0;

end;

l:=1;

for i:=n-m+4 to n+3 do

begin

y[l]:=strtocurr(Form1.StringGrid3.Cells[i,m+1]);

l:=l+1;

end;

Form1.Label2.Caption:='Решение : У=( '+currtostr(y[1]);

for j:=2 to m do

Form1.Label2.Caption:=Form1.Label2.Caption+' ; '+currtostr(y[j]);

Form1.Label2.Caption:=Form1.Label2.Caption+' )';

10:// ShowMessage('Далее');

// Form1.tabrez;

end;

procedure TForm1.N11Click(Sender: TObject);

begin

m:=3;

n:=6;

Form1.tab1;

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

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

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

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

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

Form1.StringGrid1.Cells[4,1]:='2';

Form1.StringGrid1.Cells[8,1]:='1';

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

Form1.StringGrid1.Cells[2,2]:='4';

Form1.StringGrid1.Cells[10,2]:='1';

Form1.StringGrid1.Cells[13,0]:='430';

Form1.StringGrid1.Cells[13,1]:='460';

Form1.StringGrid1.Cells[13,2]:='420';

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

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

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

end;

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

end;

procedure TForm1.StringGrid4SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

var i:integer;

begin

Form1.StringGrid4.Cells[ACol,ARow]:=InputBox('Число','Введите чесло

при Y'+inttostr(ACol+1),'0');

Form1.Label3.Visible:=true;

Form1.Label3.Top:=Form1.StringGrid3.Top+Form1.StringGrid3.Height;

Form1.Label3.Caption:='Ответ :

Y='+currtostr(y[1]*strtocurr(Form1.StringGrid4.Cells[0,1]))+'y1';

for i:=1 to m-1 do

Form1.Label3.Caption:=Form1.Label3.Caption+'+'+currtostr(y[i+1]*strtocu

rr(Form1.StringGrid4.Cells[i,1]))+'y'+inttostr(i+1);

end;

end.


Приложение Б (обязательное)

Макеты экранных форм

Рисунок Б.1 – Исходные данные

Рисунок Б.2 – Результаты программы


Страницы: 1, 2, 3, 4, 5


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.