![]() |
Модераторы: PILOT |
![]() ![]() ![]() |
|
boi4 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 4.5.2011 Репутация: нет Всего: нет |
Вот полный и качественный алгоритм: (реализовывался на Delphi7 )
Собственно алгоритм: 1. Если предложена задача на максимум, то сформулировать эквивалентную задачу на минимум (умножить коэффициенты целевой функции на –1). 2. Обеспечить условие bi >= 0, при необходимости умножив для этого соответствующие уравнения системы на –1. 3. Если имеется готовое начальное базисное решение задачи, то перейти к п. 7, иначе перейти к п. 4. 4. Сформулировать вспомогательную ЗЛП (для нахождения начального базисного решения исходной задачи) следующим образом: целевая функция: xn+1 + … + xn+m i-тое уравнение системы: ai1x1 + … + ainxn + xn+i = bi 5. Решить вспомогательную ЗЛП, используя данный алгоритм, при этом положив начальным базисом (xn+1,…,xn+m). 6. Если после окончания решения вспомогательной ЗЛП в ее базисе останутся вектора An+i, где i > 0, то: 6.1. Если среди xn+i есть ненулевые, то исходная ЗЛП не имеет решения. 6.2. Если в симплекс-таблице, тем не менее, для всех таких i xij = 0, где j=1..n, то все вспомогательные вектора, вошедшие в базис, из него исключаются. Перейти к п. 7. 6.3. Если существуют ненулевые xij, то принудительно ввести в базис вектор Aj и вывести из базиса вектор Ai. Повторять п. 6.3 до тех пор, пока перестанут выполняться условия п. 6 или будут выполняться условия п. 6.2. После достижения необходимого результата перейти соответственно к п. 7 или к п. 6.2. 7. Сформировать симплекс-таблицу (если был задан начальный базис) заново или путем корректирования симплекс-таблицы вспомогательной ЗЛП (отсечь ненужные ее части). 8. Сделать преобразования симплекс-таблицы таким образом, чтобы матрица, составленная последовательно из векторов текущего базиса, была единичной. 9. Найти оценки j = (CБ, Aj) – Cj. Если среди них нет положительных, то перейти к п. 12, иначе выбрать среди них максимальную положительную k = max j и вывести из базиса соответствующий ей вектор Ak. 10. Положить I-1 = B (множество индексов векторов, входящих в текущий базис). Cтроить In+1 = { i In| для xik> 0 min xi,n/xik – одинаково для всех i }, пока очередное In+1 не будет состоять из одного элемента. Вектор с данным индексом необходимо вывести из базиса. Другой вариант: I0 пусто. В этом случае решение ЗЛП: целевая функция не ограничена (бесконечно убывает). 11. Изменить базис (вывести и ввести вектора, которые были определены для этого ранее). Перейти к п. 8. 12. Окончательное оптимальное решение формируется следующим образом: неизвестные, соответствующие не вошедшим в окончательный базис векторам, полагаются равными 0, а неизвестные, соответствующие векторам, вошедшим в базис, берутся из столбца A0 симплекс-таблицы (в этом столбце они распогалаются в том же порядке, в котором в таблице следуют базисные вектора). Нужна помощь в реализации его на Qt. При необходимости могу предоставить исходники на Delphi. Моя почта [email protected] |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
1.
Qt - не язык программирования, а набор библиотек, в данном случае - совершенно не нужных. 2. Цена вопроса ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Объявления о найме специалистов" | |
|
В случае невыполнения данных правил Ваши сообщения могут быть удалены без предупреждения. Полный спискок правил. С уважением, BearBeer. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Объявления о найме специалистов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |