Альтернативы 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 до каждой линии пересечения... выполните шаги, применяемые для проекции на плоскости.

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

Другие вопросы по тегам