2014-04-02 114 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因为一旦你有一个解决方案,它不会经常改变)

相关问题