2011-05-03 51 views
4

這是我的場景,找到最佳可用時間的算法

我運行了一個提供各種類型按摩的按摩場所。說30分鐘按摩,45分鐘按摩,1小時按摩等。我有50個房間,100名員工和30件設備。當客戶預約按摩預約時,預約需要1個房間,1個員工和1件設備能得到的。

什麼是好的算法找到10個客人可用資源對於一個給定的一天

資源

房 - 50

員工 - 100

設備 - 30

營業時間:9am - 6PM

職員時間:上午9 AM- 6PM

否的客人:10

服務

5客人,(1小時按摩)

3個客人 - (45分鐘按摩)

2位客人 - (1小時按摩)。

他們都在同一時間。假設有在這一天

沒有其他約會是什麼讓::

  • 十大結果的最佳方式 - 這符合所有條件獲得前10名的結果集最快的搜索。前十名由最早的可用時間來定義。 9 - 11AM是最好的結果集。 9點到5點不太好。

  • 窮舉搜索(查找所有組合) - 所有集合 - 每一個可能的組合

  • 首先獲得滿足(只返回第一個匹配) - 停止的條件之一已經滿足之後

我將不勝感激您的幫助。

感謝 尼克

+0

沒有解決方案,只是一個額外的想法:將每種治療的收益加入到算法中,因爲這是您的真正目標... 3次短期按摩可能在經濟上不如2次長效(或者相反... )。然後,這將是一個揹包問題。 – 2011-05-03 04:38:07

+0

可能是http://stackoverflow.com/questions/3784908/effective-timetabling-algorithm的重複。 – Patrick 2011-05-03 06:51:06

回答

1

首先,它似乎的員工,房間和設備的數量是無關緊要的。看起來你只關心哪一個是最低的數字。那是你的庫存。所以在你的情況下,庫存= 30.

接下來,它聽起來像你可以在第一個小時的業務同時服務所有10人。事實上,你可以同時服務30人。

所以,沒有算法是必要的,這是一個靜態的解決方案。如果您使用@Mario The Spoon的建議,並以不同的持續時間按摩和相應的利潤進行加權,那麼當您有超過30個客戶時,您可以開始優化。

1

看起來你正試圖解決一個問題,其中有相當專業化的軟件應用程序。如果你的問題很小,你可以試着用一些循環和回溯來做一個暴力破解的方法,但是一旦問題變得太大,遍歷所有可能性將花費太多時間。

如果問題開始變大,請尋找更專業的軟件。需要注意的是「基於約束的優化」和「約束編程」。

E.g. ECLIPSe工具是一個開源的約束編程環境。你可以在http://eclipseclp.org/examples/index.html上找到一些例子。一個很好的例子,你可以在那裏找到SEND + MORE = MONEY問題。在這個問題中,您有以下等式:

S E N D 
+ M O R E 
----------- 
= M O N E Y 

用數字替換每個字母,以便總和正確。 這也說明,雖然你可以解決這個蠻力,但有更多聰明的方法來解決這個問題(見http://eclipseclp.org/examples/sendmore.pl.txt)。

1

只是一個想法,以找到一個解決方案:

你可能想嘗試用約束滿足問題(CSP)算法來解決它。如果一般人需要解決時間表問題(例如在大學預訂房間),那就是有些人所做的。

有幾個技巧,以提高像前檢查CSP性能,構建DAG,然後做一個拓撲排序等等...

只要讓我知道,如果您需要了解CSP :)

更多信息