Вход

Симплекс метод

Курсовая работа* по программированию
Дата добавления: 22 августа 2004
Язык курсовой: Русский
Word, rtf, 1 Мб (архив zip, 77 кб)
Курсовую можно скачать бесплатно
Скачать
Данная работа не подходит - план Б:
Создаете заказ
Выбираете исполнителя
Готовый результат
Исполнители предлагают свои условия
Автор работает
Заказать
Не подходит данная работа?
Вы можете заказать написание любой учебной работы на любую тему.
Заказать новую работу
* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
Очень похожие работы



Министерство образования РФ

Государственное образовательное учреждение

средне профессионального образования

Петровский колледж (Филиал г. Мурманск)

Отделение обучающих и информационных технологий.














Курсовая работа.

По дисциплине: «Компьютерное моделирование»

На тему: «Симплекс метод»










Выполнила: Тимонина З. В.

Специальность: 2203 ПО ВТ и АС

Группа: 323

Преподаватель: Сергеев А. В.

Оценка:______________________

Подпись преподавателя:________













Мурманск

2003

Часть 1. Введение


Предпосылки возникновения АСУ. Понятие АСУ.

АСУ – это комплекс технических и программных средств, обеспечивающих тесные взаимодействия организационной структуры (отдельных людей, коллективов) и управление объектом в производственной, научной или общественных сферах.

Первые АСУ имели недостатки, так как они копировали ручной труд, который применялся до внедрения АСУ. В связи с этим внедрение первых АСУ имели неудачи, так как они копировали тот беспорядок, который имел место в управлении производством до их внедрения и способствовали дезорганизации производства. Тем ни менее для тех функциональных задач, где имелись достаточно формализованные алгоритмы (задачи финансового учета, материально технического снабжения и другое) внедрение АСУ позволило значительно улучшить отчетность, контроль прохождения документации, своевременность принятия решения, что во многих случаях дало значительный экономический эффект.

Качество управления непосредственно связано с применением математических методов, внедрение которых без ЭВМ невозможно из-за больших вычислительных работ.

К математическим методам в первую очередь относятся – оптимизационные методы, статистическая обработка информации, математическое моделирование и т.д. Еще одним недостатком в первой АСУ было использование вычислительной техники более мощной, чем это требовалось для решения задач. Развитие автоматизированных систем показало, что необходимо:

  1. Перед внедрение АСУ провести тщательную ревизию организационной структуры управления производством, приспособить эту структуру под автоматизированную структуру.

  2. Использовать вычислительные средства, которые не значительно превосходят потребности решаемых функциональных задач по вычислительным ресурсам.

  3. Охватить в комплексе объект управления, т.е. попытка объединить в одной системе управления технологическим процессом и организационной экономической деятельности предприятия.

  4. Увеличить долю решаемых организационных задач от которых можно ожидать, наибольший экономический эффект.

Опыт разработки и внедрения АСУП показал высокую экономическую эффективность (хорошая организация труда и производства, повышения точности планирования, уменьшение доли ручного труда). Для разработки АСУ необходимо хорошо знать экономико – математические методы управления, отлично представлять организацию производства знать основы теории автоматизированного производства, информатику, уметь проектировать систему на базе СУБД.


Классификация АСУ.

АСУ различают по результатам деятельности и по выполняемым функциям.

По функциям:

  1. Административно – организационные (АСУП (предприятий), ОАСУП (отраслевые)).

  2. АСУТП (технологическими процессами). К ним относятся гибкие производственные системы, системы контроля качества продукции, системы управления станками с ЧПУ (числовые программные управления).

  3. Интегрированные системы объединяющие перечисленные АСУ в различных комбинациях.

Первые АСУТП были введены в 70-х годах. Наибольшее количество таких систем было внедрено в химическую и нефтехимическую промышленность, в черную и цветную металлургию, в энергетику. Созданные АСУТП были по своему характеру автоматизированными системами, в них значительная роль отводилась оператору, который по информации предоставленной ЭВМ принимала решение либо сам, либо выполнял решение подсказанное ЭВМ.

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

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

  1. Концептуальный – дает качественное описание системы (что может?)

  2. Логический – позволяет на основе математического аппарата формализовать, логически определить место отдельных элементов в системы в пространстве и оценить их взаимодействие во времени.

  3. Физический – позволяет судить о возможностях реализации системы на основе различных аппаратно-программных средств.


