wolffd@0: wolffd@0: % profile clear; wolffd@0: % profile on; wolffd@0: wolffd@0: clear eval; wolffd@0: N = 20; wolffd@0: for ci = 1:N wolffd@0: order = ci; wolffd@0: % connectivity = ceil(rand(1) * order) wolffd@0: % E = mk_rnd_dag(order, connectivity); wolffd@0: E = rand(order) > exp(1) * rand(1); wolffd@0: wolffd@0: G = DiGraph(ones(order,1), E); wolffd@0: eval.G(ci) = G; wolffd@0: wolffd@0: eval.res_naive(ci) = acyclic(E); wolffd@0: wolffd@0: eval.res_myfun(ci) = G.isAcyclic; wolffd@0: wolffd@0: Gstob = ClipSimGraphStober(G); wolffd@0: wolffd@0: eval.res_stober(ci) = Gstob.isAcyclic; wolffd@0: end wolffd@0: eval wolffd@0: wolffd@0: wolffd@0: figure wolffd@0: plot([eval.res_naive' eval.res_myfun'+0.1 eval.res_stober'+0.2],'*') wolffd@0: legend naive myfun stober wolffd@0: axis([0 N -1 2 ]) wolffd@0: % profile viewer; wolffd@0: wolffd@0: %% wolffd@0: % --- wolffd@0: % Comparison of implementations on magnatagatune dataset wolffd@0: % --- wolffd@0: wolffd@0: % Stober Graph wolffd@0: Gstob = ClipSimGraphStober(); wolffd@0: wolffd@0: % Cast into matlab Graph wolffd@0: GstobG = Gstob.to_DiGraph; wolffd@0: wolffd@0: % My Multigraph reimplementation wolffd@0: Gm = ClipSimGraphMulti(comparison, comparison_ids); wolffd@0: wolffd@0: GstobG == Gm % TRUE - the converted Graph exactly resembles my extracted one wolffd@0: wolffd@0: Gm.isAcyclic % FALSE wolffd@0: GstobG.isAcyclic % FALSE wolffd@0: wolffd@0: Gstob.isAcyclic % TRUE (this is wrong, there are a lot of length-2-cycles) wolffd@0: wolffd@0: % --- wolffd@0: % Ok, now remove length 2 cycles wolffd@0: % --- wolffd@0: Gm.remove_cycles_length2 % matlab cycle remover wolffd@0: Gstob.remove_cycles_length2 % stober cycle remover wolffd@0: wolffd@0: GstobGnocycles = Gstob.to_DiGraph(); wolffd@0: wolffd@0: GstobGnocycles == Gm % TRUE - we remove the same edges wolffd@0: wolffd@0: % --- wolffd@0: % NOTE: There are no cycles left wolffd@0: % after removing length 2 cycles wolffd@0: % --- wolffd@0: GstobGnocycles.isAcyclic % TRUE wolffd@0: wolffd@0: Gstob.isAcyclic % FALSE inconsistent wrong result(compare with above) wolffd@0: wolffd@0: wolffd@0: %% Finds the actual defective cycle wolffd@0: wolffd@0: Gstob = ClipSimGraphStober(); wolffd@0: Gstob.remove_cycles_length2 wolffd@0: wolffd@0: GstobG = Gstob.to_DiGraph(); wolffd@0: Gstob.isAcyclic wolffd@0: wolffd@0: N = GstobG.node('227:45936'); wolffd@0: wolffd@0: [Gs] = GstobG.connected_components(N); wolffd@0: Gs.visualise wolffd@0: wolffd@0: % --- wolffd@0: % Search same node in my Multigraph reimplementation wolffd@0: % --- wolffd@0: Gm = ClipSimGraphMulti(comparison, comparison_ids); wolffd@0: Gm.remove_cycles_length2 wolffd@0: Nm = Gm.node(227,45936); wolffd@0: wolffd@0: [Gsm] = Gm.connected_components(Nm); wolffd@0: Gsm.visualise