diff --git a/parmorceauxMax-git/Dynamics_Model.m b/parmorceauxMax-git/Dynamics_Model.m index 7b2cab869c161c70c46b5e89fb693c135afa5fd7..9ba2a4d16eda2a7e0846af657202756b2758300b 100644 --- a/parmorceauxMax-git/Dynamics_Model.m +++ b/parmorceauxMax-git/Dynamics_Model.m @@ -43,10 +43,10 @@ classdef Dynamics_Model < matlab.mixin.Copyable %handle obj.marginal_X_Yi(:,:,i) = flipdim(structure.P_Yi_knowing_X(:,:,i),1); end end - function initialise(obj, initial_X, alpha_ini, sigma_estimation, sigma_test) - obj.T = []; + function initialise(obj, initial_X, alpha_ini, sigma_estimation, sigma_test,y,t) + obj.T = t;%[]; obj.X = []; - obj.Y = []; + obj.Y = y; obj.current_alpha = alpha_ini; obj.initial_estimate_X = initial_X; @@ -127,23 +127,23 @@ classdef Dynamics_Model < matlab.mixin.Copyable %handle obj.X = new_X_variable; end function spread_X(obj) - N = size(obj.X,1); - - if N ==1 - obj.X = 0; - obj.current_alpha = obj.alpha_initial; - - obj.plot_estimated_X() - obj.compute_loglikelihood_dynamics(1:N) - return - elseif N == 2 - obj.X = [0 1]; - obj.current_alpha = 1; - - obj.plot_estimated_X() - obj.compute_loglikelihood_dynamics(1:N) - return - end + N = 25; + +% if N ==1 +% obj.X = 0; +% obj.current_alpha = obj.alpha_initial; +% +% obj.plot_estimated_X() +% obj.compute_loglikelihood_dynamics(1:N) +% return +% elseif N == 2 +% obj.X = [0 1]; +% obj.current_alpha = 1; +% +% obj.plot_estimated_X() +% obj.compute_loglikelihood_dynamics(1:N) +% return +% end %%% estimation initiale de X X_tmp = 0:1/(N-1):1; diff --git a/parmorceauxMax-git/Dynamics_Model_Periodic.m b/parmorceauxMax-git/Dynamics_Model_Periodic.m new file mode 100644 index 0000000000000000000000000000000000000000..a889bc270aa75c38855cd52edb4d9671ed1fb0cf --- /dev/null +++ b/parmorceauxMax-git/Dynamics_Model_Periodic.m @@ -0,0 +1,14 @@ +classdef Dynamics_Model_Periodic < Dynamics_Model + + methods + function obj = Dynamics_Model_Periodic(filename_interpolant, display_screen) + obj = obj@Dynamics_Model(filename_interpolant, display_screen); + end + function X = normalise_X(obj, X) + X = mod(X, 1); + end + function periodic = is_periodic(obj) + periodic = 1; + end + end +end \ No newline at end of file diff --git a/parmorceauxMax-git/Interface.m b/parmorceauxMax-git/Interface.m index 0830dc2f6bb353d7821819f32c915e59316893c3..7b08017629297d4388848160100dcf95d328c7a1 100644 --- a/parmorceauxMax-git/Interface.m +++ b/parmorceauxMax-git/Interface.m @@ -11,7 +11,7 @@ classdef Interface < handle loglikelihood %% modèle statistique - interpolant_filenames + interpolant_filename %% morceaux courants (cad non finis) A, B1, B2 et C dynamics_models @@ -39,9 +39,9 @@ classdef Interface < handle end methods - function obj = Interface(interpolant_filenames, display_screen) + function obj = Interface(interpolant_filename, display_screen) - obj.interpolant_filenames = interpolant_filenames; + obj.interpolant_filename = interpolant_filename; obj.transition = [ 0.5 0.5 0 0; % départ de A 0 1/3 1/3 1/3; % départ de B1 @@ -58,9 +58,9 @@ classdef Interface < handle obj.first_frame_of_models = [1 NaN NaN NaN]; % frame où chaque modèle commence if obj.display_screen == -1 - obj.dynamics_models{1} = Dynamics_Model(obj.interpolant_filenames{1}, obj.display_screen); + obj.dynamics_models = Dynamics_Model(obj.interpolant_filename, obj.display_screen); else - obj.dynamics_models{1} = Dynamics_Model(obj.interpolant_filenames{1}, obj.display_screen+1); + obj.dynamics_models = Dynamics_Model(obj.interpolant_filename, obj.display_screen+1); end obj.proba_morceaux = [1 0 0 0]; % proba des modèles A, B1, B2, et C @@ -80,42 +80,42 @@ classdef Interface < handle obj.proba_morceaux_finis = {[], [], [], []}; obj.read_data(filename); - obj.N = size(obj.T,1); + obj.N = 25; - obj.dynamics_models{1}.initialise(0, initial_alphas(1), sigma_estimation, sigma_test); + obj.dynamics_models.initialise(0, initial_alphas, sigma_estimation, sigma_test,obj.Y,obj.T); %ligne 14 - for frame=1:obj.N - obj.process_frame(frame); - - if obj.display_screen ~= -1 - for model=1:4 - if obj.proba_morceaux(model) == 0 || isnan(obj.proba_morceaux(model)) - continue - end - obj.dynamics_models{model}.plot_estimated_X(); - end - end - end - - - %% choix de la meilleure sequence (peut être pour plus tard: toujours choisir la séquence qui se termine sur le modèle C ?) - [max_proba, indice] = max(obj.proba_morceaux); - obj.meilleure_sequence = obj.model_indexes{indice} - obj.meilleure_sequence_models = [obj.morceaux_finis{indice} obj.dynamics_models{indice}]; - - %% calcul les scores pour les frames du dernier morceau - % mise à jour des x pour bien les étaler - obj.meilleure_sequence_models(end).spread_X(); - new_scores = obj.meilleure_sequence_models(end).compute_loglikelihood_dynamics([1:obj.N-obj.first_frame_of_models(indice)+1]); - obj.loglikelihood = [obj.scores_finis{indice} new_scores]; - - %% à faire : afficher la séquence des modèles et la séquence de scores comme dans plot - close all - for i=1:length(obj.meilleure_sequence_models) - obj.meilleure_sequence_models(i).plot_estimated_X(); - end + % for frame=1:25 +% obj.process_frame(frame); + obj.dynamics_models.spread_X(); +% if obj.display_screen ~= -1 +% for model=1:4 +% if obj.proba_morceaux(model) == 0 || isnan(obj.proba_morceaux(model)) +% continue +% end +% obj.dynamics_models{model}.plot_estimated_X(); +% end +% end + %end + + +% %% choix de la meilleure sequence (peut être pour plus tard: toujours choisir la séquence qui se termine sur le modèle C ?) +% [max_proba, indice] = max(obj.proba_morceaux); +% obj.meilleure_sequence = obj.model_indexes{indice} +% obj.meilleure_sequence_models = [obj.morceaux_finis{indice} obj.dynamics_models{indice}]; + +% %% calcul les scores pour les frames du dernier morceau +% % mise à jour des x pour bien les étaler +% obj.meilleure_sequence_models(end).spread_X(); +% new_scores = obj.meilleure_sequence_models(end).compute_loglikelihood_dynamics([1:obj.N-obj.first_frame_of_models(indice)+1]); +% obj.loglikelihood = [obj.scores_finis{indice} new_scores]; +% +% %% à faire : afficher la séquence des modèles et la séquence de scores comme dans plot +% close all +% for i=1:length(obj.meilleure_sequence_models) +% obj.meilleure_sequence_models(i).plot_estimated_X(); +% end %%% save plot - + % obj.dynamics_models.plot_estimated_X( filename(end-9:end-4) ); end function read_data(obj, filename) obj.Y =load(filename); diff --git a/parmorceauxMax-git/Interface_Periodic.m b/parmorceauxMax-git/Interface_Periodic.m new file mode 100644 index 0000000000000000000000000000000000000000..34b433dd3ceaaf8dc9d7429ae14a7efa5f8902cb --- /dev/null +++ b/parmorceauxMax-git/Interface_Periodic.m @@ -0,0 +1,75 @@ +classdef Interface_Periodic < Interface + methods + function obj = Interface_Periodic(filename_interpolant, display_screen) + obj = obj@Interface(filename_interpolant, display_screen); + + if display_screen == -1 + obj.dynamics_model = Dynamics_Model_Periodic(filename_interpolant, display_screen); + else + obj.dynamics_model = Dynamics_Model_Periodic(filename_interpolant, display_screen+2); + end + end + function initialise(obj, initial_alpha, sigma_estimation, sigma_test, possible_local_minimum) + if possible_local_minimum && obj.N > 15 + if obj.display_screen ~= -1 + figure(obj.display_screen) + clf(obj.display_screen) + end + + % choose the most likely initial X + llh_X = [0,0,0,0]; + + % start from 0 + obj.dynamics_model.initialise(0, initial_alpha, sigma_estimation, sigma_test); + + for i=1:15 + obj.dynamics_model.process_new_frame(obj.Y(i,:), obj.T(i)); + end + + llhs = obj.dynamics_model.compute_loglikelihood_dynamics_forced(1:15); + llh_X(1) = sum( llhs(isfinite(llhs)) ); + + + % start from 0.25 + obj.dynamics_model.initialise(0.25, initial_alpha, sigma_estimation, sigma_test); + + for i=1:15 + obj.dynamics_model.process_new_frame(obj.Y(i,:), obj.T(i)); + end + + llhs = obj.dynamics_model.compute_loglikelihood_dynamics_forced(1:15); + llh_X(2) = sum( llhs(isfinite(llhs)) ); + + % start from 0.5 + obj.dynamics_model.initialise(0.5, initial_alpha, sigma_estimation, sigma_test); + + for i=1:15 + obj.dynamics_model.process_new_frame(obj.Y(i,:), obj.T(i)); + end + + llhs = obj.dynamics_model.compute_loglikelihood_dynamics_forced(1:15); + llh_X(3) = sum( llhs(isfinite(llhs)) ); + + % start from 0.75 + obj.dynamics_model.initialise(0.75, initial_alpha, sigma_estimation, sigma_test); + + for i=1:15 + obj.dynamics_model.process_new_frame(obj.Y(i,:), obj.T(i)); + end + + llhs = obj.dynamics_model.compute_loglikelihood_dynamics_forced(1:15); + llh_X(4) = sum( llhs(isfinite(llhs)) ); + + % choose best + [~, ind] = max(llh_X); + x = [0,0.25,0.5,0.75]; + x_ini = x(ind); + + obj.dynamics_model.initialise(x_ini, initial_alpha, sigma_estimation, sigma_test); + else + %default + obj.dynamics_model.initialise(0, initial_alpha, sigma_estimation, sigma_test); + end + end + end +end diff --git a/parmorceauxMax-git/LLLDyn.mat b/parmorceauxMax-git/LLLDyn.mat index bba22b4155d4d68a789f14e26f04a82873d4724d..2caa01daae799272179217cadf2cfb19896d6f1f 100644 Binary files a/parmorceauxMax-git/LLLDyn.mat and b/parmorceauxMax-git/LLLDyn.mat differ diff --git a/parmorceauxMax-git/LLLDynWin.mat b/parmorceauxMax-git/LLLDynWin.mat index 5d004d9e8ca1cfd716ee19db05c43f0eefdad855..c571685938af3fd0253b837e5582cdf6ccd2d1ae 100644 Binary files a/parmorceauxMax-git/LLLDynWin.mat and b/parmorceauxMax-git/LLLDynWin.mat differ diff --git a/parmorceauxMax-git/LLLDynpt01.txt b/parmorceauxMax-git/LLLDynpt01.txt index 05de59ed0963fd0a0cd119f733731eb36a92b7c9..f04a6944d9c08cda0d9ce923794ba5c59549d81f 100644 --- a/parmorceauxMax-git/LLLDynpt01.txt +++ b/parmorceauxMax-git/LLLDynpt01.txt @@ -1 +1 @@ --172.39,-116.98,-71.582,-38.764,-18.573,-5.4306,-0.69024,0.53016,0.35935,0.31116,-0.79147,-0.47832,-206.87,-50.969,-59.614,-36.728,-30.269,-19.26,-28.638,-39.032,-46.913,-51.738,-39.432,-28.361,-22.284 +5.9873,5.6745,5.5114,5.481,5.3392,5.081,4.8459,4.894,4.6757,4.3968,4.2441,5.7873,5.7273,5.6833,5.638,5.6051,5.6948,5.759,5.7286,5.4084,5.3468,5.2907,5.5845,5.642,5.8658 diff --git a/parmorceauxMax-git/example_test_models.m b/parmorceauxMax-git/example_test_models.m index a95df1c20238e3c53825a9ae92d73d4a229605c4..22b3930c8550970960e7b37d2d3a4513651e015a 100644 --- a/parmorceauxMax-git/example_test_models.m +++ b/parmorceauxMax-git/example_test_models.m @@ -3,25 +3,25 @@ %for initial_alpha=0.035:0.001:0.043%0.035:0.001:0.045%0.01:0.01:0.1%0.05:0.05 %% liste of testing data liste = dir(['HTN*.txt']); - save testtest1.mat - save testtest2.mat - save LLLDynWin.mat - save LLLDyn.mat +% save testtest1.mat + % save testtest2.mat +% save LLLDynWin.mat +% save LLLDyn.mat %% initialisation % set display to -1 to disable - display = 1;%1(ancienne version)%7;%-1 - interface = Interface({'interpolants_A', 'interpolants_B1', 'interpolants_B2', 'interpolants_C'}, display); + display = 7;%1(ancienne version)%7;%-1 + interface = Interface('interpolants', display);%_Periodic % set initial_alpha = -1 to have it estimated automatically - initial_alpha =0.037% 0.038 %0.04;%0.05 %0.025;(0.039) + initial_alpha =1/24%0.037% 0.038 %0.04;%0.05 %0.025;(0.039) sigma_estimation = 7e-3; sigma_test = 1e-3; threshold_dynamics = -0.7; %% testing - J=[5]%[8,29,42,45,46]%J=[1,3,6,11,13,16,21,24,25,26,27,29]; + %J=[39]%[8,29,42,45,46]%J=[1,3,6,11,13,16,21,24,25,26,27,29]; - for i=1:length(J)%length(J)%length(liste) - filename=strcat(liste(J(i)).name)%liste(i).name%liste(J(i)).name - interface.process_new_sequence(filename, [initial_alpha*2.1 initial_alpha*2 initial_alpha*1.5 initial_alpha*2.4], sigma_estimation, sigma_test, threshold_dynamics); + for i=1:length(liste)%length(J)%length(liste) + filename=strcat(liste(i).name)%liste(i).name%liste(J(i)).name + interface.process_new_sequence(filename, initial_alpha, sigma_estimation, sigma_test, threshold_dynamics); %j'essaie de "save" les meilleurs sequences testtest1=interface.meilleure_sequence if (i==1) @@ -44,23 +44,24 @@ % LLLDynWin=[LLLDynWin;testtest1]; % LLLDyn=[LLLDyn;testtest2]; % end - + i end %figure() %plot([1:25],LLLDynWin) - figure() - plot([1:25],LLLDyn) + %figure() + %plot() + % plot([1:25],LLLDyn) % - for i=1:length(liste)%length(J)%length(liste) - if (i < 10) - name = strcat('0',int2str(i)); - else - name = int2str(i); - end - - dlmwrite(strcat('LLLDynpt',name,'.txt'),LLLDyn(i,:)); - end +% for i=1:length(liste)%length(J)%length(liste) +% if (i < 10) +% name = strcat('0',int2str(i)); +% else +% name = int2str(i); +% end +% +% dlmwrite(strcat('LLLDynpt',name,'.txt'),LLLDyn(i,:)); +% end %[f_mesure,m_seuil]=find_seuil_score() %if f_mesure>F_Mesure %F_Mesure=f_mesure diff --git a/parmorceauxMax-git/testtest1.mat b/parmorceauxMax-git/testtest1.mat index bc06a160e346b49e4124d754d041ec13ba4e57b6..aee5240ea80b412e185c43d445d6805d04a578e0 100644 Binary files a/parmorceauxMax-git/testtest1.mat and b/parmorceauxMax-git/testtest1.mat differ diff --git a/parmorceauxMax-git/testtest2.mat b/parmorceauxMax-git/testtest2.mat index 2d90b483a9dd15fd9b8a4ed106e8a1a9cba73360..6d38594173af745c20e8c8c7461adafa22008085 100644 Binary files a/parmorceauxMax-git/testtest2.mat and b/parmorceauxMax-git/testtest2.mat differ