文章目录

  • 算法简介
  • 调用示例
    • 例题
    • 主函数
      • 代码
      • 结果
  • 具体实现
    • 准备函数
    • Step1:指标数据的三角形模糊数表达
    • Step2: 模糊指标矩阵 F 归一化处理
    • Step3: 构造模糊决策矩阵
    • Step4: 确定模糊正理想 M + 与模糊负理想 M −
    • Step5:确定评价对象i 与 M +、M- 之间的距离 di+、di-
    • Step6:模糊优选决策

算法简介

调用示例

例题


主函数

代码

def main():array = [[290, 'A', 'A', 'B', 'B'],[288, 'A', 'B', 'A', 'C'],[288, 'B', 'A', 'D', 'C'],[285, 'A', 'B', 'B', 'B'],[283, 'B', 'A', 'B', 'C'],[283, 'B', 'D', 'A', 'B'],[280, 'A', 'B', 'C', 'B'],[280, 'B', 'A', 'A', 'C'],[280, 'B', 'B', 'A', 'B'],[280, 'D', 'B', 'A', 'C'],[278, 'D', 'C', 'B', 'A'],[277, 'A', 'B', 'C', 'A'],[275, 'B', 'C', 'D', 'A'],[275, 'D', 'B', 'A', 'B'],[274, 'A', 'B', 'C', 'B'],[273, 'B', 'A', 'B', 'C']]targetMap = {'A': (85, 90, 100), 'B': (75, 80, 85), 'C': (60, 70, 75), 'D': (50, 55, 60)}F = toTriangle(array, targetMap)print("F:", F)R = normalization(F, 1)print("R:", R)weightArray = [[0.5, 0.125, 0.125, 0.125, 0.125]]W = toTriangle(weightArray, {})D = construction(R, W)Wp, Wl = ideal(D)dp, dl = distance(D, Wp, Wl)miu = choose(dp, dl)print("miu", miu)

结果

