NB. 4 üldist teemat: NB. 1. Fuzzy AHP (2-4 nädalat) NB. 2. Fuzzy ANP NB. 3. XMCDA standardi abil hägusate AHP (ja ANP) mudelite esitamine (2-4 nädalat) NB. 4. Teenustepõhine arhitektuur mis toetab AHP (ja ANP) mudelite kasutamist, sh tundlikkuse analüüsi hägustamise abil. NB. AHP mudeli hägustamise erinevad lähenemised: NB. 1. AHP võrdlusmaatriksi võrdlushinnangute esitamine hägusal kujul (kysitlus_sektorid hägustamise näide Excelis). NB. 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. NB. 3. üle AHP mitme võrdlusmaatriksi Monte Carlo NB. 3b. üle AHP mitme võrdlusmaatriksi Monte Carlo, arvestades Saaty skaala nivoosid (kui on piisavalt palju veakordajaid). NB. 4. AHP mudeli struktuuri hägusus NB. 5. Fuzzy Tradeoff Analysis (risttundlikkuse hägusus) NB. 6. Grupiotsustuse hägususus NB. 7. Kombinatsioon lähenemistest 1-6 NB. Lähenemised 2-6 on automaatselt arvutatavad. See on analoogne automaatsele tundlikkuse analüüsile. NB. 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 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. ) 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 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 1r2 1r5 1r2 2 1 1 7 5 1 1 1r8 2 1r7 8 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 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.0780047 0.456815 0.167932 0.297249 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 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.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 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. 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.341516 2.32251 0.524845 2.92812 1 2.72024 0.219544 0.430568 0.367614 1 4.51963 1.90532 4.55489 0.221257 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 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 _1.07436 0.842651 _0.644652 1.07436 0 1.00072 _1.5162 _0.842651 _1.00072 0 1.50843 0.644652 1.5162 _1.50843 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 NB. But this approach assumes normal distribution of values. If the values at a cell position over different perturbed comparison matrices are not normally distributed, then another option would be to use voting and binary distribution calculations to assess stochastic dominance of one alternative weight over the weight of another alternative. NB. The steps with voting and binary distribution calculation are described next. NB. Instead of pairwise ratios (as in step xx2), one would compute pairwise dominance votes. NB. Let monte_carlo_votes_from_weights be the function to compute the voting table from the eigenvectors of perturbed comparison matrices. monte_carlo_votes_from_weights =: 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 547 2114 1038 9453 0 8139 6556 7886 1861 0 2970 8962 3444 7030 0 dom_votes_monte_carlo_10000 < -:10000 1 1 1 1 0 1 0 0 0 1 1 1 0 1 0 1 (upper_indices S) { dom_votes_monte_carlo_10000 547 2114 1038 8139 6556 2970 dom_votes_monte_carlo_10000 > -:10000 0 0 0 0 1 0 1 1 1 0 0 0 1 0 1 0 ((S ^ #S)* (*/ S) */ (*/"1 S)) ^ (%2- #S) NB. see peaks olema õige, ehkki astendajat tuleb veel modida 1 0.239046 7.07107 0.591608 4.1833 1 4.73286 0.0505076 0.141421 0.211289 1 33.4664 1.69031 19.799 0.0298807 1 S 1 0.5 0.2 0.5 2 1 1 7 5 1 1 0.125 2 0.142857 8 1 + E =: cS % S NB. error matrix E 1 0.341516 2.32251 0.524845 2.92812 1 2.72024 0.219544 0.430568 0.367614 1 4.51963 1.90532 4.55489 0.221257 1 NB. kooli näide, 3-kihiline AHP mudel + 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)) 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.0896309 0.412724 0.160735 0.33691 0.235749 0.134062 0.294746 0.335443 0.0103676 0.368315 0.363825 0.257492 mc_vectors =: 13 : '(%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' S mc_vectors 3 mc_vectors =: 13 : '(%"2 +/"1) power"2 (x*"2 monte_carlo_error_factor"2 ((y, #x)$ x))' S mc_vectors 3 0.114821 0.351683 0.14757 0.385926 0.0269269 0.712496 0.124441 0.136136 0.199354 0.320943 0.166571 0.313132 $ 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 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 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│ └────────────────────────────────────┴───────────────────────────────────┴──────────────────────────────────┘ 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) 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 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) { krit_10000 NB. kriteeriumite Monte Carlo häiritud omavektoritest ühe juhuslik väljavalimine 0.746178 0.143085 0.110737 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) 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.4231 0.258534 0.181368 0.136997 AHP3_MC_juhu =: 13 : '({. ( $y ) ? ( #>{. y )) { each y' AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 AHP3_MC_juhu =: 13 : '({. ( $y ) ? ( #>{. y )) { each y' AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 ┌──────────────────────────┬──────────────────────────────────┬────────────────────────────────────┬───────────────────────────────────┐ │0.555717 0.192783 0.251501│0.536846 0.2243 0.0774016 0.161453│0.0434589 0.122108 0.257718 0.576716│0.058588 0.347206 0.51328 0.0809262│ └──────────────────────────┴──────────────────────────────────┴────────────────────────────────────┴───────────────────────────────────┘ + juhuvalik =: 5 4 $ (5 * 4)?10000 7938 4141 7116 4266 1575 8525 6939 9457 4059 8043 1270 4685 3754 3444 5688 9779 5365 5696 1859 8804 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 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.772878 0.0544092 0.172713│0.548716 0.243759 0.0677417 0.139783│0.0552199 0.125215 0.380303 0.439262│0.0580625 0.328274 0.542915 0.0707489│ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.592337 0.125669 0.281994 │0.522005 0.27998 0.0683329 0.129682 │0.0877723 0.227037 0.252014 0.433177│0.0596189 0.318587 0.541234 0.0805599│ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.71567 0.0955577 0.188772 │0.551436 0.211785 0.0798592 0.15692 │0.0506227 0.175942 0.300605 0.472831│0.0874732 0.302091 0.537771 0.0726646│ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.668566 0.109125 0.222309 │0.570373 0.225138 0.0614697 0.14302 │0.0734457 0.226219 0.327105 0.373231│0.0812773 0.25542 0.564532 0.0987699 │ ├───────────────────────────┼────────────────────────────────────┼────────────────────────────────────┼─────────────────────────────────────┤ │0.877472 0.061562 0.0609663│0.575433 0.215932 0.0696486 0.138987│0.0601611 0.140262 0.350581 0.448996│0.0568207 0.329981 0.534068 0.0791302│ └───────────────────────────┴────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────┘ AHP3_loppkaalud =: 13 : '+/ > ( >{. y ) */ each }. y' AHP3_loppkaalud AHP3_MC_juhu krit_10000; kvaliteet_10000; kulutused_10000; kaugus_10000 0.318387 0.278554 0.22916 0.173899 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.276095 0.261499 0.275462 0.186944 0.496269 0.252727 0.12775 0.123255 0.328297 0.302682 0.224957 0.144064 0.419958 0.254859 0.161382 0.1638 0.397011 0.247135 0.18064 0.175214 monte_carlo_domination_matrix2 =: 13 : '(mean % stddev) ^. %/"1~ y' monte_carlo_domination_matrix2 kool_MC_loppkaalud monte_carlo_domination_matrix2 =: 13 : '(mean % stddev) ^. %/"1~ y' monte_carlo_domination_matrix2 kool_MC_loppkaalud 0 1.29701 1.3304 2.43643 _1.29701 0 1.26721 2.58447 _1.3304 _1.26721 0 0.801917 _2.43643 _2.58447 _0.801917 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 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 0.0973147 0.0916929 0.00741655 0.0973147 0.5 0.102539 0.0048765 0.0916929 0.102539 0.5 0.2113 0.00741655 0.0048765 0.2113 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' 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' 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 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 0.00183377 0.00106634 3.07751e_9│2.57585e_14 8.82062e_5 3.64632e_5 5.70318e_10│ │0.00183377 0.5 0.0207844 0.000124997│ 8.82062e_5 2.57585e_14 0.000560676 1.05816e_5│ │0.00106634 0.0207844 0.5 0.333889│ 3.64632e_5 0.000560676 2.57585e_14 0.000880217│ │3.07751e_9 0.000124997 0.333889 0.5│5.70318e_10 1.05816e_5 0.000880217 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) 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 0.200176 $ (%"2 +/"1) power"2 krit_10000m 10000 3 krit_cr_10000 < 0.2 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 1 0 0 ... I. krit_cr_10000 < 0.2 0 1 2 8 9 10 14 16 17 18 19 20 22 23 29 31 35 36 37 38 40 42 43 46 47 49 54 55 60 62 63 64 72 73 75 78 80 81 82 83 85 87 89 90 92 94 99 103 106 108 114 116 117 119 121 122 123 124 125 133 138 140 141 142 144 147 148 150 151 154 155 162 163 165 167 168 171 ... $ (I. krit_cr_10000 < 0.2) { krit_10000m 4547 3 3 $ (%"2 +/"1) power"2 (I. krit_cr_10000 < 0.2) { krit_10000m 4547 3 $ 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 $ krit_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 6203 4 $ krit_10000_consistent =: (%"2 +/"1) power"2 (I. krit_cr_10000 < 0.2) { krit_10000m 4547 3 $ 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 $ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) 4 $ 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) # each 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) ┌─────┐ │10000│ └─────┘ ># each 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) 10000 ?># each 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) 4393 ?># each valjavotukast =: 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) 9158 (?># each valjavotukast) { each valjavotukast =: 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) ┌────────────────────────────────────┐ │0.519835 0.256178 0.0713701 0.152617│ └────────────────────────────────────┘ (?># each valjavotukast) { each valjavotukast =: 1{ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) ┌────────────────────────────────────┐ │0.531645 0.253084 0.0659021 0.149369│ └────────────────────────────────────┘ 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.524591 0.242096 0.0840591 0.149255│ └────────────────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 1 ┌────────────────────────────────────┐ │0.540578 0.231497 0.0776359 0.150289│ └────────────────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 2 ┌────────────────────────────────────┐ │0.0683353 0.171458 0.290461 0.469746│ └────────────────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 2 ┌────────────────────────────────────┐ │0.0918501 0.190755 0.391342 0.326052│ └────────────────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 3 ┌───────────────────────────────────┐ │0.0374036 0.3691 0.533922 0.0595746│ └───────────────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 3 ┌─────────────────────────────────────┐ │0.0671713 0.325291 0.521242 0.0862959│ └─────────────────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 0 ┌───────────────────────────┐ │0.736737 0.0382075 0.225056│ └───────────────────────────┘ ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) juhuv6tt_kastist 0 ┌───────────────────────────┐ │0.648366 0.0960182 0.255616│ └───────────────────────────┘ ( 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 kool_MC_loppkaalud 0.5 4.49996e_20 3.06843e_18 1.5249e_8 4.49996e_20 0.5 2.66921e_5 0.00012694 3.06843e_18 2.66921e_5 0.5 0.456989 1.5249e_8 0.00012694 0.456989 0.5 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 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 10000 0.5 0.00163572 0.0010135 2.38752e_9 0.00163572 0.5 0.0204318 0.000125389 0.0010135 0.0204318 0.5 0.326418 2.38752e_9 0.000125389 0.326418 0.5 ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 10000 0.5 0.00181669 0.00100329 3.06418e_9 0.00181669 0.5 0.0194423 0.000118722 0.00100329 0.0194423 0.5 0.335416 3.06418e_9 0.000118722 0.335416 0.5 ( 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 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 $ mean ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 100#10000 4 4 mean ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 100#10000 0.5 0.00183378 0.00111439 3.7026e_9 0.00183378 0.5 0.0203115 0.000120451 0.00111439 0.0203115 0.5 0.335965 3.7026e_9 0.000120451 0.335965 0.5 stddev ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 100#10000 1.2274e_15 0.000153716 9.6225e_5 1.15933e_9 0.000153716 1.2274e_15 0.000901026 1.5121e_5 9.6225e_5 0.000901026 1.2274e_15 0.00356783 1.15933e_9 1.5121e_5 0.00356783 1.2274e_15 > (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 > (geomean; stddev) ( krit_10000_consistent; kvaliteet_10000_consistent; kulutused_10000_consistent; kaugus_10000_consistent ) mc_dom_matrix2"(1 0) 100#10000 0.5 0.00183073 0.00111961 0 0.00183073 0.5 0.0204176 0 0.00111961 0.0204176 0.5 0.335366 0 0 0.335366 0.5 1.2274e_15 0.000136081 9.20576e_5 1.02594e_9 0.000136081 1.2274e_15 0.000827106 1.31679e_5 9.20576e_5 0.000827106 1.2274e_15 0.0033577 1.02594e_9 1.31679e_5 0.0033577 1.2274e_15 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) 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. 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.