2016-12-28 1 views
1

Я знаю, что в гуроби я могу начать с исходного решения. т.е. после решения в LP, используяВыполняет ли gurobi минимальные изменения (минимальное возмущение), начиная с частичного решения?

m.optimize() 

для модели м, я могу изменить некоторые ограничения и использовать либо

m.reset() 
    m.optimize() 

найти новое решение для LP с нуля или просто позвонить

m.optimize() 

, чтобы найти новое решение из исходного решения.

Вопрос в том, что, когда gurobi начинается с исходного решения, он делает минимальные изменения (переменные), необходимые для получения нового решения?

Я думаю, что это минимальная проблема с возмущением. Если gurobi не делает этого по умолчанию, есть ли способ сообщить gurobi о минимальных изменениях?

ДАЛЬНЕЙШАЯ КОММЕНТАРИИ: Я понимаю, что теплый старт может быть быстрее, но изменения переменных будут минимальными. Например, целевая функция

maximize(i1+i2+i3+i4) 

и начальный набор ограничений такова, что только

i1,i2 can be set as 1 and i3,i4 as 0. 

Теперь ограничения меняются и новое решение (все еще только две переменные могут быть установлены как 1) может быть либо

i1, i3 as 1 (or) i3, i4 as 1. 

Может ли оптимизатор gurobi в конечном итоге выбрать решение с минимальным изменением i1, i3 как 1?

Кроме того, если другое решение было

i1,i2 as 1 

будет gurobi выбрать то, что, как это решение точно так же, как и существующие?

ответ

1

Да, это известно как теплый старт. Большинство современных решений линейного программирования, включая Gurobi Optimizer, используют теплый старт, когда вы модифицируете модель и вызываете функцию optimize(). С небольшими изменениями, как правило, гораздо быстрее решать модель с использованием теплого старта. Однако, если вы внесете существенные изменения, теплый старт может быть медленнее, чем решение модели с нуля. Gurobi Optimizer также использует теплый старт для моделей MIP.

С Gurobi Optimizer, вы можете также задать начальное значение через Start атрибут, или для LP моделей с помощью прямой и двойной старт атрибутов (PStart и DStart, соответственно).

+0

Спасибо. Я понимаю, что теплый старт может быть быстрее, но изменения в переменных будут минимальными. Например, целевой функцией является «максимизировать (i1 + i2 + i3 + i4)», а начальный набор ограничений таков, что только «i1, i2» можно установить как 1 и «i3, i4» как 0. Теперь изменения ограничений и новое решение (все еще только 2 переменные могут быть установлены как 1) могут быть либо i1, i3, либо 1 (или) 'i3, i4', как 1. Может ли оптимизатор gurobi в конечном итоге выбрать решение с минимальным изменением' i1, i3' как 1? Также, если другое решение было 'i1, i2', как 1, gurobi выбирает это, поскольку это решение точно такое же, как и существующее? – brokendreams

+0

Это будет зависеть от того, как построена модель.Если вы просто меняете коэффициенты в матрице, вы автоматически начнете теплый старт. Если вы добавляете новые ограничения, вы можете или не получить теплый старт. Если вы этого не сделаете, вы всегда можете указать атрибут 'Start' для переменных. –

+0

Но действительно ли теплый старт обеспечивает минимальное возмущение? Даже если я предполагаю, что теплое начало происходит точно, есть ли все равно, чтобы сообщить решателю, что я хочу, чтобы новое решение было как можно ближе к первоначальному решению? Или теплое начало вообще создает новое решение как можно ближе к существующему решению? – brokendreams

Смежные вопросы