F: [[(290, 290, 290), (85, 90, 100), (85, 90, 100), (75, 80, 85), (75, 80, 85)], [(288, 288, 288), (85, 90, 100), (75, 80, 85), (85, 90, 100), (60, 70, 75)], [(288, 288, 288), (75, 80, 85), (85, 90, 100), (50, 55, 60), (60, 70, 75)], [(285, 285, 285), (85, 90, 100), (75, 80, 85), (75, 80, 85), (75, 80, 85)], [(283, 283, 283), (75, 80, 85), (85, 90, 100), (75, 80, 85), (60, 70, 75)], [(283, 283, 283), (75, 80, 85), (50, 55, 60), (85, 90, 100), (75, 80, 85)], [(280, 280, 280), (85, 90, 100), (75, 80, 85), (60, 70, 75), (75, 80, 85)], [(280, 280, 280), (75, 80, 85), (85, 90, 100), (85, 90, 100), (60, 70, 75)], [(280, 280, 280), (75, 80, 85), (75, 80, 85), (85, 90, 100), (75, 80, 85)], [(280, 280, 280), (50, 55, 60), (75, 80, 85), (85, 90, 100), (60, 70, 75)], [(278, 278, 278), (50, 55, 60), (60, 70, 75), (75, 80, 85), (85, 90, 100)], [(277, 277, 277), (85, 90, 100), (75, 80, 85), (60, 70, 75), (85, 90, 100)], [(275, 275, 275), (75, 80, 85), (60, 70, 75), (50, 55, 60), (85, 90, 100)], [(275, 275, 275), (50, 55, 60), (75, 80, 85), (85, 90, 100), (75, 80, 85)], [(274, 274, 274), (85, 90, 100), (75, 80, 85), (60, 70, 75), (75, 80, 85)], [(273, 273, 273), (75, 80, 85), (85, 90, 100), (75, 80, 85), (60, 70, 75)]]
R: [[(1.0, 1.0, 1.0), (0.85, 1.0, 1.0), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.75, 0.8888888888888888, 1.0)], [(0.993103448275862, 0.993103448275862, 0.993103448275862), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706)], [(0.993103448275862, 0.993103448275862, 0.993103448275862), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.5, 0.6111111111111112, 0.7058823529411765), (0.6, 0.7777777777777778, 0.8823529411764706)], [(0.9827586206896551, 0.9827586206896551, 0.9827586206896551), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.75, 0.8888888888888888, 1.0), (0.75, 0.8888888888888888, 1.0)], [(0.9758620689655172, 0.9758620689655172, 0.9758620689655172), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706)], [(0.9758620689655172, 0.9758620689655172, 0.9758620689655172), (0.75, 0.8888888888888888, 1.0), (0.5, 0.6111111111111112, 0.7058823529411765), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0)], [(0.9655172413793104, 0.9655172413793104, 0.9655172413793104), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706), (0.75, 0.8888888888888888, 1.0)], [(0.9655172413793104, 0.9655172413793104, 0.9655172413793104), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.85, 1.0, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706)], [(0.9655172413793104, 0.9655172413793104, 0.9655172413793104), (0.75, 0.8888888888888888, 1.0), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0)], [(0.9655172413793104, 0.9655172413793104, 0.9655172413793104), (0.5, 0.6111111111111112, 0.7058823529411765), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706)], [(0.9586206896551724, 0.9586206896551724, 0.9586206896551724), (0.5, 0.6111111111111112, 0.7058823529411765), (0.6, 0.7777777777777778, 0.8823529411764706), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0)], [(0.9551724137931035, 0.9551724137931035, 0.9551724137931035), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706), (0.85, 1.0, 1.0)], [(0.9482758620689655, 0.9482758620689655, 0.9482758620689655), (0.75, 0.8888888888888888, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706), (0.5, 0.6111111111111112, 0.7058823529411765), (0.85, 1.0, 1.0)], [(0.9482758620689655, 0.9482758620689655, 0.9482758620689655), (0.5, 0.6111111111111112, 0.7058823529411765), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0)], [(0.9448275862068966, 0.9448275862068966, 0.9448275862068966), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706), (0.75, 0.8888888888888888, 1.0)], [(0.9413793103448276, 0.9413793103448276, 0.9413793103448276), (0.75, 0.8888888888888888, 1.0), (0.85, 1.0, 1.0), (0.75, 0.8888888888888888, 1.0), (0.6, 0.7777777777777778, 0.8823529411764706)]]
D: [[(0.5, 0.5, 0.5), (0.10625, 0.125, 0.125), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.09375, 0.1111111111111111, 0.125)], [(0.496551724137931, 0.496551724137931, 0.496551724137931), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882)], [(0.496551724137931, 0.496551724137931, 0.496551724137931), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.0625, 0.0763888888888889, 0.08823529411764706), (0.075, 0.09722222222222222, 0.11029411764705882)], [(0.49137931034482757, 0.49137931034482757, 0.49137931034482757), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.09375, 0.1111111111111111, 0.125)], [(0.4879310344827586, 0.4879310344827586, 0.4879310344827586), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882)], [(0.4879310344827586, 0.4879310344827586, 0.4879310344827586), (0.09375, 0.1111111111111111, 0.125), (0.0625, 0.0763888888888889, 0.08823529411764706), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125)], [(0.4827586206896552, 0.4827586206896552, 0.4827586206896552), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882), (0.09375, 0.1111111111111111, 0.125)], [(0.4827586206896552, 0.4827586206896552, 0.4827586206896552), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.10625, 0.125, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882)], [(0.4827586206896552, 0.4827586206896552, 0.4827586206896552), (0.09375, 0.1111111111111111, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125)], [(0.4827586206896552, 0.4827586206896552, 0.4827586206896552), (0.0625, 0.0763888888888889, 0.08823529411764706), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882)], [(0.4793103448275862, 0.4793103448275862, 0.4793103448275862), (0.0625, 0.0763888888888889, 0.08823529411764706), (0.075, 0.09722222222222222, 0.11029411764705882), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125)], [(0.47758620689655173, 0.47758620689655173, 0.47758620689655173), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882), (0.10625, 0.125, 0.125)], [(0.47413793103448276, 0.47413793103448276, 0.47413793103448276), (0.09375, 0.1111111111111111, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882), (0.0625, 0.0763888888888889, 0.08823529411764706), (0.10625, 0.125, 0.125)], [(0.47413793103448276, 0.47413793103448276, 0.47413793103448276), (0.0625, 0.0763888888888889, 0.08823529411764706), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125)], [(0.4724137931034483, 0.4724137931034483, 0.4724137931034483), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882), (0.09375, 0.1111111111111111, 0.125)], [(0.4706896551724138, 0.4706896551724138, 0.4706896551724138), (0.09375, 0.1111111111111111, 0.125), (0.10625, 0.125, 0.125), (0.09375, 0.1111111111111111, 0.125), (0.075, 0.09722222222222222, 0.11029411764705882)]]
Mp [0.5, 0.5, 0.5, 0.10625, 0.125, 0.125, 0.10625, 0.125, 0.125, 0.10625, 0.125, 0.125, 0.10625, 0.125, 0.125]
Ml [0.4706896551724138, 0.4706896551724138, 0.4706896551724138, 0.0625, 0.0763888888888889, 0.08823529411764706, 0.0625, 0.0763888888888889, 0.08823529411764706, 0.0625, 0.0763888888888889, 0.08823529411764706, 0.075, 0.09722222222222222, 0.11029411764705882]
dp: [0.02642541332005618, 0.04846909807166661, 0.08931964895784993, 0.035642707165647436, 0.055675063261347454, 0.08224371390676369, 0.05961986552111227, 0.05661605011114437, 0.044036907081143446, 0.09399001730109596, 0.09605474149749675, 0.06181194069490626, 0.09974401086893522, 0.09128849064772634, 0.07032587941863243, 0.0723879950331682]
dl [0.13464526323229192, 0.12960660126838533, 0.1056840804959267, 0.12141390387929181, 0.11656851776089829, 0.10399570774149292, 0.10694466329056837, 0.12340304309367657, 0.11787336572660864, 0.09797736893133582, 0.08245051590128073, 0.11111513038789449, 0.08130689098260824, 0.09979470710587426, 0.10492425446568421, 0.1126784089850549]
miu [('1号对象', 0.8359390182888572), ('4号对象', 0.7730582181258907), ('9号对象', 0.7280165963685844), ('2号对象', 0.7278174492572936), ('8号对象', 0.6854997483698679), ('5号对象', 0.6767655262917643), ('12号对象', 0.6425548625332956), ('7号对象', 0.6420614524205268), ('16号对象', 0.6088539385784991), ('15号对象', 0.5987114083173548), ('6号对象', 0.5583979311206502), ('3号对象', 0.5419592783787137), ('14号对象', 0.5222578870307493), ('10号对象', 0.5103854923185025), ('11号对象', 0.46189404784357574), ('13号对象', 0.44908304875099464)]

