Я пытаюсь найти название для своей проблемы, поэтому мне не нужно заново изобретать колесо при кодировании алгоритма, который его решает...
Я сказал 2000 бинарных (рядных) векторов, и мне нужно выбрать 500 из них. В выбранном образце я делаю суммы столбцов и хочу, чтобы мой образец был как можно ближе к заранее определенному распределению сумм столбцов. Я буду работать с 20 до 60 столбцами.
Небольшой пример:
Вне векторов:
110
010
011
110
100
Мне нужно выбрать 2, чтобы получить суммы столбцов 2, 1, 0
. Решение (точное в этом случае) будет
110
100
Мои идеи до сих пор
- можно было бы назвать это двоичным многомерным рюкзаком, но я не нашел ни одного алгоритма для этого
- Линейное программирование может помочь, но мне понадобится пошаговое объяснение, так как я не имел опыта работы с ним
- поскольку точное решение не всегда возможно, что-то вроде имитации отжига грубой силы может хорошо работать
- приходит на ум хакерский способ использования решателей ограничений - сначала ужесточить ограничения и постепенно ослаблять их до тех пор, пока не будет найдено какое-либо решение - учитывая, что CSP должен быть намного быстрее, чем ILP...?