- 論壇徽章:
- 0
|
剛剛注意到開了這么一個(gè)版,正好是我的研究方向,我還寫過一個(gè)相關(guān)的小程序,詳細(xì)信息如下:
下載的信息見這里。
http://blog.chinaunix.net/u1/40281/article_82670.html
以下是說明:
linux 定律里有一條:早發(fā)布,常發(fā)布。
我的這個(gè)東西終于還是寫完了(其實(shí)也沒有花太大的力氣來寫,就是花了很多時(shí)間來看數(shù)學(xué)。。。。)
把東西打包放上來,readme 抄到這里。
本來想?yún)⒖家幌戮W(wǎng)上一個(gè)作品,
http://www.blogjava.net/WangBNU/archive/2006/08/24/65431.html
可是后來發(fā)現(xiàn)這個(gè)東西太臃腫了(14M),于是就自己動(dòng)手寫了一個(gè)。呵呵。
---------------------------------------------------------------------------------
### 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
使用說明:
需要系統(tǒng)中有 jre1.6 或更高的 java 運(yùn)行環(huán)境。
java -jar roughset.jar
就可以運(yùn)行了。
dat.txt 是測(cè)試文件。
----------------------------------------------------------------------
感謝:
謝謝我的老師給我這個(gè)機(jī)會(huì)來寫這個(gè)東西。
當(dāng)然,最重要的是要感謝我聰明而又活潑可愛的小妹,是她告訴我如何來研究粗糙集的相關(guān)算法,并給我很多幫助。
謹(jǐn)以此獻(xiàn)給我活潑可愛的小妹!
2008.04.28.于靜遠(yuǎn)338.
----------------------------------------------------------------------
以上內(nèi)容是第一次寫的,以后相應(yīng)的改動(dòng)會(huì)寫在 changelog 文件里,有不一致的地方,請(qǐng)見諒。
現(xiàn)在需要系統(tǒng)有 jre 1.4.2 或更高。
解壓 release.tar.gz
在解壓的目錄下,運(yùn)行 java -jar roughset.jar 就可以了。
如果是 windows 環(huán)境,雙擊 roughset.jar 應(yīng)該也可以運(yùn)行。
2008.05.13.于靜遠(yuǎn)338.
#########################################################
如果你不研究程序,只是要“使用”這個(gè)軟件,下面的就不用看了 
下面的內(nèi)容是為想看源代碼的人準(zhǔn)備的。
#########################################################
功能:
需求決定功能,這個(gè)軟件的需求如下:
1,對(duì)屬性列進(jìn)行分類統(tǒng)計(jì),要求可以對(duì)各列進(jìn)行,并要有圖示
2,可以選擇數(shù)據(jù)文件,格式如下:第一行是屬性名稱,以下各行是屬性值,中間用空格或 TAB 作為界定符
3,對(duì)于數(shù)據(jù)文件,最后一列可以看做決策屬性,用“粗糙集”的相關(guān)理論,計(jì)算前面各條件屬性的“重要性”(significance),并要有圖示。
4,用 java 實(shí)現(xiàn)。
5,要有 GUI 界面。
----------------------------------------------------------------------
實(shí)現(xiàn):
因?yàn)樾枨蠛?jiǎn)單且功能不多,實(shí)現(xiàn)起來還是很容易的。
說實(shí)話,處理文本真的不是 java 的強(qiáng)項(xiàng)。要不是用戶要求,我一定不會(huì)用 java 來寫。
所以,寫出的雖然是 java 代碼,用的思想?yún)s是 perl 和 C 的。
粗糙集的基本運(yùn)算都已經(jīng)在 Knowledge.java 中實(shí)現(xiàn),如果有其它的相關(guān)需求,可以很容易地添加。
算法的實(shí)現(xiàn)接口在 Algrithms.java 中也已經(jīng)定義,加入新的算法也很簡(jiǎn)單。
用 make 來編譯和生成 jar 文件,省得敲太多的命令。
----------------------------------------------------------------------
設(shè)計(jì):
基本上沒有太多的設(shè)計(jì),但是為了以后擴(kuò)展方便,還是做了一些,按程序流程:
1,從文本文件中讀入數(shù)據(jù),并形成一個(gè) Knowledge 類的對(duì)象,這個(gè)方法定義在 FileHandler.java 中。用的是 perl 處理文本的方法:一次一行,然后用正則表達(dá)式 split. 如果誰有更好的辦法,不妨告訴我。
2,Knowledge 類主要用來實(shí)現(xiàn)粗糙集的各種運(yùn)算,其中底層的一個(gè)接口是 LowLevelSet, 本想單獨(dú)設(shè)置為一個(gè)接口的,怕集合運(yùn)算的速度不夠,就可以換用其它的方法來實(shí)現(xiàn),實(shí)驗(yàn)表明,我的這個(gè)實(shí)現(xiàn)(LowLevelSet.java 中)速度還行,于是就沒有單獨(dú)再用接口。
3,LowLevelSet 類,定義了最基本的集合運(yùn)算 and, or, contains, 在粗糙集理論中,這些運(yùn)算太常用了。
4,Algrithms 接口,定義了在 Knowledge 類上的操作 doOn(), 只要實(shí)現(xiàn)這個(gè)接口(比如我只做了兩個(gè)實(shí)現(xiàn),一個(gè) Significance.java, 一個(gè) Distribute.java),就可以直接加到應(yīng)用程序中去。
簡(jiǎn)單。關(guān)于這個(gè)實(shí)現(xiàn)在程序中的使用,本來想用 spring 之類的方法,用 xml 來配置的,但是考慮到實(shí)際需求,沒有做,不然覺得有些“過度設(shè)計(jì)”了。現(xiàn)在用的是 Class.forName().newInstance() 的辦法(詳見 Gui.java)。
5,Gui 給用戶看的一個(gè)類,基本上就是 GUI 的一些操作定義。
6,BarChart 這個(gè)類本來也是要用一個(gè)接口來做的,可以另外用曲線圖或者餅狀圖來實(shí)現(xiàn)同一接口,也是出于“過度設(shè)計(jì)”的考慮,沒有做。不過,重構(gòu)起來是很容易的。用到了 jfreechart 類庫。
7,Knowledge 中我認(rèn)為用了一個(gè)很不錯(cuò)的小技巧,就是“軟 cache”. 這個(gè)名字是我起的,就是像 cache 一樣,把常用的數(shù)據(jù)存起來,用空間來換時(shí)間,運(yùn)行效率上會(huì)有一定的提高。
基本上就是這些了。
----------------------------------------------------------------------
TODO 和不足:
太多了,
1,基本上沒有用多少“面向?qū)ο蟆钡乃枷,倒是用了些“設(shè)計(jì)模式”的思想。
2,在純 java 程序員看來,代碼太 ugly 了,呵呵,我也這么認(rèn)為。因?yàn)橛脩舨粫?huì)在意,而且,代碼的 ugly 與否,在于它是否易于閱讀和修改,而從這兩個(gè)方面來說,我認(rèn)為我做到了。
3,java 中所有的東西都是類,java bean 中所有的 member 都要通過 getter setter 來訪問,太麻煩了(可能是我用 C 和 Perl太習(xí)慣了),以至于我的數(shù)據(jù)類寫來看著太麻煩,我就直接 public int index;....等等
4,幾乎沒有錯(cuò)誤檢查,我假定所有的輸入都是合法的和正常的。如果您發(fā)現(xiàn)了什么 exception, 請(qǐng)先不要急著來找我,畢竟這個(gè)東西是拿來用的,不是折騰著玩的。
5,還有一些粗糙集的算法沒有實(shí)現(xiàn),不過,基本 Knowledge 類中的基本算法,都是很容易實(shí)現(xiàn)的,只是因?yàn)闆]有需求,所以就沒有寫。
6,雖然用 make 來管理文件,但是對(duì)于管理 java,我還是不在行,如果你是行家,歡迎告訴我。
最后一條:你認(rèn)為會(huì)有最后一條嗎?我不認(rèn)為,因?yàn)檫@實(shí)在是太多了,歡迎拍磚。 |
|