åºåã¨ç¶æ
ã1対1ã«å¯¾å¿ãã¦ããªãã¦ãç¶æ
ãç´æ¥ç¥ããã¨ãã§ããªããããªãã®ãé ããã«ã³ãã¢ãã«(HMM:Hidden Markov Model)ã¨ããã¾ãã
ã§ããã®é ããã«ã³ãã¢ãã«ã§éã¶ããã«ãã¨ããããç¶æ
é·ç§»ã¨åºåæååè£ãä½ã£ã¦ã¿ã¾ãã
ãã®é ããã«ã³ãã¢ãã«ã§é©å½ã«ç¢ºçãè¨å®ãã¦å®è¡ããã¨ãã®çµæã¯ããããªæãã«ãªãã¾ããã
ç¶æ é·ç§»:31 32 33 31 32 33 0 31 32 33 0 21 22 0 21 22 0 21 22 31 32 33 31 32 33 0 31 32 33 31 åºå:serrar rer te rr rrsertah reht
public class HiddenMarkovModel { public static void main(String[] args){ String[] Q = {//ç¶æ "0", "1", "21", "22", "31", "32", "33"}; double[][] A = {//ç¶æ é·ç§»é »åº¦ {0, 1, 2, 0, 2, 0, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {2, 2, 3, 0, 3, 0, 0}, {0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 1}, {3, 1, 3, 0, 2, 0, 0}}; String[] Σ = {//åºåæå " ", "a", "e", "s", "t", "h", "r"}; double[][] E = {//æååºåé »åº¦ {1, 0, 0, 0, 0, 0, 0}, {0, 2, 0, 3, 3, 0, 0}, {0, 0, 0, 2, 2, 1, 3}, {0, 1, 2, 0, 0, 1, 1}, {0, 0, 0, 2, 2, 1, 2}, {0, 2, 3, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 2}}; //確çã®æ£è¦å for(double[] d : A){ double sum = 0; for(double v : d) sum += v; for(int i = 0; i < d.length; ++i){ d[i] /= sum; } } for(double[] d : E){ double sum = 0; for(double v : d) sum += v; for(int i = 0; i < d.length; ++i){ d[i] /= sum; } } // int state = 0; String result = ""; String status = ""; for(int i = 0; i < 30; ++i){ double r = Math.random(); for(int j = 0; j < A[state].length; ++j){ if(r < A[state][j]){ //次ã®ç¶æ ããã¾ã£ã state = j; status += Q[state] + " "; double rs = Math.random(); //æåãæ±ºãã for(int n = 0; n < E[state].length; ++n){ if(rs < E[state][n]){ result += Σ[n]; break; } rs -= E[state][n]; } break; } r -= A[state][j]; } } System.out.println("ç¶æ é·ç§»:" + status); System.out.println("åºå:" + result); } }