Skip to content

Commit 7739f04

Browse files
committed
LVD: Added settings to LvdData and populated the various functions with calls to those settings.
1 parent 3a1cd4b commit 7739f04

7 files changed

Lines changed: 279 additions & 15 deletions

File tree

helper_methods/ksptot_ma/launch_vehicle_designer/classes/@LvdData/LvdData.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
initStateModel InitialStateModel
1010
optimizer LvdOptimization
1111
validation LaunchVehicleDataValidation
12+
settings LvdSettings
1213

1314
celBodyData struct
1415
ksptotVer(1,:) char
@@ -21,6 +22,7 @@
2122
methods(Access = private)
2223
function obj = LvdData()
2324
obj.validation = LaunchVehicleDataValidation(obj);
25+
obj.settings = LvdSettings();
2426
end
2527
end
2628

@@ -63,7 +65,7 @@
6365

6466
simMaxDur = 20000;
6567
minAltitude = -1;
66-
simDriver = LaunchVehicleSimulationDriver(simMaxDur, minAltitude, celBodyData);
68+
simDriver = LaunchVehicleSimulationDriver(lvdData);
6769

6870
%Set Up Initial Launch Vehicle
6971
lv = LaunchVehicle.createDefaultLaunchVehicle(lvdData);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
classdef LvdOptimAlgorithmEnum < matlab.mixin.SetGet
2+
%LvdOptimAlgorithmEnum Summary of this class goes here
3+
% Detailed explanation goes here
4+
5+
enumeration
6+
InteriorPoint('interior-point');
7+
SQP('sqp');
8+
ActiveSet('active-set');
9+
end
10+
11+
properties
12+
algoName(1,:) char
13+
end
14+
15+
methods
16+
function obj = LvdOptimAlgorithmEnum(algoName)
17+
obj.algoName = algoName;
18+
end
19+
end
20+
end
21+

helper_methods/ksptot_ma/launch_vehicle_designer/classes/Optimization/@LvdOptimization/LvdOptimization.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ function optimize(obj, writeOutput)
2626
typicalX = obj.vars.getTypicalXVector();
2727
nonlcon = @(x) obj.constraints.evalConstraints(x);
2828

29-
optimAlg = 'interior-point';
30-
usePara = true;
29+
optimAlg = obj.lvdData.settings.optAlgo.algoName;
30+
usePara = obj.lvdData.settings.optUsePara;
3131
options = optimoptions('fmincon','Algorithm',optimAlg, 'Diagnostics','on', 'Display','iter-detailed','TolFun',1E-10,'TolX',1E-10,'TolCon',1E-10,'ScaleProblem','obj-and-constr','TypicalX',typicalX,'MaxIter',500,'UseParallel',usePara,'OutputFcn',[],'HonorBounds',true,'MaxFunctionEvaluations',3000, 'FunValCheck','on');
3232
problem = createOptimProblem('fmincon', 'objective',objFuncWrapper, 'x0', x0All, 'lb', lbAll, 'ub', ubAll, 'nonlcon', nonlcon, 'options', options);
3333

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
classdef LvdSettings < matlab.mixin.SetGet
2+
%LvdSettings Summary of this class goes here
3+
% Detailed explanation goes here
4+
5+
properties
6+
%integration
7+
intAbsTol(1,1) double = 1E-6;
8+
intRelTol(1,1) double = 1E-6;
9+
minAltitude(1,1) double = -1; %km
10+
simMaxDur(1,1) double = 20000; %sec
11+
12+
%optimization
13+
optUsePara(1,1) logical = false;
14+
optAlgo LvdOptimAlgorithmEnum = LvdOptimAlgorithmEnum.InteriorPoint
15+
end
16+
17+
methods
18+
function obj = LvdSettings()
19+
20+
end
21+
end
22+
end

helper_methods/ksptot_ma/launch_vehicle_designer/classes/Simulation/@LaunchVehicleSimulationDriver/LaunchVehicleSimulationDriver.m

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,45 @@
11
classdef LaunchVehicleSimulationDriver < matlab.mixin.SetGet
2-
%LaunchVehicleSimulationDrive Summary of this class goes here
2+
%LaunchVehicleSimulationDriver Summary of this class goes here
33
% Detailed explanation goes here
44

55
properties
66
forceModel(1,1) AbstractForceModel = TotalForceModel();
77
integrator(1,1) function_handle = @ode45;
88

9-
simMaxDur(1,1) double = 600; %sec
10-
minAltitude = -1; %km
11-
9+
lvdData LvdData
10+
end
11+
12+
properties(Dependent)
13+
relTol(1,1) double
14+
absTol(1,1) double
15+
simMaxDur(1,1) double
16+
minAltitude(1,1) double
1217
celBodyData(1,1) struct
1318
end
1419