具体实现

由于numpy矩阵运算不支持这种特殊的三角模糊数计算,所以我这里主要用二维列表嵌套元组实现。

准备函数

由于后面不少地方需要找到矩阵每列的最值,所以我封装了两个方法。

def findMin(F):''':param F::return:  返回矩阵每列的最小值'''columnMin = []for column in range(0, F.shape[1]):amin = F[0, column][0]bmin = F[0, column][1]cmin = F[0, column][2]for row in range(0, F.shape[0]):target = F[row, column]if amin > target[0]:amin = target[0]if bmin > target[1]:bmin = target[1]if cmin > target[2]:cmin = target[2]columnMin.append([amin, bmin, cmin])return columnMindef findMax(F):''':param F::return:  返回矩阵每列的最大值'''columnMax = []for column in range(0, F.shape[1]):amax = F[0, column][0]bmax = F[0, column][1]cmax = F[0, column][2]for row in range(0, F.shape[0]):target = F[row, column]if amax < target[0]:amax = target[0]if bmax < target[1]:bmax = target[1]if cmax < target[2]:cmax = target[2]columnMax.append([amax, bmax, cmax])return columnMax

Step1:指标数据的三角形模糊数表达

def toTriangle(array, targetMap):''':param array:           存储原始数据的二维数组,行为每个比较对象,列为不同指标:param targetMap:      一个定性指标到三角模糊数的映射关系:return:                返回未归一化的模糊指标矩阵'''F = []for targetList in array:row = []for target in targetList:## 对于小数,需要截取if str(target).split('.')[0].isdigit():item = (target, target, target)else:item = targetMap[target]row.append(item)F.append(row)return F

