بهینه‌سازی نقشه ساختمان

در این پروژه شما با استفاده از خانواده الگوریتم‌های ژنتیک سعی می‌کنید، نقشه‌ای بهینه برای ساختمان طراحی کنید. در واقع محصول شما باید از مساحت زمین مشخص‌شده به عنوان ورودی، بهترین استفاده را برای قرار دادن اتاق‌ها بکند. تعریف دقیق مساله بر عهده خود شماست و می‌توانید دیگر معیارهای یک نقشه خوب، مثل میزان نورگیری فضاها را هم مدل‌سازی کنید.

مقدمه

بشر همواره به دنبال کسب رفاه بیشتر است.این تلاش در تمام جنبه های زندگیش نمود پیدا کرده است.افق نهایی این پروژه نیز همچون گذشته، در این راستاست.هدف نهایی پروژه، هوشمند کردن طراحی نقشه ساختمانی است.به طوری که ماشین، طرح بهینه یک نقشه را بدون دخالت انسان انجام دهد.
ما در اینجا برای شروع، مساله را به اندازه کافی کوچک و محدود خواهیم کرد.برای این کار فرض میکنیم زمین و اتاق ها به شکل مستطیل است. و ورودی برنامه به این شکل خواهد بود که کاربر ابعاد زمین ، تعداد اتاق هایی که میخواهد و همچنین مساحت کوچکترین و بزرگترین اتاق را تعیین میکند.
برای این کار الگوریتم های متفاوتی وجود دارد،ما در این پروژه قصد داریم از الگوریتم ژنتیک استفاده کنیم.هدف، تولید نقشه مطلوب و مشتری پسند است.یعنی اتاق ها باید به گونه ای باشد که اولا راه دسترسی به اتاق ها صحیح باشد و ثانیا نور مناسب به هریک از بخش های خانه برسد.
از کاربردهای این پروژه، اولا می توان به تهیه نقشه های معماری به طور هوشمند و بدون دخالت انسان اشاره کرد.ثانیا میتوان از طراحی مدارات مجتمع بزرگ مقیاس نام برد.

کارهای مرتبط

موضوع این پروژه به مساله تخصیص فضا مشهور است.به معماران، در بدست آوردن نظم های مختلف المان های نقشه ، کمک می کند. برای حل این مساله و خودکار کردن آن، تلاش های بسیاری انجام گرفته است. که حاصل آن بدست آوردن الگوریتم های متفاوت می باشد.یکی از این الگوریتم ها، الهام گرفته از طراحی های مدارات بزرگ مقیاس است. به این صورت که برنامه تعدادی اتاق با مشخصه ها، اولویت ها و ضوابط مختلف می گیرد و آنها را همچون بلوک های یک مدار بزرگ مقیاس در کنار یکدیگر نظم می دهد.[2]یکی دیگر از کارهایی که نسبتا جدید در این زمینه صورت گرفته است، تهیه نقشه معماری از یک آپارتمان یک خوابه است. روش کار به این صورت است که در رابطه با ارتباط اتاق ها با یکدیگر جست و جو انجام میدهد. و نتیجتا فهرستی از حالات ممکن را نمایش می دهد.[2] یکی دیگر از الگوریتم هایی که برای این کار استفاده می شود، الگوریتم ژنتیک است. در الگوریتم ژنتیک تابع ارزیابی و نسل ها وجود دارند. مکانیزم این الگوریتم برگرفته از طبیعت است. به این صورت که بالاخره ما می توانیم از توالی نسل ها، به خروجی مورد نظر برسیم.[1] یکی دیگر از الگوریتم هایی که میتواند مورد استفاده واقع شود، الگوریتم استراتژی تکاملی است.این الگوریتم برای مسائل بهینه سازی در فضای پیوسته کارایی دارد.این الگوریتم دارای بخش های جهش، ترکیب و جایگزینی است. [1]

آزمایش‌ها