1520
methods
16-
function obj = LaunchVehicleSimulationDriver(simMaxDur, minAltitude, celBodyData)
17-
obj.simMaxDur = simMaxDur;
18-
obj.minAltitude = minAltitude;
19-
obj.celBodyData = celBodyData;
21+
function obj = LaunchVehicleSimulationDriver(lvdData)
22+
obj.lvdData = lvdData;
23+
end
24+
25+
function value = get.relTol(obj)
26+
value = obj.lvdData.settings.intRelTol;
27+
end
28+
29+
function value = get.absTol(obj)
30+
value = obj.lvdData.settings.intAbsTol;
31+
end
32+
33+
function value = get.simMaxDur(obj)
34+
value = obj.lvdData.settings.simMaxDur;
35+
end
36+
37+
function value = get.minAltitude(obj)
38+
value = obj.lvdData.settings.minAltitude;
39+
end
40+
41+
function value = get.celBodyData(obj)
42+
value = obj.lvdData.celBodyData;
2043
end
2144

2245
function [t,y,newStateLogEntries] = integrateOneEvent(obj, event, eventInitStateLogEntry)
@@ -30,7 +53,7 @@
3053
odefun = @(t,y) obj.odefun(t,y, obj, eventInitStateLogEntry, dryMass);
3154
odeEventsFun = @(t,y) obj.odeEvents(t,y, obj, eventInitStateLogEntry, event.termCond.getEventTermCondFuncHandle());
3255
odeOutputFun = @(t,y,flag) obj.odeOutput(t,y,flag, now()*86400);
33-
options = odeset('RelTol',1E-6, 'AbsTol',1E-6, 'NonNegative',tankStateInds, 'Events',odeEventsFun, 'NormControl','on', 'OutputFcn',odeOutputFun);
56+
options = odeset('RelTol',obj.relTol, 'AbsTol',obj.absTol, 'NonNegative',tankStateInds, 'Events',odeEventsFun, 'NormControl','on', 'OutputFcn',odeOutputFun);
3457

3558
[value,isterminal,~] = odeEventsFun(tspan(1), y0);
3659
if(any(abs(value)<=1E-6))
3.07 KB
Binary file not shown.

kspTOT_MissionArchitect/LaunchVehicleDesigner/ma_LvdMainGUI.m

Lines changed: 199 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
% Edit the above text to modify the response to help ma_LvdMainGUI
2424

25-
% Last Modified by GUIDE v2.5 14-Oct-2018 14:43:52
25+
% Last Modified by GUIDE v2.5 14-Oct-2018 15:17:09
2626

2727
% Begin initialization code - DO NOT EDIT
2828
gui_Singleton = 1;
@@ -895,31 +895,227 @@ function optimSettingsMenu_Callback(hObject, eventdata, handles)
895895
% hObject handle to optimSettingsMenu (see GCBO)
896896
% eventdata reserved - to be defined in a future version of MATLAB
897897
% handles structure with handles and user data (see GUIDATA)
898+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
898899

900+
parallelOptim = lvdData.settings.optUsePara;
901+
if(parallelOptim==true)
902+
set(handles.optUseParaMenu, 'Checked', 'on');
903+
else
904+
set(handles.optUseParaMenu, 'Checked', 'off');
905+
end
899906

900907
% --------------------------------------------------------------------
901908
function optAlgorithmMenu_Callback(hObject, eventdata, handles)
902909
% hObject handle to optAlgorithmMenu (see GCBO)
903910
% eventdata reserved - to be defined in a future version of MATLAB
904911
% handles structure with handles and user data (see GUIDATA)
912+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
905913

914+
optAlgo = lvdData.settings.optAlgo;
915+
switch optAlgo
916+
case LvdOptimAlgorithmEnum.InteriorPoint
917+
set(handles.optInteriorPointAlgoMenu, 'Checked', 'on');
918+
set(handles.optSqpAlgoMenu, 'Checked', 'off');
919+
set(handles.optActiveSetAlgoMenu, 'Checked', 'off');
920+
case LvdOptimAlgorithmEnum.SQP
921+
set(handles.optInteriorPointAlgoMenu, 'Checked', 'off');
922+
set(handles.optSqpAlgoMenu, 'Checked', 'on');
923+
set(handles.optActiveSetAlgoMenu, 'Checked', 'off');
924+
case LvdOptimAlgorithmEnum.ActiveSet
925+
set(handles.optInteriorPointAlgoMenu, 'Checked', 'off');
926+
set(handles.optSqpAlgoMenu, 'Checked', 'off');
927+
set(handles.optActiveSetAlgoMenu, 'Checked', 'on');
928+
otherwise
929+
error('Unknown optimization algorithm when setting menu checkmark.');
930+
end
906931