Функциональные задачи и подсистемы АСУ.

Современная АСУ является многоуровневой. Анализ и синтез такой системы может быть выполнен на основе теории многоуровневых иерархических систем. В соответствии с этой теорией систему можно разделить на подсистемы и далее на задачи, что позволяет разделить общие цели управления на отдельные подцели, реализуемые подсистемами. Метод иерархической декомпозиции является основным методом исследования сложных систем управления. Разделение системы по функциональному признаку приводит к выделению функциональных частей АСУ, которые получили название функциональных подсистем. Функциональные подсистемы делятся на функциональные задачи. Такая последовательность действий является естественной при анализе создаваемой АСУ. Однако на этапе синтеза создание и внедрение исходной является некоторая организационно-экономическая модель, включающая в себя функции и уровни управления, разделение этих функций по производственным подразделениям с внедрением отдельных задач управления. На этом этапе необходимо определить множество функций управления, которые подлежат автоматизации, оценить целесообразные уровни управления и если необходимо выделить стадии управления производством, которые охватываются автоматизацией. При создании АСУ важно экономно расходовать вычислительный ресурс, а поэтому данные задачи являются оптимизационными. В качестве ограничений выступает вычислительный ресурс. Для упорядочения решаемых задач необходимо их совместить с соответствующими уровнями управления, которые являются достаточно определенными для каждого типа предприятия. Основными уровнями управления является перспективное планирование, управление подготовкой производства, технико-экономическое планирование и общезаводское производственное планирование и управление (оперативное управление). На уровне перспективного планирования можно выделить ряд функций управления, которые подлежат автоматизации. Одной из основных функций на этом уровне выступает прогнозирование. Применительно к отраслевой АСУ прогнозирование может касаться целого ряда экономических показателей, связанных с развитием отрасли. Для АСУП прогнозирование относиться к выпускаемой продукции, к потребности предприятия в каких-то видах сырья, изделий. Решение этих задач в основном базируется на оценке экономического процесса, ранее имевшего место в деятельности предприятия и экстраполяции этого опыта на будущие годы. Вводится ряд функций отображающих зависимость требуемых экономических показателей по годам, т. е. Оценивает тенденцию развития на основе принятых математических закономерностей.

Методы прогнозирования опираются на стационарность экономического процесса, что не всегда имеет место, поэтому чаще используют методы экспертных оценок. Использование автоматизированного управления для решения подобных функциональных задач позволяет осуществить оптимизационную постановку задач. В качестве критерия принимаются полные приведенные затраты и минимизируются функциональные затраты. В результате получают рекомендации по функциональному развитию отдельных отраслей промышленности, оптимальному размещению объектов производства, с учетом имеющихся людских и энергетических ресурсов. В целом минимизируются суммарные, капитальные эксплутационные затраты на производство (затраты на транспортировку и сырье). На уровне предприятия основной задачей является максимизация прибыли предприятия или обеспечение производства продукции в заданном объеме и ассортименте, при минимуме экономических затрат. Решается ряд частных функциональных задач по определению номенклатуры выпускаемой продукции, строкам ввода отдельных мощностей.


Обеспечивающие подсистемы АСУ.

Выделяемая в соответствии со структурным подходом обеспечивающая часть АСУ включает в себя: организационное, информационное, математическое, алгоритмическое, программное, техническое, лингвистическое, правовое и агрономическое обеспечения. Эти обеспечения создаются на стадии микропроектирования, т. е. Внутреннего проектирования системы или определяются характеры работ при создании АСУ. А так же взаимосвязь отдельных подсистем АСУ при функционировании.

