数学建模模型算法-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.rhkb.cn/news/470060.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洞察鸿蒙生态,把握开发新机遇

随着科技的不断进步&#xff0c;鸿蒙系统以其独特的分布式架构和跨设备协同能力&#xff0c;逐渐在智能手机、智能穿戴、车载、家居等多个领域崭露头角&#xff0c;与安卓、iOS形成三足鼎立之势。作为一名开发者&#xff0c;我对鸿蒙生态的认知和了解如下&#xff1a; 一、鸿蒙…

uniapp打包华为,提示请提供64位版本软件包后再提交审核

HBuilder项目打包需要配置勾选arm64-v8a,默认只会集成armeabi-v7a

信捷 PLC C语言 POU 指示灯交替灭0.5秒亮0.5秒(保持型定时器)

1.在全局变量表中定义2个定时器变量timer_1,timer_2 名称 类型 timer_1 TMR_A_FB False -- False False timer_2 TMR_A_FB False -- False False ot2 BOOL False -- False False ot2表示指示灯 …

Apache ECharts

目录 1. 基本概念 1.1 ECharts的主要特点有&#xff1a; 1.2 ECharts的图形绘制方式&#xff1a; 2. 基本使用 3. 图表容器的大小 4. Option常用配置项 1. 基础配置项 title 标题组件 tooltip提示框组件 legend 图例组件 2.坐标配置项 grid网格组件 xAxis 直角坐标…

NVIDIA NIM 简介

NVIDIA NIM 简介 NVIDIA NIM 是一组易于使用的微服务&#xff0c;旨在加速在云、数据中心和工作站中部署生成式 AI 模型。NIM 按模型系列和每个模型分类。例如&#xff0c;用于大型语言模型 (LLM) 的 NVIDIA NIM 将最先进的 LLM 的强大功能带入企业应用程序&#xff0c;提供无…

常用中间件介绍

1. RabbitMQ RabbitMQ是一个基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff09;的开源消息代理软件&#xff0c;实现了面向消息的中间件。它支持消息持久化、队列、交换机&#xff08;Exchange&#xff09;和绑定&#xff08;Bin…

AI写作(四)预训练语言模型:开启 AI 写作新时代(4/10)

一、预训练语言模型概述 ​ 预训练语言模型在自然语言处理领域占据着至关重要的地位。它以其卓越的语言理解和生成能力&#xff0c;成为众多自然语言处理任务的关键工具。 预训练语言模型的发展历程丰富而曲折。从早期的神经网络语言模型开始&#xff0c;逐渐发展到如今的大规…

《云原生安全攻防》-- K8s安全防护思路

从本节课程开始&#xff0c;我们将正式进入防护篇。通过深入理解K8s提供的多种安全机制&#xff0c;从防守者的角度&#xff0c;运用K8s的安全最佳实践来保障K8s集群的安全。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s安全防护思路&#xff1a;掌握K8s自身提…

LLM之模型评估:情感评估/EQ评估/幻觉评估等

如果您想知道如何确保 LLM 在您的特定任务上表现出色&#xff0c;本指南适合您&#xff01;它涵盖了评估模型的不同方法、设计您自己的评估的指南以及来自实践经验的技巧和窍门。 Human-like Affective Cognition in Foundation Models&#xff1a;情感认知评估 研究者们提出了…

【JavaEE进阶】导读

本节⽬标 了解什么是JavaEE 在JavaEE中, 我们学习什么, 如何学, 难点是什么 一、Java EE 发展历程 Java EE(Java Platform Enterprise Edition), Java 平台企业版. 是JavaSE的扩展, ⽤于解决企业级的开发需求, 所以也可以称之为是⼀组⽤于企业开发的Java技术标准. 所以, 学习…

【韩老师零基础30天学会Java 】07章 面向对象编程(基础)

第七章 面向对象编程&#xff08;基础&#xff09; 1. 类与成员方法 类与对象关系示意图 示例&#xff1a;代码 import java.util.Scanner;public class IntDetail{public static void main(String[] args){Cat cat1new Cat();cat1.name"小花";cat1.age12;cat1.co…

超子物联网HAL库笔记:定时器[外部模式]篇

超子物联网 HAL库学习 汇总入口&#xff1a; 超子物联网HAL库笔记&#xff1a;[汇总] 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一、资源介绍&#xff1a;STM32F103C8T6定时器资源介绍 高级定时器&#x…

谷歌浏览器的自动翻译功能如何开启

在当今全球化的网络环境中&#xff0c;能够流畅地浏览不同语言的网页是至关重要的。谷歌浏览器&#xff08;Google Chrome&#xff09;提供了一项强大的自动翻译功能&#xff0c;可以帮助用户轻松跨越语言障碍。本文将详细介绍如何开启和使用谷歌浏览器的自动翻译功能&#xff…

【大数据技术基础 | 实验十】Hive实验:部署Hive

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤&#xff08;一&#xff09;安装部署&#xff08;二&#xff09;配置HDFS&#xff08;三&#xff09;启动Hive 六、实验结果&#xff08;一&#xff09;启动结果&#xff08;二&#xff09;Hive基…

使用 Vue 配合豆包MarsCode 实现“小恐龙酷跑“小游戏

作者&#xff1a;BLACK595 “小恐龙酷跑”&#xff0c;它是一款有趣的离线游戏&#xff0c;是Google给Chrome浏览器加的一个有趣的彩蛋。当我们浏览器断网时一只像素小恐龙便会出来提示断网。许多人认为这只是一个可爱的小图标&#xff0c; 但当我们按下空格后&#xff0c;小恐…

案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索

河北省某检察院是当地重要的法律监督机构&#xff0c;肩负着维护法律尊严和社会公平正义的重要职责。该机构依法独立行使检察权&#xff0c;负责对犯罪行为提起公诉&#xff0c;并监督整个诉讼过程&#xff0c;同时积极参与社会治理&#xff0c;保护公民权益&#xff0c;推动法…

7天用Go从零实现分布式缓存GeeCache(学习)(3)

目录结构 ├── geecache │ ├── byteview.go │ ├── cache.go │ ├── consistenthash │ │ ├── consistenthash.go │ │ └── consistenthash_test.go │ ├── geecache.go │ ├── go.mod │ ├── http.go │ ├── lru │ …

力扣 LeetCode 142. 环形链表II(Day2:链表)

解题思路&#xff1a; 使用set判断是否重复添加&#xff0c;如果set加入不进去证明之前到达过该节点&#xff0c;有环 public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while (cur …

CLion配置QT开发环境

一、将qmake工程转为cmake工程&#xff08;方法一&#xff1a;用工具转换并做适当修改&#xff09; 1、工具链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1grW2QY3sW8X2JaHWM_ePPw 提取码&#xff1a;7at4 工具源码:https://github.com/milahu/qmake2cmake 2、执行…

《AI 使生活更美好》

《AI 使生活更美好》 当我们步入科技腾飞的时代&#xff0c;人工智能&#xff08;AI&#xff09;如同一颗璀璨的新星&#xff0c;照亮了我们生活的每一个角落。它以惊人的速度改变着我们的世界&#xff0c;从医疗到教育&#xff0c;从交通到娱乐&#xff0c;AI 正以前所未有的力…