首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#有序组合算法

C#有序组合算法
EN

Stack Overflow用户
提问于 2010-09-15 00:15:08
回答 3查看 1.5K关注 0票数 6

我正在尝试开发一个c#应用程序,它将在一定的限制和成本范围内生成所有可能的排列列表。例如,我有一个包含80个工作的列表。每个作业都有一个值(1-5) (通常是3),每个工程师都有他们能做的数量限制,通常值是20。

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

从这里,我想挑选一个初始的开始作业,并生成一个列表,列出所有可能的作业组合(从开始作业开始),直到限制为20,然后按权重的总和排序。权重最低的路由将获胜,并被分配给工程师。我的问题是,我不知道如何处理这个问题--什么样的数据结构最好?

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

任何帮助都会受到欢迎。

EN

回答 3

Stack Overflow用户

发布于 2011-05-25 18:09:34

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

http://en.wikipedia.org/wiki/Simulated_annealing

检查文章中的伪代码。

票数 2
EN

Stack Overflow用户

发布于 2011-05-26 23:33:27

您可以查看Microsoft Solver Foundation:http://msdn.microsoft.com/en-us/devlabs/hh145003.aspx

另外,如果您对Linq to Anything感兴趣,请参阅Bart de Smet的Linq to Z3 :) http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-LINQ-to-Z3

票数 1
EN

Stack Overflow用户

发布于 2011-06-14 16:24:48

目前还没有有效的算法来解决这个问题。我会使用遗传算法(不一定找到最优解,但找到一个可接受的解)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3710766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档