В настоящее время линейное программирование является одним из наиболее употребительных аппаратов математической теории оптимального принятия решений, в том числе и в финансовой математике. Для решения задач линейного программирования разработано сложное программное обеспечение, дающее возможность эффективно и надежно решать практические задачи больших объемов. Эти программы и системы снабжены развитыми системами подготовки исходных данных, средствами их анализа и представления полученных результатов. В развитие и совершенствование этих систем вложен труд и талант многих математиков, аккумулирован опыт решения тысяч задач. Владение аппаратом линейного программирования необходимо каждому специалисту в области прикладной математики.

Линейное программирование представляет собой наиболее часто используемый метод оптимизации. К числу задач линейного программирования можно отнести задачи:

  • рационального использования сырья и материалов; задачи оптимального раскроя;

  • оптимизации производственной программы предприятий;

  • оптимального размещения и концентрации производства;

  • составления оптимального плана перевозок, работы транспорта;

  • управления производственными запасами;

  • и многие другие, принадлежащие сфере оптимального планирования.

Для большого количества практически интересных задач целевая функция выражается линейно – через характеристики плана, причем допустимые значения параметров подчинены линейным равенствам или неравенствам. Нахождение при данных условиях абсолютного экстремума целевой функции носит название линейного программирования.

Первым исследованием по линейному программированию является работа Л. В. Кантфовича “Математические методы организации и планирования производства”, опубликованная в 1939 г. В нем дана постановка задач линейного программирования, разработан метод разрешающих множителей решения задач линейного программирования и дано его теоретическое обоснование.

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

Математическое программирование – это прикладная отрасль математики, которая является теоретической основой решения задач оптимального планирования.

Существуют следующие разделы математического программирования: линейное, параметрическое, нелинейное и динамическое программирование. Наиболее разработанным и широко применяемым разделом математического программирования является линейное программирование, целью которого служит отыскивание оптимума (max, min)заданной линейной функции при наличии ограничений в виде линейных уравнений или неравенств.

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





























Часть 2. Основная


2.1 Математическое описание метода.

Допустим, имеется система уравнений ограничений:


Допустим, требуется вывести из числа свободных переменных какую – либо переменную, например, х2 и перевести ее в базисную, а в замен ее ввести в число свободных какую то базисную, например у3, т. е. х2 ? у3. Если проводить этот процесс математическим способом то, необходимо было бы переразрешать каждое уравнение в системе ограничений относительно новой свободной переменной, т. е. новое получившееся уравнение, в котором была произведена замена необходимо подставить во все остальные уравнения, а так же целевую функцию. Данная процедура является громоздкой, поэтому проще задачу решить с помощью определенного алгоритма и записывать все промежуточные результаты в таблицу. Чтобы этот алгоритм был проще и лучше запоминался необходимо произвести следующие преобразования:

Избавляемся от отрицательных коэффициентов для этого принимаем



Данная форма записи уравнений называется стандартной.



СЧ

х1

х2

х3

х4

у1

b1

a11

a12

a13

a14

у2

b2

a21

a22

a23

a24

у3

b3

a31

a32

a33

a34

у4

b4

a41

a42

a43

a44

у5

b5

a51

a52

a53

a45

При пересечении разрешающей строки у3 и разрешающего столбца х2 получаем разрешающий элемент а32.

Необходимо найти коэффициенты, которые получатся в разрешающей строке после обмена х2 ? у3.


СЧ

х1

у3

х3

х4

у1

y2

x2

y4

y5


Алгоритм преобразования коэффициентов стандартной таблицы.


  1. Разрешающий элемент заменяется на обратную ему величину.

  2. Все остальные элементы разрешающей строки делятся на разрешающий элемент.

  3. Все элементы разрешающего столбца, кроме самого разрешающего элемента делятся на разрешающий элемент и меняют знак.

  4. Каждый из остальных элементов подвергаются следующему преобразованию: к нему прибавляются произведение элементов, стоявшего в прежней разрешающей строке на том же месте по порядку (т. е. в том же столбце), на элемент стоящий в новом разрешающем столбце на соответствующем месте (т. е. в той же строке, что и рассчитываемый элемент).

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


