Как я могу решить, когда использовать линейное программирование?

Когда я смотрю на проблемы оптимизации, я вижу множество вариантов. Один из них — линейное программирование. Я понимаю в абстрактных терминах, как работает LP, но мне трудно понять, подходит ли конкретная проблема для LP или нет. Существуют ли какие-либо эвристики, которые могут помочь принять это решение?

Например, работа, описанная в Есть ли хороший способ майнинга такого типа? Мне потребовались недели, прежде чем я понял, как правильно структурировать задачу. Можно ли знать «заранее», что проблема может быть решена с помощью LP, не видя сначала, «как это сформулировать»?

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


person andrew cooke    schedule 29.03.2012    source источник


Ответы (1)


Эвристика (и/или контрольные списки), чтобы решить, действительно ли рассматриваемая проблема является линейной программой.

Вот моя попытка ответить, и я также попытался обрисовать в общих чертах, как я подхожу к этой проблеме.

Вопросы, указывающие на то, что данная проблема подходит для формулировки в виде LP/IP:

  1. Есть ли решения, которые нужно принимать регулярно, через разные промежутки времени?
  2. Есть ли ряд ресурсов (рабочие, машины, транспортные средства), которым необходимо назначить задачи? (часы, работа, направления)
  3. Является ли это проблемой маршрутизации, когда необходимо посетить разные «точки»?
  4. Это проблема местоположения или "макета"? (В эту группу попадает весь класс задач по раскрою.)

Ответ «да» на эти вопросы означает, что формулировка LP может работать.

Часто встречающиеся LP включают: Распределение ресурсов.: (Назначение, Транспортировка, Перегрузка, Рюкзак), Распределение портфеля, Планирование работы и проблемы с сетевым потоком. Вот хороший список приложений LP для тех, кто плохо знаком с LP или IP. Тем не менее, существует буквально 1000 различных типов задач, которые можно сформулировать как LP/IP. Люди, с которыми я работал (исследователи, коллеги), развивают интуицию. Они хорошо понимают, что проблема представляет собой определенный тип Целочисленной Программы, даже если они не помнят деталей, которые они могут затем найти.

Почему на этот вопрос сложно ответить. Есть много причин, по которым не всегда просто узнать, подойдет ли формула LP.

  1. В подходе к моделированию/формулированию много «искусства» (субъективности).
  2. Опыт очень помогает. Люди хорошо понимают, что эту проблему можно «уподобить» другой известной формулировке.
  3. Даже если проблема не является прямым LP, существует много умных методов master-slave (подзадачи) или методов вложенности, которые заставляют работать формулировку в целом.
  4. То, что выглядит как несколько целей, может быть объединено в одну целевую функцию с соответствующим набором весов.
  5. Опытные разработчики моделей используют методы декомпозиции и релаксации ограничений, а затем компенсируют это.

Как действовать, чтобы выполнить базовую формулировку?

Следующее всегда направляло меня в правильном направлении. Обычно я начинаю с перечисления переменных решения, ограничений и целевой функции. Затем я обычно перебираю эти три, чтобы убедиться, что все «подходит».

Итак, если у вас есть проблема, спросите себя:

  • Что такое переменные решения (DV)? Я считаю, что это всегда хорошее место для начала процесса формулирования. Сколько существует типов DV? (Какой ресурс получает какую задачу и когда она должна запускаться?)
  • Что такое ограничения?
    Некоторые ограничения очень хорошо видны. Другие немного поддразнивают. Ограничения должны быть записаны с точки зрения переменных вашего решения и любых наложенных констант/ограничений.
  • Что такое целевая функция?
    Какие величины необходимо максимизировать или минимизировать? Примечание. Иногда неясно, что такое целевая функция. Это нормально, потому что это вполне может быть проблемой ограничения-удовлетворения.

Несколько быстрых проверок работоспособности, как только вы решите, что ваша формулировка LP готова:

  1. Я всегда стараюсь увидеть, не является ли тривиальное решение (все 0 или все большие числа) частью набора решений. Если да, то формулировка, скорее всего, неверна. Некоторое ограничение отсутствует.
  2. Убедитесь, что каждое ограничение «связано» с переменными решения. (Иногда я нахожу ограничения, которые просто «висят там». Это означает, что «ограничение бухгалтерского учета» было пропущено.)

По моему опыту, люди, которые продолжают это делать, почти всегда развивают необходимую интуицию. Надеюсь это поможет.

person Ram Narasimhan    schedule 31.03.2012