我正在研究一個小房子的設計項目,其中最重要的部分之一是用戶可以提供有關他希望自己的房間的某些信息的部分(例如,一個10×10米的房子,一個3x3的客廳,一個3x3的廚房,兩個4x5的臥室和一個4x2的浴室),然後程序會根據所做的要求生成房屋地圖。現在,我並不擔心繪製地圖,只是以不重疊的方式排列房間(是的,輸出可能非常難看)。現在,我並不擔心繪製地圖,只是以不重疊的方式排列房間(是的,輸出可能非常難看)。我已經做了一些搜索,發現我想要的與packing problem非常相似,其中有一些algorithms,它很好地處理了這個問題(儘管它是一個NP完全問題)。幫助算法在有限的空間上放置房間
但是後來我又有了一個限制:用戶可以在房間之間指定「鏈接」,例如,他可能希望一個房間必須有一個「門」的浴室,客廳要有直接的廚房等(也就是說,房間必須並排放置),這是事情變得複雜的地方。
我很確定我想要配置一個NP問題,所以我要求提示構建一個好的,但不一定是最佳的實現。我的想法是使用圖表來表示房間之間的關係,但我無法瞭解如何使現有的打包算法適應這種新的限制。誰能幫我?
我相信這類問題的一般名稱是約束優化*,約束滿足*的一個子集。這可能有助於您的搜索。我也懷疑你是否真的想解決這個問題;還有更多東西進入房間定位(例如,早晨的太陽撞到哪一側,所有交流管道,管道等都在哪裏運行?) – derobert
事實上,製作一個時髦的用戶界面可能會更好讓用戶放置自己的房間,同時提醒他們自己的限制。 – bdonlan
如果用戶指定的約束太多,並且您沒有尋找最佳解決方案,則應該使用「建設性」算法。根據約束條件逐步逐個建立,如果不起作用,則返回並更改以前的選擇 –