B  @`Äã@sxdZddlmZddlmZmZmZddlmZddl m Z m Z ddl m ZddlmZmZdd „Zd d „Zd d „ZdS)zIteration code.é)Údivision)Úadd_integer_cutÚadd_outer_approximation_cutsÚadd_affine_cuts)Úsolve_LOA_master)Úsolve_global_subproblemÚsolve_local_subproblem)ÚTerminationCondition)Ú time_codeÚget_main_elapsed_timec Csx|j|jkr|jd7_d|_d|_|j d|j¡t|jdƒt||ƒ}WdQRXt ||ƒrlP|j dkr®t|jdƒt |||ƒ}WdQRX|j rît |||ƒn@|j dkrît|jdƒt|||ƒ}WdQRX|j rît|||ƒ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_iterationÚiterlimZ mip_iterationZ nlp_iterationÚloggerÚinfor ÚtimingrÚalgorithm_should_terminateZactive_strategyrr rrrrZ var_valuesZ linear_GDP)Ú solve_dataÚconfigZ mip_resultZ nlp_result©rú@/tmp/pip-unpacked-wheel-bi3529v6/pyomo/contrib/gdpopt/iterate.pyÚGDPopt_iteration_loop s4        rcCsZ|j|j|jkr’|j d |j|j|j¡¡|jtdƒkrX|jtdƒkrXtj|j j _ n6|jtdƒkr‚|jtdƒkr‚tj|j j _ n tj |j j _ dS|j |jkrÚ|j d|j f¡|j d |j|j¡¡tj|j j _ dSt|jƒ}||jkr.|j d |j|¡¡|j d |j|j¡¡tj|j j _ dSt||ƒsV|j d ¡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