所謂的不肯定型的決策是指決策者對環境狀況一無所知。這時決策者是根據本身的主觀傾向進行決策,由決策者的主觀態度的不一樣基本可分爲四種準則:悲觀主義決策準則、樂觀主義決策準則、等可能性準則、最小機會損失決策準則。下面將以一個例子來講明這幾種決策準則。html
設某工廠是按批生產某產品並按批銷售,每件產品的成本爲30元,批發價爲每件35元,若每個月生產的產品當月銷售不完,則每件損失1元。工廠每投產一批是10件,最大月生產能力是40件,決策者可選者的方案能夠是 0 件、10 件、20 件、30 件、40 件。假設決者對其產品的需求狀況一無所知。問該決策者該如何決策?java
要想解決上訴問題,必須先知道決策矩陣。從問題中咱們知道決策者可選的決策方案有五種,這是他們的策略集合,記作 {Si},i = 1,2,···,5。通過咱們分析,可判定將發生五種銷售狀況:銷售 0 件、10 件、20 件、30 件、40 件,可是不知道他們發生的機率。這就是事件集合。記作{Ej>},j=1,2,···,5。而對於每一個 」策略—事件「 對均可以計算出相應的收益值或損失值。例如單選擇月產量爲 20 件時,銷售爲 10 件。這時收益值爲:spa
10 x (35 - 30) - 1 x (20 - 10) = 40 元code
所以能夠將每個 」策略—事件「 對對應的收益值或損失值求出,記作 aij,將這些數據彙總在一個矩陣中,以下所示:htm
(策略\事件) | E1 = 0 | E2 = 10 | E3 = 20 | E4 = 30 | E5 = 40 |
---|---|---|---|---|---|
S1 = 0 | 0 | 0 | 0 | 0 | 0 |
S2 = 10 | -10 | 50 | 50 | 50 | 50 |
S3 = 20 | -20 | 40 | 100 | 100 | 100 |
S4 = 30 | -30 | 30 | 90 | 150 | 150 |
S5 = 40 | -40 | 20 | 80 | 140 | 200 |
這就是決策矩陣,根據決策矩陣中元素所示的含義不一樣,可稱爲收益矩陣,損失矩陣,風險矩陣,後悔矩陣等。blog
悲觀主義決策又被稱爲保守主義決策準則,他分析各類最壞的可能結果,而後從中選擇最好的,以它對應的策略爲決策策略,用符合表示爲 max min 決策準則。事件
在收益矩陣中先從各策略所對應的結果中選出最小值,將他們至於表的最右列,而後今後列中選出最大值,以他對應的策略爲決策者應選的決策策略。ci
S*k \(\rightarrow\) max min (aij )get
(策略\事件) | E1 = 0 | E2 = 10 | E3 = 20 | E4 = 30 | E5 = 40 | min |
---|---|---|---|---|---|---|
S1 = 0 | 0 | 0 | 0 | 0 | 0 | 0 \(\longleftarrow\) max |
S2 = 10 | -10 | 50 | 50 | 50 | 50 | - 10 |
S3 = 20 | -20 | 40 | 100 | 100 | 100 | - 20 |
S4 = 30 | -30 | 30 | 90 | 150 | 150 | - 30 |
S5 = 40 | -40 | 20 | 80 | 140 | 200 | - 40 |
根據 max min 決策準則有數學
max (0 , - 10 , - 20, - 30 , - 40) = 0
對應的決策策略爲 S1,爲決策者選擇的策略。在本例中爲 「什麼也不生產」,這個結論彷佛很荒謬,可是在實際生產中表示先看一看,之後再作決定。
/** * 悲觀主義決策 * @matrix 決策矩陣 * @row 決策矩陣行數 * @col 決策矩陣列數 */ public static void maxMin(double[][] matrix, int row, int col){ double[] maxMar = new double[row]; for (int i = 0; i < row; i++) { double min = matrix[i][0]; //讓第一個最小 for (int j = 1; j < col; j++) { if(matrix[i][j] < min){ min = matrix[i][j]; } } maxMar[i] = min; } System.out.println(Arrays.toString(maxMar)); double max = maxMar[0]; for (int i = 0; i < row; i++) { if(maxMar[i] > max){ max = maxMar[i]; } } System.out.println("悲觀主義決策結果:"+max); }
持有樂觀主義決策準則的決策者對待風險的態度與悲觀主義者不一樣,他不會放過任何一個得到最好結果的機會。來爭取好中之好的樂觀態度來選擇他的決策策略。
決策者在分析收益矩陣各」策略—事件「對的結果中選出最大者,記在表的最右列。再從該列數值中選出最大者,以它對應的策略爲決策策略。
S*k \(\rightarrow\) max max (aij )
(策略\事件) | E1 = 0 | E2 = 10 | E3 = 20 | E4 = 30 | E5 = 40 | min |
---|---|---|---|---|---|---|
S1 = 0 | 0 | 0 | 0 | 0 | 0 | 0 |
S2 = 10 | -10 | 50 | 50 | 50 | 50 | 50 |
S3 = 20 | -20 | 40 | 100 | 100 | 100 | 100 |
S4 = 30 | -30 | 30 | 90 | 150 | 150 | 150 |
S5 = 40 | -40 | 20 | 80 | 140 | 200 | 200 \(\longleftarrow\) max |
根據 max max 決策準則有
max (0 , 50 , 100, 150 , 200) = 200
對應的決策策略爲 S5,爲決策者選擇的策略。也就是選擇每個月生產 40 件。
/** * 樂觀主義決策 * @matrix 決策矩陣 * @row 決策矩陣行數 * @col 決策矩陣列數 */ public static void maxMax(double[][] matrix, int row, int col){ double[] maxMar = new double[row]; for (int i = 0; i < row; i++) { double max = matrix[i][0]; //讓第一個最大 for (int j = 1; j < 5; j++) { if(matrix[i][j] > max){ max = matrix[i][j]; } } maxMar[i] = max; } System.out.println(Arrays.toString(maxMar)); double max = maxMar[0]; for (int i = 0; i < row; i++) { if(maxMar[i] > max){ max = maxMar[i]; } } System.out.println("樂觀主義決策結果:"+max); }
等可能性(Laplace)準則是19世紀數學家 Laplace 提出的。該準則認爲因此事件發生的機率是相等的。也就是每一事件發生的機率都是 1 / 事件數。
決策者先計算各策略的收益指望值,而後在全部這些指望值中選擇最大者。以它對應的策略爲決策策略。
S*k \(\rightarrow\) max { E ( Si ) }
(策略\事件) | E1 = 0 | E2 = 10 | E3 = 20 | E4 = 30 | E5 = 40 | E (Si) = \(\sum_{j} pa_{ij}\) |
---|---|---|---|---|---|---|
S1 = 0 | 0 | 0 | 0 | 0 | 0 | 0 |
S2 = 10 | -10 | 50 | 50 | 50 | 50 | 38 |
S3 = 20 | -20 | 40 | 100 | 100 | 100 | 64 |
S4 = 30 | -30 | 30 | 90 | 150 | 150 | 78 |
S5 = 40 | -40 | 20 | 80 | 140 | 200 | 80 \(\longleftarrow\) max |
在本例中 P = \(\frac{1}{5}\),指望值
max { E ( Si ) } = max {0, 38, 64, 78, 80 } = 80
對應的策略 S5 爲決策策略
/** * 等機率準則決策 * @matrix 決策矩陣 * @row 決策矩陣行數 * @col 決策矩陣列數 */ public static void laplace(double[][] matrix, int row, int col){ double[] maxMar = new double[row]; for (int i = 0; i < row; i++) { double sum = 0; for (int j = 0; j < col; j++) { sum += matrix[i][j]; } maxMar[i] = sum / col; } System.out.println(Arrays.toString(maxMar)); double max = maxMar[0]; for (int i = 0; i < row; i++) { if(maxMar[i] > max){ max = maxMar[i]; } } System.out.println("等機率準則決策結果:"+max); }
最小機會損失決策策略又被稱爲最小遺憾值決策準則或 Savage 決策準則。首先要將收益矩陣中的各元素變換爲每一 「策略—事件」 對的機會損失值(遺憾值,後悔值)。其含義是:當某一事件發生後,因爲決策者沒有選用收益最大的策略,而造成的損失值。
首先計算出當發生 k 事件後,各策略的收益最大值
aik = max ( aik )
這時各策略的機會損失值爲
\(a'_{ik}\) = { max ( aik ) - aik }
從全部最大機會損失值中選取最小者,它對應的策略爲決策策略。
S*k \(\rightarrow\) min max \(a'_{ik}\)
(策略\事件) | E1 = 0 | E2 = 10 | E3 = 20 | E4 = 30 | E5 = 40 | max |
---|---|---|---|---|---|---|
S1 = 0 | 0 | 50 | 100 | 150 | 200 | 200 |
S2 = 10 | 10 | 0 | 50 | 100 | 150 | 150 |
S3 = 20 | 20 | 10 | 0 | 50 | 100 | 100 |
S4 = 30 | 30 | 20 | 10 | 0 | 50 | 50 |
S5 = 40 | 40 | 30 | 20 | 10 | 0 | 40 \(\longleftarrow\) min |
決策結果爲
min {200, 150, 100, 50, 40 } = 40
對應的策略 S5 爲決策策略。在分析產品廢品率時,應用本決策準則就比較方便。
/** * 最小機會損失決策 * @matrix 決策矩陣 * @row 決策矩陣行數 * @col 決策矩陣列數 */ public static void savage(double[][] matrix, int row, int col){ //損失矩陣 double[][] loss = new double[row][col]; for (int j = 0; j < col; j++) { double max = matrix[0][j]; //先定每一列的第一個最大 for (int i = 1; i < row; i++) { if(matrix[i][j] > max){ max = matrix[i][j]; } } //損失矩陣中對應位置的值 = 決策矩陣中列最大值 - 決策矩陣中對應位置值 for (int i = 0; i < row; i++) { loss[i][j] = max - matrix[i][j]; } } //此時損失矩陣已經求出 double[] maxMar = new double[row]; for (int i = 0; i < row; i++) { double max = loss[i][0]; //讓第一個最大 for (int j = 1; j < col; j++) { if(loss[i][j] > max){ max = loss[i][j]; } } maxMar[i] = max; } System.out.println(Arrays.toString(maxMar)); double min = maxMar[0]; for (int i = 0; i < row; i++) { if(maxMar[i] < min){ min = maxMar[i]; } } System.out.println("最小機會損失決策結果:"+min); }
當用 min max 決策準則或 max max 決策準則來處理問題時,有的決策者認爲這樣它極端了。因而提出把這兩種決策準則給予綜合,令 a 爲樂觀係數,且 0 < a < 1。
設 \(a^i_{max}\),\(a^i_{min}\)分別表示第 i策略可能獲得最大收益值與最小收益值。根據下列關係式
\(H_i\)= \(a*a^i_{max}\) + \((1-a)a*a^i_{min}\)
將計算出的 \(H_i\) 記在矩陣表右側,而後選擇其中的最大者,對應的策略即爲決策策略
S*k \(\rightarrow\) max { Hi }
(策略\事件) | E1 = 0 | E2 = 10 | E3 = 20 | E4 = 30 | E5 = 40 | \(H_i\) |
---|---|---|---|---|---|---|
S1 = 0 | 0 | 0 | 0 | 0 | 0 | 0 |
S2 = 10 | -10 | 50 | 50 | 50 | 50 | 10 |
S3 = 20 | -20 | 40 | 100 | 100 | 100 | 20 |
S4 = 30 | -30 | 30 | 90 | 150 | 150 | 30 |
S5 = 40 | -40 | 20 | 80 | 140 | 200 | 40 \(\longleftarrow\) max |
決策結果爲
min {0, 10, 20, 30, 40 } = 40
對應的策略 S5 爲決策策略。
/** * 折中主義決策 * @matrix 決策矩陣 * @row 決策矩陣行數 * @col 決策矩陣列數 * @a 樂觀係數 */ public static void eclecticism(double[][] matrix, int row, int col,double a){ double[] H = new double[row]; for (int i = 0; i < row; i++) { double max = matrix[i][0]; //讓第一個最大 double min = matrix[i][0]; //讓第一個最小 for (int j = 1; j < col; j++) { if(matrix[i][j] > max){ max = matrix[i][j]; } if(matrix[i][j] < min){ min = matrix[i][j]; } } //對運算結果四捨五入,保留兩位小數 H[i] = new BigDecimal(a*max + (1-a) * min).setScale(2, RoundingMode.UP).doubleValue(); } System.out.println(Arrays.toString(H)); double max = H[0]; for (int i = 0; i < row; i++) { if(H[i] > max){ max = H[i]; } } System.out.println("折中主義準則決策結果:"+max); }
在不肯定型的決策中是因人、因地、因時選擇決策準則的,可是在實際中當決策者面臨不肯定型決策問題時,首先是獲取有關各事件發生的信息。使不肯定型決策問題轉化爲風險決策。下篇將討論風險決策。