В результате долгих стараний, всё таки, удалось реализовать алгоритм для решения ЗЛП с двойными ограничениями следующего вида:
Составлен он по методичке
http://rain.ifmo.ru/cat/data/theory/unsorted/simplex-method-2003/article.pdf любезно предоставленной
Someone.
Программа работает, пока никаких ошибок не обнаружено. Но сразу же возникает один серьёзный вопрос, как тут быть с зацикливанием?
В этом алгоритме рассматривается 3 критерия выбора выводимой из плана переменной: 1 - как в обычном симплекс алгоритме, минимальное положительное отношение столбца свободных членов к разрешающему столбцу
, 2 - минимальное положительные отношения столбца свободных членов, за вычетом соответствующих верхних ограничений к разрешающему столбцу
, 3 - верхняя граница вводимого в план элемента
(все обозначения как в методичке).
Но неопределённостей здесь намного больше чем в простом симплекс-алгоритме.
Вариант первый - классический, имеется несколько строк с одинаковыми
, тут очевидно, при выборе первого попавшегося отрицательного элемента строки функционала, можно использовать правило Бленда, т.е. выбирать строку с минимальным номером, и это предотвратит зацикливание.
Вариант 2 - есть несколько строк с равными
. Можно ли и в этом случае применять правило Бленда?
Вариант 3 -
, и возможно есть несколько таких строк.
Вариант 4 -
или
равны
. Тут тоже возникают альтернативные варианты действий ...
В самой методичке сказано, что при равенстве
,
,
выбор может быть произволен, и предпочтительно выбирать
, так как при этом меньше вычислений. Но ничего не сказано о возможном зацикливании. Ведь насколько я понимаю, все эти альтернативные варианты приведут к одинаковому изменению функционала, и следовательно, зацикливание возможно.
Можно ли все альтернативные строки, независимо от вида критерия расположить по порядку и выбирать из них строку с наименьшим номером, как это делается в правиле Бленда?
Если можно, то как тогда быть с
, ведь для критерия
план не меняется а значение вводимой переменной переводится к её противоположной границе. Тут вообще нет номера разрешающей строки. Может в этом случае принять что этот номер равен нулю?
Но это всё мои догадки. Хотелось бы услышать какие то обоснованные предложения по гарантированному предотвращению зацикливания данного алгоритма