数学建模——多属性决策模型

多属性决策模型简介

多属性决策是现代决策科学的一个重要组成部分,它的理论和方法在工程设计、经济、管理和军事等诸多领域中有着广泛的应用,如:投资决策、项目评估、维修服务、武器系统性能评定、工厂选址、投标招标、产业部门发展排序和经济效益综合评价等.多属性决策的实质是利用已有的决策信息通过一定的方式对一组(有限个)备选方案进行排序择优

它由两部分组成

  • 获取决策信息,属性权重和属性值。
  • 通过一定的方法对决策信息进行排序或择优

信息集结的方法

  • 加权算术平均算子(WAA)
  • 加权几何平均算子(WGA)
  • 有序加权平均算子(OWA)

其中的加权算术平均算子最为重要,只对该算子进行讨论

设函数 W A A : R n → R WAA:R^n\rightarrow R WAA:RnR
W A A w ( a 1 , a 2 , ⋯   , a n ) = ∑ i = 1 n w i a i WAA_{w}(a_1,a_2,\cdots,a_n)=\sum_{i=1}^{n}w_ia_i WAAw(a1,a2,,an)=i=1nwiai
其中 w ( w 1 , w 2 , ⋯   , w n ) w(w_1,w_2,\cdots,w_n) w(w1,w2,,wn) a ( a 1 , a 2 , ⋯   , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,,an)的权重, w i ∈ [ 0 , 1 ] , 1 ≤ i ≤ n , ∑ i = 1 n w i = 1 w_i\in[0,1],1\leq i \leq n,\sum_{i=1}^{n}w_i=1 wi[0,1],1in,i=1nwi=1
则称函数WAA为加权算术平均算子。

但一般来说,属性值的量纲一般不同,例如:衡量一个企业的指标有:
产值(万元),投资成本(万元),销售额(万元),国家收益比重,环境污染程度。

不同的衡量标准使得决策矩阵不统一,因此归一化决策矩阵是十分必要的。

属性值的归一化

属性值类型

  1. 效益型:属性值越大越好
  2. 成本型:属性值越小越好
  3. 固定型:属性值越接近某个固定值 α i \alpha_i αi越好。
  4. 偏离型:属性值越偏离某个固定值 β j \beta_j βj越好。
  5. 区间型:属性值越接近某个固定区间 [ q i , q j ] [q^i,q^j] [qi,qj]越好。
  6. 偏离区间型:属性值越偏离某个固定区间 [ q i , q j ] [q^i,q^j] [qi,qj]越好。

