Как упоминалось в MATLAB R2016, мы имеем следующую форму: A*x ≤ b
в ограничениях инструментария оптимизации. Как я могу определить что-то lkie это: A*x < b
в ограничениях?Как определить неравенственные ограничения в инструментах оптимизации MATLAB?
ответ
Полиэдр {x: A*x < b}
больше не является замкнутым, поэтому, если вам нужно найти max/min функции над этим множеством, оно может не принадлежать этому набору, но suprimum/infimum всегда существует и, например, для линейных (на самом деле , любая выпуклая) целевая функция равна таковой как max/min над {x:A*x ≤ b}
, check Weierstrass extreme value theorem. Один из вариантов - установить некоторый допуск t и оптимизировать более A*x ≤ b-t
и использовать sensitivity analysis, чтобы узнать, где находится решение t -> 0
.
Как сказал @serge_k, если у вас есть строгое ограничение неравенства, вы хотите представить его как A*x <= b - t
, чтобы заставить не менее t
разделение. Есть ситуации, когда это разумно подходит (например, опорных векторов решают и a'x +b <= -1' instead of
a'x + Ь> 0 and
a'x + б < 0'
Тем не менее, подавляющее большинство времени, строгое и не строгое неравенство действительно не имеет значения. Если ваше ограничение A*x<b
и A*x <= b
не будет выполнено, вы можете быть на земле чистой математики, а не численные вычисления: операции с плавающей запятой не являются точными!
Существует не так много правдоподобных ситуаций в реальном мире, где A*x - b = 10^-99999
замечательно, но A*x - b = 0
ошибочно 100%
Проверьте связанный вопрос: http://stackoverflow.com/questions/37364741/matlab-genetic-algorithm-optimization-returns-integer-values-higher-than-boundar. Как я могу решить эту проблему? – user2991243