Оптимизировать 3D размещение комнат?

Дан график, где узлы представляют комнаты 3х3х1, а вершины представляют потребность в близости. Как их разместить в трехмерном пространстве, чтобы оптимизировать общую близость?

Пример (случайная) структура данных:

{
    room1: [room2, room3],
    room2: [room1, room4],
    room3: [room5],
    room4: [room2, room5, room1],
    room5: []
}

(Я не совсем уверен, где мне следует задавать этот вопрос, поскольку он отличается от того, что я вижу в stackru. Меня интересуют программные решения / эвристические алгоритмы.)

2 ответа

Пахнет как дальний родственник проблемы с упаковкой 3D- бина, которая является NP-полной. Попробуйте построить эвристику (сначала подходит, уменьшится лучше всего, ...), а затем метаэвристику (поиск по Табу, имитация отжига, генетические алгоритмы, ...). Для этого существует программное обеспечение с открытым исходным кодом, такое как Drools Planner, openTS, jgap,...

Я полагаю, вы хотите смежности.

В обратном поиске ведите очередь комнат, упорядоченную по количеству других комнат, к которым они подключены на графике (эвристика с самой ограниченной переменной). Затем для каждой комнаты в очереди:

  • определить возможные позиции сетки и выбрать одну из них;
  • в цикле определите, существуют ли какие-либо другие комнаты, которые теперь могут находиться только в одном месте, поместите их туда и удалите из очереди ( прямая проверка);
  • если какой-либо из предыдущих шагов не удался, вернитесь к последней точке выбора (отмените изменения в сетке).
Другие вопросы по тегам