放假了,导师让我们几个学点东西,留了寒假作业(好久没有听说过这个词了)。
希望完成下面的问题的程序设计之一:
1.设计一个简单的“有限状态机”;
2.设计一个简单的“规则引擎”;
3.设计一个简单的“工作流引擎”;
4.设计一个简单的人工智能算法(要求是产生式专家系统,自学习系统等);
要求:
1.例子自己选,如电梯运动,下象棋,走迷宫及最短路等;
2.先做功能说明;
3.源码注释清楚;
4.用什么语言均可,建议用c#,c;
5.数据(规则)和程序分开。

解决方案 »

  1.   

    有限状态机: 在几个有限的状态中转换状态,比如 00 01 10 11 四个状态, 规则就是,00 遇到 X 转到 10, 11 遇到 Y 转到 01 ···产生式专家系统,自学习系统 这个网上有说的,AI 太麻烦了
      

  2.   

       有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。  1、switch/case   最原始的实现方式,是很多的c程序员习惯采用的方式。   
        
      2、查找表[状态、事件、动作],稍微做了一点改进。有点类似MFC的雏形。   
        
      3、在以上基础上做的一些改进或者变体。   
      [比如用一个栈结构,激活的状态位于栈顶,自动的映射事件和动作的对应,再或者通过一些巧妙的宏等手段进行包装。但是线性结构在实际中使用比较受限、过于技巧性的宏比较难于理解...]   
        
      4、面向对象的设计下、灵活运用模式。如上面给出的链接。重用性和灵活性方面都有不错的表现。沿袭类似的设计思路、根据实际开发内容进行改造后利用。
    工作流引擎(Workflow Engine )
    所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。例如开发一个系统最关键的部分不是系统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性、易维护性(模块化和结构化)和弹性(容易根据实际业务逻辑的变化作出程序上的变动,例如决策权的改变、组织结构的变动和由于业务方向的变化产生的全新业务逻辑等等)。 Workflow 引擎解决的就是这个问题:如果应用程序缺乏强大的逻辑层,势必变得容易出错(信息的路由错误、死循环等等)。 
      

  3.   

        规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
            比较 工作引擎:JBPM和WF:JBPM设计精辟(我曾单步跟进过JBPM的源码),但是有一致命的缺陷:由于采用对象间的关系设定,对象设计过于追求完美,造成提取一些信息组合时显得很繁琐。同时也会造成多并发状态中产生数据表的死锁。(Sql server 下尤为明显) 对于JBPM的评价,可能是我只懂了些皮毛,扭曲了一些东西吧。 
    Wf:MS在fx3.0推出的后时代的3剑客之一。经过一些使用,我更觉得它适合于代码间的逻辑流程。希望他愈来愈好; 
    Drool:这个东西好! 
    以上的这些是我从网上搜集到的,只是一些概念!
      

  4.   

    去看一下.NET 3.0以上的WWF你就明白1~3怎么做了...做简单点其实就是根据一组状态和预设条件控制流程...
      

  5.   

    规则引擎的推理步骤如下:
           1. 将初始数据(fact)输入Working Memory。
           2. 使用Pattern Matcher比较规则(rule)和数据(fact)。
           3. 如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。
           4. 解决冲突,将激活的规则按顺序放入Agenda。
           5. 使用规则引擎执行Agenda中的规则。重复步骤2至5,直到执行完毕所有Agenda中的规则。
      

  6.   

    一个Stateless Rule Session的示例:// 装载一个 RuleServiceProvider ,该接口有不同的JRULES提供商实现。Class.forName( "org.jcp.jsr94.ri.RuleServiceProvider" );RuleServiceProvider serviceProvider =RuleServiceProviderManager.getRuleServiceProvider( RULE_SERVICE_PROVIDER );// 建立一个 stateless RuleSessionRuleRuntime ruleRuntime = serviceProvider.getRuleRuntime();StatelessRuleSession srs = (StatelessRuleSession)ruleRuntime.createRuleSession( bindUri, null,RuleRuntime.STATELESS_SESSION_TYPE );// 执行一个规则列表List inputList = new LinkedList();inputList.add( new String( "Foo" ) );inputList.add( new String( "Bar" ) );inputList.add( new Integer( 5 ) );inputList.add( new Float( 6 ) );List resultList = srs.executeRules( inputList );System.out.println( "executeRules: " + resultList );// 释放sessionsrs.release();Stateful Rule的示例:String RULE_SERVICE_PROVIDER = "org.jcp.jsr94.jess";// 装载一个 RuleServiceProviderClass.forName( "org.jcp.jsr94.jess.RuleServiceProviderImpl" );// Get the rule service provider from the provider manager.RuleServiceProvider serviceProvider =RuleServiceProviderManager.getRuleServiceProvider(RULE_SERVICE_PROVIDER );RuleRuntime ruleRuntime = serviceProvider.getRuleRuntime();一个 StatefulRuleSession示例 : StatefulRuleSession statefulRuleSession =(StatefulRuleSession) ruleRuntime.createRuleSession( uri,new HashMap(),RuleRuntime.STATEFUL_SESSION_TYPE );// 加入一个发票对象Invoice inputInvoice = new Invoice("Invoice");inputInvoice.setAmount(1750);// add an Object to the statefulRuleSessionstatefulRuleSession.addObject( inputInvoice );//execute the rulesstatefulRuleSession.executeRules();//从statefulRuleSession取出结果对象results = statefulRuleSession.getObjects();// 加入另外一个发票对象Invoice inputInvoice2 = new Invoice("Invoice 2");inputInvoice2.setAmount(3000);//执行结果statefulRuleSession.executeRules();// extract the Objects from the statefulRuleSessionresults = statefulRuleSession.getObjects();// 释放 statefulRuleSessionstatefulRuleSession.release();
      

  7.   

    2.设计一个简单的“规则引擎”; 
    3.设计一个简单的“工作流引擎”; 我都怀疑你们老师自己能不能写出来.
    这些东西,有现成的开源代码.不过作者都是大师级别的人物.我用过一个parse的开源的东西,里面的东西好抽象.
    至于工作流,不但要搞清楚工作流的相关背景理论,做其表现也很花功夫.
    手上也有个轻量级工作流的demo代码,虽然不是很晚上,但是核心意思已经足够说明了。
    我也只是简单的研究了一下,为以后的应用留一个参考和备份。你们老师真会扯蛋.
      

  8.   


    CSDN上朋友以后买票都找你了
      

  9.   

    我导师在铁路应用方面可是有一点名气的任务,铁科院的博士,铁路的TIMS系统他也有参加。但我现在还不知道他研究的重点在哪方面,这只是留给我们的作业。把你的这个轻量级工作流的demo代码分享一下吧,超级感谢,[email protected]