Автоматизация решения экстремальных задач линейного программирования. Симплекс-метод и Метод Гомори
Программа, реализующая симплекс-метод и метод Гомори для решения экстремальных задач линейного программирования:
скачать [файлообменник Deposit Files]
скачать [файлообменник LetitBit]
Исходный код на Delphi
скачать [файлообменник Deposit Files]
скачать [файлообменник LetitBit]
Методы линейного программирования оказались весьма эффективными для решения задач из различных областей человеческой деятельности. Исключительно важное значение приобретает использование таких методов и средств при решении задач оптимального проектирования, в которых необходимо учитывать огромное количество ограничивающих факторов, что связано с большим объемом вычислений. В связи с этим студентам технических вузов, обучающихся по направлению «Информатика и вычислительная техника», необходимо как знание возможностей применения математических методов и ЭВМ, так и понимание тех проблем, которые возникают при их использовании.
Разработанный программный комплекс позволяет решать следующие задачи:
• порождение начального базисного допустимого решения;
• поиск оптимального плана и экстремума нецелочисленной задачи линейного программирования;
• поиск оптимального плана и экстремума полностью целочисленной задачи линейного программирования;
• поиск оптимального плана и экстремума частично целочисленной задачи линейного программирования;
В ряде практических задач на управляемые переменные кроме ограничений накладываются дополнительные условия, такие как требования целочисленности (например, количество выпускаемой продукции при наиболее эффективном использовании ограниченных ресурсов в экономических задачах оптимизации) или задание интервала возможных значений (оптимизация распределения массивов по уровням памяти ЭВМ). Причем довольно часто это касается не всех переменных, а только некоторых из них.
Условие целочисленности решения может быть обеспечено реализацией метода Гомори. В этом случае поиск решения задачи целочисленного программирования начинается с определения симплексным методом оптимального плана без учета целочисленности переменных. После того как этот план найден, просматривают его компоненты. Если среди компонент нет дробных чисел, то найденный план является оптимальным планом решения задачи целочисленного программирования. В противном случае к системе уравнений добавляется неравенство с преобразованными переменными, взятыми из последней симплекс-таблицы. Эти действия повторяются до тех пор, пока не будет найден оптимальный план задачи, либо установлена ее неразрешимость.
Решение частично целочисленных задач линейного программирования находится последовательным решением задач, каждая из которых получается из предыдущей с помощью введения дополнительного ограничения. Дополнительные ограничения принято называть правильным отсечением, которое можно интерпретировать как гиперплоскость, которая как бы «отсекает» от области допустимых решений нецелочисленное оптимальное решение.
При проектировании был использован принцип модульного программирования, что упрощает отладку программы и позволяет расширять ее функциональные возможности. Алгоритмическая часть программы имеет модульно-иерархическую структуру, в которой каждый модуль является самостоятельной частью программы и взаимодействует с другими модулями в порядке, установленном разработчиками. Методы решения задач линейной оптимизации, реализованные в программно-алгоритмическом комплексе, основаны на построении симплекс-теблиц, поэтому в структуре программы все алгоритмические модули связаны с модулем, организующим решение задачи линейного программирования симплекс-методом. Входными данными для этого модуля является целевая функция с указанием типа экстремума (максимум или минимум) и ограничения, накладываемые на управляемые переменные. Ограничения задаются в виде уравнений или неравенств. Далее управление передается второму модулю, где формируется начальное допустимое базисное решение. Второй, третий и четвертый модули на каждой итерации реализуемого метода вызывают модуль построения симплекс-таблиц, которому они передают текущий результат. Связь между модулями организована через внешние структуры данных. Так, например, для задания линейного критерия оптимальности, вектора управляемых переменных, вектора ограничений и матрицы ограничений используются одномерные и двумерные статические массивы, а симплекс-таблица в памяти ЭВМ представлена как двумерный динамический массив, способный изменять свою размерность, удаляя или добавляя строки и столбцы к симплекс-таблице.
Рассмотрим особенность функционирования программного комплекса. Для организации диалога с пользователем применяется стандартный графический интерфейс Windows, построенный на основе библиотеки визуальных компонентов VCL (Visual Component Library), поставляемой вместе с пакетом Delphi. При разработке программы использовалась MDI-технология (Multiple Document Interface – многодокументный пользовательский интерфейс), что позволяет пользователю работать сразу с несколькими задачами линейного программирования. В программе реализована активная форма диалога, позволяющая выбирать режимы: расчет, просмотр и редактирование информации, получение справки и т.д. Главное меню содержит следующие пункты: файл, правка, вид, вычисления, окно, справка. Все пункты главного меню вызывают подменю. В начале работы программы некоторые пункты запрещены и становятся разрешенными только по мере выбора других пунктов меню (например, меню «Правка», «Вычисления» и т. д.).
В программе предусмотрена возможность настройки параметров задачи: максимизация или минимизация; выбор опции, позволяющей просматривать промежуточные результаты итераций; ограничения количества итераций; установка размерности задачи т.п.


