决策模型(二):风险决策法 (4)

S*k\(\rightarrow\) max \(\sum_{j} p_ju_{ij}\)

计算结果 (策略\事件) E1 = 0 E2 = 10 E3 = 20 E4 = 30 E5 = 40 EUV(t=2)
事件概率(pj)   0.1   0.2   0.4   0.2   0.1    
S1 = 0   0.03   0.03   0.03   0.03   0.03   0.03  
S2 = 10   0.02   0.14   0.14   0.14   0.14   0.128  
S3 = 20   0.01   0.11   0.34   0.34   0.34   0.261  
S4 = 30   0.0   0.09   0.29   0.63   0.63   0.323  
S5 = 40   0.0   0.06   0.25   0.56   1.0   0.324 \(\longleftarrow\) max  

根据 EUV决策准则有

max (0.03, 0.128 , 0.261, 0.323, 0.324) = 0.324

对应的决策策略为 S5,为决策者选择的策略。

计算代码 /** * 效用曲线拟合(EUV) * @param matrix * @param row * @param col */ private static void EUV(double[][] matrix, double a, int row, int col){ //先求出收益矩阵中的最大值与最小值 double min = matrix[1][0]; double max = matrix[1][0]; for (int i = 2; i < row; i++) { for (int j = 0; j < col; j++) { if(matrix[i][j] > max){ max = matrix[i][j]; } if(matrix[i][j] < min){ min = matrix[i][j]; } } } System.out.println("min="+min+"max="+max); //然后求出效用值矩阵 /*计算方法 小于最小值(a) => 0 大于最大值(b) => 1 介于之间=> (x-a/b-a)^t,其中t为效用曲线系数 */ double[][] avail = new double[row+1][col]; for (int i = 1; i <= row; i++) { for (int j = 0; j < col; j++) { avail[0][j] = matrix[0][j]; //将自然状态概率复制到第一行中 if(matrix[i][j] <= min){ avail[i][j] = 0.0; }else if(matrix[i][j] >= max){ avail[i][j] = 1.0; }else { double pow = Math.pow((matrix[i][j] - min) / (max - min), t); avail[i][j] = new BigDecimal(pow).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } } } for (int i = 0; i < row; i++) { System.out.println(Arrays.toString(avail[i])); } //再求期望效用值 double[] maxMar = new double[row+1]; double availMax = 0.0; //效用期望最大值 int maxIndex = 0; double temp = 0.0; double chance = 0.0; for (int i = 1; i <= row; i++) { for (int j = 0; j < col; j++) { chance = avail[0][j]; //自然概率 temp = (j != 0) ? (temp + avail[i][j]*chance) : (avail[i][j]*chance); } double value =new BigDecimal(temp).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); maxMar[i] = value; if(i == 1){ availMax = value; maxIndex = 1; } else if(value > availMax){ availMax = value; maxIndex = i; } } System.out.println(Arrays.toString(maxMar)); System.out.println(availMax+"--"+maxIndex); } 总结

至此,决策模型模块的所有算法模型都分析,建立并实现完成。

参考

运筹学(第4版)本科版

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspggz.html