basic structure for Optimizer