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

news2024/11/13 15:06:33

一、评价决策类

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.coloradmin.cn/o/2239470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux-vlan(1)

# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…

spring cloud 入门笔记1(RestTemplate,Consul)

最大感受&#xff1a; spring cloud无非是将spring boot中的各个工作模块拆分成独立的小spring boot&#xff0c;各个模块之间&#xff0c;不再是通过导包什么的&#xff0c;调用而是通过网路进行各个模块之间的调用 工具一&#xff1a;RestTemplate 在Java代码中发送HTTP请…

FlinkSql读取kafka数据流的方法(scala)

我的scala版本为2.12 <scala.binary.version>2.12</scala.binary.version> 我的Flink版本为1.13.6 <flink.version>1.13.6</flink.version> FlinkSql读取kafka数据流需要如下依赖&#xff1a; <dependency><groupId>org.apache.flink&…

Docker 安装Immich教程

Immich 是一个开源的自托管照片和视频管理平台,专为帮助用户存储、管理、和分享个人媒体库而设计。Immich 的目标是提供一个类似 Google Photos 的替代方案,但不依赖于第三方服务,用户可以完全控制自己的数据。 本章教程,记录如何用Docker部署安装Immich,使用的操作系统的…

【CICD】CICD 持续集成与持续交付在测试中的应用

一、什么是CICD&#xff1f; CI/CD 是指持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09; 1.1 持续集成&#xff08;Continuous Integration&#xf…

交友问题 | 动态规划

描述 如果有n个人&#xff0c;每个人都可以保持单身或与其他人结成一对。每个人只能找一个对象。求总共有多少种保持单身或结对的方式。用动态规划求解。 输入 输入第一行t表示测试用例的数量 对于每一个测试用例, 输入一个整数n表示人数1<n<18 输出 针对每个测试用…

Web开发:ABP框架6——appsetting.json的读取以及实例的注入

目录 一、模块配置服务 二、配置服务的编写&#xff08;配置ORM&#xff09; 三、高层代码的运用&#xff08;ORM实例查询 & 获取字符串&#xff09; 一、模块配置服务 BookStoreHttpApiHostModule 二、配置服务的编写&#xff08;配置ORM&#xff09; (以freesql为例子…

tomcat启动运行乱码,解决方案

tomcat启动运行乱码,解决方案 不要修改系统设置;我们是要让tomcat兼容我们系统,不是让系统兼容tomcat。不要修改系统设置;我们是要让tomcat兼容我们系统,不是让系统兼容tomcat。不要修改系统设置;我们是要让tomcat兼容我们系统,不是让系统兼容tomcat。解决方案 找到你的…

UE5材质篇 3 MaterialFunction

这个可以避免一部分的蜘蛛网&#xff0c;这样就用的时候很多蜘蛛网缩小成为一个节点 https://dev.epicgames.com/documentation/en-us/unreal-engine/creating-and-using-material-functions-in-unreal-engine 首先创建一个&#xff0c;这里这个名字他就是函数名&#xff0c;后…

linux命令详解,文件系统权限相关

文件系统权限相关 linux系统中一切都是文件 查看权限 Is -la /etc/passwd更改文件所有者 chown root file修改文件权限 sudo chmod urwx,grw,o-r file sudo chmod ux,gtw,o-r file chmod 400 <file>一、Linux系统中一切都是文件 在linux系统中&#xff0c;几乎所有的…

基本数据类型和包装类型的区别、缓存池、自动拆箱装箱(面试题)

目录 1. 八种基本类型及对应包装类型 2. 基本类型和包装类型 区别 3. 自动拆箱装箱 3.1 自动装箱 3.2 自动拆箱 3.3 缓存池 4. 高频面试案例分析 1. 八种基本类型及对应包装类型 基本数据类型类型描述范围&#xff08;指数形式&#xff09;位数包装类型byte整型&#x…

如何在Microsoft Edge中删除已保存的网站密码

目录 前言1. 如何进入Edge的密码管理界面1.1 打开Microsoft Edge的设置菜单1.2 进入个人资料设置1.3 进入密码管理 2. 在Edge中查看和删除已保存的密码2.1 查找需要删除的密码2.2 检查密码安全性2.3 删除特定网站的密码 3. 提升Edge密码管理的安全性3.1 启用Edge的多重身份验证…

Spring Boot框架:电商开发的新趋势

5 系统实现 系统实现部分就是将系统分析&#xff0c;系统设计部分的内容通过编码进行功能实现&#xff0c;以一个实际应用系统的形式展示系统分析与系统设计的结果。前面提到的系统分析&#xff0c;系统设计最主要还是进行功能&#xff0c;系统操作逻辑的设计&#xff0c;也包括…

后端:Aop 面向切面编程

文章目录 1. Aop 初步学习面向切面编程&#xff0c;EnableAspectJAutoProxy2. AOP的核心概念3. 前置通知&#xff08;Before&#xff09;4. 后置通知&#xff08;After&#xff09;5. 返回通知&#xff08;AfterReturning&#xff09;6. 异常通知&#xff08;AfterThrowing&…

三周精通FastAPI:41 部署:FastAPI版本和HTTPS概念

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/deployment/versions/ 关于 FastAPI 版本 FastAPI 已在许多应用程序和系统的生产环境中使用。 并且测试覆盖率保持在100%。 但其开发进度仍在快速推进。 经常添加新功能&#xff0c;定期修复错误&#xff0c;并且代码仍…

Pinpoint(APM)进阶--Pinot指标采集(System Metric/Inspector)

接上文 Pinpoint使用Pinot进行指标数据存储&#xff0c;Pinot流摄入需要Kafka 本文详解Kafka和Pinot的安装部署&#xff0c;以及Pinpoint的指标采集 Pinot 简介 Apache Pinot是一个实时分布式OLAP数据存储&#xff0c;专为低延迟、高吞吐量分析而构建&#xff0c;非常适合面…

ReactPress:重塑内容管理的未来

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress&#xff1a;重塑内容管理的未来 在当今信息爆炸的时代&#xff0c;一个高效、易用的内容管理系统&#xff0…

uniapp路由与页面跳转详解:API调用与Navigator组件实战

UniApp路由与页面跳转详解&#xff1a;API调用与Navigator组件实战 路由 uniapp页面路由为框架统一管理&#xff0c;开发者需要在page.json里面配置每个路由页面的路径及页面样式。 路由跳转 uniapp有两种页面路由跳转方式&#xff0c;调用API跳转和navigator组件跳转。 调…

35.Redis 7.0简介

2022 年 2 月初&#xff0c;Redis 7.0 迎来了首个候选发布&#xff08;RC&#xff09;版本。这款内存键值数据库迎来了“重大的性能优化”和其它功能改进&#xff0c;性能优化包括降低写入时复制内存的开销、提升内存效率&#xff0c;改进 fsync 来避免大量的磁盘写入和优化延迟…

MySQL技巧之跨服务器数据查询:基础篇-如何获取查询语句中的参数

MySQL技巧之跨服务器数据查询&#xff1a;基础篇-如何获取查询语句中的参数 上一篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQL 以…