Я пытался найти ответы на этот вопрос, но не могу найти ничего исчерпывающего. Я ищу алгоритм или эвристику для построения начального возможного решения проблем двоичного целочисленного программирования, в частности, упаковка набора, разбиение набора и проблемы, связанные с набором.
Если у кого-то есть следующая проблема двоичного целочисленного программирования
Minimize ax_1 + bx_2 + cx_3
Subject to x_1 + x_2 <= 2
3x_1 + 3x_2 >= 6
x_2 + 2x_3 = 2
С представлением решения
[x_1, x_2, x_3]
Где x_i = 0 или 1.
Тогда как можно было бы построить начальное возможное решение этой проблемы. Очевидно, что перебор всех возможных решений не сработает, если проблема состоит из тысяч переменных и ограничений.
Цель здесь состоит в том, чтобы построить начальное выполнимое, чтобы можно было выполнить локальный поиск для получения локальных минимумов, а затем применить к нему метаэвристику.
1 ответ
Проблема поиска допустимого решения некоторой проблемы двоичного целочисленного программирования уже NP-завершена . Это одна из 21 популярных NP-полных задач Карпа -> wiki: Целочисленное программирование 0–1 !
В общем случае не намного лучше следующие полные подходы (полные: они найдут допустимое решение, если оно существует за конечное время, или докажут, что его нет):
- Решатели для целочисленного программирования (симплекс + переход и граница + плоскости разреза)
- Решатели программирования ограничений
- например Gecode (с открытым исходным кодом)
- SAT решатели
- например MiniSat (с открытым исходным кодом)
Они также используют эвристику внутри (на самом деле они должны: потому что проблема NP-полная).
Если вы не хотите использовать общие алгоритмы / программное обеспечение, вам нужно настроить эвристику специально для какой-либо проблемы. Но эти проблемы, о которых вы говорите, немного отличаются, и может потребоваться другая эвристика. Также важно проанализировать специальную структуру в ваших экземплярах (случайные экземпляры ведут себя очень иначе, чем большинство реальных проблем)! При разработке этой специальной эвристики вы можете реализовать некоторый неполный подход, который может лучше работать в вашем случае.
Проблема, с которой вы сталкиваетесь, - поиск начального возможного решения - также очень распространена во многих метаэвристиках!
Это сложная тема!
Похожие вопросы
Новые вопросы
algorithm
Алгоритм - это последовательность четко определенных шагов, которые определяют абстрактное решение проблемы. Используйте этот тег, если ваша проблема связана с дизайном алгоритма.