我写的一个相关的软件

发布于 2022-08-08 17:33:52 字数 4371 浏览 14 评论 2

刚刚注意到开了这么一个版,正好是我的研究方向,我还写过一个相关的小程序,详细信息如下:

下载的信息见这里。
http://blog.chinaunix.net/u1/40281/article_82670.html

以下是说明:

linux 定律里有一条:早发布,常发布。
我的这个东西终于还是写完了(其实也没有花太大的力气来写,就是花了很多时间来看数学。。。。)
把东西打包放上来,readme 抄到这里。
本来想参考一下网上一个作品,
http://www.blogjava.net/WangBNU/archive/2006/08/24/65431.html
可是后来发现这个东西太臃肿了(14M),于是就自己动手写了一个。呵呵。
---------------------------------------------------------------------------------
###  README ---

## Copyright 2006 - 2009 LiuZhe GNU
## All java files in the packageare are licensed under the GNU General Public License (GPL), version 2.
## More copyright details, see file COPYRIGHT
## Email: whitelilis@gmail.com
## Keywords: rough set significance

使用说明:
需要系统中有 jre1.6 或更高的 java 运行环境。
java -jar roughset.jar
就可以运行了。
dat.txt 是测试文件。
----------------------------------------------------------------------
感谢:
谢谢我的老师给我这个机会来写这个东西。
当然,最重要的是要感谢我聪明而又活泼可爱的小妹,是她告诉我如何来研究粗糙集的相关算法,并给我很多帮助。

谨以此献给我活泼可爱的小妹!

2008.04.28.于靜远338.
----------------------------------------------------------------------
以上内容是第一次写的,以后相应的改动会写在 changelog 文件里,有不一致的地方,请见谅。
现在需要系统有 jre 1.4.2 或更高。
解压 release.tar.gz
在解压的目录下,运行 java -jar roughset.jar 就可以了。
如果是 windows 环境,双击 roughset.jar 应该也可以运行。
2008.05.13.于静远338.

#########################################################
如果你不研究程序,只是要“使用”这个软件,下面的就不用看了
下面的内容是为想看源代码的人准备的。
#########################################################

功能:
需求决定功能,这个软件的需求如下:
1,对属性列进行分类统计,要求可以对各列进行,并要有图示
2,可以选择数据文件,格式如下:第一行是属性名称,以下各行是属性值,中间用空格或 TAB 作为界定符
3,对于数据文件,最后一列可以看做决策属性,用“粗糙集”的相关理论,计算前面各条件属性的“重要性”(significance),并要有图示。
4,用 java 实现。
5,要有 GUI 界面。
----------------------------------------------------------------------
实现:
因为需求简单且功能不多,实现起来还是很容易的。
说实话,处理文本真的不是 java 的强项。要不是用户要求,我一定不会用 java 来写。
所以,写出的虽然是 java 代码,用的思想却是 perl 和 C 的。
粗糙集的基本运算都已经在 Knowledge.java 中实现,如果有其它的相关需求,可以很容易地添加。
算法的实现接口在 Algrithms.java 中也已经定义,加入新的算法也很简单。
用 make 来编译和生成 jar 文件,省得敲太多的命令。
----------------------------------------------------------------------
设计:
基本上没有太多的设计,但是为了以后扩展方便,还是做了一些,按程序流程:

1,从文本文件中读入数据,并形成一个 Knowledge 类的对象,这个方法定义在 FileHandler.java 中。用的是 perl 处理文本的方法:一次一行,然后用正则表达式 split. 如果谁有更好的办法,不妨告诉我。
2,Knowledge 类主要用来实现粗糙集的各种运算,其中底层的一个接口是 LowLevelSet, 本想单独设置为一个接口的,怕集合运算的速度不够,就可以换用其它的方法来实现,实验表明,我的这个实现(LowLevelSet.java 中)速度还行,于是就没有单独再用接口。
3,LowLevelSet 类,定义了最基本的集合运算 and, or, contains, 在粗糙集理论中,这些运算太常用了。
4,Algrithms 接口,定义了在 Knowledge 类上的操作 doOn(), 只要实现这个接口(比如我只做了两个实现,一个 Significance.java, 一个 Distribute.java),就可以直接加到应用程序中去。
简单。关于这个实现在程序中的使用,本来想用 spring 之类的方法,用 xml 来配置的,但是考虑到实际需求,没有做,不然觉得有些“过度设计”了。现在用的是 Class.forName().newInstance() 的办法(详见 Gui.java)。
5,Gui 给用户看的一个类,基本上就是 GUI 的一些操作定义。
6,BarChart 这个类本来也是要用一个接口来做的,可以另外用曲线图或者饼状图来实现同一接口,也是出于“过度设计”的考虑,没有做。不过,重构起来是很容易的。用到了 jfreechart 类库。
7,Knowledge 中我认为用了一个很不错的小技巧,就是“软 cache”. 这个名字是我起的,就是像 cache 一样,把常用的数据存起来,用空间来换时间,运行效率上会有一定的提高。

基本上就是这些了。
----------------------------------------------------------------------
TODO 和不足:
太多了,

1,基本上没有用多少“面向对象”的思想,倒是用了些“设计模式”的思想。
2,在纯 java 程序员看来,代码太 ugly 了,呵呵,我也这么认为。因为用户不会在意,而且,代码的 ugly 与否,在于它是否易于阅读和修改,而从这两个方面来说,我认为我做到了。
3,java 中所有的东西都是类,java bean 中所有的 member 都要通过 getter setter 来访问,太麻烦了(可能是我用 C 和 Perl太习惯了),以至于我的数据类写来看着太麻烦,我就直接 public int index;....等等
4,几乎没有错误检查,我假定所有的输入都是合法的和正常的。如果您发现了什么 exception, 请先不要急着来找我,毕竟这个东西是拿来用的,不是折腾着玩的。
5,还有一些粗糙集的算法没有实现,不过,基本 Knowledge 类中的基本算法,都是很容易实现的,只是因为没有需求,所以就没有写。
6,虽然用 make 来管理文件,但是对于管理 java,我还是不在行,如果你是行家,欢迎告诉我。
最后一条:你认为会有最后一条吗?我不认为,因为这实在是太多了,欢迎拍砖。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

筱武穆 2022-08-12 06:35:40

up~lz ~

心凉怎暖 2022-08-09 01:02:19


支持实践者~~~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文