Министерство образования РФ
Государственное образовательное учреждение
средне профессионального образования
Петровский колледж (Филиал г. Мурманск)
Отделение обучающих и информационных технологий.
Курсовая работа.
По дисциплине: «Компьютерное моделирование»
На тему: «Симплекс метод»
Выполнила: Тимонина З. В.
Специальность: 2203 ПО ВТ и АС
Группа: 323
Преподаватель: Сергеев А. В.
Оценка:______________________
Подпись преподавателя:________
Мурманск
2003
Часть 1. Введение
Предпосылки возникновения АСУ. Понятие АСУ.
АСУ – это комплекс технических и программных средств, обеспечивающих тесные взаимодействия организационной структуры (отдельных людей, коллективов) и управление объектом в производственной, научной или общественных сферах.
Первые АСУ имели недостатки, так как они копировали ручной труд, который применялся до внедрения АСУ. В связи с этим внедрение первых АСУ имели неудачи, так как они копировали тот беспорядок, который имел место в управлении производством до их внедрения и способствовали дезорганизации производства. Тем ни менее для тех функциональных задач, где имелись достаточно формализованные алгоритмы (задачи финансового учета, материально технического снабжения и другое) внедрение АСУ позволило значительно улучшить отчетность, контроль прохождения документации, своевременность принятия решения, что во многих случаях дало значительный экономический эффект.
Качество управления непосредственно связано с применением математических методов, внедрение которых без ЭВМ невозможно из-за больших вычислительных работ.
К математическим методам в первую очередь относятся – оптимизационные методы, статистическая обработка информации, математическое моделирование и т.д. Еще одним недостатком в первой АСУ было использование вычислительной техники более мощной, чем это требовалось для решения задач. Развитие автоматизированных систем показало, что необходимо:
Перед внедрение АСУ провести тщательную ревизию организационной структуры управления производством, приспособить эту структуру под автоматизированную структуру.
Использовать вычислительные средства, которые не значительно превосходят потребности решаемых функциональных задач по вычислительным ресурсам.
Охватить в комплексе объект управления, т.е. попытка объединить в одной системе управления технологическим процессом и организационной экономической деятельности предприятия.
Увеличить долю решаемых организационных задач от которых можно ожидать, наибольший экономический эффект.
Опыт разработки и внедрения АСУП показал высокую экономическую эффективность (хорошая организация труда и производства, повышения точности планирования, уменьшение доли ручного труда). Для разработки АСУ необходимо хорошо знать экономико – математические методы управления, отлично представлять организацию производства знать основы теории автоматизированного производства, информатику, уметь проектировать систему на базе СУБД.
Классификация АСУ.
АСУ различают по результатам деятельности и по выполняемым функциям.
По функциям:
Административно – организационные (АСУП (предприятий), ОАСУП (отраслевые)).
АСУТП (технологическими процессами). К ним относятся гибкие производственные системы, системы контроля качества продукции, системы управления станками с ЧПУ (числовые программные управления).
Интегрированные системы объединяющие перечисленные АСУ в различных комбинациях.
Первые АСУТП были введены в 70-х годах. Наибольшее количество таких систем было внедрено в химическую и нефтехимическую промышленность, в черную и цветную металлургию, в энергетику. Созданные АСУТП были по своему характеру автоматизированными системами, в них значительная роль отводилась оператору, который по информации предоставленной ЭВМ принимала решение либо сам, либо выполнял решение подсказанное ЭВМ.
Повсеместное внедрение АСУТП в комплексе с промышленной робототехникой система позволяет перейти к цехам и предприятиям автоматам, которые будут обладать наивысшей экономической эффективностью и производительностью. Создание интегрированных АСУ сочетающих в себе АСУТП и АСУП является сложной задачей. Эта стыковка возможна на информационном уровне, так как решение принимаемое руководителем с помощью АСУП выдается в форме документа, а раньше выработанная в АСУТП поступает в виде электронного сигнала на исполнительный механизм. Внедрение АСУТП позволяет автоматизировать управление наиболее крупными технологическими комплексами, а внедрение АСУП автоматизировать процессы планирования производства, разработки оперативных управляющих воздействий.
АСУ представляет собой совокупность коллектива людей и комплекса технических средств, т.е. является человеко-машинной системой, которая базируется на экономико-математических методах управления, использования средств вычислительной техники и совместно с математическим, программным, информационным и техническим обеспечениями реализует заданную функцию управления. АСУ относится к классу больших систем, так как объединяет в своей структуре большое количество элементов. Она является так же сложной системой, так как связи между отдельными элементами часто остаются не ясными и требуется постоянное их совершенствование и дальнейшее развитие системы может осуществляться на трех модельных уровнях:
Концептуальный – дает качественное описание системы (что может?)
Логический – позволяет на основе математического аппарата формализовать, логически определить место отдельных элементов в системы в пространстве и оценить их взаимодействие во времени.
Физический – позволяет судить о возможностях реализации системы на основе различных аппаратно-программных средств.
Функциональные задачи и подсистемы АСУ.
Современная АСУ является многоуровневой. Анализ и синтез такой системы может быть выполнен на основе теории многоуровневых иерархических систем. В соответствии с этой теорией систему можно разделить на подсистемы и далее на задачи, что позволяет разделить общие цели управления на отдельные подцели, реализуемые подсистемами. Метод иерархической декомпозиции является основным методом исследования сложных систем управления. Разделение системы по функциональному признаку приводит к выделению функциональных частей АСУ, которые получили название функциональных подсистем. Функциональные подсистемы делятся на функциональные задачи. Такая последовательность действий является естественной при анализе создаваемой АСУ. Однако на этапе синтеза создание и внедрение исходной является некоторая организационно-экономическая модель, включающая в себя функции и уровни управления, разделение этих функций по производственным подразделениям с внедрением отдельных задач управления. На этом этапе необходимо определить множество функций управления, которые подлежат автоматизации, оценить целесообразные уровни управления и если необходимо выделить стадии управления производством, которые охватываются автоматизацией. При создании АСУ важно экономно расходовать вычислительный ресурс, а поэтому данные задачи являются оптимизационными. В качестве ограничений выступает вычислительный ресурс. Для упорядочения решаемых задач необходимо их совместить с соответствующими уровнями управления, которые являются достаточно определенными для каждого типа предприятия. Основными уровнями управления является перспективное планирование, управление подготовкой производства, технико-экономическое планирование и общезаводское производственное планирование и управление (оперативное управление). На уровне перспективного планирования можно выделить ряд функций управления, которые подлежат автоматизации. Одной из основных функций на этом уровне выступает прогнозирование. Применительно к отраслевой АСУ прогнозирование может касаться целого ряда экономических показателей, связанных с развитием отрасли. Для АСУП прогнозирование относиться к выпускаемой продукции, к потребности предприятия в каких-то видах сырья, изделий. Решение этих задач в основном базируется на оценке экономического процесса, ранее имевшего место в деятельности предприятия и экстраполяции этого опыта на будущие годы. Вводится ряд функций отображающих зависимость требуемых экономических показателей по годам, т. е. Оценивает тенденцию развития на основе принятых математических закономерностей.
Методы прогнозирования опираются на стационарность экономического процесса, что не всегда имеет место, поэтому чаще используют методы экспертных оценок. Использование автоматизированного управления для решения подобных функциональных задач позволяет осуществить оптимизационную постановку задач. В качестве критерия принимаются полные приведенные затраты и минимизируются функциональные затраты. В результате получают рекомендации по функциональному развитию отдельных отраслей промышленности, оптимальному размещению объектов производства, с учетом имеющихся людских и энергетических ресурсов. В целом минимизируются суммарные, капитальные эксплутационные затраты на производство (затраты на транспортировку и сырье). На уровне предприятия основной задачей является максимизация прибыли предприятия или обеспечение производства продукции в заданном объеме и ассортименте, при минимуме экономических затрат. Решается ряд частных функциональных задач по определению номенклатуры выпускаемой продукции, строкам ввода отдельных мощностей.
Обеспечивающие подсистемы АСУ.
Выделяемая в соответствии со структурным подходом обеспечивающая часть АСУ включает в себя: организационное, информационное, математическое, алгоритмическое, программное, техническое, лингвистическое, правовое и агрономическое обеспечения. Эти обеспечения создаются на стадии микропроектирования, т. е. Внутреннего проектирования системы или определяются характеры работ при создании АСУ. А так же взаимосвязь отдельных подсистем АСУ при функционировании.
В настоящее время линейное программирование является одним из наиболее употребительных аппаратов математической теории оптимального принятия решений, в том числе и в финансовой математике. Для решения задач линейного программирования разработано сложное программное обеспечение, дающее возможность эффективно и надежно решать практические задачи больших объемов. Эти программы и системы снабжены развитыми системами подготовки исходных данных, средствами их анализа и представления полученных результатов. В развитие и совершенствование этих систем вложен труд и талант многих математиков, аккумулирован опыт решения тысяч задач. Владение аппаратом линейного программирования необходимо каждому специалисту в области прикладной математики.
Линейное программирование представляет собой наиболее часто используемый метод оптимизации. К числу задач линейного программирования можно отнести задачи:
рационального использования сырья и материалов; задачи оптимального раскроя;
оптимизации производственной программы предприятий;
оптимального размещения и концентрации производства;
составления оптимального плана перевозок, работы транспорта;
управления производственными запасами;
и многие другие, принадлежащие сфере оптимального планирования.
Для большого количества практически интересных задач целевая функция выражается линейно – через характеристики плана, причем допустимые значения параметров подчинены линейным равенствам или неравенствам. Нахождение при данных условиях абсолютного экстремума целевой функции носит название линейного программирования.
Первым исследованием по линейному программированию является работа Л. В. Кантфовича “Математические методы организации и планирования производства”, опубликованная в 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 |
|
|
|
|
|
Алгоритм преобразования коэффициентов стандартной таблицы.
Разрешающий элемент заменяется на обратную ему величину.
Все остальные элементы разрешающей строки делятся на разрешающий элемент.
Все элементы разрешающего столбца, кроме самого разрешающего элемента делятся на разрешающий элемент и меняют знак.
Каждый из остальных элементов подвергаются следующему преобразованию: к нему прибавляются произведение элементов, стоявшего в прежней разрешающей строке на том же месте по порядку (т. е. в том же столбце), на элемент стоящий в новом разрешающем столбце на соответствующем месте (т. е. в той же строке, что и рассчитываемый элемент).
При всей легкости данных вычислений более удобно все промежуточные расчеты писать в той же таблице.
Алгоритм преобразования xj ? yi стандартной таблицы сводится к следующим операциям:
Выделить в таблице разрешающий элемент. Вычислить ее обратную величину и записать в нижней части этой же ячейки, например в правом нижнем углу.
Все элементы разрешающей строки, кроме самого разрешающего элемента умножить на , результат записать в нижней части той же ячейки.
Все элементы разрешающего столбца, кроме всего разрешающего элемента умножить на на – a, записать в нижней части той же ячейки.
Подчеркнуть в разрешающей строке все верхние числа (прежние элементы) за исключением самого разрешающего элемента. А в разрешающем столбце все новые элементы, кроме самого разрешающего элемента.
Для каждого из элементов не принадлежащих ни к разрешающей строке, ни к разрешающему столбцу в нижней часть ячейки записать произведение выделенных чисел, стоящих в той же строке и в том же столбце, что и данный элемент.
Переписать таблицу, заменив:
xj на yi;
элемент разрешающей строки и столбца, числами, стоящими в нижней части тех же ячеек;
каждый из остальных элементов суммой чисел стоящей в верхней и нижней части той же ячейки.
В любой задаче ОЗЛП существует так же линейная функция L, которая в общем случае выглядит следующим образом:
Для решения ее табличным способом ее так же можно привести к стандартному виду.
Таким образом, в стандартной таблице появляется еще одна строка L. С ней производятся только такие же вычисления как со всеми остальными ячейками таблицы, строка L никогда не может быть разрешающей строкой. С помощью табличного алгоритма обмена переменных в управлениях ОЗЛП можно решить любую задачу линейного программирования или убедиться, что она не имеет решения.
Нахождение решения каждой задачи распадается на два этапа:
нахождение опорного плана;
отыскание оптимального решения.
В процессе первого этапа выясняется, имеет ли данная задача допустимые не отрицательные решения, если да, то находиться опорное решение, для которого все остальные переменные равны 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 Блок – схема алгоритма.
Пример решения задачи с использованием симплекс-метода.
Даны данные: из которых составляется система уравнений вида:
Целевая функция этой системы уравнений стремится в максимум, и имеет вид:
Базисное решение является допустимым, так как в правой части неравенств не содержатся отрицательные значения.
В данной системе 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).
Текст программы.
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. Литература.
Б.Я.
Советов – «АСУ. Внедрение в специальность»
(1989г.)
Е.С.
Вентцель – «Исследование операций»
(1972г.)
Конспекты
по «АСУ»
Конспекты
по «Компьютерному моделированию»
Г.
Жимерин, В.А. Мясников – «Автоматизированные
и автоматические системы уравнения»
(1975г.)
Б.Я.
Советов – «АСУ. Внедрение в специальность»
(1989г.)
Е.С.
Венцель – «Исследование операций»
(1972г.)
Содержание.
1.
Введение…………………………………………………………………...2
стр.
2.
Основная часть:
2.1
Математическое описание
метода……………………………………………6 стр.
2.2
Блок-схема алгоритма………………………………………………………..10
стр.
2.3
Пример решения задачи с использованием
симплекс-метода…………….11 стр.
2.4
Текст программы……………………………………………………………..14
стр.
3.
Тестовые примеры……………………………………………………….23
стр.
4.
Заключение……………………………………………………………….24
стр.
5.
Литература………………………………………………………………..25
стр.
6.
Оглавление………………………………………………………………..26
стр.