一、基本原理
企業建站必須是能夠以充分展現企業形象為主要目的,是企業文化與產品對外擴展宣傳的重要窗口,一個合格的網站不僅僅能為公司帶來巨大的互聯網上的收集和信息發布平臺,成都創新互聯公司面向各種領域:混凝土攪拌罐車等網站設計、營銷型網站建設解決方案、網站設計等建站排名服務。
在信息論中,熵是對不確定性的一種度量。信息量越大,不確定性就越小,熵也就越小;信息量越小,不確定性越大,熵也越大。
根據熵的特性,可以通過計算熵值來判斷一個事件的隨機性及無序程度,也可以用熵值來判斷某個指標的離散程度,指標的離散程度越大,該指標對綜合評價的影響(權重)越大,其熵值越小。
二、熵值法步驟
1. 選取n個國家,m個指標,則為第i個國家的第j個指標的數值(i=1, 2…, n; j=1,2,…, m);
2. 指標的歸一化處理:異質指標同質化
由于各項指標的計量單位并不統一,因此在用它們計算綜合指標前,先要對它們進行標準化處理,即把指標的絕對值轉化為相對值,并令,從而解決各項不同質指標值的同質化問題。而且,由于正向指標和負向指標數值代表的含義不同(正向指標數值越高越好,負向指標數值越低越好),因此,對于高低指標我們用不同的算法進行數據標準化處理。其具體方法如下:
正向指標:
負向指標:
則為第i個國家的第j個指標的數值(i=1, 2…, n; j=1, 2,…, m)。為了方便起見,歸一化后的數據仍記為;
3. 計算第j項指標下第i個國家占該指標的比重:
4. 計算第j項指標的熵值:
其中. 滿足;
5. 計算信息熵冗余度:
6. 計算各項指標的權值:
7. 計算各國家的綜合得分:
[code]function [s,w]=shang(x)
% 函數shang.m, 實現用熵值法求各指標(列)的權重及各數據行的得分
% x為原始數據矩陣, 一行代表一個國家, 每列對應一個指標
% s返回各行得分, w返回各列權重
[n,m]=size(x); % n=23個國家, m=5個指標
%% 數據的歸一化處理
% Matlab2010b,2011a,b版本都有bug,需如下處理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可
[X,ps]=mapminmax(x');
ps.ymin=0.002; % 歸一化后的最小值
ps.ymax=0.996; % 歸一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 歸一化后的極差,若不調整該值, 則逆運算會出錯
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反歸一化, 回到原數據
X=X'; % X為歸一化后的數據, 23行(國家), 5列(指標)
%% 計算第j個指標下,第i個記錄占該指標的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%% 計算第j個指標的熵值e(j)
k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; % 計算信息熵冗余度
w=d./sum(d); % 求權值w
s=w*p'; % 求綜合得分[\code]
測試程序:
data.txt 數據如下:
114.6 1.1 0.71 85.0 346
55.3 0.96 0.4 69.0 300
132.4 0.97 0.54 73.0 410
152.1 1.04 0.49 77.0 433
103.5 0.96 0.66 67.0 385
81.0 1.08 0.54 96.0 336
179.3 0.88 0.59 89.0 446
29.8 0.83 0.49 120.0 289
92.7 1.15 0.44 154.0 300
248.6 0.79 0.5 147.0 483
115.0 0.74 0.65 252.0 453
64.9 0.59 0.5 167.0 402
163.6 0.85 0.58 220.0 495
95.7 1.02 0.48 160.0 384
139.5 0.70 0.59 217.0 478
89.9 0.96 0.39 105.0 314
76.7 0.95 0.51 162.0 341
121.8 0.83 0.60 140.0 401
42.1 1.08 0.47 110.0 326
78.5 0.89 0.44 94.0 280
77.8 1.19 0.57 91.0 364
90.0 0.95 0.43 89.0 301
100.6 0.82 0.59 83.0 456
執行代碼:
[code]x=load('data.txt'); % 讀入數據
[s,w]=shang(x)[\code]
運行結果:
s =
Columns 1 through 9
0.0431 0.0103 0.0371 0.0404 0.0369 0.0322 0.0507 0.0229 0.0397
Columns 10 through 18
0.0693 0.0878 0.0466 0.0860 0.0503 0.0800 0.0234 0.0456 0.0536
Columns 19 through 23
0.0272 0.0181 0.0364 0.0202 0.0420
w =
0.1660 0.0981 0.1757 0.3348 0.2254
1、random生成的隨機值不夠,大致就是連接oracle數據庫時需要從隨機熵池中取隨機數,而這熵池就是/dev/random這個文件產生的。而這個文件是阻塞產生熵值的,會導致連接阻塞。
2、未在/etc/hosts文件中添加本機主機名和IP的映射,且沒有dns域名解析有可能會導致獲取連接的時間太久。
程序如下,希望你可以看懂并選為滿意答案,我的知道上沒財富值了,謝謝!
Dimzbdf0(), zbdfl(), min_zb(), max_zb(), zbh(), p0(), pl(), pclogp(), h(), w(),sum_h As Single
Dim temp, fw, df As Variant
Dim SZfCommandBar As CommandBar
Dim SZfCommandBarButton As CommandBarButton
Public n, m
Private Sub Workbook_BeforeClose(CanceI As Boolean)
Application.CommandBars("熵值法").Delete
End Sub
Private SubWorkbook_open()
On Error ResumeNext
Application.CommandBars("熵值法").Delete
Set SZfCommandBar =Application.CommandBars.Add("熵值法")
WithSZfCommandBar.Controls
SetSZfCommandBarButton = .Add(msoControlButton)
With szfCommand.BarButton
.Style =msoButtonlconAndCaption
.Caption = "熵值法"
.OnAction ="S2F"
End With
End With
SZfCommandBar.ViSmle= True
End Sub
Private Sub S2F()
On Error ResumeNext
fw =InputBox("請輸入數據在EXCEL中的起始結束位置" vbCrLf vbCrLf " ※一定要正確輸入,否則按確定后將會出錯! ", "輸入范圍", ActiveWindow.RangeSelection.AddressLocal(0, 0))
If Len(Trim(fw)) =0 Then
MsgBox "沒有輸入正確范圍,請重新執行程序輸入正確的數據范圍!",vbOKOnly, "沒有輸入"
Else
n =Range(fw).Rows.Count
m =Range(fw).Coluruns.Count
ReDim zbdf0(n, m),zbdfl(n, m), min_zb(m), max_zb(m), zbh(m), pO(n, m), pl(n, m), pclogp(n, m),h(m), w(m)
For i = l To n
For J = 1 To m
zbdf0(i, J) =ActiveSheet.Range(fw).Cells(i, J)
Next
Next
For J = 1 To m
min_zb(J) =zbdfO(1, J)
max_zb(J) =zbdfO(1, J)
zbh(J) = 0
For i = l To n
If min_zb(J) zbdfO(i, J) Then
min_zb(J) =zbdf0(i, J)
End If
If max_zb(J) zbdf0(i, J) Then
max_zb(J) =zbdf0(i, J)
End If
zbh(J) = zbh(J) +zbdf0(i, J)
Next
Next
For J = 1 To m
zbh(J) = 0
For i = 1 To n
zbdfl(i, J) =IIf((min_zb(J)) = 0, zbdf0(i, J), (zbdm(i, J) - mm_zb(J)) / (max_zb(J) -mim_zb(J)))
zbh(J) = zbh(J) +zbdfl(i, J)
Next
Next
sum_h = 0
For J = 1 To m
h(J) = 0
For i = l To n
p0(i, J) = zbdfl(i,J) / zbh(J)
pl(i, J) = 10000 *pO(i, J) + 1
pclogp(i, J) =pl(i, J) * ApplicaonWorksheetFunction.Logl0(pl(i, J))
h(J) = h(J) +pelogp(i, J)
Next
sum_h = sum_h +h(J)
Next
For J = 1 To m
w(J) = h(J) / sum_h
Next
df =Applicatin.WorksheetFunction.MMun(pclogp,Application.WorksheetFunction.Transpose(w))
Application.Worksheets("熵值法輸出").Delete
Worksheets.Addafter:=Sheets(Application.Worksheets.Count)
Appliction.ActiveSheet.Name= "熵值法輸出"
Columns("B:B").ColumnWidth= 15
[B1] = "熵值法得分"
For i = 2 To n + 1
Cells(i, 2).Value =df(i - 1, 1)
Next
[C1] = "熵值法排名"
Range("C2:C" (n + l)).FormulaArray = "=RANK(RC[-1 ]:R[" (n - 1) "l]C[-1 ],R2C2:R" n + l "C21)"
End If
End Sub
比 MyBatis 效率快 100 倍的條件檢索引擎,天生支持聯表,使一行代碼實現復雜列表檢索成為可能!
使用Apache-2.0開源協議
你的產品給你畫了以上一張圖,還附帶了一些要求:
這時候,后臺接口該怎么寫???使用 Mybatis 或 Hibernate 寫 100 行代碼是不是還打不住?而使用 Bean Searcher,只需 一行代碼 便可實現上述要求!!!
使用 Bean Searcher 可以極大節省后端的復雜列表檢索接口的開發時間
可以和任意 Java Web 框架集成,如:SpringBoot、Grails、Jfinal 等
面向接口設計,用戶可自定義擴展 Bean Searcher 中的任何組件
約定優于配置,可省略注解,可復用原有域類,同時支持自定義注解
分庫分表?在這里特別簡單,告別分庫分表帶來的代碼熵值增高問題
同一個實體類,可指定只 Select 其中的某些字段,或排除某些字段
支持添加多個參數過濾器,可自定義參數過濾規則
支持添加多個字段轉換器,可自定義數據庫字段到實體類字段的轉換規則
支持添加多個 SQL 攔截器,可自定義 SQL 生成規則
雖然 增刪改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的強項,但查詢,特別是有 多條件 、 聯表 、 分頁 、 排序 的復雜的列表查詢,卻一直是它們的弱項。
傳統的 ORM 很難用較少的代碼實現一個復雜的列表檢索,但 Bean Searcher 卻在這方面下足了功夫,這些復雜的查詢,幾乎只用一行代碼便可以解決。
后端需要寫一個檢索接口,而如果用傳統的 ORM 來寫,代碼之復雜是可以想象的。
而 Bean Searcher 卻可以:
首先,你有一個實體類:
然后你就可以用一行代碼實現這個用戶檢索接口:
這一行代碼實現了以下功能:
例如,該接口支持如下請求:
快速開發
使用 Bean Searcher 可以極大地節省后端的復雜列表檢索接口的開發時間!
可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。
接著便可在 Controller 或 Service 里注入檢索器:
然后可以使用 SearcherBuilder 構建一個檢索器:
面向接口設計,用戶可自定義擴展 Bean Searcher 中的任何組件!
比如你可以:
訪問一飛開源:
分享題目:包含java熵值java代碼的詞條
本文鏈接:http://vcdvsql.cn/article0/doiseoo.html
成都網站建設公司_創新互聯,為您提供網站營銷、建站公司、網站策劃、網站內鏈、軟件開發、定制開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