当前位置: 首页 > article >正文

数学建模模型算法-Python实现

一、评价决策类

1、层次分析法(AHP)

层次分析法用来评价或选择一个更好更优的决策或方案

通过找到可以衡量其好坏的指标,进而衡量指标,再形成评价体系

归一化处理

让指标在同一数量级,且保证在同一指标下其差距保持不变

操作:指标的数组[a b c]归一化处理得到[ a/(a+b+c) , b/(a+b+c) , c/(a+b+c) ]

但实际上每个指标的重要性是不同的,可以给每个指标上加上一个权重 

而如何科学的设定权重,则体现出层次分析法的主要作用

层次分析法是对一些较复杂模糊的问题作出决策的简易方法,其适用于难以完全定量分析的问题

模型原理

首先要把问题条理化、层次化,构造出一个有层次的结构模型。复杂问题被分解为元素的组成部分,上一层次的元素作为准则对下一层次有关元素起支配作用

层次可以分为三类:最高层、中间层、最底层

基本步骤

其中第二步构造判断矩阵,要对指标的重要性进行两两比较

矩阵中的元素aij的意义为:第i个指标相对于第j个指标的重要程度

 依次对变量进行两两比较,得到完整的判断矩阵

而因为两两比较的过程中忽略了其他因素,导致最后的结果可能出现矛盾

所以需要一致性检验 

一致性检验 

 

 

求权重 

Ⅰ.算数平均法

①用每一个元素除以所在列的和

② 每一行相加

③得出的一列数据除以n

Ⅱ.几何平均法

①根据n来开根号

②用每一个开根号后的元素除以所在列的和

Ⅲ.特征值法

求评分

Python代码

在数学建模中最常用的三个库:Numpy、Pandas、Matplotlib

Numpy

Numpy是Python中用于科学计算和数值操作的基础库,其提供了很多高性能的多维数组对象和用于处理数组的各种函数

Pandas

用来提供高性能,易于使用的数据结构和数据分析工具所用的库

Matplotlib

创建可视化的库,也就是用来绘图的

#1、一致性检验
import numpy as np#as np是将numpy库名命名为np,这样在使用的时候更加方便
#定义矩阵A
#np.array是NumPy库中的一个函数,用于创建数组,它可以将输入的对象(列表元组其他数组等)转换为NumPy数组
A=np.array([[1,2,3,5],[1/2,1,1/2,2],[1/3,2,1,2],[1/5,1/2,1/2,1]])#二维数组作矩阵
n=A.shape[0]#shape获取形状信息,获取A的行,1为获取A的列
#求最大特征值以及对应的特征向量
#np.linalg.eig是NumPy库中的一个函数,用于计算方阵的特征值和特征向量
#eig_val特征值,eig_vec特征向量
eig_val,eig_vec=np.linalg.eig(A)
Max_eig=max(eig_val)#求特征值最大值
CI=(Max_eig-n)/(n-1)
#这里n=2时,一定为一致矩阵,所以CI=0,为了避免分母为0,将这里的第二个元素改为了很接近0的正整数
RI=[0,0.0001,0.52,0.89,1.12,1.26,1.36,1.41,1.46,1.49,1.52,1.54,1.56,1.58,1.59]#这里RI最多支持n=15
CR=CI/RI[n-1]
print('一致性指标CI=',CI)
print('一致性比例CR=',CR)
if CR<0.10:
    print('因为CR<0.10,所以该判断矩阵A的一致性可以接受')
else:
    print('注意:CR>=0.10,因此该判断矩阵A需要进行修改')

#2、算数平均法求权重
import numpy as np
A=np.array([[1,2,3,5],[1/2,1,1/2,2],[1/3,2,1,2],[1/5,1/2,1/2,1]])
#计算每一列的和
#no.sum函数可以计算一维数组中所有元素的总和
#可以通过指定axis参数来计算多维数组在某个维度上的元素总和
#例如在二维数组中,axis=0表示按列计算总和,axis=1表示按行计算
ASum=np.sum(A,axis=0)
n=A.shape[0]#shape获取形状信息,获取A的行,1为获取A的列
#归一化,二维数组除以一维数组,会自动将一维数组扩展为与二维数组相同的形状,然后进行逐元素的除法运算
Stand_A=A/ASum
#各列相加到同一行
ASumr=np.sum(Stand_A,axis=1)
#计算权重向量
weights=ASumr/n
print(weights)

 #3、几何平均法求权重
import numpy as np
A=np.array([[1,2,3,5],[1/2,1,1/2,2],[1/3,2,1,2],[1/5,1/2,1/2,1]])
#将A中的每一行元素相乘得到一列向量
#np.prod函数可以计算一维数组中所有元素的乘积
prod_A=np.prod(A,axis=1)
n=A.shape[0]
#将新的向量的每个分量开n次方
#np.power函数可以对数组中的元素进行幂运算
prod_n_A=np.power(prod_A,1/n)
#归一化
re_prod_A=prod_n_A/np.sum(prod_n_A)
print(re_prod_A)

#4、特征值法求权重

2、优劣解距离法(Topsis)

Topsis法是常用的综合评价法,其结果能精确的反应各评价方案之间的差距

其引入两个基本概念:

理想解:最优的解(方案),各个属性都达到了备选方案中的最好值

负理想解:最劣的解(方案),各个属性都达到了备选方案中的最坏值

Topsis法通过最接近理想解且最远离负理想解来确定最优选择

原始矩阵正向化

将所有指标类型转换为极大型指标

正向化矩阵后,要将矩阵标准化

正向化矩阵标准化

 标准化的目的在于消除不同指标量纲的影响

 计算得分并归一化

模型原理

Topsis在多目标决策分析中是一种非常有效的方法。通过归一化后的矩阵,找出理想解和负理想解,分别计算各个目标与理想解和负理想解的距离,获得各个目标和理想解的贴进度,按照贴进度的大小排序,以此作为评价目标优劣的依据。

贴进度取值在0~1之间,值越接近1,则目标越接近最有水平

基本步骤

Python代码

 


http://www.kler.cn/a/391699.html

相关文章:

  • 大数据技术之HBase中的HRegion
  • 2024.11.12_大数据的诞生以及解决的问题
  • stringUtils详细解释
  • 【网络工程】计算机硬件概述
  • 平替 Spring 正当时!Solon v3.0.3 发布
  • Stored procedures in PostgreSQL
  • C语言中操作符详解(中)
  • 在服务器里安装2个conda
  • 气膜结构赋能旧厂区焕新,多功能运动场馆的理想选择—轻空间
  • ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle
  • 基于Java+SpringBoot宠物管理系统
  • Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
  • 无人机动力测试台如何快速外接第三方传感器
  • ️️一篇快速上手 AJAX 异步前后端交互
  • 帝欧家居营收净利润大跌:以资抵债贡献较小,三大策略能否扭转?
  • Win7报错Couldn‘t switch to requested monitor resolution解决方案
  • MySQl基础----Linux下数据库的密码和数据库的存储引擎(内附 实操图和手绘图 简单易懂)
  • 新版 idea 编写 idea 插件时,启动出现 ClassNotFound
  • 【Flume实操】4 Flume 自定义 Interceptor 开发案例
  • 深度了解flink(十一) 心跳机制详解
  • jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
  • 2024.11.7- Redis的主从复制集群
  • LayUI组件国际化多国语言版本脚本-下篇根据语种替换
  • idea的mapper.xml文件里写sql语句出现Tag name expected错误提示
  • hadoop健康舆情研究-计算机毕业设计源码05954
  • 【计网】实现reactor反应堆模型 --- 处理数据发回问题 ,异常处理问题