1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#多准则决策模型-TOPSIS评价方法
 
##R语言实现-代码
 
MCDM=function (decision = NULL, weights = NULL, impacts = NULL) #决策矩阵,权重向量,影响因子
{
    if (missing(weights)) 
        stop("缺少'权重向量-weights'")
    if (missing(impacts)) 
        stop("缺少'影响因子-impacts'")
    if (!is.matrix(decision) | is.data.frame(decision)) 
        stop("'决策矩阵-decision'必须是矩阵或数据框")
    if (length(weights) != ncol(decision)) 
        stop("权重向量长度错误")
    if (length(impacts) != ncol(decision)) 
        stop("影响因子长度错误")
    if (!all(weights > 0)) 
        stop("权重必须大于零")
    if (!is.character(impacts)) 
        stop("影响因子必须是字符型 '+'或'-' 符号")
    if (!all(impacts == "+" | impacts == "-")) 
        stop("影响因子只能是字符型 '+'或'-' 符号")
    weights <- weights/sum(weights)
    N <- matrix(nrow = nrow(decision), ncol = ncol(decision)) #建一个空矩阵
    for (i in 1:nrow(decision)) {
        for (j in 1:ncol(decision)) {
            N[i, j] <- decision[i, j]/sqrt(sum(decision[, j]^2))
        }
    }                 #决策矩阵标准化
    W = diag(weights) #建权重对角矩阵
    V = N %% W       #构造加权规范化矩阵
 
 
#确定理想方案和负理想方案
    u <- as.integer(impacts == "+")  apply(V, 2, max) + as.integer(impacts == 
        "-")  apply(V, 2, min)
    l <- as.integer(impacts == "-")  apply(V, 2, max) + as.integer(impacts == 
        "+") * apply(V, 2, min)
 
#构建理想方案和负理想方案距离公式
    distance_u = function(x) {
        sqrt(sum((x - u)^2))
    }
    distance_l = function(x) {
        sqrt(sum((x - l)^2))
    }
 
#计算相对接近度并排序
    du <- apply(V, 1, distance_u)
    dl <- apply(V, 1, distance_l)
    score <- dl/(dl + du)
    outcome <- data.frame("方案"= 1:nrow(decision), 得分 = score, 
        排名 = rank(-score))
 
return(outcome)
 
}
 
Author(s)

多准则决策模型-TOPSIS评价方法-源码的更多相关文章

  1. 多准则决策模型-TOPSIS方法

    多准则决策–Multiple Criteria Decision Making 多准则决策–Multiple Criteria Decision Making 多准则决策是指在具有相互冲突.不可共度的 ...

  2. Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结

    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...

  3. Java split方法源码分析

    Java split方法源码分析 public String[] split(CharSequence input [, int limit]) { int index = 0; // 指针 bool ...

  4. erlang下lists模块sort(排序)方法源码解析(二)

    上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...

  5. erlang下lists模块sort(排序)方法源码解析(一)

    排序算法一直是各种语言最简单也是最复杂的算法,例如十大经典排序算法(动图演示)里面讲的那样 第一次看lists的sort方法的时候,蒙了,几百行的代码,我心想要这么复杂么(因为C语言的冒泡排序我记得不 ...

  6. getOrCreateEnvironment()方法源码探究

    该方法目的是创建一个环境对象,并且根据环境类型,自动判断是创建web环境对象,还是标准非web环境对象. 首先该方法源于prepareEnvironment准备环境: 然后进入该方法源码: 可以发现: ...

  7. TreeSet集合的add()方法源码解析(01.Integer自然排序)

    >TreeSet集合使用实例 >TreeSet集合的红黑树 存储与取出(图) >TreeSet的add()方法源码     TreeSet集合使用实例 package cn.itca ...

  8. invalidate和requestLayout方法源码分析

    invalidate方法源码分析 在之前分析View的绘制流程中,最后都有调用一个叫invalidate的方法,这个方法是啥玩意?我们来看一下View类中invalidate系列方法的源码(ViewG ...

  9. Linq分组操作之GroupBy,GroupJoin扩展方法源码分析

    Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...

随机推荐

  1. jdbc无法连接数据解析

    1.网络原因 2.账户权限问题 账户是否赋予以下的权限: grant connect, resource to ADM_BI; grant read, write on directory BACKU ...

  2. Web服务器性能监控分析与优化

    Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html

  3. win7中安装redis

    1.下载redis安装版本 https://github.com/rgl/redis/downloads 2.设置环境变量 将redies的安装目录设置为环境变量 参考: http://www.cnb ...

  4. 一种读取Exchange的用户未读邮件数方法!

    已好几个月没写博客了,由于之前忙于开发基于Sharepoint上的移动OA(AgilePoint)和采用混合移动开发技术开发一个安卓版的企业通讯录APP(数据与lync一致),并于1月初正式上线.马年 ...

  5. Tomcat Manager 用户名和密码配置

    在Tomcat中,应用程序的部署很简单,只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压.在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为To ...

  6. 检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件时失败,原因是出现以下错误: 80040154

    异常类型:COMException 异常消息:检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件时失败,原因是出现以下错误: ...

  7. BIEE安装文件下载地址

    Repository Creation Utility 下载地址 http://www.oracle.com/technetwork/middleware/bi-enterprise-edition/ ...

  8. 【cs229-Lecture20】策略搜索

    本节内容: 1.POMDP: 2.Policy search算法:reinforced和Pegasus: 马尔科夫决策过程(Partially Observable Markov Decision P ...

  9. 使用log4net

    原文:<使用log4net,没有日志文件生成> Posted on 2014/06/12 ================================================= ...

  10. java中子类与父类中隐含的this引用的分析

    /* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} pub ...