Алгоритм преобразования xj ? yi стандартной таблицы сводится к следующим операциям:


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

  2. Все элементы разрешающей строки, кроме самого разрешающего элемента умножить на , результат записать в нижней части той же ячейки.

  3. Все элементы разрешающего столбца, кроме всего разрешающего элемента умножить на на – a, записать в нижней части той же ячейки.

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

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

  6. Переписать таблицу, заменив:

    • xj на yi;

    • элемент разрешающей строки и столбца, числами, стоящими в нижней части тех же ячеек;

    • каждый из остальных элементов суммой чисел стоящей в верхней и нижней части той же ячейки.

В любой задаче ОЗЛП существует так же линейная функция L, которая в общем случае выглядит следующим образом:

Для решения ее табличным способом ее так же можно привести к стандартному виду.

Таким образом, в стандартной таблице появляется еще одна строка L. С ней производятся только такие же вычисления как со всеми остальными ячейками таблицы, строка L никогда не может быть разрешающей строкой. С помощью табличного алгоритма обмена переменных в управлениях ОЗЛП можно решить любую задачу линейного программирования или убедиться, что она не имеет решения.

Нахождение решения каждой задачи распадается на два этапа:

  1. нахождение опорного плана;

  2. отыскание оптимального решения.

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

В процессе второго этапа выясняется, ограничена ли снизу функция L, которая стремиться к минимуму, если нет, то оптимального решения не существует. Если да, то оно отыскивается после замены x на y.

Двойственные задачи ОЗЛП.

В процессе расчета задачи ОЗЛП может получиться один или несколько отрицательных свободных членов, это означает, что полученное решение не является опорным соответственно не может быть оптимальным. Рассмотрим случай, когда среди свободных членов есть отрицательный. Для того, чтобы избавиться от них необходимо пересчитать таблицу обменивания базисных и свободных переменных пока не придем к опорному решению или не убедимся в том, что решение не существует. Необходимо так обменивать базисные и свободные переменные, чтобы эта процедура приближала к области допустимых решений, чтобы число отрицательных свободных членов убывало или по крайне мере убывали их абсолютные величины.

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



СЧ

x1

x2

x3

y1

1

2

-1

1

-2

1

-1

0

y2

-5

4

-2

2

1

2

1

0

y3

2

2

1

1

1

1

0

0

y4

1

0

0

0

-1

0

1

0


Ищем в данной строке (y2) отрицательный элемент aij, если такого элемента нет, то данная система уравнений не совместна. При отсутствии отрицательных элементов в строке вся правая часть соответствующего уравнения может быть только отрицательной, а это противоречит условиям не отрицательных переменных.

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



СЧ

x1

x2

x3

y1

3

2

1

2

y2

1

2

3

-1

y3

2

1

-1

0

y4

1

0

-1

0



















2.2 Блок – схема алгоритма.













































    1. Пример решения задачи с использованием симплекс-метода.


Даны данные: из которых составляется система уравнений вида:



Целевая функция этой системы уравнений стремится в максимум, и имеет вид:



Базисное решение является допустимым, так как в правой части неравенств не содержатся отрицательные значения.

В данной системе 3 – уравнения с 3 – неизвестными, принимают за основные X4, X5, X6 – переменных.

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

Вводим добавочные неотрицательные переменные (которые еще называют «неосновные»), и сводим систему неравенств к эквивалентной системе уравнений.



Так как в полученной системе уравнений нет отрицательных свободных членов, то базисное решение является допустимым (0; 0; 0; 60; 100; 36).

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

Х2: {60/1; 100/1; 36/1} переводим Х2 в основные переменные: из третьего уравнения, так как 36/1=36 наименьший коэффициент.




Подставим в целевую функцию =>Х2:

Рассмотрим полученную систему уравнений и целевую функцию:


Если отыскивается максимум линейной формы, и в ступени выражений нет основных переменных с положительным знаком, то критерий оптимальности выполнен и полученное базисное решение служит оптимальным (задача решена), но в примере еще есть две переменные с положительным знаком.

Переходим к новому базисному решению {0; 5; 0; 0; 20; 50}. Из не основных переменных, входящих в линейную форму (уравнения) с положительным коэффициентом выбираем ту, которой соответствует наибольший коэффициент и переводит ступени в основные.

