Я знаю, это похоже на домашнюю работу в школе, но это настоящая проблема для бизнеса. Поскольку я не могу написать, с каким объектом мы работаем, я буду использовать сюрреалистическое описание проблемы c:
Существует несколько городов (несколько десятков). В каждом городе есть максимальное количество ракет, которое может поразить его (от 1 до нескольких сотен).
Существует также множество ракет, распространенных по всему миру (около 1-2 тысяч). У каждой ракеты есть список городов, на которые она может нацелиться. Может быть только один город, может быть несколько или он может содержать все возможные города.
Задача:
Назначать цели ракетам, чтобы максимальное количество ракет могло быть выпущено.
То, что мы делаем сейчас, - это решение «наивная сила-случайность»:
1. Randomly sort list of missiles
2. Pass each missile, and set it to target first city from it's list, that still can accept missile
3. Count number of of targeted missiles
4. If it's better than best solution so far, save it
5. Repeat multiple times (we can do this about 1-10 million times in reasonable time).
Мы можем немного улучшить результаты, если начнем с нацеливания на города, у которых меньше ракет, чем разрешено максимально - но остальное все еще зависит от рандомизации и повторений.
Физически проверить каждое решение невозможно, так как их будет более 1000! (тысяча факторных) комбинаций.
Я ищу алгоритм, может быть, какую-нибудь ссылку или литературу, которая может соответствовать моей проблеме. Это своего рода проблема теории графов с двудольным графом - даже название такого рода графов будет полезно при дальнейшем исследовании.
Мы думали об алгоритме Хопкрофта-Карпа, но он не подходит - было бы хорошо, если бы была разрешена только одна ракета на город.
Буду признателен за любую помощь.
Не стесняйтесь исправлять мой английский sh.