def GDPopt_iteration_loop(solve_data, config): """Algorithm main loop. Returns True if successful convergence is obtained. False otherwise. """ while solve_data.master_iteration < config.iterlim: # Set iteration counters for new master iteration. solve_data.master_iteration += 1 solve_data.mip_iteration = 0 solve_data.nlp_iteration = 0 # print line for visual display config.logger.info( '---GDPopt Master Iteration %s---' % solve_data.master_iteration) # solve linear master problem with time_code(solve_data.timing, 'mip'): mip_result = solve_LOA_master(solve_data, config) # Check termination conditions if algorithm_should_terminate(solve_data, config): break # Solve NLP subproblem if solve_data.active_strategy == 'LOA': with time_code(solve_data.timing, 'nlp'): nlp_result = solve_local_subproblem(mip_result, solve_data, config) if nlp_result.feasible: add_outer_approximation_cuts(nlp_result, solve_data, config) elif solve_data.active_strategy == 'GLOA': with time_code(solve_data.timing, 'nlp'): nlp_result = solve_global_subproblem(mip_result, solve_data, config) if nlp_result.feasible: add_affine_cuts(nlp_result, solve_data, config) elif solve_data.active_strategy == 'RIC': with time_code(solve_data.timing, 'nlp'): nlp_result = solve_local_subproblem(mip_result, solve_data, config) else: raise ValueError('Unrecognized strategy: ' + solve_data.active_strategy) # Add integer cut add_integer_cut( mip_result.var_values, solve_data.linear_GDP, solve_data, config, feasible=nlp_result.feasible) # Check termination conditions if algorithm_should_terminate(solve_data, config): break
def GDPopt_iteration_loop(solve_data, config): """Algorithm main loop. Returns True if successful convergence is obtained. False otherwise. """ while solve_data.master_iteration < config.iterlim: # Set iteration counters for new master iteration. solve_data.master_iteration += 1 solve_data.mip_iteration = 0 solve_data.nlp_iteration = 0 # print line for visual display config.logger.info( '---GDPopt Master Iteration %s---' % solve_data.master_iteration) # solve linear master problem with time_code(solve_data.timing, 'mip'): mip_result = solve_LOA_master(solve_data, config) # Check termination conditions if algorithm_should_terminate(solve_data, config): break # Solve NLP subproblem if solve_data.current_strategy == 'LOA': with time_code(solve_data.timing, 'nlp'): nlp_result = solve_local_subproblem(mip_result, solve_data, config) if nlp_result.feasible: add_outer_approximation_cuts(nlp_result, solve_data, config) elif solve_data.current_strategy == 'GLOA': with time_code(solve_data.timing, 'nlp'): nlp_result = solve_global_subproblem(mip_result, solve_data, config) if nlp_result.feasible: add_affine_cuts(nlp_result, solve_data, config) # Add integer cut add_integer_cut( mip_result.var_values, solve_data.linear_GDP, solve_data, config, feasible=nlp_result.feasible) # Check termination conditions if algorithm_should_terminate(solve_data, config): break