`

变权多因素模糊评判模型算法程序

阅读更多

       今天弄了个变权多因素模糊评判模型算法程序。也是帮同学完成论文上面的算法的。

    1 2 3 4
A1 (80,95] (90,100] (85,90] (85,95]
B1 A2 (15,25] (20,30] (10,20] (15,20]
A3 (85,100] (80,90] (80,90] (90,100]
A1 (85,90] (85,100] (85,95] (90,95]
B2 A2 (50,60] (60,65] (55,70] (50,60]
A3 (70,90] (80,90] (55,95] (80,85]
A1 (30,45] (35,40] (30,40] (40,45]
B3 A2 (65,70] (60,70] (70,75] (65,75]
A3 (85,95] (90,100] (80,95] (85,95]
A1 (45,50] (50,55] (50,60] (45,60]
B4 A2 (70,75] (70,80] (75,80] (70,80]
A3 (80,90] (75,85] (75,80] (80,90]

运行结果:

方案 A1 A2 A3 综合值 常权综合值
B1 0.684387 0.219464 0.096149 298.55008 276
B2 0.685332 0.218455 0.096214 598.88731 590.625
B3 0.685762 0.218167 0.09607 754.7995525 767.25
B4 0.685287 0.218548 0.096164 919.315045 936

这个问题好像是去解决物流中心选址等等。

下面给出VBA的代码:

'==================================
'作者:大漠.jxzhoumin
'时间:2008.6.2
'==================================
Option Base 1
Const ps = 4 '定义决策人常数
Const fs = 4 '定义方案的常数
Const ys = 3 '每种方案考虑因素的常数
Const sp = 5 '步长增加
Public AA(2 * ps) As Double
Public XX(fs, ys) As Double
Public max_num, min_num As Double
Public max_wj, min_wj As Double
Public wj(ys) As Double  '基础权重
Public w0(ys) As Double
Public r0(ys) As Double
Public r_x(ys) As Double
Public rx(ys) As Double
Public kk(ys) As Double
Sub main()
wj(1) = 0.55  '赋基础权向量值
wj(2) = 0.3
wj(3) = 0.15
max_wj = 0.55
min_wj = 0.15
Dim bqzs(ys) As Double, mid_num As Double, d As Double, d2 As Double
Call getX
Call getW0
Call getR
Call getK
With Worksheets("sheet2")
     For i = 1 To fs   '方案
         For j = 1 To ys  '因素
             mid_num = getBQZ(i, j)
             .Cells(i + 1, j + 1).Value = mid_num
             bqzs(j) = mid_num
         Next j
         For j = 1 To ys
             d = d + bqzs(j) * XX(i, j)  '综合值
             d2 = d2 + wj(j) * XX(i, j)  '常权综合值
         Next j
         .Cells(i + 1, 5).Value = d
         .Cells(i + 1, 6).Value = d2
     Next i
End With
End Sub
Sub getX()
Dim left_num, right_num As Double, mid_num As Double
Dim sum_num As Integer
For i = 1 To fs '方案
       For j = 1 To ys  '因素
            Call find_num(i, j) '获取某行的数组和该行最小值,最大值
            mid_num = 0
            For n = min_num To max_num - sp Step sp
                left_num = n
                right_num = left_num + sp
                sum_num = 0
                For m = 1 To 2 * ps Step 2
                   If AA(m) <= left_num And AA(m + 1) >= right_num Then
                        sum_num = sum_num + 1   '在区间范围则加1
                   End If
                Next m
                Dim u As Double
                u = Int(sum_num / ps * 1000000 + 0.5) / 1000000 '四舍五入,六位小数点
                If u <> 0 Then
                   mid_num = mid_num + Int(jifen(left_num, right_num, u, True) / jifen(left_num, right_num, u, False) * 1000000 + 0.5) / 1000000 '四舍五入,六位小数
                End If
            Next n
            XX(i, j) = mid_num
       Next j
Next i
End Sub
Sub find_num(ByVal i As Integer, ByVal j As Integer) '获取某行的数组和该行最小值,最大值
Dim t As Integer
Dim col_str As String
min_num = 1000000
max_num = 0
t = 0
With Worksheets("sheet1")
m = (i - 1) * 3 + j + 1 '行值
     For n = 3 To ps + 2
         t = t + 1
         col_str = Trim(.Cells(m, n).Value)
         AA(t) = Val(Mid(col_str, 2, (InStr(1, col_str, ",") - 2)))
         t = t + 1
         AA(t) = Val(Mid(col_str, (InStr(1, col_str, ",") + 1), (InStr(1, col_str, "]") - (InStr(1, col_str, ",")) - 1)))
     Next n
End With
For m = 1 To 2 * ps
    If AA(m) < min_num Then
        min_num = AA(m)    '得到最小值
    End If
Next m
For m = 1 To 2 * ps
    If AA(m) > max_num Then
        max_num = AA(m)    '得到最大值
    End If
Next m
End Sub
Sub getW0()
For i = 1 To ys
     w0(i) = Int(wj(i) / (max_wj + min_wj) * 1000000 + 0.5) / 1000000 '四舍五入,六位小数,得到w0数组
Next i
End Sub
Sub getR()
Dim mid_num As Double
For i = 1 To ys
    mid_num = 0
    For j = 1 To ys
        If i <> j Then
            mid_num = mid_num + wj(j)
        End If
    Next j
    r0(i) = Int(w0(i) * mid_num / (1 - w0(i)) * 1000000 + 0.5) / 1000000  '四舍五入,六位小数,得到r0数组
    rx(i) = mid_num  '得到rx数组
Next i
For i = 1 To ys
    mid_num = 0
    For j = 1 To ys
         If i <> j Then
            mid_num = mid_num + r0(j)
         End If
    Next j
    r_x(i) = mid_num '得到r_x数组
Next i
End Sub
Sub getK()
For i = 1 To ys
     kk(i) = 1 - (Int(1 / (r_x(i) * (Log(wj(i) / r0(i)))) * 1000000 + 0.5) / 1000000)
Next i
End Sub
Function getBQZ(ByVal i As Integer, ByVal j As Integer) As Double
Dim x As Double
Dim feizi, feimu As Double
x = XX(i, j) '获取某个方案的某个因素的x值
fenzi = r0(j) * Exp(((-1) * x ^ (1 - kk(j))) / ((1 - kk(j)) * r_x(j)))
For m = 1 To ys
    x = XX(i, m)
    fenmu = fenmu + r0(m) * Exp(((-1) * x ^ (1 - kk(m))) / ((1 - kk(m)) * r_x(m)))
Next m
getBQZ = Int(fenzi / fenmu * 1000000 + 0.5) / 1000000
End Function
Public Function jifen(ByVal a As Double, ByVal b As Double, u As Double, bl As Boolean) As Double
Dim n As Integer
Dim h As Double, T1n As Double, T2n As Double, I1n  As Double, I2n As Double
n = 1                          '初值
Const eps = 0.00000001         '积分精度
h = b - a
T2n = h * (f(a, u, bl) + f(b, u, bl)) / 2 '梯形公式计算面积近似值
I2n = h * (f(a, u, bl) + f(b, u, bl)) / 2
I1n = 0
Do While Abs(I2n - I1n) >= eps  '求积分,当上次积分值I1n与本次积分值I2n之差小于esp时,
                                '则认为所求积分的近似度已达到要求
     T1n = T2n
     I1n = I2n
     Dim sigma As Double
     sigma = 0
     Dim k As Integer
     For k = 0 To n - 1          '求变步长梯形的和部分
         Dim x As Double
         x = a + (k + 0.5) * h
         sigma = sigma + f(x, u, bl)
     Next k
     T2n = (T1n + h * sigma) / 2  '变步长梯形
     I2n = (4 * T2n - T1n) / 3    '辛普森公式
     n = n * 2                    '划分
     h = h / 2
Loop
jifen = I2n                       '最后结果
'MsgBox jifen
End Function
Function f(x As Double, u As Double, bl As Boolean) As Double
If bl = True Then
    f = u * x  '分子积分
Else: f = u    '分母积分
End If
End Function
Function test()
End Function

  

分享到:
评论

相关推荐

    多级模糊综合评判算法的实现及应用

    多级模糊综合评判算法是一种基于模糊数学理论的方法,它能够通过综合考量多个因素来对某个对象或事件进行评估。这种方法特别适用于那些评判标准不明确、难以用传统定量方法分析的情况。本文介绍了一种使用Visual C++...

    模糊综合评判的matlab实现

    在MATLAB程序中实现模糊综合评判的算法通常涉及到使用模糊数学工具箱中的一些函数和方法。例如,可以使用`fuzzy`函数来创建模糊逻辑系统,使用`evalfis`函数来评估模糊逻辑系统,或者直接在MATLAB中进行矩阵运算来...

    企业技术创新的多目标模糊决策模型及MATLAB实现

    传统的多目标决策方法,如模糊综合评判法,在处理企业技术创新时存在一定的局限性,尤其是当面临多个相互冲突的目标时,评价结果往往分辨率不高,无法准确区分不同方案之间的优劣。因此,作者们提出了一种新的模型,...

    基于AHP的城市抗震防御能力二级模糊综合评判

    本文采用的二级模糊综合评判法是在传统模糊综合评判法基础上的改进,它根据城市抗震防御能力评估的特点,将评价因素分为若干子系统和次级因素,利用模糊数学原理对各因素进行量化和综合分析。通过Matlab语言编程,...

    大数据-算法-武汉市大气环境质量评价模糊数学模型的研究.pdf

    本文探讨了如何利用大数据与算法相结合的模糊数学模型,对武汉市的大气环境质量进行评估,并为其他城市提供参考。 武汉市作为我国中部地区的重要城市,近年来经济社会发展迅速,人口密度和工业活动的增加也带来了...

    模糊数学实用算法共8节

    模糊数学实用算法共8节,涵盖了多个在信息技术和数据分析领域中的关键概念,这些概念对于理解和应用模糊系统至关重要。以下是对每个部分的详细解释: 1. 隶属函数:隶属函数是模糊数学的基础,用于描述元素对集合的...

    MATLAB遗传算法工具箱的火力分配模型.pdf

    此外,文章中还提到了对目标的威胁程度评估值的确定方法,例如可以使用模糊综合评判法或层次分析法等。 遗传算法在求解过程中,需要定义编码方式、适应度函数、选择策略、交叉和变异操作等基本操作步骤。编码方式是...

    基于结构相似匹配的SQL程序自动评估模型研究.pdf

    研究面临的挑战是SQL语言编程能力评估中的多因素影响以及评判标准界限的模糊特性,这导致了评估难度和偏差的产生。为解决这个问题,作者提出了一个结合了静态评估和动态评估方法的模型框架。这个框架首先将提交的SQL...

    建设项目社会稳定风险评估——基于模糊神经网络的实证研究.pdf

    8. **MATLAB编程实现**:MATLAB是一种强大的计算和数据分析工具,适合用于实现复杂算法,如模糊神经网络模型,进行数值计算和模型构建。 9. **实证研究**:通过实际案例(福州市新店外环路西段道路工程)验证提出的...

    淡水养殖池塘水华发生及池水净化处理问题(数学建模)

    在充分利用附件数据并对其进行统计学预处理的基础上,综合运用了模糊评价、最小距离聚类算法、多元线性回归、最小二乘分析等方法建立一系列数学模型,分析水华爆发原因并对其进行预测,最后结合模型提出解决该问题的...

    18秋西南大学 1085《智能控制》作业答案.pdf

    这些知识点涵盖了智能控制中的核心概念和技术,如神经网络的构造和学习、专家系统的设计原理、遗传算法的参数设定、模糊控制的逻辑规则和模糊系统的分类,以及智能控制理论的基础。这些内容对于理解和应用智能控制...

    基于Matlab的大卖场服装零售绩效评估.pdf

    本文讨论了如何运用Matlab软件对大卖场服装零售绩效进行评估,重点在于通过层次分析法(AHP)和模糊综合评价法,建立评估模型,以及利用Matlab程序对评估指标权重进行计算和一致性检验,从而优化计算过程并提升数据...

    基于XML的船舶防污染设备实操评估智能仿真系统开发.pdf

    船员在完成模拟操作后,系统会立即依据XML存储的评判标准和模糊评判算法进行自动化评分,同时提供详细的反馈,帮助船员了解自身操作的不足,以便进行改进。 在实际应用中,该系统已通过船员考试中心的测试,证明其...

    算法参考资料智能小车路径识别及速度控制系统的实现

    - 模糊控制算法:模糊逻辑控制器通过模拟人的推理方法来处理不确定信息,用于控制复杂、难以建模的系统。 - 机器学习算法:利用历史数据训练模型,进行预测和决策,以优化速度控制策略。 5. 百度网盘分享地址的作用...

    平滑参数α的确定及其在边坡预测中的应用研究

    在引言中提到,学者们提出了众多的边坡预测模型,包括Verhu1St模型、稳定模糊综合评判模型、灰色系统模型、卡尔曼滤波分析法等。每种方法都有其适用范围和局限性,指数平滑法由于其适用性和简便性,成为研究的热点。...

    2020年电子设计竞(吉林赛区)赛试题.zip

    3. **控制类**:在电子设计竞赛中,控制理论的应用至关重要,包括PID控制、模糊控制、模型预测控制等。参赛者需要了解如何将这些理论应用于实际的硬件系统,比如电机控制、传感器数据处理等。此外,了解嵌入式系统的...

Global site tag (gtag.js) - Google Analytics