Step2: 模糊指标矩阵 F 归一化处理

def normalization(F, type):''':param F:    原模糊指标矩阵:param type:  0表示成本型,1表示收益型:return:      归一化后的模糊指标矩阵,二维列表套元组形式'''R = []for i in range(0, len(F)):row = []## 找最小值if type == 0:columnM = findMin(np.array(F))## 找最大值elif type == 1:columnM = findMax(np.array(F))for j in range(0, len(F[i])):x = F[i][j]## 无论最大最小均取出相应位置的最值xM = columnM[j]aM = xM[0]bM = xM[1]cM = xM[2]if type == 0:y = (aM/x[2], bM/x[1], min(cM/x[0], 1.0))elif type == 1:y = (x[0]/cM, x[1]/bM, min(x[2]/aM, 1.0))row.append(y)R.append(row)return R

Step3: 构造模糊决策矩阵

def construction(R, W):''':param R:  归一化的模糊指标矩阵:param W:   三角模糊数的权重向量:return:    模糊决策矩阵'''D = []for i in range(0, len(R)):for j in range(0, len(R[i])):R[i][j] = (R[i][j][0] * W[0][j][0], R[i][j][1]*W[0][j][1], R[i][j][2]*W[0][j][2])D = Rprint("D:", D)return D

Step4: 确定模糊正理想 M + 与模糊负理想 M −

def ideal(D):''':param D:  模糊决策矩阵:return:    模糊理想'''columnMin = findMin(np.array(D))columnMax = findMax(np.array(D))Mp = []Ml = []for i in range(0, len(columnMin)):for j in range(0, len(columnMin[i])):Mp.append(columnMax[i][j])Ml.append(columnMin[i][j])print("Mp", Mp)print("Ml", Ml)return Mp, Ml

Step5:确定评价对象i 与 M +、M- 之间的距离 di+、di-

def distance(D, Mp, Ml):dp = []dl = []for i in range(0, len(D)):sump = 0suml = 0for j in range(0, len(D[i])):for k in range(0, 3):residualp = D[i][j][k] - Mp[j*3+k]residuall = D[i][j][k] - Ml[j*3+k]sump = sump + residualp*residualpsuml = suml + residuall*residualldp.append(sqrt(sump))dl.append(sqrt(suml))print("dp:", dp)print("dl", dl)return dp, dl

Step6:模糊优选决策

def choose(dp, dl):miu = {}for i in range(0, len(dp)):miu[str(i+1)+"号对象"] = dl[i] / (dp[i] + dl[i])return sorted(miu.items(), key=lambda term: term[1], reverse=True)