Рассмотрим переменную Х1 {10; 10; 17}. Выразим из первого уравнения переменную Х1:



Рассмотрим полученную систему уравнений и целевую функцию:



Если отыскивается максимум линейной формы, и в ступени выражений нет основных переменных с положительным знаком, то критерий оптимальности выполнен и полученное базисное решение служит оптимальным (задача решена), но в примере еще есть одна переменная с положительным знаком (Х3).

Переходим к новому базисному решению {10; 0; 0; 0; 40; 20}. Из не основных переменных, входящих в линейную форму с положительным коэффициентом выбираем Х3, которой соответствует наибольший коэффициент (5) и переводит ступени в основные.

Рассмотрим переменную Х3 {0; 8; 20}. Выразим из второго уравнения переменную Х3:





Рассмотрим полученную систему уравнений и целевую функцию:



Отыскивается максимум линейной формы, так как в ступени выражений нет основных переменных с положительным знаком – критерий оптимальности выполнен и полученное базисное решение служит оптимальным (задача решена).

То есть при Х1=10; Х2=0; X3=8 максимальное значение функции равно 80 (Lmax=80).








































    1. Текст программы.


Program Simplex_Metod;

Uses crt;


label

POVZNAC, NACH;


var

Fo, FunctPr, B, H, Hnew, C, Cnew, CPr, Cprnew, FX :array[1..30] of real;

X, Xnew :array[1..30,1..30] of real;

BS, Bvsp,ZNAC :array[1..30] of string[3];

MIN, I1, I, J, Kx, Ky, Kit, NachKell, NachY, K_st :integer;

PriznacY, KLstr, KLst, ErrCode, Dop_X :integer;

P, P1, Mo, F0, Epsilon, Z, CHLEN :real;

VSP, S, PrOper :string;

F :text;

DPx, DPy, MinMax, Kell, SNom :integer;


Function MakeIndex (V:integer; S:char):string;

var

M,Z :string;

begin

STR (V,M);

Z:=S+M;

MakeIndex:=Z;

end;


Procedure enter;

var

BUF :string;

NEXT :boolean;

begin

clrscr;

repeat

write ('Vvedite kol-vo uravnenii: ');

readln (SNom);

if (SNom > 10) or (SNom <=0) then

begin

writeln ('Vvedite chislo ot 1 do 10: ');

readln;

end

else NEXT:=True;

until NEXT;

repeat

NEXT:=False;

write ('Kol-vo elementov: ');

readln (Kell);

if (Kell > 10) or (Kell <=0) then

begin

writeln ('Vvedite chislo ot 1 do 10: ');

readln;

end

else NEXT:=True;

until NEXT;

NachKell:=Kell;

DPx:=Kell+1;

DPy:=1;

Epsilon:=0.00001;

for I:=1 to SNom do

begin

for J:=1 to Kell do

begin

write ('Vvedite ',J,'-i element ',I,'-go uravnenij: ');

readln (Xnew [I,J]);

end;

repeat

write ('Vvedite znac: ');

readln (ZNAC [I]);

if (ZNAC [I] <> '>=') and (ZNAC [I] <> '=') and (ZNAC [I] <> '<=') then

begin

write ('Nepravilno zadan znac.');

readln;

end;

if (ZNAC [I] = '=') or (ZNAC [I] = '>=') then PriznacY:=1;

until (ZNAC [I] = '>=') or (ZNAC [I] = '=') or (ZNAC [I] = '<=');

write ('Vvedite svobodnii chlen: ');

read (B[I]);

end;

write ('Vvedite svobodnii chlen celevoi funkcii: ');

readln (CHLEN);

for J:=1 to Kell do

begin

write ('Vvedite ',J,'-i koefficient celevoi funkcii: ');

read (FX[J]);

end;

readln;

write ('Celevaj funkcij stremitsa k maksimumu (Y/N): ');

readln (BUF);

if (BUF='Y') or (PrOper='Y') then MinMax:=1

else MinMax:=2;

write ('Celochislennoe reshenie (Y/N): ');

readln (PrOper);

