X. FUTURE WORK
X.4 Optimization Routine Improvement for Model Calibration
Future work is recommended to improve the optimization routine for deriving the calibrated performance models for the MEPDG. One possibility is investigation for, or development of, software that would be capable of automating the optimization routine with the MEPDG software. A second possibility is the use of a surrogate model. A well trained surrogate model, such as demonstrated by Retherford and McDonald (69), can accurately approximate the results of the MEPDG and can be implemented utilizing software capable of highly efficient optimization methods. For this application, the surrogate model must be trained including the calibration factors, in addition to all other significant design parameters. Future work also includes sensitivity analysis of the slope terms included in the parameter calibrated model to investigate the impact of the shear- based mix properties. A quadratic model could also be constructed and included in the sensitivity analysis to examine the impact of the interaction terms and higher order terms.
A sensitivity analysis of this kind would provide important information influencing mix design. Validation utilizing experimental data such as the results of test tracks at MnROADS and ALF would provide additional support for the approaches for permanent deformation prediction models presented.
Implementation of any of the aforementioned recommendations could improve accuracy in the prediction of permanent deformation performance in flexible pavement structures. Improved accuracy in predictions leads to optimal performance and reliable design life.
APPENDIX A: GP Training Data Generation
The training data utilized to construct the GP for the MEPDG was generated by Latin Hypercube Sampling. The sample Matlab code herein describes the method of generating
this data.
clear all; clc;
%--- ----%% Notes for Robust GP Procedure/m-files
%--- ----% Run 'LatinHypercubeSamplingPlan' to obtain LHC training points for most% GP parameters;
% % output = 'RobustGPInputs.mat'; matrix of 54 parameters
% % Run 'TensileandCreep' to obtain remaining GP parameters; these are the% ave. indirect tensile strength and creep compliance calculations that
% MEPDG/Darwin-ME do not calculate for Level 1 or 2 Binder inputs
% % output = 'RobustGPInputsFull.mat'; matrix of 76 parameters
% % Run 'RGPDarwinFiles' to create xml files for use in Darwin-ME
% % output = xml files located in 'Tempfiles' folder
% % Import into Darwin-ME and evaluate;
%--- ----%--- ----%% Define Input Parameter Ranges
n = 1000; %Define number of LHC samples p =45; %Define number of Input Parameters LHCperms = lhsdesign(n,p, 'smooth', 'off');
%% Traffic Category
%--- ----% Traffic
%--- ----AADTT = (400 * LHCperms(:,1)) + 1300; %Uniform Range [1300 1700]
LDF = (10 * LHCperms(:,2)) + 80; %Uniform Range [0.8 0.9]
OpSpeed = (10 * LHCperms(:,3)) + 60; %Uniform Range [60 70]
Traffic = [round(AADTT), round(LDF * 10) / 10, round(OpSpeed * 10) / 10];%--- ----% Traffic Volume
%--- ----DistVehClass3ave = [0.9, 11.6, 3.6, 0.2, 6.7, 62, 4.8, 2.6, 1.4, 6.2];
DVC3min = 0.9 * DistVehClass3ave;
DVC3max = 1.1 * DistVehClass3ave;
m = 10; %Used for rounding for use in mepdg for j = 1:n
for i = 1:size(DistVehClass3ave,2) RandNumDVH(1,i) = LHCperms(j,4);
end
for i = 1:size(DistVehClass3ave,2)
DVC3RandO(1,i) = ((DVC3max(1,i) - DVC3min(1,i)) * RandNumDVH(1,i))...
+ DVC3min(1,i);
end
DVCCheck1(j,1) = sum(round(DVC3RandO * m)) / m;
DVCresid(j,1) = 100 - DVCCheck1(j,1);
%Adjust one value to force sum = 100; do not allow adjustment of %Class 9 vehicle -> maintain LHC for this vehicle class
RandDVCadjust = round(random('uniform',1,10));
while (RandDVCadjust > 6 && RandDVCadjust < 6) RandDVCadjust = round(random('uniform',1,10));
end
DVC3Rand = DVC3RandO;
DVC3Rand(1,RandDVCadjust) = DVC3RandO(1,RandDVCadjust) + DVCresid(j,1);
DVCCheck1(j,1) = sum(round(DVC3Rand * m)) / m;
DVCresid(j,1) = 100 - DVCCheck1(j,1);
DVCmin(j,1) = min(DVC3Rand(1,:));
while (DVCmin(j,1) < 0)
DVCCheck1(j,1) = sum(round(DVC3RandO * m)) / m;
DVCresid(j,1) = 100.0 - DVCCheck1(j,1);
RandDVCadjust = round(random('uniform',1,10));
while (RandDVCadjust > 6 && RandDVCadjust < 6) RandDVCadjust = round(random('uniform',1,10));
end
DVC3Rand = DVC3RandO;
DVC3Rand(1,RandDVCadjust) = DVC3RandO(1,RandDVCadjust)...
+ DVCresid(j,1);
DVCCheck1(j,1) = sum(round(DVC3Rand * m)) / m;
DVCresid(j,1) = 100 - DVCCheck1(j,1);
DVCmin(j,1) = min(DVC3Rand(1,:));
end
DVC(j,:) = DVC3Rand;
endDVCmepdg = round(DVC * m) / m;
%Check that sum(DVCCheck1) = n * 100; Check should = 0;
%Check that minimum value is positive; Check should be >= 0;
%Check that rounded values for medpg = 100; Check should = 100;
%Check that min and max for mepdg = same value; Check should = 0;
Check(1,1) = sum(DVCCheck1) - (n * 100);
Check(2,1) = min(min(DVC));
Check(3,1) = sum(sum(DVCmepdg,2))/n;
Check(4,1) = max(sum(DVCmepdg,2)) - min(sum(DVCmepdg,2)); Check TrGrowth = (2 * LHCperms(:,5)) + 3; %Uniform [3% 5%]
TrafficVol = [DVCmepdg, round(TrGrowth * 10)/10];
%--- ----% General Traffic
%--- ----MeanWheel = (3.6 * LHCperms(:,6)) + 16.2; %Uniform [16.2 19.8]
WanderSD = (2 * LHCperms(:,7)) + 9; %Uniform [9 11]
LaneWidth = (2.2 * LHCperms(:,8)) + 10.8; %Uniform [10.8 13]
% TirePress = (12 * LHCperms(:,18)) + 114; %Uniform [114 126]
AxleTand = (10.4 * LHCperms(:,9)) + 46.4; %Uniform [46.4 56.8]
AxleTri = (9.8 * LHCperms(:,10)) + 44.3; %Uniform [44.3 54.1]
AxleQuad = (9.8 * LHCperms(:,11)) + 44.3; %Uniform [44.3 54.1]
AveAxleShort = (3 * LHCperms(:,12)) + 12; %Uniform [12 15]
AveAxleMed = (3 * LHCperms(:,13)) + 15; %Uniform [15 18]
AveAxleLong = (3 * LHCperms(:,14)) + 18; %Uniform [18 22]
GenTraffic = [round(MeanWheel*10)/10, round(WanderSD*10)/10,...
round(LaneWidth*10)/10, round(AxleTand*10)/10, round(AxleTri*10)/10,...
round(AxleQuad*10)/10, round(AveAxleShort*10)/10,...
round(AveAxleMed*10)/10, round(AveAxleLong*10)/10];
%--- ----%--- ----AllTraffic = [Traffic, TrafficVol, GenTraffic];
%--- ----%% Material Parameters
%--- ----%Asphalt Layer
%--- ----HMAthick = (4 * LHCperms(:,15)) + 6;
EBC = (1.7 * LHCperms(:,16)) + 5.3;
AV = (2.5 * LHCperms(:,17)) + 3;
UnitWt = (30 * LHCperms(:,18)) + 135;
%Percent Passing: (modified 10142011 to reflect passing, not retained) AggGrad34 = 100 - (2 * LHCperms(:,19)); %modify for Darwin-ME AggGrad38 = 100 - ((13 * LHCperms(:,20)) + 7);
AggGrad4 = 100 - ((22 * LHCperms(:,21)) + 24);
%Percent Passing:
AggGrad200 = (6.2 * LHCperms(:,22));
ThermCond = (0.14 * LHCperms(:,23)) + 0.6;
HeatCap = (0.04 * LHCperms(:,24)) + 0.21;
for i = 1:n
Gstar130(i,1) = ((14-3.5) * LHCperms(i,25) + 3.5) * 1000;
%[3.5 14] kPa
Gstar115(i,1) = ((25-14) * LHCperms(i,26) + 14) * 1000; %[14 25] Gstar100(i,1) = ((200-25) * LHCperms(i,27) + 25) * 1000; %[25 200] Gstar85(i,1) = ((230-200) * LHCperms(i,28) + 200) * 1000;
%[200 230]
Gstar70(i,1) = ((3300-230) * LHCperms(i,29) + 230) * 1000;
%[230 3300]
Gstar55(i,1) = ((4500-3300) * LHCperms(i,30) + 3300) * 1000;
%[3300 4500]
Gstar40(i,1) = ((33000-4500) * LHCperms(i,31) + 4500) * 1000;
%[4500 33000]
end
%Let deltas vary between [50 85]; increasing with decreasing temps.
%REVISED: see excel file; decreasing with decreasing temp delta130 = 9 * LHCperms(:,32) + 73; %[73 82]
delta115 = 3 * LHCperms(:,33) + 70; %[70 73]
delta100 = 3 * LHCperms(:,34) + 67; %[67 70]
delta85 = 4 * LHCperms(:,35) + 63; %[63 67]
delta70 = 6 * LHCperms(:,36) + 57; %[57 63]
delta55 = 2 * LHCperms(:,37) + 55; %[55 57]
delta40 = 8 * LHCperms(:,38) + 47; %[47 55]
%Verify Superpave requirements are met for i = 1:n
SP130(i,1) = Gstar130(i,1) / sind(delta130(i,1));
SP115(i,1) = Gstar115(i,1) / sind(delta115(i,1));
SP100(i,1) = Gstar100(i,1) / sind(delta100(i,1));
SP85(i,1) = Gstar85(i,1) / sind(delta85(i,1));
SP70(i,1) = Gstar70(i,1) / sind(delta70(i,1));
SP55(i,1) = Gstar55(i,1) / sind(delta55(i,1));
SP40(i,1) = Gstar40(i,1) / sind(delta40(i,1));
end
SPmin130 = min(SP130);
SPmin115 = min(SP115);
SPmin100 = min(SP100);
SPmin85 = min(SP85);
SPmin70 = min(SP70);
SPmin55 = min(SP55);
SPmin40 = min(SP40);
SPmin = min([SPmin130, SPmin115, SPmin100, SPmin85, SPmin70,...
SPmin55, SPmin40]);
%Superpave Requirement: Gstar/sin(delta) > 1 kPa (1000 Pa)
CheckSP = SPmin - 1e3 %If CheckSP > 0 then values of G*, delta OK AspLayer = [round(HMAthick*10)/10, round(EBC*10)/10,
round(AV*10)/10,...
round(UnitWt), round(AggGrad34*10)/10, round(AggGrad38*10)/10,...
round(AggGrad4*10)/10, round(AggGrad200*10)/10,...
round(ThermCond*100)/100, round(HeatCap*100)/100, round(Gstar40),...
round(Gstar55), round(Gstar70), round(Gstar85), round(Gstar100),...
round(Gstar115), round(Gstar130), round(delta40*10)/10,...
round(delta55*10)/10, round(delta70*10)/10, round(delta85*10)/10,...
round(delta100*10)/10, round(delta115*10)/10, round(delta130*10)/10];
%--- ----%Granular Base Layer
%--- ----GBthick = (2 * LHCperms(:,39)) + 7;
Kgb = (4500 * LHCperms(:,40)) + 35500;
GBPois = (0.3 * LHCperms(:,41)) + 0.1;
GBKo = (0.1 * LHCperms(:,42)) + 0.5;
GBLayer = [round(GBthick*10)/10, round(Kgb), round(GBPois*100)/100,...
round(GBKo*1000)/1000];
%--- ----%Unbounded Subgrade Layer
%--- ----Esub = (12000 * LHCperms(:,43)) + 12000;
SubPois = (0.1 * LHCperms(:,44)) + 0.2;
SubKo = (0.1 * LHCperms(:,45)) + 0.6;
SubLayer = [round(Esub), round(SubPois*100)/100, round(SubKo*1000)/1000];
%--- ----%--- ----Materials = [AspLayer, GBLayer, SubLayer];
%--- ----%% Gaussian Process Surrogate Model Input Parameters
gpInputs = [AllTraffic, Materials];
save('RobustGPInputs.mat', 'gpInputs');
%--- ----%% Various Plots to Show Scatter of Training Points
%--- ----% %Choose Input Parameters to View
% xx = 1; yy = 14; zz = 23;
% % %2-D Plot
% plot(gpInputs(:,xx), gpInputs(:,yy), 'LineStyle','none','Marker','.');
% axis([min(gpInputs(:,xx)) max(gpInputs(:,xx))...
% min(gpInputs(:,yy)) max(gpInputs(:,yy))]);
% grid 'on'
% % %3-D Plot
% figure
% plot3(gpInputs(:,xx), gpInputs(:,yy), gpInputs(:,zz),...
% 'LineStyle','none','Marker','.');
% axis([min(gpInputs(:,xx)) max(gpInputs(:,xx))...
% min(gpInputs(:,yy)) max(gpInputs(:,yy))...
% min(gpInputs(:,zz)) max(gpInputs(:,zz))]);
% grid 'on' clear all; clc;
%Define Ave. Tensile Strength (St) and Creep Compliance (t) for given
%values of Gstar and delta; For import into RobustGPInputs matrix
%Import RobustGPInputs
%======================================================================
====%Modify for Climate Region
GPInputs = importdata('RobustGPInputsSpokane.mat');
%======================================================================
====
Gstar = GPInputs(:,34:40);
delta = GPInputs(:,41:47);
Vbeff = GPInputs(:,25); %EBC Va = GPInputs(:,26); %AV
Temp = [40, 55, 70, 85, 100, 115, 130];
%--- ----%% Find A and VTS
%--- ----%Calculate Log(Temp R)
for i = 1:size(Temp,2)
logTempR(1,i) = log10(Temp(1,i) + 459.67);
end
%Calculate Log(Log(Viscosity))
for i = 1:size(Gstar,1) for j = 1:size(Gstar,2) loglogvis(i,j) =
log10(log10((Gstar(i,j)/10)*((1/(sin(delta(i,j)*pi/180)))^4.8628)*1000) ); end
end
%Perform Linear Regression to Obtain A and VTS for i = 1:size(loglogvis,1)
[r(i), VTS(i,1), A(i,1)] = regression(logTempR(1,:), loglogvis(i,:));
endclear r;
%--- ----%% Calculate Average Tensile Strength (St)
%--- ----%Regression Parameters
for i = 1:size(Va,1)
Vasqd(i,1) = Va(i,1) * Va(i,1);
VFA(i,1) = 100 * Vbeff(i,1) / (Vbeff(i,1) + Va(i,1));
VFAsqd(i,1) = VFA(i,1) * VFA(i,1);
Pen77(i,1) = 10^(290.5013-
sqrt(81177.288+257.0694*(10^(A(i,1)+2.72973*VTS(i,1)))));
end
StRegPs = [ones(size(Va,1),1), Va, Vasqd, VFA, VFAsqd, log10(Pen77), log10(A)];
StRegCoeffs = [4976.34, -42.49, -2.73, -80.61, 0.465, 174.35, - 1217.54];
for i = 1:size(Va,1)
St(i,1) = StRegCoeffs * StRegPs(i,:)';
end
%--- ----%% Calculate Creep Compliance
%--- ----%Regression Parameters
% T = - 20 C
D120Cs = [-11.9254, 1.52206, 4.49876, -3.8132];
m20Cs = [-1.75987, 1.78187, 0.00089];
for i = 1:size(Va,1)
logVa(i,1) = log10(Va(i,1));
logVFA(i,1) = log10(VFA(i,1));
logA(i,1) = log10(A(i,1));