4 üldist teemat: 1. Fuzzy AHP (2-4 nädalat) 2. Fuzzy ANP 3. XMCDA standardi abil hägusate AHP (ja ANP) mudelite esitamine (2-4 nädalat) 4. Teenustepõhine arhitektuur mis toetab AHP (ja ANP) mudelite kasutamist, sh tundlikkuse analüüsi hägustamise abil. AHP mudeli hägustamise erinevad lähenemised: 1. AHP võrdlusmaatriksi võrdlushinnangute esitamine hägusal kujul (kysitlus_sektorid hägustamise näide Excelis). 2. AHP võrdlusmaatriksi hinnangute vigade alusel Monte Carlo tundlikkuse analüüs (Oliver Oidekivi) - AHP mudeli hägustamine, mingis mõttes tulemuseks on hägus AHP mudel. 3. üle AHP mitme võrdlusmaatriksi Monte Carlo 3b. üle AHP mitme võrdlusmaatriksi Monte Carlo, arvestades Saaty skaala nivoosid (kui on piisavalt palju veakordajaid). 4. AHP mudeli struktuuri hägusus 5. Fuzzy Tradeoff Analysis (risttundlikkuse hägusus) 6. Grupiotsustuse hägususus 7. Kombinatsioon lähenemistest 1-6 Lähenemised 2-6 on automaatselt arvutatavad. See on analoogne automaatsele tundlikkuse analüüsile. Lähenemised 1 ja 5 on sisulise tundlikkuse analüüsi osad. NB. siinses failis kirjeldatakse varianti 2 (AHP võrdlusmaatriksi hinnangute vigade alusel Monte Carlo tundlikkuse analüüs) NB. otsige faili keskelt järgmist rida: "NB. Siit algab Loeng 1." ts =: 6!:2, 7!:2@] 9!:3(5) NB. set system for linear display of verbs bdiag =: ([: i. ]) >/ [: i. ] adiag =: [: |: bdiag mp =: +/ .* NB. mp on matrix product ehk maatrikskorrutis product =: */ geomean =: # %: product NB. geomeetriline keskmine NB. geomean_log =: 13 : '^ am ^. y' am =: +/ % # NB. aritmeetiline keskmine (Arithmetic Mean - am) NB. juhusliku saaty maatriksi genereerimine saaty_rand =: (] , ]) $ (1"_ + [: ? ([: *: ]) # 9:) ^ _1: + 2: * [: ? ([: *: ]) # 2: str =: 13 : '( =/~ i.#y) + (y*bd ) + |: (bd=.bdiag #y) * %y' st =: 13 : 'str saaty_rand y' re =: 13 : '(>: ? n#9) ^ <: +: ?(n=. 0.5 * y * (y - 1))#2' rst =: 13 : '(% |:)~ (y , y)$ ( re y) } 1#~ *:y' NB. Random Saaty Table (juhuslik saaty tabel). On verbist 'st' umbes 20% kiirem, aga 30% mälumahukam. saaty_skaala =: }. (,%)~ >:i.9 NB. skaala o*(9 8 7 6 5 4 3 2 1 0.5 0.333333 0.25 0.2 0.166667 0.142857 0.125 0.111111) saaty_rand_o =: 13 : '(y , y) $ saaty_skaala {~ ? 17 #~ *: y' st1 =: 13 : 'str saaty_rand_o y' st2 =: 13 : 'str (y , y) $ ((,%)~ >:i.9) {~ ? 17 #~ *: y' kaalu =: 13 : '(% +/)~ geomean"1 y' NB. saaty kaalude esimese lähendi arvutamine NB. kaalu =: (% +/)~ geomean"1 NB. verb tacit kujul log_kaalu =: 13 : '(% +/)~ ^ am"1 ^. y' NB. saaty kaalude esimese lähendi arvutamine logaritmimise kaudu, seetõttu tuleb geomeetriline keskmine asendada aritmeetilisega. Suurte maatriksite korral ja kaalude iteratiivsel arvutamisel hädavajalik. NB. log_kaalu =: (% +/)~ ^ am"1 ^. NB. verb tacit kujul iter_kaalu =: 13 : 'log_kaalu"2 mp~ ^: (y) x' NB. saaty täpsete kaalude iteratiivne arvutamine omavaartus =: 13 : '+/ (+/y) * log_kaalu y' NB. Saaty maatriksi suurim omaväärtus aci =: 13 : '((omavaartus y)-#y) % (_1 + #y)' NB. Saaty maatriksi abs. kooskõlaindeks juhaci =: 13 : 'am aci"2 st"0 (x # y)' NB. verb skaalal o(9 8 7 6 5 4 3 2 1 1 0.5 0.333333 0.25 0.2 0.166667 0.142857 0.125 0.111111) juhuslike maatriksite abs.kooskõlaindeksite keskmise arvutamiseks juhaci1 =: 13 : 'am aci"2 st1"0 (x # y)' NB. skaalal o*(9 8 7 6 5 4 3 2 1 0.5 0.333333 0.25 0.2 0.166667 0.142857 0.125 0.111111) juhaci2 =: 13 : 'am aci"2 st2"0 (x # y)' NB. skaalal o*(9 8 7 6 5 4 3 2 1 0.5 0.333333 0.25 0.2 0.166667 0.142857 0.125 0.111111) errw =: 13 : '(%/~ log_kaalu y) % y' NB. elemendi veakordajate maatriks lähendkaalude põhjal iter_errw =: 13 : '(%/~ log_kaalu "2 mp~ ^: (y) x) % x' NB. elemendi veakordajate maatriks täpsete kaalude põhjal errt =: 13 : '^ ((y * n) + ys +/ (- ys=. +/ y=. ^. y)) % (2 - n=. #y)' NB. veakordajate tabel hinnangu kolmikute geom.keskmise vea alusel errt_auto =: 13 : 'y * x %: errt y' NB. hinnangute automaatne kooskõlastamine üksiku hinnangu koondvea valemi järgi (hinnangu kolmikute geom.keskmise vea alusel), tulemuseks on kooskõlaline võrdlusmaatriks NB. ruutjuurega veaparandus: 2 errt_auto tabel NB. ruutjuurega iteratiivne veaparandus: 2 errt_auto ^:_ tabel NB. kuupjuurega veaparandus on: 3 errt_auto tabel NB. kuupjuurega iteratiivne veaparandus: 3 errt_auto ^:_ tabel NB. errt_auto2 tabel NB. astendajaks on (n-2) % n, n on Saaty tabeli järk (n =. #tabel). Üks hinnang osaleb n-2 kolmikus. NB. Tulemuseks on kooskõlalised hinnangud, NB. praktikas on piisavalt täpne, iteratiivselt ei ole vaja arvutadagi. errt_auto2 =: 13 : 'y * ( (#y) % _2 + #y) %: errt y' errcorr2 =: 13 : 'y * (%: errt y) ^ x' NB. puuduvate väärtuste automaatne ruutjuurega veaparandus, 'nullid =. 0 = y' NB. nullid errcorr2 ^:_ nt NB. kõigi hinnangute koooskõlastamiseks (sama mis: errt_auto2 tabel): 1 errcorr2 tabel NB. nulliga tähistatud puuduvate hinnangute kooskõlastamiseks: (nullid =. 0 = tabel) errcorr2 tabel errcorr3 =: 13 : 'y * (3%: errt y) ^ x' NB. puuduvate väärtuste kuupjuurega veaparandus , 'nullid =. 0 = y' , nullid errcorr3 ^:_ nt vigasemad_hinnangud =: 13 : 'lt =/ >./ >./ lt=. | ^. errt y' NB. tulemuseks on rea ja veeruindeks, kui vigasemaid hinnanguid on üle 1, siis kõigi nende vigaste hinnangute rea- ja veeruindeksid kaared =: 13 : '4 $. $. y' NB. tulemuseks on rea ja veeruindeks, kui vigasemaid hinnanguid on üle 1, siis kõigi nende vigaste hinnangute rea- ja veeruindeksid maxerrcorr =. (errcorr2 ^:_ ~ vigasemad_hinnangud)~ NB. maxerrcorr t NB. nõuab ainult parempoolset argumenti, vasakpoolse argumendiga on tulemus vale errcorr0 =: 13 : 'nullid errcorr2 ^:_ y =. y + nullid =. 0 = y' NB. 'errcorr0 tabel', tabel peab sisaldama puuduvaid võrdlusi, mis on kodeeritud 0-ga (kui nulle ei ole, siis on väljundiks algtabel) saaty_tour =: 13 : '1 < y' NB. saaty tabeli teisendamine turniiritabeliks tour_saaty =: 13 : '(% |:)~ >: (<:x) * y' NB. turniiritabeli teisendamine saaty tabeliks, vasak argument x määrab ära võidu hinnangu, kaotuseks on võidu pöördväärtus mpnorm =: 13 : 'mp~ (% omavaartus)~ y' tapselt_kaalu =: log_kaalu mpnorm ^: _ NB. praktikas parem verb kui iter_kaalu, sest ei ole vaja teada kui mitmendal iteratsioonil kaalud koonduvad tapne_omavaartus =: 13 : '+/ (+/y) * tapselt_kaalu y' NB. Saaty maatriksi suurim omaväärtus tapne_aci=: 13 : '((tapne_omavaartus y)-#y) % (_1 + #y)' tapne_juhaci1 =: 13 : 'am tapne_aci"2 st1"0 (x # y)' tapne_juhaci2 =: 13 : 'am tapne_aci"2 st2"0 (x # y)' mrci =: 13 : '|: y ,. (x tapne_juhaci1"0 (y))' NB. Saaty juh.maatriksite abs.kooskõlaindeksi tabel: 10000 mrci 3+i.8 mrci2 =: 13 : '|: y ,. (x tapne_juhaci2"0 (y))' NB. 10000 mrci2 3+i.8 x: +t =: st 4 1 1r3 1r6 6 3 1 8 1r8 6 1r8 1 1r5 1r6 8 5 1 NB. A program to apply Saaty's method in an interactive fashion. NB. according to the link in http://actifeld.com/A%20Possible%20Method.doc NB. 2006-03-02 NB. John Randall developed the basic algorithm on the J Programming Forum NB. Raul Miller, Tarmo Veskioja, Devon McCormick, and Roger Hui contributed to the dialog NB. Bill Harris put a few other pieces on. NB. The steps: NB. Define the Client Preference Matrix as described on p. 6 of that article NB. Run (%+/)power on that matrix to find the principle eigenvector. NB. Run cr to calculate the Consistency Ratio; if it is much in excess of NB. 0.1, the judgments used to create the CPM are probably too random. NB. Create preference matrices for each of the alternatives on each of NB. the dimensions used in the CPM. Calculate the principal eigenvectors NB. and consistency ratio for each. NB. Create the Option Performance Matrix by assembling all the principal NB. eigenvectors for the preference matrices. NB. Multiply OPM time CVV to get the Value For Money vector. NB. Calculate principal eigenvectors of the matrix cpm by NB. (%+/) power cpm NB. Calculate the principal eigenvalue of the matrix cpm by NB. ev cpm NB. Calculate the relative consistency ratio of the matrix cpm by NB. cr cpm NB. The VFM shows in each position the relative preference the decision-maker NB. has shown for that alternative: OPM * CVV = VFM NB. If the Option Performance Matrix is NB. opm=: |:a,b,c,:d NB. where a, b, c, and d are the principal eigenvectors of each option matrix NB. then NB. (%/+)opm mp cpm NB. is the Value For Money (VFM) matrix, giving the relative NB. values of each alternative NB. The power method for calculating the principal eigenvector mp=:+/ . * normalize=:%(>./@:|) iterate=:normalize@:mp init=:[: ? # # 0: power=:13 : 'y&iterate^:_ init y' NB. Calculate the principal eigenvalue NB. Postmultiply the current principal eigenvector by the matrix NB. Divide that vector (unnormalized) by the principal eigenvector NB. See p. 258 of Kincaid and Cheney's Numerical Analysis 3rd edition cureigenvec =: (%+/) @: power neweigenvec =: mp cureigenvec ev=: [: {. neweigenvec % cureigenvec NB. Calculate the absolute consistency index ci =: (ev - #) % <: @: # NB. Calculate the consistency ratio NB. MACI is the mean absolute consistency index of random matrices am=: +/%# maci =: 13 : 'am ci"2 st1"0 (x # y)' NB. maci_precomputed =: 1000 maci"0 (3+i.8) NB. Tarmo claims it's exactly 0.5245 for 3 index =: <:^:3 & # maciv =: 13 : '(index y) { maci_precomputed' NB. Get the value of cr=: ci % maciv NB. ......................................................................... NB. Random Saaty matrices for testing NB. st is Tarmo Veskioja's verb (e.g., st 4) NB. st1 is Roger Hui's faster but more space-intensive equivalent saaty_scale =: \:~ }. (,%)~ >:i.9 str =: 13 : '( =/~ i.#y) + (y*bd ) + |: (bd=. >/~ i.#y) * %y' saaty_rand =: 13 : '(y , y) $ saaty_scale {~ ? (#saaty_scale) #~ *: y' st =: 13 : 'str saaty_rand y' NB. st 4 st1=: 3 : 0 i=. 1+(,~y) ?@$ #saaty_scale b=. >/~i.y ((b*i) + |:b*i+#saaty_scale) { 1,(,%) saaty_scale ) NB. Test matrices from Geoff Coyle's paper referenced above: NB. peigen s/b 0.232,0.402,0.061,0.305, cr of 0.055 cpm=: >(1,(%3),5, 1);(3,1,5,1);((%5),(%5),1,(%5));(1,1,5,1) NB. peigen s/b 0.751,0.178,0.071 w/ cr of 0.072 exp=: >(1,5,9);((%5),1,3);((%9),(%3),1) NB. Expenses NB. peigen s/b 0.480,0.406,0.114 w/ cr of 0.026 und=: >(1,1,5);(1,1,3);((%5),(%3),1) NB. "Understandability NB. peigen s/b 0.077,0.231,0.692 w/ cr of 0 rod=: >(1,(%3),%9);(3,1,%3);9 3 1 NB. "Replication of detail", p. 7 NB. peigen s/b 0.066,0.615,0.319 w/ cr of 0 pod=: >(1,(%9),(%5));(9,1,2);(5,(%2),1) NB. Prediction of dynamics scan =: 3 : 0 for_j. i.#x do. sum =. sum + (x matrices"0 y) % (i.17^x) end. ) (%+/) power x: +t =: st 4 0.591633 0.145296 0.217743 0.0453272 x: +t =: st 4 1 1r4 6 1r5 4 1 9 1r9 1r6 1r9 1 1r7 5 9 7 1 (%+/) power t 0.100575 0.202725 0.0345109 0.662189 %/~ (%+/) power t 1 0.496117 2.91431 0.151883 2.01565 1 5.87423 0.306144 0.343135 0.170235 1 0.0521164 6.58401 3.26644 19.1878 1 t% %/~ (%+/) power t NB. veakordajad 1 0.503913 2.05881 1.3168 1.98447 1 1.53212 0.362938 0.485718 0.652692 1 2.74111 0.759416 2.75529 0.364815 1 t% t% %/~ (%+/) power t 1 0.496117 2.91431 0.151883 2.01565 1 5.87423 0.306144 0.343135 0.170235 1 0.0521164 6.58401 3.26644 19.1878 1 ^.t% %/~ (%+/) power t NB. logaritmitud veakordajad 0 _0.685352 0.722128 0.275206 0.685352 0 0.42665 _1.01352 _0.722128 _0.42665 0 1.00836 _0.275206 1.01352 _1.00836 0 load 'stats' stddev %:@var stddev ,^.t% %/~ (%+/) power t NB. standardhälve logaritmitud veakordajatest 0.662618 stddev ,^.tt% %/~ (%+/) power +tt =: st 4 0.781141 stddev ,^.tt% %/~ (%+/) power +tt =: st 4 0.981145 stddev ,^.tt% %/~ (%+/) power +tt =: st 4 1.12122 NORMAL |value error: NORMAL load 'stats/distribs' 0 0.662618 tomusigma 1 2 3 4 0.662618 1.32524 1.98785 2.65047 normalrand 5 0.15516 _0.165083 _1.13402 1.35691 _0.239741 -. =/~ i.4 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 4 $. $. -. =/~ i.4 0 1 0 2 0 3 1 0 1 2 1 3 2 0 2 1 2 3 3 0 3 1 3 2 13 : '4 $. $. -. =/~ i.y' 4 $. [: $. [: -. [: =/~ i. reverse_identity_matrix =: 13 : '-. =/~ i.y' reverse_identity_matrix 4 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 <"1 (4 $. $. reverse_identity_matrix 4) ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ │0 1│0 2│0 3│1 0│1 2│1 3│2 0│2 1│2 3│3 0│3 1│3 2│ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ (<"1 (4 $. $. reverse_identity_matrix 4)) { t 0.25 6 0.2 4 9 0.111111 0.166667 0.111111 0.142857 5 9 7 t 1 0.25 6 0.2 4 1 9 0.111111 0.166667 0.111111 1 0.142857 5 9 7 1 stddev (<"1 (4 $. $. reverse_identity_matrix 4)) { ^.t% %/~ (%+/) power t NB. standardhälve logaritmitud veakordajatest, peadiagonaal väljaarvatud 0.773772 + stddeviation =: stddev (<"1 (4 $. $. reverse_identity_matrix 4)) { ^.t% %/~ (%+/) power t NB. standardhälve logaritmitud veakordajatest, peadiagonaal väljaarvatud 0.773772 (#t) * <:#t 12 (<"1 (4 $. $. reverse_identity_matrix 4)) ((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) } reverse_identity_matrix 4 0.825259 0.673318 _1.88877 0.624064 0.0350052 0.0831294 _0.202341 0.0209793 1.09252 _0.224805 1.49291 0.222825 ^((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 1 1.39766 0.309185 2.19784 0.682956 1 1.97291 0.168955 1.4444 0.532161 1 0.966974 0.874857 0.421892 1.5429 1 t* ^((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 1 0.275188 3.36066 0.302383 5.38877 1 8.96914 0.0412156 0.270433 0.100154 1 0.248234 1.67516 21.5408 1.9653 1 (%+/) power t* ^((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 0.0388793 0.148571 0.0258098 0.78674 (%+/) power t* ^((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 0.0809316 0.16549 0.0250721 0.728506 (%+/) power t* ^((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 0.0570977 0.217048 0.0343349 0.69152 (%+/) power t* ^((0 ,stddeviation) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 0.156546 0.208166 0.050371 0.584917 ^((0 , stddev (<"1 (4 $. $. reverse_identity_matrix #t)) { ^.t% %/~ (%+/) power t ) tomusigma normalrand (#t) * <:#t) (<"1 (4 $. $. reverse_identity_matrix #t)) } reverse_identity_matrix #t 1 3.81711 0.183127 0.531152 0.935384 1 0.566418 0.339004 2.03201 2.64248 1 2.80847 0.540579 0.673538 0.70532 1 monte_carlo_error_factor =: 13 : '^((0 , stddev (<"1 (4 $. $. reverse_identity_matrix #y)) { ^. y % %/~ (%+/) power y ) tomusigma normalrand (#y) * <:#y) (<"1 (4 $. $. reverse_identity_matrix #y)) } reverse_identity_matrix #y' monte_carlo_error_factor t 1 0.144492 0.589238 2.39264 1.35269 1 0.663721 1.11152 1.03719 1.46932 1 0.748591 1.11159 3.05932 0.188892 1 t* monte_carlo_error_factor t 1 0.28542 2.65428 0.184232 12.215 1 5.50308 0.227414 0.0892592 0.272591 1 0.211094 1.76654 9.7339 7.84091 1 upper_triangle =: 13 : ' to pairwise stochastic domination probabilities (or as z-scores of those probabilities) |: (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0.158385 0.135904 0.182406 0.230939 0.0542439 0.0264175 0.604965 0.60674 |:"1 (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0.119655 0.271521 0.0287073 0.580116 0.109664 0.260286 0.0308555 0.599195 %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 1 0.0878645 0.768369 0.11412 11.3812 1 8.74493 1.29882 1.30146 0.114352 1 0.148523 8.7627 0.76993 6.73298 1 1 0.349945 4.26012 0.125826 2.85759 1 12.1737 0.359559 0.234735 0.0821444 1 0.0295357 7.94749 2.78119 33.8573 1 %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 1 0.384057 1.81645 0.0797335 2.60378 1 4.72963 0.207609 0.550526 0.211433 1 0.0438953 12.5418 4.81675 22.7815 1 1 0.364469 3.37744 0.169385 2.74372 1 9.26675 0.464743 0.296082 0.107913 1 0.0501517 5.90372 2.15172 19.9395 1 geomean # %: product ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 _0.677074 _0.430282 _2.79589 0.677074 0 0.246792 _2.11882 0.430282 _0.246792 0 _2.36561 2.79589 2.11882 2.36561 0 0 _0.532702 1.38192 _2.31123 0.532702 0 1.91462 _1.77852 _1.38192 _1.91462 0 _3.69315 2.31123 1.77852 3.69315 0 stddev ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 0.855707 0.356611 0.636231 0.855707 0 0.499096 0.219476 0.356611 0.499096 0 0.27962 0.636231 0.219476 0.27962 0 stddev ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 0.197691 0.7788 0.604328 0.197691 0 0.581108 0.406637 0.7788 0.581108 0 0.174471 0.604328 0.406637 0.174471 0 mean ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 _0.534258 1.41023 _1.80967 0.534258 0 1.94449 _1.27541 _1.41023 _1.94449 0 _3.2199 1.80967 1.27541 3.2199 0 t 1 0.25 6 0.2 4 1 9 0.111111 0.166667 0.111111 1 0.142857 5 9 7 1 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 _1.53005 1.01371 _9.71937 1.53005 0 1.31867 _6.07822 _1.01371 _1.31867 0 _4.58278 9.71937 6.07822 4.58278 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 _1.56445 10.6164 _87.2836 1.56445 0 3.18758 _1.83479 _10.6164 _3.18758 0 _22.0112 87.2836 1.83479 22.0112 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((2, #t)$ t)) 0 _0.316758 2.16102 _54.0074 0.316758 0 38.4076 _2.13536 _2.16102 _38.4076 0 _4.55516 54.0074 2.13536 4.55516 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((200, #t)$ t)) 0 _1.23056 1.88248 _3.01156 1.23056 0 3.23988 _2.01458 _1.88248 _3.23988 0 _4.71694 3.01156 2.01458 4.71694 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((200, #t)$ t)) 0 _1.30988 1.86672 _3.57365 1.30988 0 3.08665 _2.09042 _1.86672 _3.08665 0 _5.62711 3.57365 2.09042 5.62711 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((100, #t)$ t)) 0 _1.14942 2.37082 _3.62477 1.14942 0 3.54092 _2.26891 _2.37082 _3.54092 0 _6.1477 3.62477 2.26891 6.1477 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((10000, #t)$ t)) 0 _1.22775 1.864 _3.23678 1.22775 0 3.12144 _2.0326 _1.864 _3.12144 0 _5.13796 3.23678 2.0326 5.13796 0 (mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((10000, #t)$ t)) 0 _1.20796 1.86048 _3.21104 1.20796 0 3.11496 _2.07301 _1.86048 _3.11496 0 _5.12671 3.21104 2.07301 5.12671 0 t 1 0.25 6 0.2 4 1 9 0.111111 0.166667 0.111111 1 0.142857 5 9 7 1 (%+/) power t 0.100575 0.202725 0.0345109 0.662189 monte_carlo_domination_matrix =: 13 : '(mean % stddev) ^. %/"1~ (%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' t monte_carlo_domination_matrix 10000 NB. results on z-scale, ie. those are pairwise domination z-scores, based on Monte Carlo results based on standard deviations of pairwise comparison inconsistencies with respect to the eigenvector weights of the original pairwise comparison matrix 0 _1.23424 1.88247 _3.25392 1.23424 0 3.16264 _2.06875 _1.88247 _3.16264 0 _5.18863 3.25392 2.06875 5.18863 0 pnorm_f _2 0.0227501 pnorm_f _3 0.00134997 pnorm_f _1 0.158655 pnorm_f _1*|t monte_carlo_domination_matrix 10000 NB. probabilities of results on z-scale, ie. those are pairwise domination z-scores, based on Monte Carlo results based on standard deviations of pairwise comparison inconsistencies with respect to the eigenvector weights of the original pairwise comparison matrix 0.5 0.112781 0.0311042 0.000659287 0.112781 0.5 0.000973289 0.0196713 0.0311042 0.000973289 0.5 1.49961e_7 0.000659287 0.0196713 1.49961e_7 0.5 i.#t 0 1 2 3 =/~ i.#t 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 <"1 (4 $. $. =/~ i.#t) ┌───┬───┬───┬───┐ │0 0│1 1│2 2│3 3│ └───┴───┴───┴───┘ (1) (<"1 (4 $. $. =/~ i.#t)) } pnorm_f _1*|t monte_carlo_domination_matrix 10000 1 0.114446 0.0324735 0.000764838 0.114446 1 0.00091031 0.0197757 0.0324735 0.00091031 1 1.61271e_7 0.000764838 0.0197757 1.61271e_7 1 (1) (<"1 (4 $. $. =/~ i.#t)) } pnorm_f _1*|t monte_carlo_domination_matrix 100000 1 0.110195 0.0312041 0.00070246 0.110195 1 0.000865114 0.0204631 0.0312041 0.000865114 1 1.54138e_7 0.00070246 0.0204631 1.54138e_7 1 (1) (<"1 (4 $. $. =/~ i.#t)) } pnorm_f _1*|t monte_carlo_domination_matrix 100000 1 0.110876 0.0308965 0.000696462 0.110876 1 0.000935254 0.020134 0.0308965 0.000935254 1 1.39608e_7 0.000696462 0.020134 1.39608e_7 1 (1) (<"1 (4 $. $. =/~ i.#t)) } pnorm_f _1*|t monte_carlo_domination_matrix 1000000 NB. probabilities of results on z-scale 1 0.111355 0.0306399 0.000721007 0.111355 1 0.000910692 0.0199328 0.0306399 0.000910692 1 1.36079e_7 0.000721007 0.0199328 1.36079e_7 1 (%+/) power t 0.100575 0.202725 0.0345109 0.662189 (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((3, #t)$ t)) 0.0933734 0.227554 0.0311296 0.647943 0.159619 0.205461 0.0308552 0.604065 0.0431886 0.204929 0.0332564 0.718626 + abi =: (%"2 +/"1) power"2 (t*"2 monte_carlo_error_factor"2 ((3, #t)$ t)) 0.11726 0.190265 0.0195988 0.672876 0.124357 0.15765 0.0256969 0.692297 0.0892888 0.255517 0.0278544 0.62734 >/"1~ abi 0 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 +/ >/"1~ abi 0 0 3 0 3 0 3 0 0 0 0 0 3 3 3 0 monte_carlo_votes_from_weights =: 13 : '+/ >/"1~ (%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' t monte_carlo_votes_from_weights 10000 0 1128 9585 33 8872 0 9963 286 415 37 0 1 9967 9714 9999 0 t monte_carlo_votes_from_weights 100000 0 11232 95904 319 88768 0 99597 3001 4096 403 0 1 99681 96999 99999 0 t monte_carlo_votes_from_weights 1000 0 117 960 1 883 0 996 25 40 4 0 0 999 975 1000 0 0.5 1000 0,"(1 0) (,t monte_carlo_votes_from_weights 1000) 0.5 1000 0 0 0.5 1000 0 109 0.5 1000 0 955 0.5 1000 0 2 0.5 1000 0 891 0.5 1000 0 0 0.5 1000 0 997 0.5 1000 0 44 0.5 1000 0 45 0.5 1000 0 3 0.5 1000 0 0 0.5 1000 0 0 0.5 1000 0 998 0.5 1000 0 956 0.5 1000 0 1000 0.5 1000 0 0 binomialprob"1 (0.5 1000 0,"(1 0) (,tvotes =: t monte_carlo_votes_from_weights 1000)) 9.33264e_302 1.06345e_151 1 4.67099e_296 1 9.33264e_302 1 1.85764e_238 2.99663e_223 4.67099e_296 9.33264e_302 9.33264e_302 1 1 1 9.33264e_302 binomialprob"1 (0.5 1000 1000,"(1 0) (,tvotes =: t monte_carlo_votes_from_weights 1000)) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9.33264e_302 0 NB. Siit algab Loeng 1. NB. Iversoni notatsioon võimaldab enamasti vältida muutujate indekseid ja koodi tsükleid. NB. Let S be a pairwise comparison matrix using comparisons on a Saaty ratio scale. NB. Let st be the function that generates such a random pairwise comparison matrix. NB. x: +S =: st 4 x: +S =: st 4 1 1r8 1r5 1r8 8 1 1r6 8 5 6 1 3 8 1r8 1r3 1 NB. Let power be the function that computes the first eigenvector of S by using the Power method. NB. Let normalise_to_1 be the function for the AHP weights normalisation (the sum of weights to 1) . normalise_to_1 =: 13 : '(%+/) y' normalise_to_1 power S NB. extract weights from comparison matrix S as the 1st eigenvector; normalize to 1 0.0368928 0.304092 0.541317 0.117698 NB. Weights eigenvector can be used to reproduce consistent comparisons by pairwise ratios between weights. Let the function of reproducing consistent comparisons matrix be rccm. Let those consistent comparisons form a comparison matric cS rccm =: 13 : '%/~ y' + cS =: rccm normalise_to_1 power S NB. reproduced consistent comparisons 1 0.121321 0.0681539 0.313453 8.24258 1 0.561764 2.58366 14.6727 1.78011 1 4.59919 3.19027 0.387048 0.21743 1 NB. Let E be the the error matrix that results when the original comparison matrix S is divided by the reproduced consistent matrix cS. + E =: cS % S NB. error matrix E. 1 0.97057 0.34077 2.50762 1.03032 1 3.37058 0.322957 2.93453 0.296685 1 1.53306 0.398784 3.09639 0.652289 1 NB. Such an error matrix E consists of error coefficients on a ratio scale. NB. Let us transform the values on a ratio scale onto a logarithmic scale to be able to measure standard deviation. Lets use the natural logarithm. ln =: ^. + lnE =: ln E 0 _0.0298714 _1.07655 0.919335 0.0298714 0 1.21509 _1.13024 1.07655 _1.21509 0 0.427268 _0.919335 1.13024 _0.427268 0 NB. Now it is possible to measure the standard deviation of pairwise comparison errors (inconsistencies, to be more precise). NB. But one should leave aside the main diagonal values (errors of comparisons with itself) and take the values only from above the diagonal or only from below the diagonal, because the matrix S is reciprocal, thus also E and lnE are reciprocal. NB. Let upper_indices be the function to provide the desired indices to extract the upper triangle values (above the main diagonal). upper_triangle =: 13 : '/"1~ (%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' + dom_votes_monte_carlo_10000 =: S monte_carlo_votes_from_weights 10000 0 72 14 696 9928 0 2144 8912 9986 7856 0 9722 9304 1088 278 0 dom_votes_monte_carlo_10000 < -:10000 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 (upper_indices S) { dom_votes_monte_carlo_10000 72 14 696 2144 8912 9722 dom_votes_monte_carlo_10000 > -:10000 0 0 0 0 1 0 0 1 1 1 0 1 1 0 0 0 10000* dom_votes_monte_carlo_10000 > -:10000 0 0 0 0 10000 0 0 10000 10000 10000 0 10000 10000 0 0 0 10000* (upper_indices S) { dom_votes_monte_carlo_10000 > -:10000 0 0 0 0 10000 10000 (0.5 10000),"(1 1) /:~"1 ((upper_indices S) { dom_votes_monte_carlo_10000) ,. (10000* (upper_indices S) { dom_votes_monte_carlo_10000 > -:10000) 0.5 10000 0 72 0.5 10000 0 14 0.5 10000 0 696 0.5 10000 0 2144 0.5 10000 8912 10000 0.5 10000 9722 10000 binomialprob"1 (0.5 10000),"(1 1) /:~"1 ((upper_indices S) { dom_votes_monte_carlo_10000) ,. (10000* (upper_indices S) { dom_votes_monte_carlo_10000 > -:10000) 0 0 0 0 0 0 S 1 0.125 0.2 0.125 8 1 0.166667 8 5 6 1 3 8 0.125 0.333333 1 */ S 320 0.09375 0.0111111 3 */"1 S 0.003125 10.6667 90 0.333333 S*S*S 1 0.00195313 0.008 0.00195313 512 1 0.00462963 512 125 216 1 27 512 0.00195313 0.037037 1 S^(_1* #S) 1 4096 625 4096 0.000244141 1 1296 0.000244141 0.0016 0.000771605 1 0.0123457 0.000244141 4096 81 1 (*/ S) */ (*/"1 S) 1 3413.33 28800 106.667 0.000292969 1 8.4375 0.03125 3.47222e_5 0.118519 1 0.0037037 0.009375 32 270 1 (S^(_1* #S))* (*/ S) */ (*/"1 S) 1 1.3981e7 1.8e7 436907 7.15256e_8 1 10935 7.62939e_6 5.55556e_8 9.14495e_5 1 4.57247e_5 2.28882e_6 131072 21870 1 %2- ~ #S 0.5 %S^#S 1 4096 625 4096 0.000244141 1 1296 0.000244141 0.0016 0.000771605 1 0.0123457 0.000244141 4096 81 1 (%S ^ #S)* (*/ S) */ (*/"1 S) 1 1.3981e7 1.8e7 436907 7.15256e_8 1 10935 7.62939e_6 5.55556e_8 9.14495e_5 1 4.57247e_5 2.28882e_6 131072 21870 1 ((%S ^ #S)* (*/ S) */ (*/"1 S)) ^ (%2- ~ #S) 1 3739.12 4242.64 660.989 0.000267443 1 104.571 0.00276214 0.000235702 0.00956292 1 0.00676201 0.00151288 362.039 147.885 1 (S ^ #S)* (*/ S) */ (*/"1 S) 1 0.833333 46.08 0.0260417 1.2 1 0.00651042 128 0.0217014 153.6 1 0.3 38.4 0.0078125 3.33333 1 %2- #S _0.5 ((S ^ #S)* (*/ S) */ (*/"1 S)) ^ (%2- #S) NB. see peaks olema õige, ehkki astendajat tuleb veel modida 1 1.09545 0.147314 6.19677 0.912871 1 12.3935 0.0883883 6.78823 0.0806872 1 1.82574 0.161374 11.3137 0.547723 1 S 1 0.125 0.2 0.125 8 1 0.166667 8 5 6 1 3 8 0.125 0.333333 1 + E =: cS % S NB. error matrix E 1 0.97057 0.34077 2.50762 1.03032 1 3.37058 0.322957 2.93453 0.296685 1 1.53306 0.398784 3.09639 0.652289 1 S*E 1 0.121321 0.0681539 0.313453 8.24258 1 0.561764 2.58366 14.6727 1.78011 1 4.59919 3.19027 0.387048 0.21743 1 cS 1 0.121321 0.0681539 0.313453 8.24258 1 0.561764 2.58366 14.6727 1.78011 1 4.59919 3.19027 0.387048 0.21743 1 cS -: S*E 1 + kriteeriumid =: 3 3 $ 1 5 7, 1r5 1 1r3, 1r7 3 1 1 5 7 1r5 1 1r3 1r7 3 1 + kvaliteet =: 4 4 $ 1 3 7 3, 1r3 1 4 2, 1r7 1r4 1 1r2, 1r3 1r2 2 1 1 3 7 3 1r3 1 4 2 1r7 1r4 1 1r2 1r3 1r2 2 1 + kulutused =: 4 4 $ 1 1r4 1r7 1r3, 4 1 1r3 1r2, 7 3 1 1r2, 3 2 2 1 1 1r4 1r7 1r3 4 1 1r3 1r2 7 3 1 1r2 3 2 2 1 + kaugus =: 4 4 $ 1 1r7 1r5 1r2, 7 1 1r2 5, 5 2 1 7, 2 1r5 1r7 1 1 1r7 1r5 1r2 7 1 1r2 5 5 2 1 7 2 1r5 1r7 1 NB. Multiple perturbation matrices can be generated and from them eigenvectors computed. (%"2 +/"1) power"2 (S*"2 monte_carlo_error_factor"2 ((3, #S)$ S)) 0.015571 0.191469 0.614371 0.178589 0.101675 0.248761 0.571632 0.077932 0.0211424 0.413645 0.468878 0.096334 mc_vectors =: 13 : '(%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' S mc_vectors 3 0.0162444 0.249217 0.661743 0.0727954 0.0383866 0.318945 0.50146 0.141209 0.0545937 0.343472 0.482931 0.119004 $ krit_10000 =: kriteeriumid mc_vectors 10000 NB. 10 000 Monte Carlo abil häiritud kriteeriumite osakaalude vektorit 10000 3 $ kvaliteet_10000 =: kvaliteet mc_vectors 10000 NB. 10 000 Monte Carlo abil häiritud kvaliteedi alusel alternatiivide osakaalude vektorit 10000 4 $ kulutused_10000 =: kulutused mc_vectors 10000 NB. 10 000 Monte Carlo abil häiritud kulude alusel alternatiivide osakaalude vektorit 10000 4 $ kaugus_10000 =: kaugus mc_vectors 10000 NB. 10 000 Monte Carlo abil häiritud kauguse alusel alternatiivide osakaalude vektorit 10000 4 NB. algse AHP mudeli lõpptulemuse arvutamise sammud, samm 1. arvuta kriteeriumite osakaalud: normalise_to_1 power kriteeriumid NB. extract weights from comparison matrix S as the 1st eigenvector; normalize to 1 0.738307 0.0915203 0.170172 NB. samm 2, arvuta alternatiivide osakaalud iga üksiku kriteeriumi suhtes normalise_to_1 power kvaliteet 0.541566 0.244679 0.0691291 0.144626 normalise_to_1 power kulutused 0.0683294 0.177959 0.364361 0.38935 normalise_to_1 power kaugus 0.0612357 0.349414 0.5054 0.083951 kvaliteet; kulutused; kaugus ┌─────────────┬─────────────┬─────────────┐ │ 1 3 7 3│1 1r4 1r7 1r3│1 1r7 1r5 1r2│ │1r3 1 4 2│4 1 1r3 1r2│7 1 1r2 5│ │1r7 1r4 1 1r2│7 3 1 1r2│5 2 1 7│ │1r3 1r2 2 1│3 2 2 1│2 1r5 1r7 1│ └─────────────┴─────────────┴─────────────┘ normalise_to_1 each power each kvaliteet; kulutused; kaugus ┌────────────────────────────────────┬───────────────────────────────────┬──────────────────────────────────┐ │0.541566 0.244679 0.0691291 0.144626│0.0683294 0.177959 0.364361 0.38935│0.0612357 0.349414 0.5054 0.083951│ └────────────────────────────────────┴───────────────────────────────────┴──────────────────────────────────┘ NB. ja nüüd korruta alternatiivide osakaalud kriteeriumi suhtes läbi kriteeriumi enda osakaaluga ja siis summeeri korrutised. normalise_to_1 power kriteeriumid 0.738307 0.0915203 0.170172 > (normalise_to_1 power kriteeriumid) */ each (normalise_to_1 each power each kvaliteet; kulutused; kaugus) 0.399842 0.180648 0.0510386 0.106778 0.00625353 0.0162869 0.0333464 0.0356335 0.0104206 0.0594605 0.086005 0.0142861 NB. 3-kihilise AHP mudeli lõppkaalude arvutamine võrdlusmaatriksite pealt: +/ > (normalise_to_1 power kriteeriumid) */ each (normalise_to_1 each power each kvaliteet; kulutused; kaugus) 0.416516 0.256396 0.17039 0.156698 NB. võrdlusmaatriksi piires Monte Carlo häiritusega osakaalude hulgast saab võtta ühe neist häiritud omavektoritest juhuslikult välja. NB. samamoodi saab iga võrdlusmaatriksi MC häiritud vektorite seast võtta ühe vektori juhuslikult välja. NB. Ja nende juhuslikult väljavalitud Monte Carlo häiritud omavektorite komplekti alusel saab arvutada AHP häiritud lõppkaalud. $ krit_10000 10000 3 ?10000 NB. juhusliku arvu (järjeindeksi) genereerimine vahemikust [0; 10000] 8141 (?10000) { krit_10000 NB. kriteeriumite Monte Carlo häiritud omavektoritest ühe juhuslik väljavalimine 0.776119 0.0894553 0.134426 ((?10000) { kvaliteet_10000); ((?10000) { kulutused_10000); ((?10000) { kaugus_10000) ┌────────────────────────────────────┬──────────────────────────────────┬─────────────────────────────────────┐ │0.500272 0.271934 0.0755431 0.152251│0.058889 0.158884 0.349496 0.43273│0.0579002 0.339461 0.530394 0.0722451│ └────────────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────┘ NB. juhusliku valiku põhjal AHP Monte Carlo häiritud lõppkaalud +/ > ((?10000) { krit_10000) */ each ((?10000) { kvaliteet_10000); ((?10000) { kulutused_10000); ((?10000) { kaugus_10000) 0.385577 0.281087 0.167683 0.165653 #krit_10000 10000 $ krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 4 $ {. krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 # each $ {. krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ># each {. krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 10000 4?10000 7115 4194 4305 5741 #>{. krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 10000 $ krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 4 #>{. krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 10000 (4?10000) { each krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌──────────────────────────┬──────────────────────────────────┬───────────────────────────────────┬─────────────────────────────────────┐ │0.771263 0.0625073 0.16623│0.537951 0.242772 0.06681 0.152467│0.0808955 0.32564 0.232058 0.361406│0.0479556 0.347623 0.524975 0.0794466│ └──────────────────────────┴──────────────────────────────────┴───────────────────────────────────┴─────────────────────────────────────┘ + juhuvalik =: 4?10000 3602 3573 8372 7366 juhuvalik { each krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌───────────────────────────┬────────────────────────────────────┬──────────────────────────────────┬───────────────────────────────────┐ │0.684567 0.0964539 0.218979│0.553514 0.228884 0.0635161 0.154085│0.05927 0.137378 0.337584 0.465767│0.0667297 0.31903 0.534517 0.079723│ └───────────────────────────┴────────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────┘ 3602 { krit_10000 0.684567 0.0964539 0.218979 3573 { kvaliteet_10000 0.553514 0.228884 0.0635161 0.154085 {. (( $yy ) ? ( #>{. yy )) 6105 2098 7026 6509 AHP3_MC_juhu =: 13 : '({. ( $y ) ? ( #>{. y )) { each y' AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌───────────────────────────┬────────────────────────────────────┬───────────────────────────────────┬─────────────────────────────────────┐ │0.681569 0.0854619 0.232969│0.570059 0.254255 0.0670337 0.108652│0.0526388 0.136507 0.36434 0.446515│0.0631979 0.375355 0.480493 0.0809541│ └───────────────────────────┴────────────────────────────────────┴───────────────────────────────────┴─────────────────────────────────────┘ }. AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌────────────────────────────────────┬────────────────────────────────────┬─────────────────────────────────────┐ │0.529551 0.251367 0.0661342 0.152948│0.0732661 0.193686 0.397403 0.335645│0.0613392 0.321044 0.522824 0.0947931│ └────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────┘ >{. AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.744832 0.0833157 0.171852 }. AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌────────────────────────────────────┬────────────────────────────────────┬─────────────────────────────────────┐ │0.541303 0.259414 0.0659776 0.133305│0.0984535 0.244991 0.236979 0.419576│0.0485136 0.410281 0.458305 0.0828997│ └────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────┘ ( >{. sisend ) */ each }. sisend =: AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌───────────────────────────────────┬────────────────────────────────────────┬─────────────────────────────────────┐ │0.405255 0.189037 0.0593536 0.11064│0.00613301 0.0180251 0.0326405 0.0305734│0.00940078 0.0559478 0.0691939 0.0138│ └───────────────────────────────────┴────────────────────────────────────────┴─────────────────────────────────────┘ > ( >{. sisend ) */ each }. sisend =: AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.464639 0.186129 0.0579653 0.108548 0.00325689 0.00673614 0.0153358 0.0170005 0.00843612 0.0430191 0.0760653 0.0128688 +/ > ( >{. sisend ) */ each }. sisend =: AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.442312 0.225699 0.1703 0.161689 +/ > ( >{. sisend ) */ each }. sisend =: AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.43942 0.231166 0.166597 0.162816 +/ > ( >{. sisend ) */ each }. sisend =: AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.422675 0.244251 0.17343 0.159644 AHP3_loppkaalud =: 13 : '+/ > ( >{. y ) */ each }. y' AHP3_loppkaalud AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.428408 0.225858 0.190996 0.154738 AHP3_loppkaalud AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.419417 0.27476 0.156355 0.149468 AHP3_loppkaalud AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.455653 0.240366 0.156694 0.147288 AHP3_loppkaalud AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.407407 0.273272 0.152101 0.16722 + juhuvalik =: 5 4 $ (5 * 4)?10000 7321 2462 1240 2985 7444 8938 5821 660 9226 5660 4961 6260 3826 2263 1832 7894 7422 3742 2494 909 # juhuvalik 5 AHP3_MC_juhud =: 13 : 'y { each x' ( krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ) AHP3_MC_juhud"(1 1) juhuvalik =: 5 4 $ (5 * 4)?10000 ┌───────────────────────────┬────────────────────────────────────┬────────────────────────────────────┬─────────────────────────────────────┐ │0.696837 0.100917 0.202246 │0.564586 0.239963 0.0720827 0.123368│0.0622102 0.171496 0.336786 0.429508│0.0683579 0.411018 0.44197 0.0786539 │ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.808962 0.0562828 0.134756│0.514806 0.238346 0.0803917 0.166456│0.0573034 0.157369 0.342235 0.443092│0.0633014 0.381262 0.478471 0.0769652│ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.816514 0.0522513 0.131235│0.531784 0.254117 0.0700017 0.144098│0.0726573 0.165822 0.334718 0.426804│0.0583178 0.354719 0.509377 0.0775855│ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.743005 0.102758 0.154237 │0.519285 0.259721 0.0730938 0.1479 │0.062059 0.171616 0.365257 0.401068 │0.0679203 0.339194 0.51615 0.0767355 │ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.713523 0.0737127 0.212764│0.520646 0.261708 0.0657888 0.151857│0.0613668 0.150431 0.379716 0.408486│0.0514903 0.343852 0.541049 0.0636095│ └───────────────────────────┴────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────┘ NB. lõppkaalude arvutamine iga AHP Monte Carlo häiritud osakaalude komplekti korral. Näites 5 komplekti osakaalusid. + kool_MC_loppkaalud =: AHP3_loppkaalud"1 ( krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ) AHP3_MC_juhud"(1 1) juhuvalik =: 5 4 $ (5 * 4)?10000 0.382119 0.267274 0.178331 0.172275 0.420596 0.244429 0.163514 0.171462 0.399593 0.276683 0.171759 0.151965 0.378461 0.26431 0.19849 0.158739 0.368737 0.25672 0.209441 0.165102 monte_carlo_domination_matrix2 =: 13 : '(mean % stddev) ^. %/"1~ y' monte_carlo_domination_matrix2 kool_MC_loppkaalud 0 4.90259 4.9644 12.2987 _4.90259 0 3.26668 5.13304 _4.9644 _3.26668 0 0.933931 _12.2987 _5.13304 _0.933931 0 NB. The ratio between the mean and standard deviation is a z-score - it measures how far probabilistically the weights of those two alternatives are from each other on a z-scale. NB. Those z-scores can be transformed into direct probabilities - the probability that the weight of one alternative stochastically dominates over the weight of another alternative. + Zscore_probs_10000 =: pnorm_f _1 * | monte_carlo_domination_matrix2 kool_MC_loppkaalud NB. probabilities of results on z-scale, ie. those are pairwise domination z-scores, based on Monte Carlo results based on standard deviations of pairwise comparison inconsistencies with respect to the eigenvector weights of the original pairwise comparison matrix 0.5 4.73585e_7 3.45091e_7 4.75082e_35 4.73585e_7 0.5 0.000544145 1.42808e_7 3.45091e_7 0.000544145 0.5 0.17517 4.75082e_35 1.42808e_7 0.17517 0.5 NB. samad viimased sammud läbi tehtuna 10000 komplekti osakaaludega, 10000 kordust (kordusi võiks võtta vähem, näiteks 100, võtab vähem aega). rand_deal_1 =: 13 : 'y?y' $ |: rand_deal_1"0 (4#10000) 10000 4 monte_carlo_domination_matrix_probs =: 13 : 'pnorm_f _1 * | monte_carlo_domination_matrix2 AHP3_loppkaalud"1 ( x ) AHP3_MC_juhud"(1 1) juhuvalik =: |: rand_deal_1"0 (4# #>{.x)' NB. 10000 komplekti osakaalude stohhastilise domineerimise tõenäosused (paremuse erinevus algsete lõppkaalude paremusest), 10000 korduse pealt aritmeetiline keskmine ja standardhälve (ehkki siingi peaks tõenäosuste maatriksid enne viima logaritmskaalale, aga kui eeldada et tõenäosused palju ei kõigu siis võib jätta ka logaritmimata) NB. väljundi esimeses kastis on tõenäosuste aritmeetilised keskmised, teises kastis on tõenäosuste standardhälbed. (mean; stddev) ( krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ) monte_carlo_domination_matrix_probs"(1 0) 10000#1 ┌─────────────────────────────────────────────┬───────────────────────────────────────────────┐ │ 0.5 7.04643e_5 2.43192e_5 1.08689e_15│2.57585e_14 5.61501e_6 1.41327e_6 3.82864e_16│ │ 7.04643e_5 0.5 0.00325172 4.88791e_7│ 5.61501e_6 2.57585e_14 0.000152322 7.10498e_8│ │ 2.43192e_5 0.00325172 0.5 0.294529│ 1.41327e_6 0.000152322 2.57585e_14 0.00100174│ │1.08689e_15 4.88791e_7 0.294529 0.5│3.82864e_16 7.10498e_8 0.00100174 2.57585e_14│ └─────────────────────────────────────────────┴───────────────────────────────────────────────┘ NB. meeldetuletuseks algse tavalise AHP mudeli lõppkaalud (ilma hägustamiseta) +/ > (normalise_to_1 power kriteeriumid) */ each (normalise_to_1 each power each kvaliteet; kulutused; kaugus) 0.416516 0.256396 0.17039 0.156698 NB. Näiteks Alternatiiv 3 on algses mudelis veidi parem kui alternatiiv 4. NB. Aga läbi tehtud Monte Carlo analüüs näitab, et alternatiiv 4 võib siiski osutuda 3ndast paremaks keskmise tõenäosusega 29,45%. NB. Ja alternatiiv 3 võib osutuda paremaks alternatiivist 2 tõenäosusega keskmise tõenäosusega 0,325% ... NB. ...ja selle tõenäosuse 2-sigma kõikumispiirid on umbes 0,295% - 0,355%. NB. Ja alternatiiv 2 (kool B) võib osutuda paremaks alternatiivist 1 (kool A) keskmise tõenäosusega 0,007%. NB. Tuleb siiski meeles pidada, et läbi on tehtud vaid hägustamise lähenemise variant 2 (vt. faili alguses lähenemiste loendit), ülejäänud hägustamise lähenemised (ja nende kombineerimine) võivad lõppkaalude hajuvust suurendada. NB. kui jätta kõrvale need häiritud võrdlusmaatriksid mille suhtelise kooskõlaindeks on üle 0,2: NB. aluseks võtkem häiritud kaalude verb, kaalude arvutamist kohe ei tee. Vaja on häiritud võrdlusmaatrikseid. mc_vectors =: 13 : '(%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' mc_matrices =: 13 : '(x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' $ krit_10000m =: kriteeriumid mc_matrices 10000 10000 3 3 maci_precomputed =: 10000 maci"0 (3+i.8) $ krit_cr_10000 =: cr"2 krit_10000m 10000 5000{ \:~ krit_cr_10000 0.23338 5450{ \:~ krit_cr_10000 NB. umbes 54,5% häiritud (kriteeriumite-) võrdlusmaatriksitest on kooskõlaindeksiga üle 0,2 0.200176 $ krit_10000_consistent =: (%"2 +/"1) power"2 (I. krit_cr_10000 < 0.2) { krit_10000m 4547 3 $ kvaliteet_10000m =: kvaliteet mc_matrices 10000 10000 4 4 $ kulutused_10000m =: kulutused mc_matrices 10000 10000 4 4 $ kulutused_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kulutused_10000m) < 0.2) { kulutused_10000m 6203 4 $ kvaliteet_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kvaliteet_10000m) < 0.2) { kvaliteet_10000m 10000 4 $ kaugus_10000m =: kaugus mc_matrices 10000 10000 4 4 $ kaugus_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kaugus_10000m) < 0.2) { kaugus_10000m 9406 4 juhuv6tt_kastist =: 13 : '(?># each valjavotukast) { each valjavotukast =. y{ x' ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist"(1 0) i.4 ┌───────────────────────────┬────────────────────────────────────┬────────────────────────────────────┬────────────────────────────────────┐ │0.754355 0.0711033 0.174541│0.474811 0.287264 0.0698144 0.168111│0.0782411 0.257866 0.363042 0.300851│0.0723261 0.35331 0.501218 0.0731458│ └───────────────────────────┴────────────────────────────────────┴────────────────────────────────────┴────────────────────────────────────┘ juhuv6tte_kastist =: 13 : 'x juhuv6tt_kastist"(1 0) i.$x' $ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tte_kastist"(1 0) i.10000 10000 4 + kool_MC_loppkaalud =: AHP3_loppkaalud"1 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tte_kastist"(1 0) i.5 0.427257 0.278075 0.144214 0.150454 0.381123 0.25993 0.160267 0.19868 0.414339 0.257744 0.173652 0.154265 0.428964 0.256363 0.167021 0.147652 0.402057 0.257163 0.178411 0.162369 mc_dom_matrix2 =: 13 : 'pnorm_f _1 * | monte_carlo_domination_matrix2 mc_loppkaalud =: AHP3_loppkaalud"1 x juhuv6tte_kastist"(1 0) i.y' pnorm_f _1 * | monte_carlo_domination_matrix2 mc_loppkaalud =: AHP3_loppkaalud"1 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tte_kastist"(1 0) i.10000 0.5 0.00172513 0.00101174 3.15088e_9 0.00172513 0.5 0.01998 0.000119473 0.00101174 0.01998 0.5 0.336776 3.15088e_9 0.000119473 0.336776 0.5 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 10000 0.5 0.00183559 0.00109285 2.24238e_9 0.00183559 0.5 0.0213659 9.87569e_5 0.00109285 0.0213659 0.5 0.330268 2.24238e_9 9.87569e_5 0.330268 0.5 NB. 3 korda 10000 juhuvõtuga Monte Carlo kooli näite peal. Häiritus on lisatud algsele võrdlusmaatriksile. ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 3#10000 0.5 0.00180699 0.000986859 1.89296e_9 0.00180699 0.5 0.0198642 0.000108347 0.000986859 0.0198642 0.5 0.324898 1.89296e_9 0.000108347 0.324898 0.5 0.5 0.00166334 0.0010204 1.90436e_9 0.00166334 0.5 0.020477 0.000106618 0.0010204 0.020477 0.5 0.328629 1.90436e_9 0.000106618 0.328629 0.5 0.5 0.00178842 0.00100767 2.1975e_9 0.00178842 0.5 0.0193155 0.000116681 0.00100767 0.0193155 0.5 0.329872 2.1975e_9 0.000116681 0.329872 0.5 NB. parem oleks häiritus lisada algse võrdlusmaatriksi ja lõppkaaludest taastatud kooskõlalise võrdlusmaatriksi geomeetrilisele keskmisele. Ja standardhälvet vähendada 2x. mc_matrices =: 13 : '(x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' NB. seda verbi peaks muutma. Korrutise esimeseks teguriks peaks olema algse võrdlusmaatriksi ja kooskõlalise võrdlusmaatriksi geomeetriline keskmine. normalise_to_1 power S 0.0780047 0.456815 0.167932 0.297249 (%/~) normalise_to_1 power S 1 0.170758 0.464503 0.262422 5.85625 1 2.72024 1.53681 2.15284 0.367614 1 0.564953 3.81065 0.650698 1.77006 1 S 1 0.5 0.2 0.5 2 1 1 7 5 1 1 0.125 2 0.142857 8 1 cr S 0.848041 S; (%/~) normalise_to_1 power S ┌────────────────────┬──────────────────────────────────┐ │1 0.5 0.2 0.5│ 1 0.170758 0.464503 0.262422│ │2 1 1 7│5.85625 1 2.72024 1.53681│ │5 1 1 0.125│2.15284 0.367614 1 0.564953│ │2 0.142857 8 1│3.81065 0.650698 1.77006 1│ └────────────────────┴──────────────────────────────────┘ geomean > S; (%/~) normalise_to_1 power S 1 0.292197 0.304796 0.362231 3.42235 1 1.64932 3.27989 3.28088 0.606312 1 0.265743 2.76067 0.304888 3.76304 1 comp_matrix_consistent_geomean =: 13 : 'geomean > y; (%/~) normalise_to_1 power y' mc_matrices =: 13 : '( (comp_matrix_consistent_geomean x) *"2 monte_carlo_error_factor"2 ((y, #x)$ x))' $ krit_10000m =: kriteeriumid mc_matrices 10000 10000 3 3 $ krit_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 krit_10000m) < 0.2) { krit_10000m 7375 3 $ kvaliteet_10000m =: kvaliteet mc_matrices 10000 10000 4 4 $ kvaliteet_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kvaliteet_10000m) < 0.2) { kvaliteet_10000m 10000 4 $ kulutused_10000m =: kulutused mc_matrices 10000 10000 4 4 $ kulutused_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kulutused_10000m) < 0.2) { kulutused_10000m 9172 4 $ kaugus_10000m =: kaugus mc_matrices 10000 10000 4 4 $ kaugus_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kaugus_10000m) < 0.2) { kaugus_10000m 9951 4 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 3#10000 0.5 0.00201107 0.00097266 4.63463e_9 0.00201107 0.5 0.0182752 0.000120223 0.00097266 0.0182752 0.5 0.331963 4.63463e_9 0.000120223 0.331963 0.5 0.5 0.0018743 0.000982556 2.50061e_9 0.0018743 0.5 0.0193016 0.000103592 0.000982556 0.0193016 0.5 0.330163 2.50061e_9 0.000103592 0.330163 0.5 0.5 0.00192654 0.0011217 3.38186e_9 0.00192654 0.5 0.0205115 0.000125201 0.0011217 0.0205115 0.5 0.335105 3.38186e_9 0.000125201 0.335105 0.5 NB. leidkem 100x10000 Monte Carlo domineerimise tulemused, esimeses maatriksis on aritmeetiline keskmine üle 100 simulatsiooni, teises tabelis on standardhälve. NB. Kuna domineerimise maatriks näitab tõenäosusi, siis teoreetiliselt oleks muidugi õigem leida aritmeetilise keskmise asemel geomeetriline keskmine ja standardhälve arvutada logaritmskaalal. NB. Aga kui arvujada sisaldab ka nulle, siis geomeetriline keskmine tuleks null. > (mean; stddev) ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 100#10000 0.5 0.00186021 0.0011202 3.79994e_9 0.00186021 0.5 0.0203833 0.00011975 0.0011202 0.0203833 0.5 0.335008 3.79994e_9 0.00011975 0.335008 0.5 1.2274e_15 0.000145331 9.72345e_5 1.07774e_9 0.000145331 1.2274e_15 0.000898482 1.29302e_5 9.72345e_5 0.000898482 1.2274e_15 0.00385209 1.07774e_9 1.29302e_5 0.00385209 1.2274e_15 NB. Tulemuste tõlgendamine: NB. kool D on nõrgem koolist C, aga tõenäosusega 33,5% võib kool D siiski edestada kooli C. NB. Selle tõenäosuse esindusviga (st. kõikumispiirid mille vahele jääb 95%) on umbes 2x standardhälvet, ehk 0,77% NB. Nii on domineerimise tõenäosusvahemikuks [32,73% ; 34,27% ] NB. Kool C võib domineerida kooli B üle keskmise tõenäosusega 2,04%. NB. Selle tõenäosuse esindusviga on 0,18%. NB. Domineerimise tõenäosusvahemik on [ 1,86% ; 2,22% ] NB. Kool B võib domineerida kooli A üle keskmise tõenäosusega 0,19%. NB. Selle tõenäosusvahemik on [ 0,161% ; 0,219% ] NB. nüüd peaks standardhälvet 2x vähendama. NB. Algne verb NB. Let all the prior steps together (besides the 1st one) be defined as a function named as monte_carlo_error_factor monte_carlo_error_factor =: 13 : '^(+ _1*|:)~ ((0, stddev (uti) { ^. y % %/~ (%+/) power y) tomusigma normalrand(+/ ,ut)) (uti =. <"1 (4 $. $. ut)) } ut =. upper_triangle #y' monte_carlo_error_factor S 1 0.917674 0.545202 0.209063 1.08971 1 2.00593 0.242934 1.83418 0.498523 1 2.94156 4.78325 4.11635 0.339955 1 NB. muudetud verb monte_carlo_error_factor =: 13 : '^(+ _1*|:)~ ((0, 0.5*stddev (uti) { ^. y % %/~ (%+/) power y) tomusigma normalrand(+/ ,ut)) (uti =. <"1 (4 $. $. ut)) } ut =. upper_triangle #y' monte_carlo_error_factor S 1 0.511431 0.991751 1.38725 1.9553 1 0.601837 0.797119 1.00832 1.66158 1 2.91022 0.720851 1.25452 0.343617 1 NB. ja arvutused uuesti teha mc_matrices =: 13 : '( (comp_matrix_consistent_geomean x) *"2 monte_carlo_error_factor"2 ((y, #x)$ x))' $ krit_10000m =: kriteeriumid mc_matrices 10000 10000 3 3 $ krit_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 krit_10000m) < 0.2) { krit_10000m 9114 3 $ kvaliteet_10000m =: kvaliteet mc_matrices 10000 10000 4 4 $ kvaliteet_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kvaliteet_10000m) < 0.2) { kvaliteet_10000m 10000 4 $ kulutused_10000m =: kulutused mc_matrices 10000 10000 4 4 $ kulutused_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kulutused_10000m) < 0.2) { kulutused_10000m 10000 4 $ kaugus_10000m =: kaugus mc_matrices 10000 10000 4 4 $ kaugus_10000_consistent =: (%"2 +/"1) power"2 (I. (cr"2 kaugus_10000m) < 0.2) { kaugus_10000m 10000 4 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 3#10000 0.5 4.7911e_10 1.22085e_10 2.99954e_34 4.7911e_10 0.5 1.6111e_5 2.0446e_14 1.22085e_10 1.6111e_5 0.5 0.207245 2.99954e_34 2.0446e_14 0.207245 0.5 0.5 4.65458e_10 1.24953e_10 1.17754e_34 4.65458e_10 0.5 1.65616e_5 2.57938e_14 1.24953e_10 1.65616e_5 0.5 0.208223 1.17754e_34 2.57938e_14 0.208223 0.5 0.5 4.32532e_10 1.58114e_10 5.45296e_34 4.32532e_10 0.5 2.03516e_5 6.26846e_14 1.58114e_10 2.03516e_5 0.5 0.209359 5.45296e_34 6.26846e_14 0.209359 0.5 > (mean; stddev) ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 100#10000 0.5 5.33666e_10 2.12333e_10 1.53985e_33 5.33666e_10 0.5 2.07443e_5 3.14236e_14 2.12333e_10 2.07443e_5 0.5 0.209515 1.53985e_33 3.14236e_14 0.209515 0.5 1.2274e_15 1.75486e_10 6.48519e_11 1.53585e_33 1.75486e_10 1.2274e_15 2.6999e_6 1.43894e_14 6.48519e_11 2.6999e_6 1.2274e_15 0.0033272 1.53585e_33 1.43894e_14 0.0033272 1.2274e_15 NB. Nagu näha, on kooli B tõenäosus domineerida kooli A üle kahanenud kõvasti.