14 Ноя 2008 в 9:39
Прошу сообщать здесь, если какая-нибудь из ссылок окажется нерабочей.
21 Ноя 2008 в 21:26
Ссылка на исходный код на Letitbit не действительна - перезалейте пожалуйста.
22 Ноя 2008 в 13:41
перезалил
26 Ноя 2008 в 1:07
Попячтесь Оо
Спасибо за программу) если скачаем конечно)))
26 Ноя 2008 в 1:21
Не… пашет, но криво))) скачал исключительно ради интереса))
Задумка классная, не хватает детализации приложения… т.е было бы супер сделать вывод промежуточных таблиц… указывать, был ли введён искусственный вектор…
а, ещё момент… при вводе ограничений, если случайно ошибся в формате ввода (ввёл “8.5″ вместо “8,5″) в программе постоянно вылетает ошибка, вплоть до перезапуска приложения.
В общем удачи вам, спасибо, порадовали
26 Ноя 2008 в 9:53
Это больше студентческая работа, поэтому проверку точек и запятых можно списать на это.
10 Дек 2008 в 21:49
а где можно взять текст программы, а не просто откампелированный фаил?
10 Дек 2008 в 22:26
Замечательная реализация. Хотелось бы еще чтобы промежуточные таблицы выводила.
11 Дек 2008 в 8:50
Аноним, исходный код прогрммы тоже можно скачать (вторая ссылка)
15 Дек 2008 в 15:31
Что значит “invalid floating point operation”?
15 Дек 2008 в 15:42
Когда Вы вводите дробные числа поставьте запятую вместо точки или точку вместо запятой в зависимости от Ваших настроек.
15 Дек 2008 в 16:34
Пробовала и так и так, потом даже убрала десятичную часть вообще. Теперь указатель мыши превращается в часики, ждёт, а потом закрывает программу. Может быть, дело в том, что у меня слишком много переменных(15) и ограничений(11)? Существует ли какой-то предел для этой программы?
15 Дек 2008 в 22:53
Ограничений вроде бы не было. Дайте ваш пример, я посмотрю что там происходит.
22 Дек 2008 в 9:58
При ешении целочисленной задачи - флоатинг еррор =(
22 Дек 2008 в 14:10
запятая вместо точки
22 Дек 2008 в 14:22
Там все элементы целые =) Если б были дробные - то другой вопрос
22 Дек 2008 в 16:21
Давайте Ваш пример, я посмотрю
22 Дек 2008 в 18:08
x1-20×2-5×4+x5+3×6 -> min
16×2+3×3-4×4-3×6=12
x1+12×2+2×4+x5-x6=37
x1+28×2+3×3-2×4+x5+x6=49
x2,x3,x4 - целые
22 Дек 2008 в 23:11
Эта задача не имеет целочисленного решения. Я в Excele еще проверил на всякий случай - тоже самое.
23 Дек 2008 в 16:33
Имеет - я нашел его по методу графиков. -89 =)
23 Дек 2008 в 17:36
min: 300×1+100×2+200×3+2s1+10s2+5s3
s1+s2+s3>=2000
s1>=500
s2>=500
s3>=500
s1<=600+600 x1
s2<=800+800 x2
s3<=1200+1200 x3
Помогите найти решение.
23 Дек 2008 в 21:06
nixi, а какой ответ получился?
23 Дек 2008 в 21:07
Maestr, а в программе не получается?
23 Дек 2008 в 21:13
l(x)=-89 x*=(1,0,28,18,0,0,0,0)
23 Дек 2008 в 23:03
nixi, согласен
23 Дек 2008 в 23:04
Будет время, загляну в исходник под отладкой, посмотрю что там происходит.
12 Янв 2009 в 17:08
Я такого “шедевра” еще не видел… Случайно здесь оказался… Обычно комментов не пишу, но тут….
Автор это программа - порт проги с бейсика? Я угадал?
Если нет, то пинцет абсолютный!
13 Янв 2009 в 17:03
Нет, это не порт.
29 Янв 2009 в 22:56
Попрошайки блин
29 Янв 2009 в 22:58
Спалились лодыри. Всем недопуск поставлю!!! Будете у меня под столом отрабатывать
23 Март 2009 в 23:06
[...] лидером — харьковским «Локомотивом». ——- Здесь симплекс метод, все для курсовых и дипломных работ по [...]
24 Март 2009 в 12:43
[...] фигурист, пока есть силы. ——— Представляется симплекс метод, все для курсовых и дипломных работ по [...]
24 Март 2009 в 17:16
[...] то, что Вы хотели знать о своем кумире. Предложенный симплекс метод предназначен для решения экстремальных задач [...]
24 Март 2009 в 21:47
[...] к курсовым и дипломным. Симплекс метод. [...]
25 Март 2009 в 11:39
[...] Уникальная схема метро 3d! Посмотрите это интересно! Новые разработки в системе симплекс метод! [...]
26 Март 2009 в 12:06
[...] - заказ и аренда лимузинов. Обязательно посмотрите - симплекс метод! Может Вам пригодится - [...]
27 Март 2009 в 17:23
[...] Специальное предложение - симплекс метод для вас. Это достойно вашего внимания - монтаж [...]
27 Март 2009 в 17:32
[...] - бесплатные рефераты по истории. Специально для вас - симплекс метод. Хорошее предложение - Order Cialis Soft in a medical [...]
27 Март 2009 в 18:36
[...] ешения экстремальных задач - симплекс метод и метод гомори. [...]
28 Март 2009 в 23:48
[...] Гомори и симплекс метод - решения экстремальных задач линейного [...]
29 Март 2009 в 22:10
[...] Гомори и симплекс метод -решение экстремальных задач линейного [...]
30 Март 2009 в 17:48
[...] симплекс метод для вас [...]
31 Март 2009 в 18:02
[...] симплекс метод смотри [...]
05 Май 2009 в 11:20
-0,7х1+2,1х2<=4.3
2.2×1+0.6×2=0.7
1.7×1+0.9>=3.1
05 Май 2009 в 18:16
решить?
13 Май 2009 в 11:36
Замечательная программа, но почему я ставлю галочку “Целочисленное решение”, а мне все равно считает дробное?
13 Май 2009 в 12:37
а какой вы пример решаете, покажите тут, я проверю.
13 Май 2009 в 13:28
-6×1+7×2 max
2×1+3×2>=13
8×1-7×2<=16
-5×1+3×2<=8
-x1+4×2<=26
13 Май 2009 в 16:12
Там почему-то при решении этого примера на 12-ой итерации деление на ноль выскакивает. Почему - еще не понял, нужно код смотреть, вспоминать. Вам срочно?
13 Май 2009 в 17:38
“До пятницы я абсолютно свободен”(с), так что не срочно)))
А в решении 12 итераций?
15 Май 2009 в 16:39
Спасибо за программу! Очень помогла =)
16 Май 2009 в 12:37
Здравствуйте.
Тоже ошибка выскакивает
max(x1+3×2)
1)-x1+x2<=2
2)x1-x2<=1
3)x1+x2=2
16 Май 2009 в 12:38
4)x1+x2>=2
30 Май 2009 в 20:54
спасибо прога классная!!!!
07 Июнь 2009 в 5:19
Честно Вашу программу не смотрел, но хотел бы обратиться к автору, я пишу курсач как раз на такую же тему, проверил задачи которые тут у людей не решались, программа решила (те что на максимизацию).Нет ли у Вас правильных ответов (случайно), если есть, напишите плиз тут.
08 Июнь 2009 в 9:00
Проверить в экселе можно.
08 Июнь 2009 в 22:29
Оке, спасибо, так и сделал. Всё больше не буду спамить на стене.
I’m sorry ))
12 Июнь 2009 в 19:11
чё то с летитбита не лётся((
14 Июнь 2009 в 13:25
C летита работает, проверил
30 Июнь 2009 в 18:11
у меня не выводит итерации((((
как это исправить?
30 Июнь 2009 в 21:20
А там галочка есть специальная в настройках “выводить результаты итераций”. Ее поставить нужно.
04 Июль 2009 в 22:53
[...] уровень употребления и настроения трейдеров, как и симплекс метод. Центробанк ЕС пока же не изменил собственную ставку [...]
02 Окт 2009 в 9:23
ЫЫЫ
02 Окт 2009 в 9:23
эээээээээээээээээээээээээээээээээ
02 Окт 2009 в 9:24
йцукйкуйцук
04 Окт 2009 в 10:24
решаю задачу с целочисленными данными, а выдает ошибку про точку. Подскажите что делать.
04 Окт 2009 в 22:30
Поставьте запятую
01 Ноя 2009 в 9:13
А как ее можно переделать для метода ветвей и границ
01 Ноя 2009 в 9:15
Метод ветвей и границ уже тут есть http://plagiata.net.ru/?p=100
01 Ноя 2009 в 17:50
Мне бы задачу целочисленного программирования методом ветвей и границ
04 Ноя 2009 в 11:14
Решаю задачу ЦЛП 10×1+15×2+20×3+x4=0
x4-min
В Excel все нормально выдает ответ x1=0, x2=2, x3=2 x4=4.3
ввожу в программу - виснет. Подскажите, что не так?
04 Ноя 2009 в 11:16
Решаю задачу ЦЛП 10х1+15х2+20х3+х4=0
x4-min
В Excel все нормально выдает ответ x1=0, x2=2, x3=2 x4=4.3
ввожу в программу - виснет. Подскажите что не так?
В прошлый раз, не правильно отобразилось.
08 Ноя 2009 в 20:45
Программа наверное классная, но я совершенно не понимаю, как ей пользоваться-а-а-а!!! =(( Объясните мне пожалуйста, что ввести в исходные данные!
Если у меня:
Z=2×1+1×2-3×2 -> max
2×1+1×2+1×3 >= 16
1×1+3×2+1×3 = 11
2×1+0×2-1×3 <= 18
08 Ноя 2009 в 21:09
Я разобралась, что куда вводить, но всё равно выдаёт дробное решение, а мне нужно целочисленное=((((((((((((((((
08 Ноя 2009 в 21:24
Это Симплекс-Методом. А методом Гомори вообще не решает ничего… Пишет - Invalid Floating point operation…=(((( я с ума сойду с этими матрицами=(((
17 Ноя 2009 в 12:02
Метод гомори работает проверено
правильно накладывайте ограничения!!!
все ограничения !!!
проверено на 2 задачах
только смысл Гомори если графики программа не строит
и не строит промежуточные решения
17 Ноя 2009 в 15:59
график действительно не строит, но промежуточные результаты выдает. Там просто нужно галочку поставить “выдавать результаты итераций”
29 Ноя 2009 в 14:58
Админ, можеш пожалуйста выложить Метод Гомори без симплекс метода- мне на курсач необходимо а с симплекс методом в проге я сильно палюсь.
10 Дек 2009 в 19:01
Вику поддерживаю, Гомори не работает.
Overman - ты не прав, проверив только 2 задачи, не пиши: “Метод гомори работает проверено правильно накладывайте ограничения!!! все ограничения !!!”. Хорошо, дорогой?
12 Дек 2009 в 16:19
Ребята, ну а все-таки, есть у кого что рабочее по Гомори? У меня аналогично, ошибка операции с плавающей точкой. Если что есть. пожалуйста отпишите
19 Дек 2009 в 12:13
Антон, метод Гомори работает на основе симплекс-метода, он там в программе любом случае должен быть. Так что убирать не вижу смысла.
09 Фев 2010 в 20:43
у меня с двумя ограничениями два примерчика посчитало правильно, стоит ввести больше ограничений, например 3, и ответ выдает неверный. почему, может кто знает?
10 Окт 2010 в 18:25
про точки и запятые. это проблема решается настройкой языка в панели управления. разделитель целой и дробной частей.
22 Окт 2010 в 11:25
ПОмогите решить залдачу.
. Підприємство випускає три види продукції A, B, C. Для виробництва оиниці продукції кожного виду потрібно сировина трьох видів:
тут матрица 3 на 3(а1 b1 c1;а2 b2 c2;а3 b3 c3; ) - кількість одиниць відповідно 1-го, 2-го і 3-го виду.
На складі є S1 одиниць сировини 1-го виду, S2 - 2-го і S3-3-го.
Відповідно до умов постачань необхідно принаймні зробити продукції,од. : А - QA , B - QB , С - QC . Прибуток от реалізації 1 од. продукції, руб.: А - qA , B - qB, C - qC .
Яку кількість продукції кожного виду необхідно зробити, щоб прибуток був максимальним?
мои данные:
Показник Номер варіанту
a1 3
a2 I
a3 2
b1 4
b2 2
b3 I
c1 I
c2 3
c3 2
s1 300000
s2 8000000
s3 9000000
QA 500000
QB 600000
QC 400000
qA 15
qB 20
qC 26
04 Янв 2011 в 21:04
Эта программа даёт решения, которые даже опорными планами не являются. А о Гомори вообще уже ничего не говорю. Явно где-то ошибки есть.
26 Янв 2011 в 1:00
а почему я не могу загрузить файлы?(((
23 Дек 2011 в 11:20
[...] Исходные коды на Delphi, как и саму программу, вы можете бесплатно скачать на странице http://plagiata.net.ru/?p=68. [...]