Pull to refresh

Comments 33

Прикольная идея. Наверное надо ещё добавить ограничения, типа, солнце должно попадать более Х часов, внутри помещения по расположениям комнат

и менее тоже. В условиях южных регионов наиболее комфортные квартиры те, где солнце уходит в тень к 12-13 часам.

Это конечно. Там много будет ограничений. Но они все будут являться дополнением в свойства генов. И будут учитываться в функции генерации ДНК квартиры и ДНК этажа.

Какая всё же целевая функция, какую характеристику хотел оптимизировать заказчик?

Целевых задач две:

  1. Попасть в процентовку квартир

  2. Занять максимально точно площадь этажа

То есть оптимизация у вас многокритериальная? Как в итоге считали целевую функцию? Взвешенная сумма?

# Считаем отклонения от заданной процентовки
DeltaP_tmp = self.CampareFloorPercent({'S': self.data[4], '1k': self.data[5], '2k': self.data[6], '3k': self.data[7]}, g.FloorPercent_Dict)
# Считаем отклонение от Ширины этажа
DeltaS_tmp = abs(g.Width - self.data[2])
# Выводим сводное отклонение
Delta_tmp = DeltaP_tmp + DeltaS_tmp / 1500

Пока так, но это как раз момент требующий тонкой настройки.

Вообще, выглядит так, что у вас разная размерность слагаемых в

Delta_tmp = DeltaP_tmp + DeltaS_tmp / 1500

DeltaP_tmp это процент, то есть 0..100, а DeltaS_tmp это квадратные метры, тут от 0 до бесконечности. И даже деление на 1500 (интересно, почему именно столько?) скорее всего не спасёт.

DeltaS - это действительно квадратные метры, но в реальности есть ограничение на длину этажа, так что тут нет бесконечности.

1500 это константа подобранная пока просто экспериментальным путем.

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

Думаю, вам стоит отдельно исследовать целевую функцию на возможность такого «жульничества». И особенно уделить внимание размерности компонентов и анализу тех ситуаций, когда она может оказаться разной.

Идея очень интересная, но меня смущает жёсткость в расположении санузлов и т.д. Иногда бывает, что удачно расположение ниш (и неквадратность служебных помещений) позволяет творить чудеса.

... Но почему генетический алгоритм, а не, например, метод градиентного спуска?

Хорошая идея попробовать метод градиентного спуска. Единственное опасение у меня, что тут очень большая вариативность и сложность поиска решения расчет очень сильно в зависимости от числа планировок в базе.

Ну, тут ещё момент, что есть метрика заказчика (плотность упаковки), а есть метрика качества (довольство покупателя планировкой). В целом, если написать синтетическую функцию "довольства", то можно попытаться свести задачу к двухмерной.

А вот коэфиценты "довольства" становятся чуть ли не "конструктором квартиры".

Например, можно вести базу "хорошего" и "плохого" и в первом приближении давать 1 балл за хорошее, и забирать балл за плохое. При входе в комнату не видно окна (дверь открывается в встроенный шкаф) - минус 1 балл. Окно по центру комнаты - +1 балл. Между кухней и туалетом есть хотя бы ещё одна дверь или метр стены - +1 балл. Открытые двери пересекаются - -1 балл и т.д.

Вообще, само направление звучит как фантастика, потому что если создать механизм для задачи критериев, то это будет прям disruption в индустрии.

Очень интересная мысль ? при успешной реализации напишу продолжение статьи ?

Сорри за оффтоп, но у вас на картинке дверь санузла выходит в спальню в одной из квартир. Российские снипы запрещают такое (выкрутиться можно, но выглядеть это будет иначе).
Либо у вас заказчик не российский, либо ваша база образцов нуждается в дополнительной фильтрации.

Как я написал во вступлении к статье, это самый первый вариант реализации и по сути он работает только с внешними габаритами квартиры. В дальнейшем алгоритм будет анализировать и внутренние особенности планировок, освещенность и многое другое. Задача статьи показать принцип генетического подхода. Но спасибо за вашу наблюдательность ?

А в России запрещён in-suite? В Европе наличие in-suite bathroom (туалет, душ, а может, даже, и ванная) в master bedroom - это позиция в плюс (т.е. это указывают как преимущество в описании жилья).

Про это целые статьи пишут, но если вкратце, то душ и ванная могут выходить дверью в жилую комнату, а туалет и совмещённый санузел - не могут. Такие вот типа санитарные требования. Есть много вариантов, как формально соблюсти требование, но по факту сделать, как хочется.

Т.е. в элитной недвижимости не может быть своего персонального туалета, куда можно сходить ночью, не выходя в общий (между комнатами) коридор? Эм...

Может даже в бизнес-классе. Просто там включаются хитрость: пространство между спальней и санузлом называют коридором: т.е. накладываются ограничения на места входа в спальню.

Да и люди сами делают вход там, где им нужно. При покупке/продаже просто никто не запаривается.

Судя по примеру таблицы квартир (и по здравому смыслу), вариаций "тип квартиры" * "ширина" * "глубина" будет весьма ограниченное количество (различия планировки однотипных квартир не влияют на качество решения в плане отклонения от ширины или процентовки). Поскольку количество квартир тоже весьма невелико, да ещё и имеет чёткие границы с обеих сторон (не более (ширина этажа / самая узкая квартира) и не менее (ширина этажа / самая широкая квартира)), я бы использовал одновременно самый оптимальный и самый неоптимальный подход - полный перебор.

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

Спасибо за комментарий. База планировок далеко не полная в примере. Полный перебор вариантов тут вряд-ли возможен, даже с учётом оптимизации алгоритма поиска. Но возможно, что при усложнении критериев отбора планировок для конкретного этажа и конкретного расположения здания вариантов для перебора будет и не много и тогда ваша идея будет очень кстати ?

Интересный подход. На самом деле эту задачу решает функциональная Архитектура

https://ru.wikipedia.org/wiki/Архитектура_системы

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

  • кухня должна быть рядом с туалетом

  • спальная должна быть рядом с ванной/душевой

  • гостинный зал/комната играющая его роль должна быть рядом с кухней

  • и т.д. и т.п.

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

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

    Кстати, я так понимаю алгоритм работает только для прямоугольных площадей квартир? А если будут квартиры S-образные, L-образные и т.п.?


Спасибо за наводку про функциональную архитектуру! Очень интересно.

Вы все правильно поняли, алгоритм работает по самой примитивной схема пока и принимает квартиру просто как прямоугольник.

Все усложнения модели приведут к росту числа генов и взаимосвязей между ними.

UFO just landed and posted this here

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

Схожий прием используется в этой работе: https://estudogeral.sib.uc.pt/handle/10316/25438

Посмотрите, может быть окажется полезно, причем не только сама диссертация, но и ссылки в ней и на нее. Там даже есть сравнительно свежие работы.

Спасибо большое за наводку! Поизучаю.

Мое уважение. Очень крутая работа и неожиданное применение ГА.

Sign up to leave a comment.

Articles