【求助/讨论】一个小型的专家系统的设计方案

rightmin 2011-06-29 11:50:50
各位圈里的朋友,大家好!
小弟我工作快两年了,但是并没有做过大型的项目,做过的系统都是XXXX管理系统,按照古老的三层架构思路搭建的,自我感觉还是很水的。现在我们要做的一个系统是一个小型的专家系统,具体来说就是一个医疗保健诊断建议系统。根据一堆的输入数据和一堆的规则,最终得到一个结论。我在此发这个帖子,是想得到一些思路,建议,和一些经验,请大家不吝赐教!

输入的数据大概就是一些数值(身高,生化检查值),或者布尔值(有没有这种病,多久了)

规则就是数值达到多少是什么情况,布尔值真/假是什么情况等

我遇到了很多问题,例如,实际上的输入数据就比较复杂,而且输入数据相互之间还有关联的,而结论就更复杂了。结论与结论还有之间还有增益和损益的关系(有些结论是相互冲突的,而有些是相互提升的),一条输入数据可能导致多个结论,而一个结论可能有多个输入数据得出或者由其他的结论得出。

关于这些规则,我们应该如何去描述,保存,和使用呢,以及输入数据如何通过规则得出最终的结论?

输入数据的模型,规则的模型,结论的模型,数据库如何设计?

这样的系统如何做到方便编码,容易扩展,容易维护呢?

其实这样的系统,要说简单也是挺简单的,大不了多写一些if else 语句把逻辑堆出来,但是我还是想集思广益,寻找良方!
...全文
304 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rightmin 2011-07-01
  • 打赏
  • 举报
回复
Up UP
风骑士之怒 2011-06-30
  • 打赏
  • 举报
回复
DDD
WF
rightmin 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 keyouea 的回复:]

引用 1 楼 rightmin 的回复:
还有一个需求,需要地用户做级别管理,不同的用户,应用的规则不一样,越高级的用户,使用的规则越多,得到的结论越详细,准确。这个怎么设计呢?


妈的 社会主义好,病人还分等级

希望这个系统做出来不要把病人治死了
[/Quote]

现实就是这样子的啊,,没办法,你去医院看病,看着看着不就得检查吗,要检查不就得给钱吗,给的钱多,诊断不就越正确吗?
rightmin 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]

“良方”不外乎两种:一种就是深入理解业务流程,另外一种就是花钱购买或者武断抄袭别人的成熟软件。
[/Quote]
您好,我们现在就把问题简单话,假如有一条规则是:血压在140/90~159/99之间,我们可以得出“一级高血压”的结论,这就是一条规则,我们的诊断逻辑就是:N条输入项 → M条中间结论 → 1条最终结论(去掉中间结论相互冲突的地方,然后把中间结论组合成一条)

那么这条规则我们如何用程序描述呢,是硬编码在代码里面,还是设计一种比较通用的模块用于维护和修改呢?因为这个系统是普通患者和医生都能用的专家系统,我们肯定无法深入了解医生的业务,随着软件的测试和发布使用,肯定会有很多反馈意见,他们可能就会提出某种机器诊断的逻辑是不合理的,需要改成某种诊断,这时候我们就需要做出修改了,如何使这个时候修改和维护最少呢,就是我们前期设计要考虑的问题了。
  • 打赏
  • 举报
回复
“良方”不外乎两种:一种就是深入理解业务流程,另外一种就是花钱购买或者武断抄袭别人的成熟软件。
  • 打赏
  • 举报
回复
[Quote=引用楼主 rightmin 的回复:]
关于这些规则,我们应该如何去描述,保存,和使用呢,以及输入数据如何通过规则得出最终的结论?

输入数据的模型,规则的模型,结论的模型,数据库如何设计?

这样的系统如何做到方便编码,容易扩展,容易维护呢?