if (PrOper='Y')or (PrOper='Y') then PrOper:='Y'

else PrOper:='N';

end;


procedure DOP_PER;

begin

if ZNAC[I1]='=' then

begin

Kell:=Kell+1;

Bvsp[Kell]:=MakeIndex (DPy, 'Y');

DPy:=DPy+1;

Xnew[I1,Kell]:=1;

if MinMax=1 then FX [Kell]:=-1

else FX [Kell]:=1;

FunctPr[Kell]:=1;

for I:=1 to SNom do

if I<>I1 then Xnew [I,Kell]:=0;

end;

if ZNAC[I1]='>=' then

begin

Kell:=Kell+1; Bvsp[Kell]:=MakeIndex(DPx,'X');

DPx:=Dpx+1; Dop_X:=Dop_X+1;

Xnew[I1,Kell]:=-1; FX[Kell]:=0;

for I:=1 to SNom do

if I<>I1 then Xnew[I,Kell]:=0;

Kell:=Kell+1; Bvsp[Kell]:=MakeIndex(DPy,'Y');

DPy:=DPy+1;

Xnew[I1,Kell]:=1;

if MinMax=1 then FX[Kell]:=-1

else FX[Kell]:=1;

FunctPr[Kell]:=1;

for I:=1 to SNom do

if I<>I1 then Xnew[I,Kell]:=0;

end;

if ZNAC[I1]='<=' then

begin

Kell:=Kell+1; Bvsp[Kell]:=MakeIndex(DPx,'X');

DPx:=DPx+1; Dop_X:=Dop_X+1;

Xnew[I1,Kell]:=1; FX[Kell]:=0;

for I:=1 to SNom do

if I<>I1 then Xnew[I,Kell]:=0;

end;

end;


procedure SOKR;

var

P:integer;

begin

Kell:=Kell-1;

for P:=NachKell+DOP_X to Kell do

if Bvsp[P]=BS[KLstr] then

begin

for J:=P to Kell do Bvsp[J]:=Bvsp[J+1];

FunctPr[J]:=FunctPr[J+1];

FX[J]:=FX[J+1];

for I:=1 to SNom do Xnew[I,J]:=Xnew[I,J+1];

end;

end;


procedure OPER;

var

MAX, Z:real;

begin

KLstr:=1;

MAX:=H[1]-INT(H[I1]);

for I1:=2 to SNom do

if (H[I1]-int(H[I1]))>=MAX then

begin

MAX:=H[I1];

KLstr:=I1;

end;

SNom:=SNom+1;

Hnew[SNom]:=H[KLstr]-INT(H[KLstr]);

for I1:=1 to Kell do

begin

Z:=INT(X[KLstr,I1]);

if X[KLstr,I1]<0>

Xnew[SNom,I1]:=X[KLstr,I1]-Z;

end;

ZNAC[SNom]:='>=';

end;


begin

clrscr;

Kit:=0;

Dop_X:=0;

Kx:=1;

Ky:=3;

enter;

for J:=1 to Kell do Bvsp[J]:=MakeIndex(J,'X');

for I1:=1 to SNom do DOP_PER;

MIN:=0;

if (MinMax=1) and (PriznacY=1) then

begin

MIN:=MinMax;

MinMax:=2;

for J:=1 to Kell do FX[J]:=-FX[J];

end;

for I1:=NachKell+1 to Kell do

for J:=I1+1 to Kell do

if Bvsp[J]

begin

VSP:=Bvsp[J]; Bvsp[J]:=Bvsp[I1]; Bvsp[I1]:=VSP;

P:=FX[J]; FX[J]:=FX[I1]; FX[I1]:=P;

P:= FunctPr[J]; FunctPr[J]:=FunctPr[I1]; FunctPr[I1]:=P;

for I:=1 to SNom do

begin

P:=Xnew[I,I1];

Xnew[I,I1]:=Xnew[I,J];

Xnew[I,J]:=P;

end;

end;

Kit:=1;

clrscr;

for I:=1 to SNom do

begin

Hnew[I]:=B[I];

for J:=NachKell+1 to Kell do

if Xnew[I,J]=1 then

begin

