@@ -40,10 +40,11 @@ use self::i18n::{
4040 stop_icon_image, tool_icon_image, tool_label, tr, undo_icon_image, view_icon_image,
4141} ;
4242use self :: optimizer:: {
43- LbfgsInputState , NelderMeadInputState , OptimizerPreset , OptimizerUiMode ,
44- SteepestDescentInputState , infer_lbfgs_preset, infer_nelder_mead_preset,
45- infer_steepest_descent_preset, lbfgs_config_from_preset, nelder_mead_config_from_preset,
46- optimizer_method_label, optimizer_preset_label, steepest_descent_config_from_preset,
43+ AdamInputState , LbfgsInputState , NelderMeadInputState , OptimizerPreset , OptimizerUiMode ,
44+ SgdInputState , SteepestDescentInputState , adam_config_from_preset, infer_adam_preset,
45+ infer_lbfgs_preset, infer_nelder_mead_preset, infer_sgd_preset, infer_steepest_descent_preset,
46+ lbfgs_config_from_preset, nelder_mead_config_from_preset, optimizer_method_label,
47+ optimizer_preset_label, sgd_config_from_preset, steepest_descent_config_from_preset,
4748} ;
4849use self :: param_init:: {
4950 data_based_params_for_family, is_advanced_param_init_supported, polynomial_family,
@@ -55,8 +56,8 @@ use self::replay::ReplayState;
5556#[ cfg( test) ]
5657use self :: replay:: { ReplayFrame , ReplayFramePayload } ;
5758use crate :: domain:: {
58- CurveFamily , CurveParams , FitResult , LbfgsConfig , NelderMeadConfig , OptimizerConfig ,
59- OptimizerMethod , Point , Points , SteepestDescentConfig ,
59+ AdamConfig , CurveFamily , CurveParams , FitResult , LbfgsConfig , NelderMeadConfig ,
60+ OptimizerConfig , OptimizerMethod , Point , Points , SgdConfig , SteepestDescentConfig ,
6061} ;
6162use crate :: fit:: IterationMetricSnapshot ;
6263use crate :: fit:: OptimizationLossMetric ;
@@ -525,6 +526,10 @@ pub struct CurveFitApp {
525526 nelder_mead_preset : OptimizerPreset ,
526527 steepest_descent_inputs : SteepestDescentInputState ,
527528 steepest_descent_preset : OptimizerPreset ,
529+ sgd_inputs : SgdInputState ,
530+ sgd_preset : OptimizerPreset ,
531+ adam_inputs : AdamInputState ,
532+ adam_preset : OptimizerPreset ,
528533 ui_language : UiLanguage ,
529534 plot_tool : PlotTool ,
530535 spray_points_per_second : usize ,
@@ -590,6 +595,8 @@ impl CurveFitApp {
590595 OptimizerMethod :: Lbfgs => self . lbfgs_preset ,
591596 OptimizerMethod :: NelderMead => self . nelder_mead_preset ,
592597 OptimizerMethod :: SteepestDescent => self . steepest_descent_preset ,
598+ OptimizerMethod :: Sgd => self . sgd_preset ,
599+ OptimizerMethod :: Adam => self . adam_preset ,
593600 }
594601 }
595602
@@ -598,6 +605,8 @@ impl CurveFitApp {
598605 OptimizerMethod :: Lbfgs => self . lbfgs_preset = preset,
599606 OptimizerMethod :: NelderMead => self . nelder_mead_preset = preset,
600607 OptimizerMethod :: SteepestDescent => self . steepest_descent_preset = preset,
608+ OptimizerMethod :: Sgd => self . sgd_preset = preset,
609+ OptimizerMethod :: Adam => self . adam_preset = preset,
601610 }
602611 }
603612
@@ -618,6 +627,14 @@ impl CurveFitApp {
618627 ) ;
619628 self . steepest_descent_preset = preset;
620629 }
630+ OptimizerMethod :: Sgd => {
631+ self . sgd_inputs = SgdInputState :: from_config ( & sgd_config_from_preset ( preset) ) ;
632+ self . sgd_preset = preset;
633+ }
634+ OptimizerMethod :: Adam => {
635+ self . adam_inputs = AdamInputState :: from_config ( & adam_config_from_preset ( preset) ) ;
636+ self . adam_preset = preset;
637+ }
621638 }
622639 }
623640
@@ -632,6 +649,8 @@ impl CurveFitApp {
632649 . steepest_descent_inputs
633650 . to_config ( )
634651 . map ( OptimizerConfig :: SteepestDescent ) ,
652+ OptimizerMethod :: Sgd => self . sgd_inputs . to_config ( ) . map ( OptimizerConfig :: Sgd ) ,
653+ OptimizerMethod :: Adam => self . adam_inputs . to_config ( ) . map ( OptimizerConfig :: Adam ) ,
635654 }
636655 }
637656
@@ -1055,6 +1074,8 @@ impl Default for CurveFitApp {
10551074 let default_lbfgs = LbfgsConfig :: default ( ) ;
10561075 let default_nelder_mead = NelderMeadConfig :: default ( ) ;
10571076 let default_steepest_descent = SteepestDescentConfig :: default ( ) ;
1077+ let default_sgd = SgdConfig :: default ( ) ;
1078+ let default_adam = AdamConfig :: default ( ) ;
10581079
10591080 Self {
10601081 points : PointsEditorState :: default ( ) ,
@@ -1072,6 +1093,10 @@ impl Default for CurveFitApp {
10721093 & default_steepest_descent,
10731094 ) ,
10741095 steepest_descent_preset : infer_steepest_descent_preset ( & default_steepest_descent) ,
1096+ sgd_inputs : SgdInputState :: from_config ( & default_sgd) ,
1097+ sgd_preset : infer_sgd_preset ( & default_sgd) ,
1098+ adam_inputs : AdamInputState :: from_config ( & default_adam) ,
1099+ adam_preset : infer_adam_preset ( & default_adam) ,
10751100 ui_language : UiLanguage :: English ,
10761101 plot_tool : PlotTool :: SinglePoint ,
10771102 spray_points_per_second : 140 ,
0 commit comments