其实这样的系统,要说简单也是挺简单的,大不了多写一些if else 语句把逻辑堆出来,但是我还是想集思广益,寻找良方!
[/Quote]在你确实知道规则之前,不要考虑与业务无关的概念。

所谓规则(也就是业务逻辑),是用一张纸、随便写上几行字就可以描述出来的。这时候绝对不会去纠缠什么数据库“设计”之类的计算机概念,或者什么权限高低之类的将来管人的概念。你就应该用七八个经典的诊断或者疑难杂症的诊断,让一个业务专家看懂你确实去理解业务流程了,然后再来考虑所谓软件问题。

现在考虑软件问题,我们只能跟着你瞎想,既没有人懂业务结构和业务流程、又没有现成的流行的应用系统可以傻瓜式地抄袭,那么你这个题目就是选择错了。
jq_whh 2011-06-30
  • 打赏
  • 举报
回复
其实也不能这么说,比如就象阑尾炎吧,

对于一般人来说,只知道肚子疼,疼得厉害->肚子里的零件出了问题;
对于一般的医生,知道了是右下腹疼,压疼,反跳疼->阑尾炎的概率是80%
对于更深层的检查,验血、彩超等检验->100%是阑尾炎
keyouea 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rightmin 的回复:]
还有一个需求,需要地用户做级别管理,不同的用户,应用的规则不一样,越高级的用户,使用的规则越多,得到的结论越详细,准确。这个怎么设计呢?
[/Quote]

妈的 社会主义好,病人还分等级

希望这个系统做出来不要把病人治死了
wanghui0380 2011-06-30
  • 打赏
  • 举报
回复
利用规则引擎或P#(prolog的net版)

可以做到。

不过就像老p说的,这样的系统首先的问题还不是 规则引擎这类技术问题。

你们首先要做的还是先弄清楚规则是神马!!

就像我前段时间接了一个私活,是生辰八字,起名一类的东西。我倒是知道可以用规则引擎做,不过我个人从来不玩啥八字,星座这类玩意,所以还很花了几天去研究到底是啥规则来着
Forget 2011-06-30
  • 打赏
  • 举报
回复
人工智能里有“专家系统”的设计方案,你可以学习一下。
jq_whh 2011-06-30
  • 打赏
  • 举报
回复
模糊算法相对简单一些,可以考虑使用
jq_whh 2011-06-30
  • 打赏
  • 举报
回复
遗传算法、模糊算法、人工神经网络专家系统等,网上搜索会有很多,也有一些范例
rightmin 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jq_whh 的回复:]
判断规则要建立一个处理机制,不能写死在程序里
[/Quote]
不知道如何建立这种处理机制啊
jq_whh 2011-06-30
  • 打赏
  • 举报
回复
一点不成熟的想法,当作讨论

1、在不了解业务、也不了解流程的情况下,让专家为你完整地描述软件的使用是不可能的,这需要你根据慢慢探讨和交流的情况下总结一些经验,完成一些基本功能,再通过专家的使用才能提出建议,逐步成熟。

2、既然是专家系统,那就要看从哪个角度来衡量:对于我这种门外汉,需要给我提供一个完整、明确的诊断;对于那些真正的专家来说,则要以你的专家系统提供的历史经验数据,融合自己的经验和心得体会,来完善这个专家系统,也就是说让你这个专家系统也有个学习的过程。这才能让你做的这个专家系统有实用价值。

3、综合上面这些想法,专家系统中既要保存基本数据又要保存经验数据,判断规则又能灵活增减,所以数据可以保存在数据库中,判断规则要建立一个处理机制,不能写死在程序里。
rightmin 2011-06-30
  • 打赏
  • 举报
回复
UP,大家给点建议撒
rightmin 2011-06-29
  • 打赏
  • 举报
回复
还有一个需求,需要地用户做级别管理,不同的用户,应用的规则不一样,越高级的用户,使用的规则越多,得到的结论越详细,准确。这个怎么设计呢?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