BS[I]:=Bvsp[J];

Cnew[I]:=FX[J];

CPrnew[I]:=FunctPr[J];

end;

end;

NACH:;

repeat

PriznacY:=0;

for I:=1 to SNom do

begin

if INT(10000*Hnew[I])=0 then H[I]:=+0

else H[I]:=Hnew[I];

C[I]:=Cnew[I];

CPr[I]:=CPrnew[I];

if BS[I][1]='y' then PriznacY:=1;

for J:=1 to Kell do

if INT(10000*Xnew[I,J])=0 then X[I,J]:=+0

else X[I,J]:=Xnew[I,J];

end;


for J:=1 to Kell do Fo[J]:=0;

F0:=0;

for J:=1 to Kell do Fo[J]:=0;

for I1:=1 to SNom do

begin

if PriznacY=1 then

if BS[I1][1]='Y' then

begin

F0:=F0+H[I1];

for J:=1 to Kell do Fo[J]:=Fo[J]+X[I1,J];

end;

if PriznacY=0 then

begin

F0:=F0+H[I1]*C[I1];

for J:=1 to Kell do Fo[J]:=Fo[J]+C[I1]*X[I1,J];

end;

for J:=1 to Kell do

if Bvsp[J][1]='Y' then Fo[J]:=+0

else

if ABS(Fo[J])

end;

for J:=1 to Kell do

if PriznacY<>1 then Fo[J]:=Fo[J]-FX[J];

P:=0;

for J:=1 to Kell do

if MinMax=1 then

if Fo[J]<-Epsilon then

begin

P:=1;

continue;

end

else

else

if Fo[J]>Epsilon then

begin

P:=1;

continue;

end;

if P<>1 then

begin

writeln('B ', Kit,'=i iteracii bilo polucheno optimalnoe reshenie');

for I1:=1 to SNom do

if BS[I1][1]='Y' then

begin

writeln('No t.k. iz bazisa ne vivedeni vse Y, to ');

writeln('mogno sdelat vivod, chto RESHENII NET');

exit;

end;

for I:=1 to SNom do

begin

Z:=round(H[I]);

if ABS(Z-H[I])

for J:=1 to Kell do

begin

if X[I,J]<0>

if ABS (Z-X[I,J])

end;

end;

P1:=0;

for I:=1 to SNom do

begin

if INT(10000*FRAC(H[I]))<>0 then

begin

P1:=1;

continue;

end;

for J:=1 to Kell do

if BS[I]=Bvsp[J] then

for I1:=1 to SNom do

if ABS (FRAC(X[I1,J]))>=Epsilon then

begin

P:=1;

continue;

end;

end;

if (PrOper='Y') and (P1=1) then

begin

oper;

NachKell:=Kell;

I1:=SNom; DPy:=1;

DOP_PER;

BS[SNom]:=Bvsp[Kell];

CPrnew[SNom]:=FunctPr[Kell];

Cnew[SNom]:=FX[Kell];

goto NACH;

end;

if P1=0 then writeln('Reshenie celochislennoe.');

if MIN=1 then

begin

F0:=-F0;

MinMax:=MIN;

end;

KLst:=1; Mo:=0;

for J:=1 to Kell do

if MinMax=1 then

if Fo[J]

for J:=1 to Kell do

begin

if Bvsp[J][1]<>'Y' then

if MinMax=1 then

begin

if Fo[J]<0>

if Fo[J]>=Mo then

begin

Mo:=Fo[J]; KLst:=J;

end;

end

else

begin

if Fo[J]>0 then

if Fo[J]>=Mo then

begin

Mo:=Fo[J];

KLst:=J;

end;

end;

end;

P1:=0; K_st:=0;

for J:=1 to Kell do

if ABS(Mo-Fo[J])

begin

K_st:=K_st+1;

for I:=1 to SNom do

if X[I,KLst]>0 then

begin

B[I]:=H[I]/X[I,KLst];

P:=B[I];

KLstr:=I;

end

else

begin

B[I]:=-1;

P1:=P1+1;

end;

end;

if P1=SNom*K_st then

begin

