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))
        }
    }                 #决策矩阵标准化
    = diag(weights) #建权重对角矩阵
    = %% W       #构造加权规范化矩阵
 
 
#确定理想方案和负理想方案
    u <- as.integer(impacts == "+" apply(V, 2max+ as.integer(impacts == 
        "-" apply(V, 2min)
    l <- as.integer(impacts == "-" apply(V, 2max+ as.integer(impacts == 
        "+"* apply(V, 2min)
 
#构建理想方案和负理想方案距离公式
    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. AngularJs解决方案笔记(1)

    接触AngularJs约1年半时间,目前用其独立完成了一个Solution, 构建出比较完整的项目架构,从C/S往B/S转型的过程背后是大量精力与时间成本的付出,特别是工作了好几年后, 本来掌握好的稳 ...

  2. BlazeMeter发布chrome扩展插件,支持JMeter脚本创建

    BlazeMeter发布chrome扩展插件,支持JMeter脚本创建http://www.automationqa.com/forum.php?mod=viewthread&tid=3898 ...

  3. [转载]JavaScript 中小数和大整数的精度丢失

    标题: JavaScript 中小数和大整数的精度丢失作者: Demon链接: http://demon.tw/copy-paste/javascript-precision.html版权: 本博客的 ...

  4. OBS---环境配置之#include <D3DX10.h>报错

    一.先贴错误 因为这个笔记主要记录我如何整好这个OBS源码环境的,给需要的童鞋一个参考 1.1.#include <D3DX10.h>  报错 没有这个 解决方案:把2,3先解决了就水到渠 ...

  5. square开源vim,tmux配置在linux上使用

    首先安装需要的软件 apt-get install vim ack-grep git tmux gnome-terminal ctags xclip silversearcher-ag 这里tmux需 ...

  6. log4net使用的关键点

    <configSections>     < section name =" log4net" type="log4net.Config.Log4Net ...

  7. WebKit内核分析之Page

    参考地址:http://blog.csdn.net/dlmu2001/article/details/6213377 注:本系列博客是在原博主博客基础上增加了自己的理解和片段,可以看源博文获得清晰的结 ...

  8. Go加密解密之RSA[转]

    安全总是很重要的,各个语言对于通用的加密算法都会有实现.前段时间,用Go实现了RSA和DES的加密解密,在这分享一下.(对于RSA和DES加密算法本身,请查阅相关资料) 在PHP中,很多功能经常是一个 ...

  9. [Linux] zip 与 unzip 命令

    zip zip 命令基本格式为: zip options archive inpath inpath ... archive 是 .zip 文件(新的或已经存在的). inpath 是需要打包的目录或 ...

  10. 网络通信分享(二):外网ip和内网ip

    一.内网ip包括两类: 1:tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255  172.16.0.0/ ...