Курсовая: Программная реализация симплекс-метода - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Программная реализация симплекс-метода

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 58 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

9 Курсовая работа. Тема: Программная реализация симплекс-метода. Задача о диете (примерная задача). ПЛАН 1. Содержание задачи 2. Решение задачи 3. Описание математики 4. Литература СОДЕРЖАНИЕ ЗАДАЧИ Назовем белки, жиры и витамины питательными веществами (ПВ), а борщ ,хлеб, шоколад видами пищи(ВП). Зависимость между ПВ и ВП задает разработанная диетологами матрица D , размером m * n , где элемент d определяет, сколько единиц измерения i -го ПВ содержится в единице j -го ВП. Пусть даны c , с , …, с всех ВП и биологические н ормы b , b , …, b , например, для человека на месяц для каждого ПВ. Считается, что потреблять меньше нормы нельзя. Пусть x , x , …, x - неизвестные нам количества ВП, которые надо купить. Если будет куплено x , x , …, x ВП , то тем самым будет введено в диету количества ПВ всех видов, стоящие слева в неравенствах . Справа в неравенствах стоят биологические нормы, служащие ограничениями снизу. Нужно, чтобы выполнялись условия неотрицательности: x j = Если все, что нас интересует при составлении диеты, - это соблюдение минимальной биологической нормы, то найдем самую дешевую из допустимых диет, т.е. оптимизируем общую цену купленных продуктов: РЕШЕНИЕ ЗАДАЧИ Для решения задачи за пустим редактор Delphi и выберем опцию: «Файл» - > «Создать» - > «Приложение» , затем на форму F o rm 1 положим Panel1, Panel2 . Установим свойства : Form1.BorderIcon biMaximize = False Form1.BorderStyle bsSingle Panel1.Align Left Panel2.Align Right Остальные свойства панелей по умолчанию. Добавим на Panel1 StringGrid1 со свойствами: StringGrid1 .Align Client StringGrid1 .Options goEditing = True StringGrid1.RowCount 5 StringGrid1.ColCount 5 (Количество строк и колонок выставляем по пять. Нулевые колонки и строки служат для надписей, а 1..4 для ввода дан н ых.) На Panel2 добавим GroupBox1 и установим GroupBox1.Caption= Сумма: 0.00 руб . Также добавим кнопку Button 1 со свойством Button 1. Caption = Расчет . На GroupBox1 положим Memo1 и настроем размер. Memo1. Allign = Bottom . В результате наших манипуляций примерно получится такое: Для того, что программа не давала сбой из-за неправильного ввода данных (ввод нецифровых значений, более одного децимального знака) – необходимо написать обработчик событий ввода с клавиатуры. Выбираем StringGrid1 , переходим на панель «События» и выбираем OnKeyPress . Делаем двой ной клик мышкой и получаем заг отовку этого события. Вписываем следующие строки: procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin case key of '0'..'9': ; //только цифры (отрицательные значания исключены) #8: ; //забой '.', ','://точка и запятая if Pos(DecimalSeparator, StringGrid1.Cells[CurCol,CurRow]) = 0 then Key := DecimalSeparator else Key := #0; else key := #0; end; end; В этой процедуре есть глобальные переменные CurCol , CurRow , которые необходимо объявить в секции: var Form1: TForm1; CurCol, CurRow: integer; Чтобы получать автоматически значение строки и колонки во время редактирования, необходимо прописать еще один обработчик события , аналогично описанному выше: procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); begin CurCol:=ACol; CurRow:=ARow; end; Поступим так: «Файл» -> «Создать» - > «Модуль». Затем выберем «Сохранить проект как…» и сохраним основной модуль, как Main. pas , а дополнительный модуль, как Simplex . pas , а сам проект, как Diet. dpr в отдельную папку. Теперь необходимо в модуль Simplex.pas дописать глобальные константы RC, CC ( RowCount и ColCount ) в секцию ниже interface до implementation , а в Main. pas в секции Uses дописать Simplex . Для того , чтобы при закрытии , разрабатываемой программы данные из таблицы сохранялись в файл , в программу необходимо добавить функцию сохранения данных. Легче всего ее прописать в обработчик события Form1.onClose: procedure TForm 1. FormClose ( Sender : TObject ; var Action : TCloseAction ); var i , j : integer ; F : TextFile ; begin AssignFile ( F, ExtractFilePath(Application.ExeName)+ 'simpex.dat' ); Rewrite(F); With StringGrid1 do begin for i:=1 to RC do begin for j:=1 to CC do begin if Cells[i,j]<>'' then Writeln(F,Cells[i,j]) else Writeln(F,'0'); end; end; end; CloseFile(F); end; После описания этой процедуры, необходимо запустить программу на исполнение, нажав кнопку F9. Программа будет откомпилирована и выполнена. В результате этих действий, автоматически будет создан файл simpex . dat в директории с исполняемым файлом. За этим проследит функция ExtractFilePath ( Application . ExeName ) строкового значения. Последовател ьность этой операции обязательна . Так как если сразу написать функцию загрузки файла, которую мы опишем ниже, то прог рамма выдаст ошибку, что файла с таким именем нет. Приступим к написанию подпрограммы загрузки данных из файла, следующего содержания: procedure TForm1.FormCreate(Sender: TObject); var i,j: integer; F: TextFile; s: string; begin R 1:=1; // Для чего эта переменная, будет пояснено ниже AssignFile(F, ExtractFilePath(Application.ExeName)+ 'simpex.dat' ); Reset(F); With StringGrid1 do begin for i:=1 to RC do begin for j:=1 to CC do begin Readln(F,s); Cells[i,j]:=s; end; end; end; CloseFile(F); WriteBtnLabel; end; Переходим на вкладку Simpex и дописываем следующие переменные: var NC, NV, NOPTIMAL, P1, P2, XERR: Integer; TS: Array[0..RC-1,0..CC-1] of Double; R1,R2: double; · NV – количество переменных в оптимизируемой функции. · NC – количество констант. · TS – массив, для ввода матрицы. · R 1 – переменная, для выбора направления оптимизации (-1 – по минимуму, 1 – по максимуму). · R2 – промежуточная переменная для внутренних расчетов. · NOPTIMAL – булевая переменная, если значение False, то продолжить итерацию. · XMAX - переменная для сохранения высшего коэффициента, просчитываемой функции. · RAP – для сохранения наименьшей величины, но более 0. · V – вспомогательная переменная. · P 1, P 2 – линия, колонка (индексы) центрирования. · XERR – булевая переменная (если True – нет решения). Ниже описания переменны х дописываем процедуры: procedure Pivot ; procedure Formula; procedure Optimize; А после секции implementation раз мещаем текст самих процедур. procedure Pivot ; // В этой секции находится центр матрицы var RAP,V,XMAX: Double; I,J: Integer; begin XMAX := 0.0; for J := 2 to NV + 1 do begin if (TS[1, J] > 0) and (TS[1, J] > XMAX) then begin XMAX := TS[1, J]; P2 := J end end; RAP := 999999.0; for I := 2 to NC + 1 do begin if Not (TS[I, P2] >= 0) then begin V := ABS(TS[I, 1] / TS[I, P2]); if V < RAP then begin RAP := V; P1 := I end; end; end; V := TS[0, P2]; TS[0, P2] := TS[P1, 0]; TS[P1, 0] := V end; procedure Formula; // Находим опорный базис Label 60,70,100; var I,J: Integer; begin for I := 1 to NC + 1 do begin if I = P1 then GOTO 70; for J := 1 to NV + 1 do begin if J = P2 then GOTO 60; TS[I, J] := TS[I, J] - TS[P1, J] * TS[I, P2] / TS[P1, P2]; 60: end; 70: end; TS[P1, P2] := 1.0 / TS[P1, P2]; for J := 1 to NV + 1 do begin if J = P2 then GOTO 100; TS[P1, J] := TS[P1, J] * ABS(TS[P1, P2]); 100: end; for I := 1 to NC + 1 do begin if I = P1 then Exit; TS[I, P2] := TS[I, P2] * TS[P1, P2]; end end; procedure Optimize ; // Определяется, закончен ли процесс итерации var I,J: Integer; begin for I := 2 to NC + 1 do if TS[I, 1] < 0 then XERR := 1; NOPTIMAL := 0; if XERR = 1 then Exit; for J := 2 to NV + 1 do if TS[1, J] > 0 then NOPTIMAL := 1; end; В основном модуле опишем процедуру заполнения данных в матрицу, вывода результатов и программу вывода надписей на зафиксированных колон ках, строках StringGrid1 в секции private . private procedure ReadData; procedure Results; procedure WriteBtnLabel; Поставим курсор на процедуры и нажмем « Ctrl + C ». Автоматически заполнятся заготовки заготовки процедур. Опишем каждую из них : procedure TForm1.ReadData; var i,j: integer; begin NC:=CC-2; NV:=RC-2; for j:=1 to NV do begin R2:=StrToFloat(StringGrid1.Cells[j,1]); TS[1,j+1]:=R2*R1; end; R2:=StrToFloat(StringGrid1.Cells[CC,1]); TS[1,1]:=R2*R1; for i:=1 to NC do begin for j:=1 to NV do begin R2:=StrToFloat(StringGrid1.Cells[j,i+1]); TS[i+1,j+1]:=-R2; end; TS[i+1,1]:=StrToFloat(StringGrid1.Cells[CC-1,i+1]); end; for j:=1 to NV do TS[0,j+1]:=j; for i:=NV+1 to NV+NC do TS[i-NV+1,0]:=i; end; procedure TForm1.Button1Click(Sender: TObject); begin XERR:=0; NOPTIMAL := 0; ReadData; repeat PIVOT; FORMULA; OPTIMIZE; until not (NOPTIMAL = 1); Results; end; procedure TForm1.Results; var i,j: Integer; begin Memo1.Lines.Clear; if XERR <> 0 then begin GroupBox1.Caption:=' Нет решения !'; Exit; end else for I := 1 to NV do for J := 2 to NC + 1 do begin if TS[J, 0] = I then Memo1.Lines.Add(StringGrid1.Cells[i,0]+' : '+FormatFloat('##0.00',TS[j,1])); end; GroupBox1.Caption:=' Сумма : '+FormatFloat('##0.00',TS[1, 1])+' руб .'; end; procedure TForm1.WriteBtnLabel; begin With StringGrid1 do begin Cells[0,1]:=' Цена '; Cells[0,2]:=' Белки '; Cells[0,3]:=' Жиры '; Cells[0,4]:=' Витам .'; Cells[4,0]:=' Норма '; Cells[3,0]:=' Шоколад '; Cells[2,0]:=' Хлеб '; Cells[1,0]:='Борщ '; end; end; Двойным кликом мышки по Button1 создадим процедуру обработки события: procedure TForm1.Button1Click(Sender: TObject); begin XERR:=0; NOPTIMAL := 0; ReadData; repeat PIVOT; FORMULA; OPTIMIZE; until not (NOPTIMAL = 1); Results; end; Запустим на выполнение программу, нажав F9 и попробуем поэкспериментировать с данными, введя цены, количества питательных веществ и видов пищи. Изменив данные, щелкаем по кнопке «Расчет». Проверяем расчеты с помощью калькулятора. Описание математики Данный модуль (simplex. pas ) реализует обычный симплекс-метод с десятичными числами типа double для решения задачи вида: С = С1 * X 1+ С2 * X 2+ .... + С n * X n ----> min (где С – цена) при ограничениях: b 1 * x 1+ b 2 * x 2+....+ b n * xn <= (ПВ1) ..................... bm1 * x 1+ bm2 * x 2+....+ bmn * xn < = ( ПВ n) ( b – биологические нормы продукта , ПВ1-ПВn – общая норма питательных веществ по видам продуктов ВП ) О гр аничения вида x[j]>=0 не добавляются - их наличие неявно предполагается самим симплекс-методом и уже реализовано программным путем . Литература 1. Бородич Ю.С. и др. Паскаль для персональных компьютеров: Справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И. Кузьмич.-Мн.: Выш.шк.: БФ ГИТМП «Ника», 1991.-365с.:ил. 2. Бородич Ю.С. Разработка программных систем на языке Паскаль: Справ. пособие. – Мн.: Выш.шк.,1992. 143 с.:ил. 3. Вальвачев А.Н., Крисевич В.С. Программирование на языке Паскаль для персональных ЭВМ ЕС. – Мн.:Выш.шк.,1989. – 223с 4. Вальвачев А.Н. Графическое программирование на языке Паскаль: Справ.пособие. – Мн.: Выш.шк.,1992. – 143 с.:ил. 5. Вирт Н. Алгоритмы и структуры данных. М.: Мир, 1989 6. Епанешников А.М., Епанешников В.А. Turbo Vision 2.0. Основы практического использования. – М.: «ДИАЛОГ-МИФИ», 1995. – 240 с. 7. Климов Ю.С. и др. Программирование в среде Turbo Pascal 6.0: Справ.пособие/ Ю.С. Климов, А.И. Касаткин, С.М. Мороз. – Мн.: Выш.шк., 1992. 158 с.:ил. 8. Кнут Д. Искусство программирования для ЭВМ. – М.:Мир, 1978. Т 3. – 844с. 9. Котов В.М., Волков И.А., Харитонович А.И. Методы алгоритмизации. Мн.: Нар.асвета, 1996. – 127 с.:ил. 10. Липский В. Комбинаторика для программистов. М.: Мир, 1988. -213 c .ил. 11. Мануйлов В.Г.Разработка программного обеспечения на Паскале. – М.: “Приор”., 1996. – 238 с. 12. Офицеров Д.В. и др. Программирование на персональных ЭВМ.: Практикум: Учеб.пособие – Мн.:Выш.шк., 1993. – 256с. 13. Фаронов В.В. Delphi 4. Учебный курс. Учебное пособие. – М.: “Нолидж”, 1999. – 464 с.ил. 14. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. – М.: “Нолидж”, 1997. – 616 с.ил. 15. Хьюз Дж., Мичтом Дж. Структурный подход к программированию. М.: Мир, 1980. – 278 с. 16. Чип С. Turbo Pascal 6.0 Professional. ООП: Теория и практика. – Мн.: SCI , 1992. – 138 с.,ил.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Настоящая женщина должна выглядеть так, чтобы даже самый отъявленный гей, глядя на неё, думал: "А, может, зря я это затеял?!"
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Программная реализация симплекс-метода", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru