一、基本原理
企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,成都创新互联公司面向各种领域:混凝土搅拌罐车等网站设计、营销型网站建设解决方案、网站设计等建站排名服务。
在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。
根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。
二、熵值法步骤
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 中的任何组件!
比如你可以:
访问一飞开源: