2014-04-02 113 views
-5

讓我試着解釋一下 我有兩個列表 1.員工對象列表 2.部門對象列表(其中包含可以工作的員工列表在部門)C#如何將對象添加到列表中有對象列表

我想能夠添加一個員工到列表中的員工列表中的部門。

但我正在逐漸零誤差

int empsize = allemployees.Count; 
     int Maxdepartment = 0; 



     foreach (employee employeeitem in allemployees) 
     { 

      Maxdepartment = employeeitem.alloweddepartments.Count; 


      for (int i = 0; i < Maxdepartment; i++) 
      { 
       int index = alldepartments.FindIndex(x => x.Name == employeeitem.alloweddepartments[i].ToString()); 

       alldepartments[index].earlyshift.Add(employeeitem); 








      } 
+8

如果我們看到你的工作會更好.. –

+4

告訴我們你的(低效?)解決方案,也許一個的我們知道更好的一個 – Stefan

+0

員工們說他們每天想要開始和結束的時間(例如MondayIn,MondayOut)?你想爲所有員工計算完美的一天,並將他們分配到不同的部門?爲什麼使用float而不是DateTime? – Stefan

回答

0

這看起來像我的一個非常複雜的問題。它肯定是一個有許多限制的優化問題,所以我希望你擅長數學;-)。

我會建議看看Simplex Algorithm如果你有數學知識如何使用它,它將很好地解決你的問題。單純形式也有一些變化,可能也適用。

還有一種方法,您只需使用計算機的力量來解決問題。你可以寫一個函數來評價一個解決方案,並給你一些基準核心。 例如,您可以評估所提供和需要的小時差異,如小於所需的小時數爲-2,則每小時大於所需的小時數爲-1。因此,您可以爲員工分配得分。

使用此功能,您可以開始將員工隨機分配給部門(當然,還可以根據每個部門的員工分配最小/最大員工數),然後使用您的功能爲該解決方案評分。所以你可以找到一個好分數的解決方案(如果你定義的功能運作良好)

大部分隨機分配當然是愚蠢的,但你的計算機在幾秒鐘內就會產生數百萬的解決方案,所以很可能會產生好的結果(不認爲時間是一個大critera因爲一旦你有一個解決方案,它不會經常改變)

相關問題