LINUX.ORG.RU

Оптимальное разбиение прямоугольной области

 


0

3

Есть прямоугольная область (дискретная, из клеточек одинакового размера), каждая клеточка имеет свой вес. Нужно разбить эту область на подобласти, такие что:

1) вес подобласти не превышал некоторого заданного значения;

2) сумма весов всех подобластей была минимальна.

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

Кроме того подобласти должны быть по возможности компактными (близкими к квадратным?), так их вес меньше.

Размер исходной области - неск. сот клеточек по каждой стороне. Целевое число подобластей - в пределах первых сотен.

Мы пробовали два алгоритма:

1) ввести неравномерную сетку по каждой оси (использовать расщепление).

2) k-d дерево.

Оба алгоритма дают примерно одинаковые результаты, k-d дерево чуть лучше. Но видно, что это не предел, по субьективным ощущениям можно улучшить ситуацию раза в два. Может у кого то будут еще какие то мысли?

★★★★★

Последнее исправление: AntonI (всего исправлений: 1)

Может попробовать какой-нибудь биоинспирированный алгоритм?

Представим, что прямоугольная область — это поверхность стекла. Клеточки — маленькие капли на стекле. Изначально 1 капля - 1 клеточка. Пока всё статично, вводим динамику с помощью двух взаимодействий.

  • Интеграционное взаимодействие. То, что будет заставлять соседние капли объединятся в более крупные капли, содержащие уже не одну, а несколько исходных клеток. Можно мотивировать объединение тем, что суммарная «площадь поверхности» капли будет меньше, поэтому это выгодно с энергетической точки зрения. Интеграционне взаимодействие как раз будет работать на "сумма весов всех подобластей была минимальна". Конечно, если оставить только интеграцию, то рано или поздно все капли соберутся в одну большую каплю, что не есть гуд. Поэтому добавляем
  • Дезинтеграцию. Слишком массивные капли невыгодны с точки зрения некого потенциала (силы тяжести?), поэтому крупные капли имеют большую вероятность разбиться на несколько мелких. В эту силу тяжести как раз зашиваем "вес подобласти не превышал некоторого заданного значения". Правда переход придётся сгладить, то есть кратковременно у нас буду жить и капли, большие порогового «веса», и наоборот: капли, меньшие порогового веса, тоже будут иметь какую-то ненулевую вероятность расщепиться.

Возможно, что если правильно подобрать эти взаимодействия, то со временем система придёт некоему равновесному состоянию, которую мы и обзовём решением исходной задачи.

Crocodoom ★★★★★
()

сумма их весов возрастает, но вес каждой становится меньше чем у исходной области.

В этом случае самое оптимальное разбиение - если все части будут максимально близко к максимальному разрешенному весу. Хорошо бы доказать. Необходимое условие. Одна из евристик искать области с максимальной площадью (количеством клеток) с максимальным весом.

anonymous
()
Ответ на: комментарий от Crocodoom

Во, спасибо. Я об этом смутно думал (с физической интерпретацией), но не настолько детально.

Тут как бы еще проблема - как задавать границы. Т.е. оптимальным видимо являются ломаные границы, сейчас подобласти только прямоугольные.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от anonymous

В этом случае самое оптимальное разбиение - если все части будут максимально близко к максимальному разрешенному весу.

Да, это вроде как очевидно.

Одна из евристик искать области с максимальной площадью (количеством клеток) с максимальным весом.

Это уже не очевидно, я не понял.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Одна из евристик искать области с максимальной площадью (количеством клеток) с максимальным весом.

Это уже не очевидно, я не понял.

Это эвристика. Область с максимальной площадью с максимально допустимым весом нельзя разбить на более оптимальные части по твоему отверждению. Это локальное точное решение твоей задачи. Также твое утвреждение говорит, что чем меньше площадь, тем меньше вес. То есть, если захватить основную площадь локальными оптимальными участками, то мы не сильно отклонимся от глобального оптимального решения, если будем добивать не очень оптимальными кусочками с маленькими весами.
И вообще, твоя задача выглядит как выпуклая поверхность и всякие методы, использующие градиетный спуск должны находить точное решение, не застревая на локальных экстремумах.
Как-то так, с высоты птичьего полета, бездоказательно, но главное уверенно.

anonymous
()
Ответ на: комментарий от anonymous

Ок, спасибо.

Насчет град. спуска - тут фазовое пространство имеет переменную размерность. Хотя можно придумать какое то разбиение на избыточное число подобластей и разрешить некоторым подобластям вырождаться в ноль, тогда может сработать... надо подумать.

AntonI ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.