各类属性值归一化的公式如下:
效益型
r i j = a i j m a x   a i j    o r    r i j = a i j − m i n   a i j m a x   a i j − m i n   a i j r_{ij}=\frac{a_{ij}}{max \, a_{ij}} \;or\; r_{ij}=\frac{a_{ij}-min\,a_{ij}}{max\,a_{ij}-min\,a_{ij}} rij=maxaijaijorrij=maxaijminaijaijminaij
成本型
r i j = m i n   a i j a i j    o r    r i j =    m a x   a i j − a i j m a x   a i j − m i n   a i j r_{ij}=\frac{min\,a_{ij}}{a_{ij}}\;or\;r_{ij}=\;\frac{max\,a_{ij}-a_{ij}}{max\,a_{ij}-min\,a_{ij}} rij=aijminaijorrij=maxaijminaijmaxaijaij
固定型
r i j = 1 − a i j − α i m a x   ∣ a i j − α i ∣ r_{ij}=1-\frac{a_{ij}-\alpha_{i}}{max\,\lvert a_{ij}-\alpha_{i}\rvert} rij=1maxaijαiaijαi
偏离型
r i j = ∣ a i j − β j ∣ − m i n   ∣ a i j − β ∣ m a x   ∣ a i j − β ∣ − m i n   ∣ a i j − β ∣ r_{ij}=\lvert a_{ij}-\beta_j\lvert-\frac{min\,\lvert a_{ij}-\beta\lvert}{max\,\lvert a_{ij}-\beta\lvert-min\,\lvert a_{ij}-\beta\lvert} rij=aijβjmaxaijβminaijβminaijβ
区间型
r i j = { 1 − m a x   ( q 1 j − a i j , a i j − q 2 j ) m a x ( q 1 j − m i n   a i j , m a x   a i j − q 2 j ) a ∉ [ q 1 j , q 2 j ]                                        1                                          a ∈ [ q 1 j , q 2 j ] r_{ij}= \begin{cases} 1-\frac{max\,(q_1^j-a_{ij},a_{ij}-q_2^j)}{max(q_1^j-min\,a_{ij},max\,a_{ij}-q_2^j)}a \notin[q_1^j,q_2^j] \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;1\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;a \in[q_1^j,q_2^j]\\ \end{cases} rij=1max(q1jminaij,maxaijq2j)max(q1jaij,aijq2j)a/[q1j,q2j]1a[q1j,q2j]
偏离区间型
r i j = { m a x   ( q 1 j − a i j , a i j − q 2 j ) m a x ( q 1 j − m i n   a i j , m a x   a i j − q 2 j )              a ∉ [ q 1 j , q 2 j ]                                        0                                          a ∈ [ q 1 j , q 2 j ] r_{ij}=\begin{cases} \frac{max\,(q_1^j-a_{ij},a_{ij}-q_2^j)}{max(q_1^j-min\,a_{ij},max\,a_{ij}-q_2^j)}\;\;\;\;\;\;a \notin[q_1^j,q_2^j] \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;0\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;a \in[q_1^j,q_2^j]\\ \end{cases} rij=max(q1jminaij,maxaijq2j)max(q1jaij,aijq2j)a/[q1j,q2j]0a[q1j,q2j]

解题一般步骤

  1. 归一化处理决策矩阵。
  2. 利用层次分析法得到相应的权重。
  3. 计算各个对象的得分选出得分最高的为最优决策。

局限性

与之前的层次分析法一样,它的不足之处在于:

  1. 不能为决策提供新方案
  2. 定量数据较少,定性成分多,不易令人信服
  3. 指标过多时,数据统计量大,且权重难以确定
  4. 特征值和特征向量的精确求法比较复杂

因此,建议建模时只用于解决某些小问题,而不要作为大题的思路。

### 使用 Python cvxpy 进行数学建模和规划求解 #### 导入必要的库 为了使用 `cvxpy` 进行数学建模,首先需要导入所需的库。这通常包括 `cvxpy` 自身以及用于数值计算的 `numpy`。 ```python import cvxpy as cp import numpy as np ``` #### 定义决策变量 定义模型中的未知量即为决策变量。这些变量可以根据具体问题设置成连续型或离散型(整数)。例如: ```python c = np.loadtxt('data4_10.txt') x = cp.Variable((4, 5), integer=True) # 创建一个大小为 (4, 5),且取值范围限定为整数类型的矩阵作为决策变量[^3] ``` 这里创建了一个名为 `x` 的四维向量,其元素均为布尔类型(通过上下界限制实现),并指定了该变量应满足特定约束条件下的整数属性。 #### 构造目标函数 接下来要构建的是优化的目标表达式。对于最小化成本的问题来说,可以通过如下方式来设定目标函数: ```python obj = cp.Minimize(cp.sum(cp.multiply(c, x))) # 将成本系数与对应的决策变量相乘再累加起来形成总费用,并将其设为目标最小化的对象 ``` 这段代码实现了将给定的成本数组 `c` 中每一个位置上的权重同相应位置处的决策变量 `x` 值做乘法运算之后的结果汇总到一起构成最终待极小化的目标值。 #### 添加约束条件 除了明确指出希望达到什么样的最优点之外,还需要规定一些额外的要求使得解决方案更加贴近实际情况。比如在这个例子当中就加入了几个典型的不等式形式的边界控制措施: ```python cons = [ 0 <= x, x <= 1, cp.sum(x, axis=0) == 1, cp.sum(x, axis=1) <= 2 ] # 设置一系列关于决策变量 x 的线性不等式/方程组作为附加限制条款 ``` 上述列表包含了四个不同方面的规则:确保所有分配比例介于零至一之间;每一列仅有一个供应商被选中供应货物;每种商品最多由两个不同的仓库提供服务。 #### 解决方案实例化及求解过程 最后一步就是把之前准备好的各个组件组合在一起组成完整的凸优化问题结构体,并调用内置的方法去寻找符合条件的最佳配置方案。 ```python prob = cp.Problem(obj, cons) prob.solve(solver='GLPK_MI') # 实例化一个问题实体并将前面建立的对象传递进去完成初始化工作后执行具体的寻优操作 print('最优解为:\n', x.value) print('最优值为:', prob.value) ``` 此部分先建立了包含有既定目标函数和一组关联紧密的约束关系在内的整体框架,随后借助选定的具体算法引擎来进行实际计算得出结论。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alfred young

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值