writeln('Reshenii net t.k. nevozmogno opredelit kluchevyu stroky');

exit;

end;

P1:=0;

for J:=1 to Kell do

if ABS (Mo-Fo[J])

for I:=1 to Snom do

if B[I]>=0 then

begin

if B[I]

if Bvsp[KLst]<>BS[I] then

begin

P:=B[I];

KLstr:=I;

end;

if INT(10000*B[I])=INT(10000*P) then

if (BS[I][1]='Y') and (BS[KLstr][1]='X') then

if Bvsp[KLst]<>BS[I] then

begin

P:=B[I];

KLstr:=I;

end;

end;

for I:=1 to SNom do

if Bvsp[KLst]=BS[I] then

begin

writeln('Reshenii net t.k. v bazisnom stolbce uge est ');

writeln('takaj peremennaj.');

exit;

end;

if CPr[KLstr]=1 then SOKR;

BS[KLstr]:=Bvsp[KLst];

Cnew[KLstr]:=FX[KLst];

CPrnew[KLstr]:=FunctPr[KLst];

for I:=1 to SNom do

begin

if I=KLstr then Hnew[I]:=H[I]/X[KLstr,KLst]

else Hnew[I]:=H[I]-(H[KLstr]*X[I,KLst]/X[KLstr,KLst]);

for J:=1 to Kell do

begin

if (I=KLstr) and (J=KLst) then Xnew[I,J]:=1;

if (I=KLstr) and (J<>KLst) then Xnew[I,J]:=X[I,J]/X[KLstr,KLst];

if (I<>KLstr) and (J=KLst) then Xnew[I,J]:=0;

if (I<>KLstr) and (J<>KLst) then Xnew[I,J]:=X[I,J]-(X[KLstr,J]*X[I,KLst]/X[KLstr,KLst]);

end;

end;

repeat

KLst:=0;

KLstr:=0;

Kit:=Kit+1;

until (Kit=0);

end;

end.













































Часть 3. Тестовые примеры.

Пример №1.

Целевая функция этой системы уравнений стремится в максимум, и имеет вид:

Программа выводит данные:

В 4-й итерации было получено оптимальное решение.

Результат решения:

Fmax=80

X1=10

X3=8

X6=12


Пример №2.

Целевая функция этой системы уравнений стремится в минимум, и имеет вид:

Программа выводит данные:

В 6-й итерации было получено оптимальное решение.

Результат решения:

Fmin=75

X3=10

X2=9

X5=45






















Часть 4. Заключение.

В курсовой работе проделана работа по изучению следующих вопросов:

  • Рассмотрен и дан алгоритм симплекс метода.

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

  • Инструкции пользователю не нужны, так как данная программа проста и практически не требует времени на освоение.

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

Программа имеет ограничения: количество рассмотренных уравнений и вводимых элементов уравнения не должно превышать 10.

Программа не рассчитана на неправильный ввод формата вводимых данных.






































Часть 5. Литература.

  1. Б.Я. Советов – «АСУ. Внедрение в специальность» (1989г.)

  2. Е.С. Вентцель – «Исследование операций» (1972г.)

  3. Конспекты по «АСУ»

  4. Конспекты по «Компьютерному моделированию»

  5. Г. Жимерин, В.А. Мясников – «Автоматизированные и автоматические системы уравнения» (1975г.)

  6. Б.Я. Советов – «АСУ. Внедрение в специальность» (1989г.)

  7. Е.С. Венцель – «Исследование операций» (1972г.)












































Содержание.

1. Введение…………………………………………………………………...2 стр.

2. Основная часть:

2.1 Математическое описание метода……………………………………………6 стр.

2.2 Блок-схема алгоритма………………………………………………………..10 стр.

2.3 Пример решения задачи с использованием симплекс-метода…………….11 стр.

2.4 Текст программы……………………………………………………………..14 стр.

3. Тестовые примеры……………………………………………………….23 стр.

4. Заключение……………………………………………………………….24 стр.

5. Литература………………………………………………………………..25 стр.

6. Оглавление………………………………………………………………..26 стр.






© Рефератбанк, 2002 - 2024