权重 ak的确定——频数统计法

选取正整数p的方法

画箱形图   取1/4与3/4的距离(IQR)  ceil()取整

代码:

  1. import numpy as np
  2. def frequency(matrix,p):
  3. '''
  4. 频数统计法确定权重
  5. :param matrix: 因素矩阵
  6. :param p: 分组数
  7. :return: 权重向量
  8. '''
  9. A = np.zeros((matrix.shape[0]))
  10. for i in range(0, matrix.shape[0]):
  11. ## 根据频率确定频数区间列表
  12. row = list(matrix[i, :])
  13. maximum = max(row)
  14. minimum = min(row)
  15. gap = (maximum - minimum) / p
  16. row.sort()
  17. group = []
  18. item = minimum
  19. while(item < maximum):
  20. group.append([item, item + gap])
  21. item = item + gap
  22. print(group)
  23. # 初始化一个数据字典,便于记录频数
  24. dataDict = {}
  25. for k in range(0, len(group)):
  26. dataDict[str(k)] = 0
  27. # 判断本行的每个元素在哪个区间内,并记录频数
  28. for j in range(0, matrix.shape[1]):
  29. for k in range(0, len(group)):
  30. if(matrix[k, j] >= group[k][0]):
  31. dataDict[str(k)] = dataDict[str(k)] + 1
  32. break
  33. print(dataDict)
  34. # 取出最大频数对应的key,并以此为索引求组中值
  35. index = int(max(dataDict,key=dataDict.get))
  36. mid = (group[index][0] + group[index][1]) / 2
  37. print(mid)
  38. A[i] = mid
  39. A = A / sum(A[:]) # 归一化
  40. return A

权重 ak的确定——模糊层次分析法

代码:

  1. import numpy as np
  2.  
  3. def AHP(matrix):
  4. if isConsist(matrix):
  5. lam, x = np.linalg.eig(matrix)
  6. return x[0] / sum(x[0][:])
  7. else:
  8. print("一致性检验未通过")
  9. return None
  10.  
  11. def isConsist(matrix):
  12. '''
  13. :param matrix: 成对比较矩阵
  14. :return: 通过一致性检验则返回true,否则返回false
  15. '''
  16. n = np.shape(matrix)[0]
  17. a, b = np.linalg.eig(matrix)
  18. maxlam = a[0].real
  19. CI = (maxlam - n) / (n - 1)
  20. RI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45]
  21. CR = CI / RI[n - 1]
  22. if CR < 0.1:
  23. return True, CI, RI[n - 1]
  24. else:
  25. return False, None, None

  1. import numpy as np
  2.  
  3. def appraise(criterionMatrix, targetMatrixs, relationMatrixs):
  4. '''
  5. :param criterionMatrix: 准则层权重矩阵
  6. :param targetMatrix: 指标层权重矩阵列表
  7. :param relationMatrixs: 关系矩阵列表
  8. :return:
  9. '''
  10. R = np.zeros((criterionMatrix.shape[1], relationMatrixs[0].shape[1]))
  11. for index in range(0, len(targetMatrixs)):
  12. row = mul_mymin_operator(targetMatrixs[index], relationMatrixs[index])
  13. R[index] = row
  14. B = mul_mymin_operator(criterionMatrix, R)
  15. return B / sum(B[:])
  16.  
  17. def mul_mymin_operator(A, R):
  18. B = np.zeros(1, R.shape[1])
  19. for column in range(1, R.shape[1]):
  20. list = []
  21. for row in range(1, R.shape[0]):
  22. list = list.append(A[row] * R[row, column])
  23. B[0, column] = mymin(list)
  24. return B
  25.  
  26. def mymin(list):
  27. global temp
  28. for index in range(1, len(list)):
  29. if index == 1:
  30. temp = min(1, list[0] + list[1])
  31. else:
  32. temp = min(1, temp + list[index])
  33. return temp

