У меня есть выпуклая форма, определяемая набором вершин. У меня также есть большой набор точек, и я бы хотел проверить, какие они содержатся в выпуклой форме. В настоящее время я просто использую решатель линейного программирования с открытым исходным кодом для каждой точки независимо с постоянной целевой функцией. Дополнительную информацию см. В главе 11.4 от http://www.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf.Запросы на объемную защиту
Однако это довольно медленно даже в 100 измерениях. Есть ли способ использовать тот факт, что все точки запроса известны заранее, чтобы ускорить процесс?
Редактировать Исправлена опечатка.
Линейный программный решатель? Зачем? Разве вы не можете просто проверить неравенство один за другим? Это должно быть намного быстрее, чем решить проблему оптимизации, а затем отбросить большую часть ответа ... –
Я бы также предложил использовать какое-то пространственное подразделение (дерево kd?). Вы существенно разбиваете пространство на параллелепипедальные куски, каждый из которых (1) полностью находится внутри вашей формы, (2) полностью снаружи или (3) частично внутри и пересекает * небольшое число * гиперплоскостей, которые определяют вашу форму. Теперь вам нужно только проверить небольшое количество одномерных ограничений, чтобы определить, в какой части вашей точки находится (тогда только если это кусок типа 3), небольшое количество N-мерных ограничений, чтобы проверить, находится ли оно внутри вашей фигуры. –
@ н.м. Была опечатка. У меня есть вершины, а не неравенства. – oxbowlake