В этом примере показано, как сконфигурировать sbiofit
выполнить гибридную оптимизацию первым запуском глобального решателя particleswarm
, далее следует другая функция минимизации, fmincon
.
Загрузите выборочные данные в соответствии. Данные хранятся как таблица с идентификаторами переменных, Time, CentralConc и PeripheralConc. Эти синтетические данные представляют временной ход концентраций в плазме, измеренных в восьми различных временных точках как для центрального, так и для периферийного отделений после капельного внутривенного введения в течение трёх индивидуумов. Суммарная доза составляет 100 миллиграмм, и скорость дозы составляет 50 миллиграмм/час.
load('data10_32R.mat') gData = groupedData(data); gData.Properties.VariableUnits = {'','hour','milligram/liter','milligram/liter'}; sbiotrellis(gData,'ID','Time',{'CentralConc','PeripheralConc'},'Marker','+',... 'LineStyle','none');
Создайте модель с двумя отсеками с капельным внутривенным введением.
pkmd = PKModelDesign; pkc1 = addCompartment(pkmd,'Central'); pkc1.DosingType = 'Infusion'; pkc1.EliminationType = 'linear-clearance'; pkc1.HasResponseVariable = true; pkc2 = addCompartment(pkmd,'Peripheral'); model = construct(pkmd); configset = getconfigset(model); configset.CompileOptions.UnitConversion = true; dose = sbiodose('dose','TargetName','Drug_Central'); dose.StartTime = 0; dose.Amount = 100; dose.Rate = 50; dose.AmountUnits = 'milligram'; dose.TimeUnits = 'hour'; dose.RateUnits = 'milligram/hour'; responseMap = {'Drug_Central = CentralConc','Drug_Peripheral = PeripheralConc'};
Используйте estimatedInfo
объект для определения предполагаемых параметров.
paramsToEstimate = {'log(Central)','log(Peripheral)','Q12','Cl_Central'}; estimatedParam = estimatedInfo(paramsToEstimate,'InitialValue',[1 1 1 1],... 'Bounds',[0 10]);
Задайте опции для глобального решателя и гибридного решателя. Поскольку параметры ограничены, убедитесь, что вы используете совместимую гибридную функцию для ограниченной оптимизации, такой как fmincon
. Использование optimset
для определения опций для fminsearch
. Использование optimoptions
для определения опций для fminunc
, patternsearch
, и fmincon
.
rng('default'); globalMethod = 'particleswarm'; options = optimoptions(globalMethod); hybridMethod = 'fmincon'; hybridopts = optimoptions(hybridMethod,'Display','none'); options = optimoptions(options,'HybridFcn',{hybridMethod,hybridopts});
Оцените параметры модели. Включите ProgressPlot
для просмотра live обратной связи о состоянии подбора кривой. Первая строка графиков являются графиками измерения качества для глобального решателя. Графики второй строки предназначены для гибридной функции. Для получения дополнительной информации смотрите График прогресса.
unpooledFit = sbiofit(model,gData,responseMap,estimatedParam,dose,globalMethod,... options,'Pooled',false,'ProgressPlot',true);
plot(unpooledFit);