B _@sxdZddlmZddlmZmZmZddlmZddl m Z m Z ddl m ZddlmZmZdd Zd d Zd d ZdS)zIteration code.)division)add_integer_cutadd_outer_approximation_cutsadd_affine_cuts)solve_LOA_master)solve_global_subproblemsolve_local_subproblem)TerminationCondition) time_codeget_main_elapsed_timec Csx|j|jkr|jd7_d|_d|_|jd|jt|jdt||}WdQRXt ||rlP|j dkrt|jdt |||}WdQRX|j rt |||n@|j dkrt|jdt|||}WdQRX|j rt|||t|j|j|||j d t ||rPqWdS) zdAlgorithm main loop. Returns True if successful convergence is obtained. False otherwise. rz ---GDPopt Master Iteration %s---ZmipNZLOAZnlpZGLOA)feasible)master_iterationiterlimZ mip_iterationZ nlp_iterationloggerinfor timingralgorithm_should_terminateZactive_strategyrr rrrrZ var_valuesZ linear_GDP) solve_dataconfigZ mip_resultZ nlp_resultr@/tmp/pip-unpacked-wheel-d4p3hk07/pyomo/contrib/gdpopt/iterate.pyGDPopt_iteration_loop s4        rcCsZ|j|j|jkr|jd|j|j|j|jtdkrX|jtdkrXtj|j j _ n6|jtdkr|jtdkrtj|j j _ n tj |j j _ dS|j |jkr|jd|j f|jd|j|jtj|j j _ dSt|j}||jkr.|jd|j||jd|j|jtj|j j _ dSt||sV|jd tj|j j _ dSd S) zpCheck if the algorithm should terminate. Termination conditions based on solver options and progress. zOGDPopt exiting on bound convergence. LB: {:.10g} + (tol {:.10g}) >= UB: {:.10g}infz-infTzs   /7