function result = dn_cn_test(idx) %DN_CN_TEST Is the detection weight d_n needed next to the confirmation c_n? % All variants use v109: median-3 reference, c_n in [0.1,1], mu = 0.32. % Scenarios: original seeds, +7000, +8000, +9000, drive-idle-drive. Target 0.4. % J = mean error (8 cases) + mean unsafe % of adaptive cases / 1000. here = fileparts(mfilename('fullpath')); file = fullfile(here, 'dn_cn_test.mat'); if isfile(file), s = load(file); result = s.result; else, result = struct('rows', {{}}); end base = struct('c_ref', true, 'c_gate', true, 'c_paper', true, 'up_gain', 0.32); methods = {'v109: c_n and d_n', base 'No d_n (d = 1)', setf(base, 'd_mode', 'one') 'd_n replaced by c_n', setf(base, 'd_mode', 'c') 'No c_n (d_n only)', struct('c_ref', true, 'up_gain', 0.32) 'Neither c_n nor d_n', struct('c_ref', true, 'up_gain', 0.32, 'd_mode', 'one')}; sc = {0 false; 7000 false; 8000 false; 9000 false; 0 true}; if nargin < 1, idx = 1:size(methods, 1); end for j = idx m = zeros(size(sc, 1), 4); for k = 1:size(sc, 1) evalc('R = run_code_bridge_benchmark(0.4, methods{j,2}, sc{k,1}, sc{k,2});'); t = R.table; m(k, :) = [mean(t.err), mean(t.err([3 4 7 8])), mean(t.unsafe(5:8)), mean(t.err) + mean(t.unsafe(5:8))/1000]; end result.rows{j} = struct('name', methods{j,1}, 'err', m(:,1)', 'errN', m(:,2)', 'unsafe', m(:,3)', 'J', m(:,4)'); fprintf('%-24s J %s | unsafe %s\n', methods{j,1}, sprintf('%.4f ', m(:,4)), sprintf('%.2f ', m(:,3))) save(file, 'result') end end function s = setf(s, f, v) s.(f) = v; end