907932
% --------------------------------------------------------------------
908933
function optUseParaMenu_Callback(hObject, eventdata, handles)
909934
% hObject handle to optUseParaMenu (see GCBO)
910935
% eventdata reserved - to be defined in a future version of MATLAB
911936
% handles structure with handles and user data (see GUIDATA)
912-
937+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
938+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
939+
940+
if strcmp(get(gcbo, 'Checked'),'on')
941+
set(gcbo, 'Checked', 'off');
942+
lvdData.settings.optUsePara = false;
943+
writeOutput('Parallel optimization mode disabled.','append');
944+
else
945+
set(gcbo, 'Checked', 'on');
946+
lvdData.settings.optUsePara = true;
947+
948+
drawnow;
949+
p = gcp('nocreate');
950+
if(isempty(p))
951+
try
952+
h = msgbox('Attempting to start parallel computing workers. Please wait...');
953+
pp=parpool('local',feature('numCores'));
954+
pp.IdleTimeout = 99999; %we don't want the pool to shutdown
955+
if(isvalid(h))
956+
close(h);
957+
end
958+
writeOutput('Parallel optimization mode enabled.','append');
959+
catch ME %#ok<NASGU>
960+
if(ishandle(h))
961+
close(h);
962+
end
963+
msgbox('Parallel mode start failed. Optimization will run in serial.');
964+
end
965+
else
966+
writeOutput('Parallel optimization mode enabled.','append');
967+
end
968+
end
913969

914970
% --------------------------------------------------------------------
915971
function integrationAbsTolMenu_Callback(hObject, eventdata, handles)
916972
% hObject handle to integrationAbsTolMenu (see GCBO)
917973
% eventdata reserved - to be defined in a future version of MATLAB
918974
% handles structure with handles and user data (see GUIDATA)
919-
975+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
976+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
977+
978+
input_str = sprintf(['Enter the desired integration absolute error tolerance:\n',...
979+
'(Minimum = 1E-14, Maximum = 1E-2)\n',...
980+
'(This will influence script execution speed.)']);
981+
str = inputdlg(input_str, 'Absolute Error Tolerance', [1 75], {num2str(lvdData.settings.intAbsTol,'%6.6E')});
982+
if(isempty(str))
983+
return;
984+
end
985+
986+
str = str{1};
987+
988+
if(checkStrIsNumeric(str) && str2double(str) >= 1E-14 && str2double(str) <= 1E-2)
989+
writeOutput(sprintf('Setting integration absolute error tolerance to %s.', str),'append');
990+
991+
lvdData.settings.intAbsTol = str2double(str);
992+
993+
runScript(handles, lvdData);
994+
lvd_processData(handles);
995+
else
996+
writeOutput(sprintf('Could not set the desired integration absolute error tolerance. "%s" is an invalid entry.', str),'append');
997+
beep;
998+
end
920999

