Анализ чувствительности в MATLAB - PullRequest
1 голос
/ 19 ноября 2011

У меня проблема масштабного линейного программирования. Я могу решить это в Matlab с помощью «Linprog». Тем не менее, это внутри цикла, и мне нужно обойти его от второй итерации до конца моего цикла. Это простой LP в форме ниже:

Минимизировать сумму a_i b_i ул. ...

Где a_is - мои переменные, а b_is - коэффициенты. В каждой итерации цикла слегка изменяется только b_. Я хочу новые значения моих переменных после этого изменения. (обратите внимание, что Matlab не использует симплекс-метод для крупномасштабных задач).

Можно ли как-то сэкономить свое время в цикле и не обрабатывать LP несколько раз?

Спасибо

1 Ответ

2 голосов
/ 13 января 2012

Обратите внимание, что анализ чувствительности для LP / IP не является одной из сильных сторон MATLAB.

Опция 1 : Если вообще вы можете использовать CPLEX или SAS, они оба имеют «горячий старт»«методы, которые будут иметь вашу предыдущую основу и придумать что-то быстрое.(Это истинный анализ чувствительности.)

Вот одна ссылка IBM / CPLEX на настройку исходного решения.

Аналогичным образом, SAS / OR также имеет параметры горячего запуска.

Вариант 2 : если у вас есть доступ только к MATLAB

Из документации Matlab, вот как "принудительно" заставляет его использовать Simplex .

To use the simplex method, set 'LargeScale' to 'off' and 'Simplex' to 'on' in options.

options = optimset('LargeScale','off','Simplex','on')

Примечание. Если метод Внутренней точки по умолчанию гораздо лучше подходит для вашего конкретного LP, сначала решите его, как вы делаете в итерации 1. Затем установите верхнюю и нижнюю границы ваших основных переменных набыть значениями решения, и теперь установите параметры linprog для вызова Simplex.Это будет тривиально решить это.

Попробуйте переключить механизм решения на использование simplex и посмотрите, поможет ли это во второй и последующих итерациях LP с небольшими изменениями коэффициентов.

...