در فاز پیاده سازی، فقط الگوریتم ژنتیک را پیاده سازی نمودیم.برای این کار از ماژول deap زبان پایتون استفاده شده است.
توضیحات کد:
در ابتدا از کاربر ابعاد زمین خام را میگیریم. سپس تعداد اتاق ها و همچنین کمترین و بیشترین مساحت اتاق را توسط کاربر مشخص میکنیم.
سپس در محدوده ی ابعاد زمین، دنباله ی تصادفی از کرومزوم ها را با استفاده از توابع آماده ماژول مورد استفاده، تولید نموده ایم.در مرحله ی بعد، تابع برازندگی که خود شامل چند تابع دیگر است را تعریف کردیم.آنگاه با استفاده از قوانین حاکم در الگوریتم ژنتیک به تولید نسل های مختلف پرداختیم. توجه داشته باشید که فرض بر آن است که تعداد نسل ها، 80 باشد.
آزمایش کد:
برای آزمایش ورودی های مختلف را به برنامه دادیم و خروجی برنامه که به صورت آرایه است را دریافت کردیم.آرایه شامل مختصات دوتا از گوشه های مستطیل(اتاق ها) می باشد. زیرا با داشتن مختصات دو گوشه ی مخالف یک مستطیل، به راحتی می توان آن را ترسیم نمود.در این کد نیز،هر چهار عدد پشت سرهم در آرایه ، نشان دهنده ی طول و عرض دو گوشه ی یک مستطیل میباشد.
مشکلاتی که وجود دارد، اولا کامل نبودن تابع برازندگی است.از این جهت که نور و فضاهای مرده به طور کامل مدیریت نمی شود. اما خروجی ای که داده میشود، برهم افتادگی و همپوشانی مستطیل ها دیده می شود.برای بهبود نتیجه احتمالا تابع برازندگی را باید بهبود بخشید.
لینک پروژه در bitbucket :
https://bitbucket.org/arman_p/blueprint-optimization

کارهای آینده

تابع برازندگی استفاده شده در این برنامه، تنها ملاک‌های برهم‌پوشانی اتاق‌ها و نور را ملاک قرار می‌دهد. این برنامه به‌طور کلی، آنچنان که در افق نهایی پروژه آمده‌است، ما را از یک معمار بی‌نیاز نمی‌کند. یک معمار واقعی ملاک های دیگری همچون پستی و بلندی زمین، جهت باد، شکل خانه‌های همسایه و شرایط اقلیمی دیگر را در نظر می‌گیرد.
برای عملی کردن ملاک پستی و بلندی، می‌توان یک آرایه دو بعدی متشکل از کروموزوم ها را تعریف کرد. این کار به سادگی با استفاده از ماژول deap که در این پروژه استفاده شده است، قابل پیاده‌سازی است.
مسئله ی دیگر در فاصله ی این برنامه با کاربرد وسیع آن در کار مسئله ی مستطیل در نظر گرفتن همه ی اتاق ها و زمین بود که در زمین های به شکل ها ی دیگر جواب نمیداد و به نظر میرسد که برای این اشکال هم با در نظر گرفتن ژنوم دو بعدی و این بار با روش های چندهدفه ی ذکر شده پیاده سازی تا حدودی درست را انجام داد.
روش پیشنهادی بیان اتاق ها با یک نقطه است.میدانیم هر دیوار دقیقا بین دو نقطه قرار دارد برای تقسیم ساختمان به چند مستطیل (اتاق) با این نقاط ابتدا دیوار بین دو نقطه ی اول را رسم میکنیم تا نقشه به دو بخش تقسیم شود و بعد این کار را برای همه ی بخش ها انجام دهیم تا هر نقطه در یک بخش قرار بگیرد.که در این روش فاکتور فضای بیهوده کمتر میشود و فضاهای خالی با اتاق ها پر خواهند شد [6].
روش دیگری که به ذهن میرسد استفاده از نقاط وسط محدوده های نصف شده ی زمین اولیه است.یعنی بدین صورت که ابتدا زمین را 1/2 میکنیم و هر نیمه را نصف میکنیم و این عمل را تا میزانی ادامه میدهیم(مثلا 8 بار) و سپس نقاط وسط هر محدوده را به همراه طول و عرض زمین در جایی ذخیره میکنیم.و از مختصات های نامبرده شده در تابع های ارزیابی و قوانین حاکم بر مسئله استفاده کنیم و ژنوم مسئله را نیز با مشخص کردن طول و عرض نقطه ی وسطبه نصف اندازه ی گذشته کاهش دهیم [6] .
می توان برای دقیق‌تر کردن این پروژه متناسب با نیاز کاربران، نوعی یادگیری ماشین تعریف کرد. به این صورت که در خروجی، باتوجه به تابع برازندگی و امتیاز‌دهی های آن، یک یا چند خروجی را تولید کنیم. سپس با توجه به اینکه هربار، کاربر(انسان) کدامیک از طرح ها را انتخاب می‌کند، یک پایگاه دانش قائل شویم. اطلاعات این پایگاه دانش، انتخاب کاربر و ملاکی است که وی برای انتخاب خود در‌نظر گرفته است، می‌باشد.

