From 482ca2acc95bf4be36da02c7db44200440f0eeea Mon Sep 17 00:00:00 2001 From: fmazy <francois-remi.mazy@inria.fr> Date: Mon, 23 May 2022 22:32:41 +0200 Subject: [PATCH] 20220523 2232 --- .../__pycache__/_allocator.cpython-38.pyc | Bin 2776 -> 4055 bytes .../__pycache__/_unbiased.cpython-38.pyc | Bin 3683 -> 3683 bytes clumpy/allocation/_allocator.py | 42 ++++++++++++++++++ clumpy/allocation/_unbiased.py | 2 +- 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/clumpy/allocation/__pycache__/_allocator.cpython-38.pyc b/clumpy/allocation/__pycache__/_allocator.cpython-38.pyc index 3923f9a9c32b480666aa193583d1e23ca68ddc78..534b19d9919afd5686f303c9f221671efce3b2eb 100644 GIT binary patch delta 2106 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 delta 839 zcmcaEe?ycnl$V!_fq{X6^K5(4Gl7YGGK@VFwTtE48B%yt_*xiJ_?nrbL{fxO1X2WB z7^6f}n1UHJg(sdk8kG#vg^XDk7#JKF7#NDJ7#J8*8KM|d7^0X`7^9d|_)}R@Sm!XN zu%)oKutu?_aHMdyFhsGX2&8bQ@U$>Su|w>N;sBd2xS5$LfRT}JatO1I5FY~rLy-W8 z5M*FrSjkW%Jb4nc7o*JNyUa?H7jo=zT*-KgC9xv2Sd-@#OLBfeWf2cZF-Y4j-pstr zlFY=M_~MeplGIzQnRzLx6}Ol(^Ga?p<rUmwOG(X1ElHi+%PDUm#K6FCi!tC9Pg-Uk zOhfT4=FF6eB4LnuU_u0>h$lWdCp9rIzMv>SDbaoMUCyH^N+1==3=9lzn#{Kt6K}B; zXI7=&VlPT9$Vp62)#NNv1u5VL5z-(6<hUY95KA3I$bgJxD@x2u$<MvTmYk8FnVhQ0 zT?BEGR}sYY$sF7^a$r}039wUm<BJn>3vyE93o^^{OClyGaku&MGcYh{GTma$EJ@8R zzQtagT9Q~&Ql!ZOF^;Vuu_!UO_!e_^YUM3fFbCa#T*av+@nD(aqRFN_1}uyrnw*o% zd5nEUL5>A`#Tdl01QB4zAPA7Nig+0q7(mV_7Gq#w;9z9oWng4rWcbU($n>8_n?sc0 z50_LC?_^otqhcTh>98bJ1WJaQoJA6ofABhs$btO9ev2a@zAQezG(PecQ%UaR06tqq zRLgD&#FrMNB$lMcgB3=`mzGan$EPgr1JceIqA6Bn3kqG<ywco)$|9M`FZenGBtQ-a yrxK7$i$F?|0s(A3$RD>jY;yBcN^?@}7(s~|<W?4D4kjK(9!3F15DCUid>H_@F2RNX diff --git a/clumpy/allocation/__pycache__/_unbiased.cpython-38.pyc b/clumpy/allocation/__pycache__/_unbiased.cpython-38.pyc index 1e566c3ce682586650f2bbf770e5137057e38290..6f9ac9deccbc990d9edb82f15c86ed632713f611 100644 GIT binary patch delta 22 dcmaDX^H_#Al$V!_fq{Xc@@03D_D0??J^)C71|a|d delta 22 dcmaDX^H_#Al$V!_fq{YH#i#Zp^^Lq?d;m;;29W>& diff --git a/clumpy/allocation/_allocator.py b/clumpy/allocation/_allocator.py index 28c9d4a..e06070b 100644 --- a/clumpy/allocation/_allocator.py +++ b/clumpy/allocation/_allocator.py @@ -12,6 +12,8 @@ from ..tools._path import path_split from ._gart import generalized_allocation_rejection_test from copy import deepcopy +from scipy.stats import norm + class Allocator(): """ Allocator @@ -67,7 +69,47 @@ class Allocator(): # mask=mask) # return(lul, proba_layer) + + def nb_monte_carlo(self, + lul:LandUseLayer, + tm:TransitionMatrix, + features=None, + mask:MaskLayer=None, + alpha = 0.05, + epsilon = 0.001): + + if features is None: + features = self.calibrator.features + + initial_state = self.calibrator.initial_state + final_states = self.calibrator.tpe.get_final_states() + + final_states_id = {final_state:final_states.index(final_state) for final_state in final_states} + P_v = np.array([tm.get(int(initial_state), + int(final_state)) for final_state in final_states]) + + J = lul_origin.get_J(state=initial_state, + mask=mask) + X = lul_origin.get_X(J=J, + features=features) + X = self.calibrator.feature_selector.transform(X) + + P, final_states, P_Y = self.calibrator.tpe.transition_probabilities( + J=J, + Y=X, + P_v=P_v, + return_P_Y=True, + return_P_Y__v=False) + + p_alpha = norm.ppf(1-alpha/2) + + # remove initial state + if initial_state in final_states: + P = np.delete(P, list(final_states).index(initial_state), axis=1) + + return np.max(p_alpha**2/epsilon**2 * P * (1-P) / (P_Y * P.shape[0])) + def _clean_proba(self, P, final_states): diff --git a/clumpy/allocation/_unbiased.py b/clumpy/allocation/_unbiased.py index 61524a0..8643ff2 100644 --- a/clumpy/allocation/_unbiased.py +++ b/clumpy/allocation/_unbiased.py @@ -42,7 +42,7 @@ class Unbiased(Allocator): super().__init__(calibrator=calibrator, verbose=verbose, verbose_heading_level=verbose_heading_level) - + def allocate(self, lul:LandUseLayer, tm:TransitionMatrix, -- GitLab