У меня есть несколько замечаний, которые слишком длинны для комментариев. Вот краткое изложение.
Любой алгоритм для точного решения вашей проблемы может быть использован для точного решения линейных программ (т. Е. «Сильное линейное программирование», которое используется в решении Сариэля и в настоящее время не имеет алгоритма полиномиального времени).
Естественным продолжением является то, что приближенные решения (т. Е. «Слабое линейное программирование») могут обеспечить решение. Хотя ответ «да», похоже, что условие остановки для этой процедуры требует величин, которые, насколько мне известно, не могут быть вычислены за полиномиальное время. (т. е. алгоритм находит что-то хорошее, но подтвердить это сложно.) Мое главное предложение состоит в том, чтобы дать осмысленное определение «ϵ«оптимальное решение» для вашей проблемы, и в этом случае этот подход поддается лечению. (Эта стратегия эффективно выбрасывает крошечные грани многогранника.)
В целом, размышляя о вашем нынешнем изложении вашей проблемы, я продолжал сталкиваться с соображениями эффективности. Но есть разумная интуиция: объекты, которые мы бросаем, - вершины, грани и т. Д. - дискретны и экспоненциально многочисленны.
(1.) Предположим, у нас есть алгоритм, который точно решает вашу проблему. Обратите внимание, что любая открытая точка любого грани, содержащая предоставленную среднюю точку, будет точным решением исходной линейной программы. Так что действуйте следующим образом. Добавьте новое линейное ограничение, говорящее, что исходное значение цели должно быть равно оптимальному (которое мы теперь знаем), и установите новую цель, сказав, чтобы максимизировать первую координату решения. Повторите эту процедуру один раз для каждого измерения, каждый раз добавляя ограничение и выбирая новую координату для максимизации. Этот процесс будет уменьшать размер решения каждый раз; обязательно, когда процесс завершится, у нас будет 0-мерное аффинное множество, означающее одну точку. Таким образом, сO(d) итерации вашего алгоритма решения средней точки (и только увеличение описания проблемы на полином dкаждый раз) решается сильное линейное программирование. Это показывает, что, хотя решение Сариэля требует сильного линейного программирования, точное решение вашего вопроса не может этого избежать. ( Изменить : обратите внимание, что мое доказательство предполагает компактный многогранник (многогранник) в качестве входных данных; в противном случае он должен работать немного сложнее, чтобы найти вершины.)
(2.) Вот итерационная схема, использующая выпуклый выпуклый решатель на каждой итерации, решения которой будут сходиться к мягкому представлению о решении средней точки. Выберите положительную, но убывающую последовательность штрафных параметров{λi}∞i=1↓0; разумно, чтобы они шли вниз геометрически, т.е.λi=2−i, Теперь для каждогоiпримерно минимизировать выпуклую функцию
⟨c,x⟩−λi∑j=1mln(⟨aj,x⟩−b),
где ⟨c,x⟩ ваша первоначальная цель, и j колеблется над mисходные ограничения, теперь помещенные в цель с помощью логарифмических барьеров (обратите внимание, это стандартно). Теперь, если мы думаем о минимизирующей грани (самого большого измерения) вашего многогранника, обратите внимание, что для достаточно малогоλi и терпимость τк вашему выпуклому черному ящику, ваш приблизительный оптимум будет близок к этому лицу, однако барьеры будут отталкивать его как можно дальше от других ограничений. Сказал по-другому, какλi уменьшается, первоначальная линейная цель в конечном итоге будет доминировать над некоторыми причудливыми барьерами, которые удерживали вас от соответствующего лица, но не будут влиять на барьеры, удерживающие вас от других границ, в частности, от границ лица цели.
В идеальном мире мы садимся и аналитически определяем идеальную ценность λили хотя бы время остановки, чтобы вам не приходилось решать бесконечно много проблем. К сожалению, это кажется сложным. Одна идея, скажем, определить наименьшую ширину любой грани, имеющей размерность больше 0; это хорошо определенная проблема минимизации с положительным оптимумом, потому что существует конечное число граней (и ширина вычисляется относительно каждой). С этим мы можем установитьλдостаточно маленький, чтобы влияние барьеров было крошечным в центре каждого лица. К сожалению, может быть экспоненциально много граней, поэтому вычисление этой величины бессмысленно.
У всех условий остановки, которые я мог придумать, были подобные вычислительные трудности. (Более того, многие могут снова быть использованы, чтобы превратить это в сильный решатель линейного программирования.)
По этой причине моя рекомендация состоит в том, чтобы построить понятие ``ϵ- выберите оптимальную среднюю точку '' и решите ее, выбрав λ и ваш допуск выпуклого черного ящика τсоответственно. Я думаю, что это разумный выбор, потому что вы действительно можете не заботиться о лицах, которые имеют наибольшую ширину максимумϵ,
(Некоторые заключительные комментарии.) Кажется, что понятие «середина» имеет решающее значение; Комментарий Сашо указывает на то, что центроид (центр масс?) Является чрезвычайно сложной проблемой, тогда как найти, скажем, самый большой вписанный шар очень просто. Логарифмические барьеры, которые я предложил выше, в общем случае не будут соответствовать ни одному из этих понятий средней точки. С другой стороны, для барьеров и мяча вы можете получить нижнюю границу на расстоянии от вашего центроида до относительной границы лица; может это тебе полезнее?
Наконец, из вашего описания, я полагаю, вы имели в виду, что «целевое лицо» должно иметь как можно более высокое измерение? Это хорошо определено, однако есть также грани решения для всех возможных меньших размеров. В любом случае, подход Сариэля и вышеописанный барьерный подход будут работать с гранью самого большого измерения.