مراجع

  • [1] علیرضا نوریان، "طراحی نقشه ساختمان با استفاده از محاسبات تکاملی"، پایان‌نامه کارشناسی، دانشگاه علم و صنعت ایران، ۱۳۹۰. لینک

  • [2] Paul Merrel , Eric Schkufza , Vladlen Koltun ; Compute-Generated Residential Building Layouts ; Stanford University

  • [3] Suphachai Sutanthavibul , Eugene Shragowitz , Member , IEEE and J.B Rosen ; An Analitycal Approach To FloorPlan Design and Optimization

  • [4] S. Cahon, N. Melab, and E. G. Talbi, “ParadisEO: A Framework for the Reusable Design ofParallel and Distributed Metaheuristics,” Journal of Heuristics, vol. 10, pp. 357-380, May 2004.

  • [5]An algorithm for building rectangular floor-plansAuthors: Sany M. Leinwand University of Illinois, Chicago, Dept. EECSYen-Tai Lai University of Illinois, Chicago, Dept. EECS

  • [6]http://www.boute.ir/iust-ai-92/plan-optimization

محمد غضنفری

پژوهش شما در این فاز خیلی به صورت علمی به موضوع نپرداخته است. در مقدمه به بیان مسائل بی ربط به مقدمه (مثل فرض های مسئله تان) پرداخته اید . ضمنا در بخش کارهای مرتبط فقط دو کار را به صورت اجمالی بررسی کرده اید. به طور مثال فقط روش انجام آن ها ذکر شده است و در مورد نتایج و مسائلی مهمتر از نام روش بحثی صورت نگرفته است.
یک نکته کلی تر اینکه من بعد از خواندن پروژه شما هنوز دقیقا تعریف مورد نظر شما از مسئله را متوجه نشدم. شاید با چند شکل و کمی توضیح بیشتر منظور دقیقتان از این پروژه را بتوانید بهتر بیان کنید. این مسئله برای پروژه شما که می تواند برداشت های متفاوتی داشته باشد بسیار مهم است.

علیرضا نوریان

نکاتی که دانشجوهای دیگه تذکر دادن دقیق هست. امیدوارم با رعایت کردن اونها در فاز بعد بتونید خروجی خوبی تولید کنید و اون خروجی رو به خوبی نمایش بدید تا مخاطب بفهمه که نقشه‌ای که شما تولید می‌کنید چطوری هست و چطور بدست اومده.

تایید شده

با سلام و خسته نباشید

کار شما خوب است اما چند نکته در مورد آن وجود دارد
بد نبوددر مورد تابع برازندگی الگوریتم ژنتیک خود در اینجا کمی توضیح می دادید تا برای خواننده مشخص شود مبنای ارزش گذاری حالات به چه شکل است.
همچنین بهتر بود در مورد نتیجه های به دست آمده در آزمایش توضیحات بیشتری می دادید. مثلا یک نمونه ورودی را آزمایش کرده و نتیجه را اینجا می نوشتید.
و در آخر و از همه مهم تر بهتر بود در مورد چگونگی مدل کردن مسئله برای الگوریتم ژنتیک توضیحات بیشتری می دادید.
ممنون و متشکر

