From 97fcec604c4ef39e39747421d0af3f849b2aebf7 Mon Sep 17 00:00:00 2001 From: Niklas Wahl Date: Thu, 11 Nov 2021 13:46:52 +0100 Subject: [PATCH 1/2] stricter IPOPT tolerances to avoid early stopping in constrained problems --- optimization/optimizer/matRad_OptimizerIPOPT.m | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/optimization/optimizer/matRad_OptimizerIPOPT.m b/optimization/optimizer/matRad_OptimizerIPOPT.m index 2cfc690f3..8f493d77c 100644 --- a/optimization/optimizer/matRad_OptimizerIPOPT.m +++ b/optimization/optimizer/matRad_OptimizerIPOPT.m @@ -64,17 +64,17 @@ obj.options.print_options_documentation = 'no'; % Termination (C.2) - obj.options.tol = 1e-8; % (Opt1) - obj.options.dual_inf_tol = 1; % (Opt2) + obj.options.tol = 1e-10; % (Opt1) + obj.options.dual_inf_tol = 1e-4; % (Opt2) obj.options.constr_viol_tol = 1e-4; % (Opt3) obj.options.compl_inf_tol = 1e-4; % (Opt4), Optimal Solution Found if (Opt1),...,(Opt4) fullfiled - obj.options.acceptable_iter = 3; % (Acc1) + obj.options.acceptable_iter = 5; % (Acc1) obj.options.acceptable_tol = 1e10; % (Acc2) - obj.options.acceptable_constr_viol_tol = 1e10; % (Acc3) + obj.options.acceptable_constr_viol_tol = 1e-2; % (Acc3) obj.options.acceptable_dual_inf_tol = 1e10; % (Acc4) obj.options.acceptable_compl_inf_tol = 1e10; % (Acc5) - obj.options.acceptable_obj_change_tol = 1e-3; % (Acc6), Solved To Acceptable Level if (Acc1),...,(Acc6) fullfiled + obj.options.acceptable_obj_change_tol = 1e-4; % (Acc6), Solved To Acceptable Level if (Acc1),...,(Acc6) fullfiled obj.options.max_iter = matRad_cfg.propOpt.defaultMaxIter; obj.options.max_cpu_time = 3000; From f16fce3a8c0f605039fbe16f091a7ee33c9030ed Mon Sep 17 00:00:00 2001 From: Niklas Wahl Date: Thu, 11 Nov 2021 13:49:01 +0100 Subject: [PATCH 2/2] enable passing of initial fluence to fluence optimization --- matRad_fluenceOptimization.m | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/matRad_fluenceOptimization.m b/matRad_fluenceOptimization.m index aa7d3cc3e..89c045172 100644 --- a/matRad_fluenceOptimization.m +++ b/matRad_fluenceOptimization.m @@ -1,13 +1,15 @@ -function [resultGUI,optimizer] = matRad_fluenceOptimization(dij,cst,pln) +function [resultGUI,optimizer] = matRad_fluenceOptimization(dij,cst,pln,wInit) % matRad inverse planning wrapper function % % call % [resultGUI,optimizer] = matRad_fluenceOptimization(dij,cst,pln) +% [resultGUI,optimizer] = matRad_fluenceOptimization(dij,cst,pln,wInit) % % input % dij: matRad dij struct % cst: matRad cst struct % pln: matRad pln struct +% wInit: (optional) custom weights to initialize problems % % output % resultGUI: struct containing optimized fluence vector, dose, and (for @@ -109,7 +111,9 @@ end % calculate initial beam intensities wInit -if strcmp(pln.propOpt.bioOptimization,'const_RBExD') && strcmp(pln.radiationMode,'protons') +if exist('wInit','var') + %do Nothing +elseif strcmp(pln.propOpt.bioOptimization,'const_RBExD') && strcmp(pln.radiationMode,'protons') % check if a constant RBE is defined - if not use 1.1 if ~isfield(dij,'RBE')