9211000
% --------------------------------------------------------------------
9221001
function integrationRelTolMenu_Callback(hObject, eventdata, handles)
9231002
% hObject handle to integrationRelTolMenu (see GCBO)
9241003
% eventdata reserved - to be defined in a future version of MATLAB
9251004
% handles structure with handles and user data (see GUIDATA)
1005+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
1006+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
1007+
1008+
input_str = sprintf(['Enter the desired integration relative error tolerance:\n',...
1009+
'(Minimum = 1E-14, Maximum = 1E-2)\n',...
1010+
'(This will influence script execution speed.)']);
1011+
str = inputdlg(input_str, 'Relative Error Tolerance', [1 75], {num2str(lvdData.settings.intRelTol,'%6.6E')});
1012+
if(isempty(str))
1013+
return;
1014+
end
1015+
1016+
str = str{1};
1017+
1018+
if(checkStrIsNumeric(str) && str2double(str) >= 1E-14 && str2double(str) <= 1E-2)
1019+
writeOutput(sprintf('Setting integration relative error tolerance to %s.', str),'append');
1020+
1021+
lvdData.settings.intRelTol = str2double(str);
1022+
1023+
runScript(handles, lvdData);
1024+
lvd_processData(handles);
1025+
else
1026+
writeOutput(sprintf('Could not set the desired integration relative error tolerance. "%s" is an invalid entry.', str),'append');
1027+
beep;
1028+
end
1029+
1030+
% --------------------------------------------------------------------
1031+
function intMinAltitudeMenu_Callback(hObject, eventdata, handles)
1032+
% hObject handle to intMinAltitudeMenu (see GCBO)
1033+
% eventdata reserved - to be defined in a future version of MATLAB
1034+
% handles structure with handles and user data (see GUIDATA)
1035+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
1036+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
1037+
1038+
input_str = sprintf(['Enter the desired minimum integration altitude (km):\n',...
1039+
'(Minimum = -Inf km, Maximum = 0 km)\n', ...
1040+
'(Script execution stops if the vehicle reaches this altitude.)']);
1041+
str = inputdlg(input_str, 'Minimum Integration Altitude', [1 75], {fullAccNum2Str(lvdData.settings.minAltitude)});
1042+
if(isempty(str))
1043+
return;
1044+
end
1045+
1046+
str = str{1};
1047+
1048+
if(checkStrIsNumeric(str) && str2double(str) >= -Inf && str2double(str) <= 0.0)
1049+
writeOutput(sprintf('Setting minimum integration altitude to %s km.', str),'append');
1050+
1051+
lvdData.settings.minAltitude = str2double(str);
1052+
1053+
runScript(handles, lvdData);
1054+
lvd_processData(handles);
1055+
else
1056+
writeOutput(sprintf('Could not set the desired minimum integration altitude. "%s" is an invalid entry.', str),'append');
1057+
beep;
1058+
end
1059+
1060+
% --------------------------------------------------------------------
1061+
function intMaxSimTimeMenu_Callback(hObject, eventdata, handles)
1062+
% hObject handle to intMaxSimTimeMenu (see GCBO)
1063+
% eventdata reserved - to be defined in a future version of MATLAB
1064+
% handles structure with handles and user data (see GUIDATA)
1065+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
1066+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
1067+
1068+
input_str = sprintf(['Enter the desired maximum simulation time (sec):\n',...
1069+
'(Minimum = 0.0 sec, Maximum = Inf sec)\n', ...
1070+
'(Script execution stops if the duration of the mission exceeds this value.)']);
1071+
str = inputdlg(input_str, 'Maximum Simulation Time', [1 75], {fullAccNum2Str(lvdData.settings.simMaxDur)});
1072+
if(isempty(str))
1073+
return;
1074+
end
1075+
1076+
str = str{1};
1077+
1078+
if(checkStrIsNumeric(str) && str2double(str) >= 0 && str2double(str) <= Inf)
1079+
writeOutput(sprintf('Setting maximum simulation time to %s sec.', str),'append');
1080+
1081+
lvdData.settings.simMaxDur = str2double(str);
1082+
1083+
runScript(handles, lvdData);
1084+
lvd_processData(handles);
1085+
else
1086+
writeOutput(sprintf('Could not set the desired maximum simulation time. "%s" is an invalid entry.', str),'append');
1087+
beep;
1088+
end
1089+
1090+
% --------------------------------------------------------------------
1091+
function optInteriorPointAlgoMenu_Callback(hObject, eventdata, handles)
1092+
% hObject handle to optInteriorPointAlgoMenu (see GCBO)
1093+
% eventdata reserved - to be defined in a future version of MATLAB
1094+
% handles structure with handles and user data (see GUIDATA)
1095+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
1096+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
1097+
1098+
lvdData.settings.optAlgo = LvdOptimAlgorithmEnum.InteriorPoint;
1099+
writeOutput('Optimization algorithm changed to interior point.','append');
1100+
1101+
% --------------------------------------------------------------------
1102+
function optSqpAlgoMenu_Callback(hObject, eventdata, handles)
1103+
% hObject handle to optSqpAlgoMenu (see GCBO)
1104+
% eventdata reserved - to be defined in a future version of MATLAB
1105+
% handles structure with handles and user data (see GUIDATA)
1106+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
1107+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
1108+
1109+
lvdData.settings.optAlgo = LvdOptimAlgorithmEnum.SQP;
1110+
writeOutput('Optimization algorithm changed to SQP.','append');
1111+
1112+
% --------------------------------------------------------------------
1113+
function optActiveSetAlgoMenu_Callback(hObject, eventdata, handles)
1114+
% hObject handle to optActiveSetAlgoMenu (see GCBO)
1115+
% eventdata reserved - to be defined in a future version of MATLAB
1116+
% handles structure with handles and user data (see GUIDATA)
1117+
lvdData = getappdata(handles.ma_LvdMainGUI,'lvdData');
1118+
writeOutput = getappdata(handles.ma_LvdMainGUI,'write_to_output_func');
1119+
1120+
lvdData.settings.optAlgo = LvdOptimAlgorithmEnum.ActiveSet;
1121+
writeOutput('Optimization algorithm changed to active set.','append');

0 commit comments

Comments
 (0)