تایید شده

سلام
۱- در بعضی قسمت های متن پروژه ی شما خطاهای نگارشی دیده می شود.
۲- بعضا غلط املایی دیده می شود "تعداد اتق ها" ، ...
۳- نیم فاصله رعایت نشده است.
۴- در خط اول کارهای مرتبط ، جمله ی شما اینگونه شروع می شود : به معماران، در بدست آوردن نظم های مختلف المان های نقشه ، کمک می کند. ! بهتر است جملات مرتبط را به درستی به هم ربط دهید مثلا : موضوع این پروژه به مساله تخصیص فضا مشهور است ، که به معماران، ... یا در جای دیگر جمله تمام شده است اما جمله ی بعدی با "که" شروع شده است :‌ تلاش های بسیاری انجام گرفته است. که حاصل آن بدست آوردن الگوریتم های متفاوت می باشد. !
۵- بعضی قسمت های متن به صورت محاوره ای نوشته شده است.
۶- بهتر است مطالب مختلف را در پاراگراف های جدا از هم توضیح دهید و برای آن ها عنوان در نظر بگیرید. هیچ پاراگراف بندی یا عنوانی در متن شما دیده نمی شود.
۷- در بسیاری از قسمت های متن شما از عبارت "مدارات مجتمع بزرگ مقیاس" استفاده شده است اما هیچ توضیحی راجع به آن داده نشده است.
۸- در فاز اول قرار بود با خواندن مقالات مختلف ، روش های گوناگون را توضیح دهید اما شما فقط از روش های مختلف نام برده اید.
۹- در قسمت آزمایش ها هیچگونه جدول یا نتیجه ای را نمایش نداده اید و ارزیابی ها قابل مشاهده نیست. دیتا ی مورد استفاده مشخص نیست.
۱۰- تحلیلی انجام نشده که کدام روش بهتر است ، خواننده پروژه‌ی شما در نهایت می‌خواهد بداند کدام روش بهتر است.
۱۱- بهتر بود کد خود را در گیتهاب می گذاشتید و مستند و داکیومنتی برای آن در نظر می گرفتید.

پروژه ی شما جای کار زیادی دارد که امیدوارم با رفع مشکلات آن به نتیجه ی مطلوبی برسید، اما تا همینجا تلاش شما خوب است.
موفق باشید.

علیرضا نوریان

نکاتی که در فازهای قبل تذکر داده شده بود رو اصلاح نکردید و ارتقایی هم به چشم نمیاد. معلوم نیست خروجی‌تون چه طور هست. حتی با خوندن کد هم معلوم نمی‌شه شما چطوری میزان نورگیر بودن فضا رو کنترل می‌کنید و تغییر دیگری هم دیده نمی‌شه.
با تلاش بیشتر، حتما به خروجی بهتری می‌رسیدید.

تایید شده

خسته نباشید عرض می کنم.
نسبتا گزارش کوتاهی رو نوشتید با این حال موضوع تقریبا خوب شرح داده شده.
الگوریتم ژنتیک برای حل این مسئله مناسب به نظر میاد . ولی خوب بود روش های دیگری رو هم بررسی میکردید . فکر میکنم بشه با مدل کردن این مسئله به صورت CSP و فرموله بندی حالت کامل و یا استفاده از سایر روش های جست و جوی محلی راه حل مناسبی رو به دست اورد.
موفق باشید.

رد شده

پروژه به خوبی توضیح داده شده بود
یک غلط نگارشی در متن وجود داشت که در بخش کارهای آینده بود:تنها ملاک‌های برهم‌پوشانی اتاق‌ها و نور را ملاک قرار می‌دهد
هیچ کامنت و توضیحی در کد Blueprint-Optimization / main.py وجود نداشت و تنها یک فایل برای تشخیص توسعه دهنده بود.
هیچ قسمتی مبنی بر نتایج در پروژه دیده نشد.