談數據庫中模糊數據的輸入與判別
2024-07-21 02:30:56
供稿:網友
前言
模糊數據庫,是指能夠處理模糊數據的數據庫。一般的數據庫都是以二直邏輯和精確的數據工具為基礎的,不能表示許多模糊不清的事情。隨著模糊數學理論體系的建立,人們可以用數量來描述模糊事件并能進行模糊運算。這樣就可以把不完全性、不確定性、模糊性引入數據庫系統中,從而形成模糊數據庫。模糊數據庫研究主要有兩方面,首先是如何在數據庫中存放模糊數據;其次是定義各種運算建立模糊數據上的函數。模糊數的表示主要有模糊區間數、模糊中心數、模糊集合數和隸屬函數等。
自從1965年美國加州大學伯克利分校的LoftiZadeh提出了模糊邏輯以來,人類在這一領域內的研究一直沒有終止過;在數據庫領域內,模糊邏輯理論也得到了一定的應用,本文就模糊數據的輸入與判別談一下自己的認識,意在拋磚引玉。
一、模糊邏輯基本原理
U 為某些對象的集合,稱為論域,可以是連續的或離散的;u 表示U 的元素,記作U ={u}。
定義1 模糊集合(fuzzy sets) 論域U 到[0,1]區間的任一映射mF ,即mF :U ®[0,1],都確定U 的一個模糊子集F ;mF稱為F的隸屬函數(membership function)或隸屬度(grade of membership)。也就是說,mF 表示u屬于模糊子集F的程度或等級。在論域U中,可把模糊子集表示為元素u與其隸屬函數mF(u)的序偶集合,記為:
F ={(u,mF(u)|uÎU)}
若U 為連續,則模糊集F 可記作:
F =òUmF(u)/u
若U 為離散,則模糊集F 可記為:
F=mF(u1)/u1+mF(u2)/u2+….+mF(un)/un= åmF(ui)/ui
定義2 模糊支集、交叉點及模糊單點 如果模糊集是論域U 中所有滿足mF(u)>0的元素u 構成的集合,則稱該集合為模糊集F的支集。當u 滿足mF =10,則稱此模糊集為模糊單點。
定義3 語言變量 一個語言變量可定義為多元組(x,T(x),U,G,M)。其中,x為變量名;T(x)為x的詞集,即語言值名稱的集合;U 為論域;G 是產生語言值名稱的語法規則;M 是與各語言值含義有關的語法規則。語言變量的每個語言值對應一個定義在論域U 中的模糊數。語言變量基本詞集把模糊概念與精確值聯系起來,實現對定性概念的定量化以及定量數據的定性模糊化。 例如,某浴室鍋爐把水的溫度作為一個語言變量,其詞集T(溫度)可為:
T(溫度)={超高,很高,較高,適中,較低,很低,過低}
二、 數據庫中存放模糊數據的方法
1、 數據模型的選擇
近年應用較多的數據庫模型主要有關系數據模型、面向對象模型、對象-關系數據模型。
模糊數據庫要求存儲的數據具有抽象度高、數據類型復雜、面向對象操作的特點,特別針對模糊識別功能的實現還必須具即時的隸屬函數。
關系數據模型具有結構統一、面向記錄、有限數據類型、不能清晰表示和有效處理復雜對象的缺點,難以滿足模糊數據庫的需求。
面向對象數據庫管理系統(OODBMS)是從對象觀點出發,移向數據庫管理思維,以面向對象的程序設計語言為基礎的持久化的程序設計語言,目前實行的是ODMG-93標準,適合于具有復雜數據要求的工程、圖形、多媒體等領域,是目前比較先進的一種數據模型理念。但是它在查詢、事物管理和并發方面較差,而且用戶端的參與不好,同時由于其屬于新生事物,尚不成熟,因此各大數據庫廠家對其的支持較差,可謂“曲高和寡”。因此也不是最好的選擇。
對象-關系數據庫管理系統(ORDBMS)是從關系數據庫觀點出發,移向對象思維,以關系數據庫和SQL為基礎的擴展關系模型,具擴展復雜數據類型和允許用戶自定義函數(SQL或C語言)功能。具面向對象特性,受通用性強的SQL3(SQL99)標準支持。ORDBMS既滿足了傳統關系型數據庫用戶的要求,同時又具有復雜數據需要的應用,具強大查詢語言功能,同時也有很多大的數據庫廠商支持。是建立模糊數據庫的最佳選擇。
2、 數據模型的建立
首先建立非1NF文檔關系:
[sayyes]http://www.computerworld.com.cn/htm/app/service/01_7_13_3.gif[/sayyes]
以例某浴室鍋爐把水的溫度作為一個語言變量,其詞集T(溫度)可為:
T(溫度)={超高,很高,較高,適中,較低,很低,過低}
----------------------------------------------------------------------------
SQL99語句:
Create type mynum1 integer varying.
Create type mynum2 numeric varying.
/*建立復雜類型*/
create table temperature
(fuzzytemp char(4),
x mynum1 [10],
mn mynum2 [10],
/*使用數組,以確定各數的位置*/
check (fuzzytemp in (‘超高’,’很高’,’較高’,’適中’,’較低’,’很低’,’過低’))
create table measure
(time time,
temp smallint;
check (temp<=100))
三、模糊數據的判決
通過模糊推理得到的結果是一個模糊集合或者隸屬函數,但在實際使用中,特別是在模糊邏輯控制中,必須用一個確定的值才能去控制伺服機構。在推理得到的模糊集合中取一個相對最能代表這個模糊集合的單值的過程就稱作模糊判決或解模糊(Defuzzification)。模糊判決可以采用不同的方法,用不同的方法所得到的結果也是不同的。理論上用重心法比較合理,但是計算比較復雜,因而在實時性要求較高的系統不采用這種方法。最簡單的方法是最大隸屬度方法,這種方法取所有模糊集合或者隸屬函數中隸屬度最大的那個值作為輸出,但是這種方法未考慮其他隸屬度較小的值的影響,代表性不好,所以它往往用于比較簡單的系統。介于這兩者之間的還有幾種平均法:如加權平均法、隸屬度限幅(α-cut)元素平均法等。下面介紹各種模糊判決方法,并以“水溫適中”為例,說明不同方法的計算過程及其SQL查詢的實現。
這里假設“水溫適中”的隸屬函數為:
mN(xi)={X: 0.0/0+0.0/10+0.33/20+0.67/30+1.0/40+1.0/50+0.75/60+0.5/70+0.25/80+0.0/90+0.0/100}
1. 重心法
所謂重心法就是取模糊隸屬函數曲線與橫坐標軸圍成面積的重心作為代表點。理論上應該計算輸出范圍內一系列連續點的重心,即
u =åxi×mN(xi)/åmN(xi) 但實際上是計算輸出范圍內整個采樣點(即若干離散值)的重心。這樣,在不花太多時間的情況下,用足夠小的取樣間隔來提供所需要的精度,這是一種最好的折衷方案。即
u =åxi×mN(xi)/åmN(xi)
=(0·0.0+10·0.0+20·0.33+30·0.67+40·1.0+50·1.0
+60·0.75+70·0.5+80·0.25+90·0.0+100·0.0)
/(0.0+0.0+0.33+0.67+1.0+1.0+0.75+0.5+0.25+0.0+0.0)
=48.2
在隸屬函數不對稱的情況下,其輸出的代表值是48.2℃。如果模糊集合中沒有48.2℃,那么就選取最靠近的一個溫度值50℃輸出。
2. 最大隸屬度法
這種方法最簡單,只要在推理結論的模糊集合中取隸屬度最大的那個元素作為輸出量即可。不過,要求這種情況下其隸屬函數曲線一定是正規凸模糊集合(即其曲線只能是單峰曲線)。如果該曲線是梯形平頂的,那么具有最大隸屬度的元素就可能不止一個,這時就要對所有取最大隸屬度的元素求其平均值。例如,對于“水溫適中”,按最大隸屬度原則,有兩個元素40和50具有最大隸屬度1.0,那就要對所有取最大隸屬度的元素40和50求平均值,執行量應取:
umax=(40+50)/2=45
3. 系數加權平均法
系數加權平均法的輸出執行量由下式決定:
u =Ski×xi/Ski
式中,系數ki的選擇要根據實際情況而定,不同的系統就決定系統有不同的響應特性。當該系數選擇ki=mN(xi)時,即取其隸屬函數時,這就是重心法。在模糊邏輯控制中,可以通過選擇和調整該系數來改善系統的響應特性。因而這種方法具有靈活性。
4. 隸屬度限幅元素平均法
用所確定的隸屬度值α對隸屬度函數曲線進行切割,再對切割后等于該隸屬度的所有元素進行平均,用這個平均值作為輸出執行量,這種方法就稱為隸屬度限幅元素平均法。
例如,當取α為最大隸屬度值時,表示“完全隸屬”關系,這時α=1.0。在“水溫適中”的情況下,40℃和50℃的隸屬度是1.0,求其平均值得到輸出代表量:
u =(40+50)/2=45
這樣,當“完全隸屬”時,其代表量為45℃。
如果當α=0.5時,表示“大概隸屬”關系,切割隸屬度函數曲線后,這時從30℃到70℃的隸屬度值都包含在其中,所以求其平均值得到輸出代表量:
u =(30+40+50+60+70)/5=50
這樣,當“大概隸屬”時,其代表量為50℃
----------------------------------------------------------------------------
例:用重心法通過SQL語言查詢何時該鍋爐水溫適中?
SQL99語句:
create function sum()
returns integer as
select (x[1]* mn[1]+ x[2]* mn[2] + x[3]* mn[3] + x[4]* mn[4] + x[5]* mn[5] + x[6]* mn[6] + x[7]* mn[7] + x[8]* mn[8] + x[9]* mn[9] + x[10]* mn[10])/( mn[1]+ mn[2] + mn[3] + mn[4] + mn[5] +mn[6] +mn[7] + mn[8] + mn[9] +mn[10])
from temperature
where fuzzytemp=’適中’)
/*使用ORDBMS中的用戶定義函數用重心法建立隸屬函數*/
select time
from measure
where (temp-sum())<5 or (temp-sum())>-5
/*通過使用隸屬函數的返回值完成查詢,并將水溫適中的誤差范圍定為5℃以內a*/