基于python的数学建模---多模糊评价的更多相关文章

  1. 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

    函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...

  2. Python数学建模-01.新手必读

    Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...

  3. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  4. Python小白的数学建模课-A1.国赛赛题类型分析

    分析赛题类型,才能有的放矢. 评论区留下邮箱地址,送你国奖论文分析 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. 数模竞赛国赛 A题类型分析 年份 题目 要 ...

  5. Python小白的数学建模课-A3.12 个新冠疫情数模竞赛赛题与点评

    新冠疫情深刻和全面地影响着社会和生活,已经成为数学建模竞赛的背景帝. 本文收集了与新冠疫情相关的的数学建模竞赛赛题,供大家参考,欢迎收藏关注. 『Python小白的数学建模课 @ Youcans』带你 ...

  6. Python小白的数学建模课-07 选址问题

    选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型. 小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型. 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法. ...

  7. Python小白的数学建模课-09 微分方程模型

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...

  8. Python小白的数学建模课-B5. 新冠疫情 SEIR模型

    传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. 考虑存在易感者.暴露者.患病者和康复者四类人群,适用于具有潜伏期.治愈后获得终身免疫的传染病. 本 ...

  9. Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型

    传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SEIR 模型考虑存在易感者.暴露者.患病者和康复者四类人群,适用于具有潜伏期.治愈后获得终身免疫 ...

  10. Python小白的数学建模课-B4. 新冠疫情 SIR模型

    Python小白的数学建模课-B4. 新冠疫情 SIR模型 传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SIR 模型将人群分为易感者(S类). ...

随机推荐

  1. Unity2D-Dash && SpeedUp

    ​ Introduction 原理: 角色位置改变时,每隔一段时间记录角色的位置,然后在记录的位置上放置一个图片,在图片出现之后过一段时间就让图片渐渐消失 简述实现步骤: 1.在Unity中Creat ...

  2. MySQL建表语句生成Golang代码

    1. 背景 对于后台开发新的需求时,一般会先进行各种表的设计,写各个表的建表语句 然后根据建立的表,写对应的model代码.基础的增删改查代码(基础的增删改查服务可以划入DAO(Data Access ...

  3. Linux安装gitlab仓库

    linux安装gitlab仓库 注:此安装方式是安装在docker上 1. 安装docker 可根据链接文档进行操作安装 https://www.cnblogs.com/cherish-sweet/p ...

  4. MySQL手动恢复数据库测试操作

    事件背景 MySQL数据库每日零点自动全备 某天上午9点,二狗子不小心drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢复 主要思想与原理 利用全备的sql文件中记 ...

  5. iOS Social和Accounts简单使用

    ACAccountStore *account = [[ACAccountStore alloc] init]; ACAccountType *type = [account accountTypeW ...

  6. Collection接口中的方法的使用

    add(Object e):将元素e添加到集合coll中size():获取添加的元素的个数addAll(Collection coll1):将coll1集合中的元素添加到当前的集合中clear():清 ...

  7. uoj348【WC2018】州区划分

    题目链接 直接讲吨吨吨给的标准做法吧.记\(f(i,j)\)表示各个州(可以重叠)的城市数量之和为i,这些州的并集为j的方案数,反正若有两个州之间有交集最后的\(|j|\)会不等于\(i\).有 \( ...

  8. java实现单链表的创建、增、删、改、查

    文章目录 单链表的创建.增.删.改.查 1.增加一个节点 2.删除一个节点 3.修改某一个节点 5.遍历单链表 单链表的创建.增.删.改.查 双向链表的增删改查:https://blog.csdn.n ...

  9. 编写一个jsp页面,利用Scriptlet编写一段计算代码,要求用零作为除数,并使用page指令将错误信息显示在另外一个jsp页面,产生的错误信息为“错误,不能用0做除数”

    文章目录 1.测试结果: 2.结果计算页面 3.错误处理页面 1.测试结果: 2.结果计算页面 <%@ page language="java" contentType=&q ...

  10. Vue学习之--------绑定样式、条件渲染、v-show和v-if的区别(2022/7/12)

    文章目录 1.绑定样式 1.1 基础知识 1.2 代码实例 1.3 测试效果 2.条件渲染 2.1 基本知识 2.2 代码实例 2.3 测试效果 1.绑定样式 没啥好说的.我觉得还没直接引入外部写好的 ...