数学建模入门-python实现模糊多属性决策相关推荐

  1. 数学建模入门-python拟合曲面

    前言 找了好久python拟合曲面的方法,没找到,就借鉴 https://blog.csdn.net/Haipai1998/article/details/85345823 这篇博客,对方法进行封装更 ...

  2. 数学建模入门 方法及代码

    数学建模入门 数学模型 (1)原型与模型 模型是原型的替代物.(对原型提炼构造.) 模型不是原型,既简单于原型又高于原型. 模型的分类 数学模型是对特定对象,特定目的,根据特有的内在规律,做出一些必要 ...

  3. 数学建模竞赛用python_2018全国中学生数学建模与Python编程夏令营

    全国中学生数学建模与Python编程夏令营招生简章 为什么要学习数学建模? 1)国务院关于新一代人工智能发展<规划>:在中小学阶段设置人工智能相关课程,实施全民智能教育项目,在中小学阶段设 ...

  4. 简述数学建模的过程_数学建模入门知识分享(一):什么是数模

    0 一个不是那么标准的Introduction 2019年的美赛结束于1月29日,接近一年多对数学建模的不断学习,终于有了些数模的感触,这个系列就简单从几个方面比较系统的阐述一下数模的基本问题,本人在 ...

  5. 【MATLAB】数学建模入门方法综述

    数学建模入门方法综述

  6. 备战数学建模(Python)

    备战数学建模(Python) Python之建模规划篇 Python之建模数值逼近篇 Python之建模微分方程篇 由于美国大学生数学建模大赛很快就要开赛了,所以我就打算在这几天内,好好的看看< ...

  7. python数学建模大赛_2018全国中学生数学建模与Python编程冬令营

    全国中学生数学建模与Python编程冬令营招生简章 为什么要学习数学建模? 1)国务院关于新一代人工智能发展<规划>:在中小学阶段设置人工智能相关课程,实施全民智能教育项目,在中小学阶段设 ...

  8. Part III.S1. 基于离差最大化的直觉模糊多属性决策方法

    1.1 属性权重完全未知情形下的直觉模糊多属性决策方法 1.1.1 问题描述   设某多属性决策问题有 m m m个方案 Y i ( i = 1 , 2 , - m ) Y_{i}\left(i=1, ...

  9. Part III.S3. 对方案有偏好的直觉模糊多属性决策方法

    3.1 问题描述   设某多属性决策问题有 m m m个方案 Y i ( i = 1 , 2 , ⋯ , m ) Y_{i}\left(i=1,2,\cdots,m\right) Yi​(i=1,2, ...

最新文章

  1. 姚期智施尧耘获FOCS 2021时间检验奖,MIT华人摘最佳学生论文奖
  2. 服务器接收ios图片无法显示,IOS下图片不能显示问题的解决办法
  3. 存储过程能用if not exist_C++核心准则T.48:如果不能用概念,用enable_if
  4. day 05总结(格式化输出的三种方式/基本运算符/if判断)
  5. 95-910-144-源码-FlinkSQL-Flink的UDF
  6. mysql的事务日志_MySQL 事务日志
  7. Java基础学习总结(67)——Java接口API中使用数组的缺陷
  8. 我的世界服务器传送系统,我的世界多人服务器任何人都没权限了 不能回主城 不能传送 等等...
  9. centos7下Jenkins管理员admin密码忘记后处理方法
  10. 2017.8.15 数据库
  11. 微信小程序之移动端适配
  12. c++ primer plus 第十四章 C++中的代码重用
  13. 三、Allan方差分析
  14. 思翼FM30高频头蓝牙数传连接地面站远距离通信功能
  15. 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳n级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)
  16. 这款养蛙游戏火爆了朋友圈,游戏开发程序员已赚翻!
  17. 【蓝桥杯】 次数差:x 星球有 26 只球队,分别用 a ~ z 的 26 个字母代表。他们总是不停地比赛。 在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。 国王...
  18. w ndows7怎么安装,《联想Y460在Wndows7系统下完美安装XP系统的方法.doc
  19. 模型推理时显存不足问题
  20. (数字IC)低功耗设计入门(二)——功耗的分析+Comments

热门文章

  1. Markdown 生成侧边目录
  2. java格式错误什么意思_常见异常意思
  3. 四种游泳姿势的动画图解-【蝶泳、仰泳、自由泳、蛙泳】
  4. foxmail客户端,写邮件窗口弹不出来
  5. 战舰霸主服务器维护时间多长,战舰霸主攻略全面评测报告
  6. CHM帮助文档的制作
  7. 宝藏又小众的Maya软件插件素材网站分享
  8. 【电信学】【2018.09】用于室外行人导航的头戴式增强现实技术
  9. 关于edushi的想像
  10. Tare_Planner小项目---->2D雷达的数据接口(一)3转2转伪3