我正在考虑以下调度问题:
X
人。Y
个会议位置,每个会议都有Z
个会议角色。x
中的每个人X
,我都知道有关它们的一系列事实:
a)他们参加会议的最后日期并具有特定的作用(历史);
b)y
中任何会议Y
的可用性;
c)他们对z
中的角色Z
或会议组的一组角色(无特定日期)的特定偏好。现在,我有一种直觉,认为任务并不容易:),所以我的具体问题是:
哪种语言更适合这项任务(不知何故我觉得Prolog可以处理它,但我不完全确定)。
解决这项任务的正确方法是什么?我可以在上面的#4中达到目标的接近程度?
对我想要解决的问题有什么好的解读?
谢谢!
P.S。如果你很好奇,那么用例就是为一组Toastmasters会议安排一个名单(example)(我懒得手工做,我希望计算机至少部分帮助我完成这项任务)。
答案 0 :(得分:1)
从我的观点来看,你要编程的语言并不那么重要:对于简单的问题,使用的语言更多的是个人偏好而不是精确的科学。如果您喜欢/想要学习Python,请使用它。如果你今天“觉得”是Prolog,请使用它。
您选择的因素是您希望如何保存和显示数据。从您的问题可以告诉您需要以下内容:
您需要使用某些第三方组件,因为您需要花费时间来增加产品的附加值;创建一个闪亮的ORM或GUI工具包不是你的目标。因此,您选择的编程语言应该对这些项目有适当的支持(尤其是前两项)。我不能为Prolog说出来,但Python会让你完全涵盖这些领域。我认为建议特定的工具包超出了这个问题的范围,所以我现在就把它留在那里。
在此步骤之后,您将分析您的问题,您似乎已经做得非常好。所以,开始实施它。为了能够验证您的特定用例,听起来您可能会受益于某些测试或行为驱动设计,因此您可能希望了解它。
要学习该语言,只需搜索StackOverflow的“[语言]教程”:已经有很多答案链接到非常好的资源,可以选择任何语言。
最后建议:坚持不懈是最难的部分,所以尽量为自己设定一些目标或里程碑,或尝试以某种方式让其他人参与其中。这样你就可以扩大创建一个很好的软件的可能性。
答案 1 :(得分:1)
规则引擎(如 Drools Expert 或 Prolog )适用于定义约束(=得分函数)。然而,找到最佳解决方案是非常糟糕的。
由于您的问题可能是 NP完成(特别是如果会议需要被放入时间段和/或1个人不能同时参加2次会议),您需要使用一种规划优化算法,例如构造启发式和元启发式算法。在 Drools Planner (java,开源,ASL)中查看课程课程示例。
答案 2 :(得分:0)
即使我是Python粉丝,我也很难建议Prolog完成这项任务。我对Prolog很熟悉,而且Prolog肯定能更好地解决它。但这取决于你将如何使用该程序。您的选择 - 决定是否更容易安装Python或Prolog(如果您只是在本地PC上运行,我认为这并不重要),或者您有其他要求。
如果你了解Prolog的话,Prolog很简单。在你学习了Prolog之后,你可以用一些思考来解决它,我猜想(如果你真的了解Prolog的话)。
基本上你应该从Prolog开始。我建议使用SWI-Prolog,它是最常用的Prolog实现之一。此外,还有一个很好的教程:http://www.learnprolognow.org/
在我看来,但我不是百分百肯定,你还不熟悉Prolog。您需要时间首先学习Prolog,因此它还取决于您需要多快的程序。据我记忆,在不到一个月的时间内完成教程是可能的。当然,这几乎不取决于你每天投入多少时间 - 你可以在更短或更长的时间内完成。
Prolog基于规则。您的每个要求都可以表达为规则。拥有一套规则后,您可以询问(人员和会议室)哪些组合符合所有规则。对于不同人员的历史数据,您可以使用一个小型数据库。
答案 3 :(得分:0)
我同意为此任务建议Prolog的人;我建议看看 在ECLiPSe(它除了是Prolog实现之外,还是一个约束编程 具有比Prolog更强大的问题解决能力的语言)。 ECLiPSe现在有一个非常好的介绍,有许多例子,非常重要的是, 免费pdf,由Antoni Niederlinski撰写:
在ECLiPSe网站的示例中,我发现以下内容似乎相关:http://eclipseclp.org/examples/roster.ecl.txt。
ECLiPSe已完整记录,根据此文档, 也可以与C ++ / Java集成。
答案 4 :(得分:0)
这听起来像是一个优化问题,我同意Geoffrey认为这将是NP完全问题。我最近为一所大学开发了一种调度算法,用于进行期末考试安排。我使用具有领域特定启发式的遗传算法来解决该问题。我的实施表现很好,学生人数为3000+,课程数量为500,花了大约2个小时才能找到近乎理想的解决方案。