我想为我的大学开发一个时间表发生器软件。显然它需要大量的约束满足,也就是说我需要满足很多规则才能生成一堆类不冲突的时间表。在做了一些研究和阅读this article后,我觉得我需要在其中使用一些AI。现在,我是AI的一名完全新手。任何人都可以告诉我哪种算法在我的情况下效果最好?时间表发生器软件的AI
回答
您可以用于此问题的最简单的算法是遗传算法(或任何其他进化算法)。使用GA解决这个问题非常简单,但却很有效。有很多论文和代码使用这种方法来解决这个问题。
如果您没有什么规则和约束条件,您可能希望使用像CSP启发式回溯这样的简单直接技术来加快速度,但如果有很多类和约束,我建议使用遗传算法。
感谢您的回复。你能不能扩大一点......可能举个例子。 – 2014-09-27 07:24:52
当然 你应该先看看算法本身。这非常简单,你可以在一段时间内学习。 该算法尝试生成所有可能的解决方案并评估其适用性。 考虑到你已经学会了如何使用遗传算法,这就是你应该做的时间表: 1.创建你的染色体(这里每个染色体是一个可能的解决方案) 2.培养GA 3.使用具有最佳拟合度的染色体上一代 您可以使用关键词进行搜索,例如使用遗传算法解决大学时间表问题。在网上有很多关于此的例子和论文 祝您好运:-) – MSH 2014-09-27 07:32:17
非常感谢!你的回答真的让我对这个项目感到乐观! :) – 2014-09-27 07:45:27
那么,确实不是一件小事。像这样的问题很难解决。
在这里,我可以推荐你两件事情:
- 使用现有的CSP/COP解算器,并描述其语言的限制。这些求解器非常好,快速和调整,正在开发多年。
- 在离散优化领域进行教育(在coursera.org上有一门课程,名字很好)。只有在掌握了这些事情的基础知识之后,才能尝试编写自己的求解器。但让你受到警告!离散优化是痛苦和痛苦:-)。
这绝不是一个合适的地方告诉你CSP/COP如何工作。这是一个非常广泛和困难的领域。
祝你好运!
谢谢!所以,你不同意遗传算法的东西不会很难,正如MSH所建议的那样? – 2014-09-27 07:43:52
不,我绝对同意!我在演化算法方面正在攻读博士学位,基本概念很容易理解。但从我的经验来看,使用最简单形式的普通遗传算法往往不够好。如果你的问题不是黑盒子,大多数情况下使用专门的解算器会更好。 – zegkljan 2014-09-27 08:01:46
- 1. 如何测试在特定时间间隔发生的软件行为?
- 2. 从列表[a1,...,ai,ai + 1,....,an]到列表[ai + 1,...,an,a1,... ai]的OCaml
- 3. 事件发生的具体时间
- 4. GWT发生器得到编译时间
- 5. 以正确的时间间隔不发生事件c#定时器
- 6. Ai在发生碰撞时始终在旋转
- 7. 微软Kinect - openNI手发生器问题
- 8. 之间的“软件开发方法”和“软件开发流程”的区别
- 9. 太多的时间来发送邮件与微软的Exchange SMTP服务器
- 10. 使用自制软件时发生冲突的postgres问题
- 11. 自动事件SQL ASP.net时间发生
- 12. 随机的Cplex数发生器用一定的时间间隔
- 13. 发生事件时发生错误的Lambda表达式评估
- 14. AI汽车电脑播放器开发
- 15. 软件开发生命周期资源
- 16. 软件开发过程与软件开发生命周期相同吗?
- 17. 错误发生在机器人开源EDI软件
- 18. 在Laravel发生注销事件时发布时间戳数据
- 19. 软件测试时的清洁房间
- 20. 在R中安装mgcv软件包时发生Segfault
- 21. 更改软件包名称时发生应用程序崩溃
- 22. 时间助手发生
- 23. 报表生成器 - 转换日期时间到当地时间
- 24. 生产级服务器软件
- 25. 免费软件查询生成器
- 26. 线性时间常数空间置换发生器
- 27. 自动表单生成软件
- 28. 发布软件
- 29. 管理“产品开发”和“软件开发”之间的区别
- 30. 产生处理器时间
我坦率地不认为这是一个广泛的问题! – 2014-09-27 15:51:09