C#有序组合算法

C#有序组合算法,c#,math,data-structures,permutation,C#,Math,Data Structures,Permutation,我正在尝试开发一个c#应用程序,它将生成一个列表,列出所有可能的排列,在一定的范围内,并且成本很高。例如,我有一份80份工作的清单。每个作业都有一个值(1-5)(通常为3),每个工程师都有一个他们能做多少的限制,通常为20 目前,我已经开始生成所有可能组合的列表(n!/(k!*(n-k)!其中n是作业总数,k是2)。每个作业之间的链接应该用每个作业之间的距离加权 从这里,我想选择一个初始开始作业,并生成一个所有可能的作业组合列表(从开始作业开始)最多20个,然后根据重量之和订购。最低重量的路线将

我正在尝试开发一个c#应用程序,它将生成一个列表,列出所有可能的排列,在一定的范围内,并且成本很高。例如,我有一份80份工作的清单。每个作业都有一个值(1-5)(通常为3),每个工程师都有一个他们能做多少的限制,通常为20

目前,我已经开始生成所有可能组合的列表(n!/(k!*(n-k)!其中n是作业总数,k是2)。每个作业之间的链接应该用每个作业之间的距离加权

从这里,我想选择一个初始开始作业,并生成一个所有可能的作业组合列表(从开始作业开始)最多20个,然后根据重量之和订购。最低重量的路线将获胜并分配给工程师。我的问题是,我不知道如何实现这一点-哪种数据结构最好

通常大约有6-8名工程师(取决于工作量),我计划一次安排一名工程师-一旦将一条路线分配给另一名工程师,这些作业将从列表中删除,并选择一个新的开始作业,生成一组新的组合。这听起来是一种可接受的方法吗


欢迎任何帮助。

我会尝试模拟退火,这是一种通过根据系统能量随机测试配置来找到全局最优值的算法


查看文章中的伪代码。

您可以查看Microsoft Solver Foundation:

另外,如果你对Linq to有任何兴趣,请看巴特·德斯米特的Linq to Z3:)
没有有效的算法来解决这个问题。我会使用遗传算法(不一定能找到最佳解决方案,但能找到可接受的解决方案)。

这听起来基本上像是一个数学问题,而不是c#问题。(尽管两者非常接近):这里有一个C#库,用于进行排列、组合、笛卡尔积和其他方便的组合函数:描述确实提醒了“背包”或“作业调度”问题。线性规划,也就是说,单纯形算法的工作?@vidstige:你显然比我读到了问题的另一个版本