Альтернативы lsqlin MATLAB
Итак, у меня есть скрипт, который помимо прочего выполняет функцию оптимизации lsqlin миллионы раз. Чтобы ускорить этот код, я "кодирую" его (в основном автоматически создает некоторые mex-файлы). Это продолжение линейных систем неравенств.
Проблема здесь в том, что lsqlin, как и другие функции оптимизации, не трансформируются и должны вызываться извне, что приводит к потере эффективности.
Я уже нашел набор инструментов MINQ, но не мог понять, как перевести с lsqlin на это. Также найден набор инструментов QPC, для которого требуется лицензия, которую я сейчас жду.
Кто-нибудь предлагает другой набор инструментов и как конвертировать из lsqlin в это?
Общая идея кодировать сценарий lsqlin (как видно, ссылка называется, а не полная конвертация).
КОД:
function main_script()
coder.extrinsic('lsqlin_script')
for i=1:10^7
X=lsqlin_script(A,b,X0)
...
end
end
function X=lsqlin_script(A,b,X0)
X=lsqlin(eye(2),X0, A, b,[],[],[],[],X0, optimoptions('lsqlin','Display','Off'));
end
БЕЖАТЬ:
codegen main_script.m
main_script_mex(INPUTS)
1 ответ
Если бы вы описали свою первоначальную проблему, я думаю, вы могли бы ожидать больше ответов.
Возможный подход, чтобы избежать lsqlin
:
Рассчитать ортогональную проекцию Pxyz
на каждую плоскость, определяемую A
а также b
, Проверьте, удовлетворяют ли прогнозы требованиям неравенства. Из тех, которые удовлетворяют, выберите ближайшую точку к Pxyz
, Если действительная точка не найдена, то ближайшая точка будет находиться на пересечении плоскостей. Рассчитать кратчайшее расстояние от Pxyz
до каждой линии пересечения... выполните шаги, применяемые для проекции на плоскости.
Как вы видите, он не полностью проработан, вы должны проработать детали, если считаете, что это может решить вашу проблему. Для этих расчетов вам не нужна функция оптимизации.