Ваша проблема невелика, и вы можете ее перебить, если функция стоимости не слишком сложна.
У вас есть 1200 мест, в каждом по 20 провайдеров по 30 предложений в каждом.Вы хотите выбрать 2 предложения для каждого местоположения от независимых поставщиков: (20 * 30 + 19 * 30) + 1200 = 1,4 млн. Решений для анализа.
Вы можете запустить простой возврат, чтобы найти решение, которое минимизирует общее количествостоимость, и поскольку проблема не слишком велика, запуск займет всего несколько секунд.Основным псевдокодом может быть:
bruteForce(partialAnswer, currentLocation, constraints, bestAnswer):
for (each possible pairOfOfferings from different provicers at
currentLocation):
add pairOffering to partialAnswer
if (pairOfOffering ok according to constraints):
if (currentLocation is last location left):
if (partialAnswer beats bestAnswer according to cost function):
update bestAnswer
othwerwise:
call bruteForce(
partialAnswer, nextLocation, constraints, bestAnswer)
remove pairOffering from partialAnswer
Сокращение пространства поиска может значительно ускорить это, но если у вас на порядок больше мест или вам действительно не нужно время отклика менее секунды, этонаверное не стоит.