Проблема выполнимости линейного программирования со строгими ограничениями положительности


15

Существует система линейных ограничений . Я хочу найти строго положительный вектор который удовлетворяет этим ограничениям. Это означает, что требуется для каждого компонента из . Как я могу использовать LP-решатель, чтобы найти такой строго положительный вектор (или подтвердить, что существует)? Я не могу просто ввести другую систему ограничений , потому что в LP всегда должно быть разрешено равенство, но я могу использовать решатель LP несколько раз с изменением целевых функций. Я думаю, что я должен использовать метод слабой переменной, но я не знаю как.x > 0 x i > 0 x i x x x x i > 0Axbx>0xi>0xixИксИксИкся>0

Ответы:


15

Вы можете обойти проблему выбора небольшого ϵ>0 если будете немного амбициознее: попробуйте найти x такой, что AИксб и минимальная запись в Икс будет максимально возможной.

Yзнак равно[Иксε]рN+1
ИксрN
МаксимумY[0...0 1]Yулица[A 0]Yби0[100-1010-101-1]Y,

Это переформулировка следующей проблемы:

МаксимумεулицаAИксбиИксε1,


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

Согласовано. Хорошо сыграно, сэр.
Джефф Оксберри

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

@DavidNehme: Можно добавить ограничение чтобы получить ограниченную цель. YN+11
Арнольд Ноймайер

5

Для технико-экономического обоснования LP я бы не использовал стандартный симплекс. Стандартные простые (или двойственные) симплексные алгоритмы будут посещать только вершины допустимого набора первичных (или двойственных) задач.

Пусть допустимым набором проблемы, которую вы на самом деле хотите решить, будет , и предположим, что вместо этого вы должны были решить проблему ( F ε ):Fзнак равно{Икс:AИксб,Икс>0}Fε

минИкс0улицаAИксбИксε1,

Ближайший аппроксиматор задачи, которую вы хотите решить, это , который допускает немного слишком много точек. Проблема заключается в том, что граница положительного ортанта (т. Е. Множество B = { x : x0 , i : x i = 0 } может составлять часть границы возможного множества F 0 . Я хотел бы исключить эти пункты. Один из способов сделать это - сделать то, что предложил Арон, а именно установить ε.F0Взнак равно{Икс:Икс0,я:Иксязнак равно0}F0εдо некоторого небольшого положительного значения, а затем используйте любой стандартный алгоритм LP. Эта стратегия хороша и, вероятно, будет работать в самых разных ситуациях. Однако он потерпит неудачу, если неосуществимо. Мы знаем, что F 0F F ε для всех ε > 0 (чтобы злоупотреблять обозначениями и ссылаться на выполнимое множество в соответствующей задаче), и возможно, что даже если вы выберете небольшие положительные значения ε , решатель LP покажет что ваш LP неосуществим.FεF0FFεε>0ε

Для LP решателя, я хотел бы использовать любой алгоритм внутренней точки для грампластинок , который начинается с возможной точкой и пребыванием осуществимым, что является еще одним способом , чтобы исключить пункты в . Вам не нужно указывать возможные алгоритмы; Стандартные решатели сделают это за вас. Методы, такие как аффинное масштабирование, методы уменьшения потенциала и барьера, устанавливают вспомогательные LP, которые будут находить возможные решения, и итерации для этих алгоритмов пересекают внутреннюю область допустимой области. Вам нужно только найти одну точку в вашей выполнимой области, поэтому, пока вспомогательные проблемы, используемые решателями LP, находят выполнимую точку для вашей проблемы, и эта выполнимая точка строго положительна, у вас должно быть все в порядке. Если решение F ε не удается при малых положительных значениях εВFεεВы все еще могли бы использовать эти методы, чтобы найти строго положительную допустимую точку в пределах .F0

Однако не используйте симплекс, потому что он будет исследовать только вершины , чего вы и не хотите делать.Fε


4

Проблемы выполнимости являются немного более сложной игрой, чем общие линейные задачи, которые вы отметили. Если вы решаете приблизительно (используя представление системы уравнений и ограничений с плавающей точкой), вполне закономерно требовать , где ϵ - очень небольшое числовое значение, достаточно большое, чтобы гарантировать, что x i на самом деле живет в + , но достаточно мал, чтобы решение на границе не рассматривалось.Икся> =εεИкся+

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


2

Ответ, данный aeismail, должен быть внимательно прочитан.

Максимум(Икс1+Икс2)

улица

Икс1+Икс21

Икс1,Икс20

Он имеет решения и ( 0 , 1 ), а также другие (вырожденные). Общность вопроса подразумевает, что эти случаи также должны рассматриваться.(1,0)(0,1)

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

Хотя я не могу дать математическое доказательство того, что это работает (или четко определенную процедуру, как изменить целевую функцию). Надеюсь, это поможет :)


Однако, если у вас есть большое количество вырожденных решений, как бы вы справились с этим численно? Не вызовет ли какой-либо числовой анализатор предупреждения (или того хуже) о решении этой проблемы?
Aeismail

Нет, они не будут; они просто вернут первое найденное оптимальное решение. Способ, которым вы будете продолжать генерировать решения, - это добавить плоскости резания (или другие ограничения), которые исключают ранее рассчитанные оптимальные решения. В этом случае добавление таких плоскостей резания позволит вам вернуть дискретное приближение бесконечного множества оптимальных решений.
Джефф Оксберри

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

Я должен был бы подумать о том, как можно обнаружить вырождение путем фактического построения проблем, но обычно пользователи хотят получить оптимальное решение, поэтому наиболее важной информацией для LP является возвращение, если решение является оптимальным, выполнимым (но не оптимальным), невыполнимый или неограниченный. (На самом деле эти статусы - это то, что мог бы вернуть такой решатель, как CPLEX.) Вырождение - это, прежде всего, теоретическая проблема; единственная причина, по которой это будет обсуждаться в числовом контексте, заключается либо в разработке алгоритма, либо на практике, чтобы отметить, что вырождение обычно замедляет решение.
Джефф Оксберри
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.