B Ÿ@`Ñ•ã@sœddlZddlZddlZej e¡ZddlmZm Z m Z m Z m Z m Z mZmZddlmZmZmZddlmZddlmZddlmZdZGdd „d eƒZdS) éN)ÚVarÚ TextLabelerÚ ExpressionÚ PiecewiseÚ_PiecewiseDataÚ SOSConstraintÚ ConstraintÚcomponents_data)ÚMatrixEntriesClassÚLPFileObjClassÚLPFileConstraintClass)Úcreate_block_symbol_maps)ÚSolverManager_PHPyro)Ú iteritemsZ DDSIPhelp_x64c@seZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?S)@Úddextension_basecCst‚dS)N)ÚNotImplementedError)ÚselfÚph©rúE/tmp/pip-unpacked-wheel-bi3529v6/pyomo/pysp/plugins/ddextensionold.pyÚ_getNumberOfStochasticRHS%sz*ddextension_base._getNumberOfStochasticRHScCst‚dS)N)r)rrrrrÚ#_getNumberOfStochasticMatrixEntries(sz4ddextension_base._getNumberOfStochasticMatrixEntriescCst‚dS)N)r)rrÚRememberSecStageConstrÚlpÚ ConstraintMapÚ count_rowsÚMatrixEntries_ConstrToRow_MaprrrÚ_sort_print_second_stage_constr+sz0ddextension_base._sort_print_second_stage_constrcCst‚dS)N)r)rrrrrÚ _write_rhs_sc4szddextension_base._write_rhs_sccCst‚dS)N)r)rrrrrÚ_write_matrix_sc7sz!ddextension_base._write_matrix_sccCsLd|_d|_d|_d|_g|_i|_g|_g|_g|_i|_ g|_ d|_ dS)Nz ddlpfile.lpZ__DDSIP_FIRSTSTAGEz.17g) Ú _lpfilenameÚ_firststage_var_postfixÚ_reference_scenarioÚ_reference_scenario_instanceÚ_FirstStageVarsÚ_FirstStageVarIdMapÚ_SecondStageVarsÚ_AllVarsÚ_ScenarioVectorÚ _ColumnMapÚinput_file_name_listÚ_precision_string)rrrrÚ__init__:szddextension_base.__init__cCs | ¡dS)N)r,)rrrrrÚresetOszddextension_base.resetcCsdS)Nr)rrrrrÚpre_ph_initializationRsz&ddextension_base.pre_ph_initializationcCsdS)Nr)rrrrrÚpost_instance_creationUsz'ddextension_base.post_instance_creationc Cs‚tdƒt|jj ¡ƒ|_|jj|jd|_|jj}td|ƒt|j t ƒr¨|jj   ¡}|  |g¡|j j||jd}|j|dd|jd|_|jj}t|tfƒn|jj}||_tdƒ| ¡| |¡\}}| ||¡}| ||¡tj |j¡sþt‚d} t d | ¡t d | d ¡td t t!ƒd |jd t |ƒƒt t!d |jd t |ƒ¡tj | d ¡s~t‚t d | d ¡tdƒd} d} t"| dƒp} xh|  #¡D]\} |  $¡}| dkrÎP|ddkrä| d} t%|ƒdkr¶| d} t&|dƒ|j'|d<q¶WWdQRX| (|j¡\}}}}| )|||||¡}| *|¡| +||¡| ,|||¡| -|¡| -|¡dS)Nz?Hello from the post_ph_initialization callback in ddphextensionrz Using %s as reference scenario)Z!output_instance_construction_timeT)Zcreate_variable_idszCreating the sip.in filez rows+colszrm -f z.gzz COMMAND= ú z gzip -df z&Opening the rows+cols file for readingÚréZ__________________________é).ÚprintÚsortedÚ_scenario_treeÚ _scenario_mapÚkeysr(r"Ú_nameÚ isinstanceZ_solver_managerrZ_scenario_instance_factoryZgenerate_scenario_treeÚcompressZ%construct_instances_for_scenario_treeZ"_output_instance_construction_timeZlinkInInstancesZ _scenariosZ _instancer rr#Z_preprocess_scenario_instancesÚ_write_reference_scenario_lpÚ_Constraints_StagesÚ_Populate_StageVarsÚosÚpathÚexistsr ÚAssertionErrorÚsystemÚstrÚ ddsip_helpÚopenÚ readlinesÚsplitÚlenÚintr)Ú_read_parse_lpÚ sort_write_lprrÚ write_sip_inÚwrite_input2sip)rrZ scenario_nameZsingleton_treeZsingleton_dictZscenario_instanceÚ max_name_lenÚ symbol_mapÚStageToConstraintMapZddsip_help_outputZ dashcountZvarcountÚfÚlineÚpiecesÚ ObjObjectrÚremaining_lpfile_rowsÚAllConstraintNamesrrrrÚpost_ph_initializationXst        &   &  z'ddextension_base.post_ph_initializationcCsdS)Nr)rrrrrÚpost_iteration_0_solves»sz(ddextension_base.post_iteration_0_solvescCsdS)Nr)rrrrrÚpost_iteration_0¾sz!ddextension_base.post_iteration_0cCsdS)Nr)rrrrrÚpre_iteration_k_solvesÁsz'ddextension_base.pre_iteration_k_solvescCsdS)Nr)rrrrrÚpost_iteration_k_solvesÄsz(ddextension_base.post_iteration_k_solvescCsdS)Nr)rrrrrÚpost_iteration_kÇsz!ddextension_base.post_iteration_kcCs| |¡dS)N)Úwrite_start_weights)rrrrrÚpost_ph_executionÊsz"ddextension_base.post_ph_executionc s¼ddl}|jjj ¡}tdˆjfƒˆjjj }|j   ¡j ‰‡fdd„t |ƒDƒ‰dd„}tƒ‰‡‡‡fdd„}|ˆjˆj|d|iƒ\}}|ˆjks˜t‚td ƒtd d „|j Dƒƒ} | |fS) NrzWriting LP file to %scs g|]\}}|ˆkrt|ƒ‘qSr)Úid)Ú.0Zscenariotree_idÚvardata)Ú rootnode_varsrrú ÞszAddextension_base._write_reference_scenario_lp..cSsdS)NTr)ÚxrrrÚáóz?ddextension_base._write_reference_scenario_lp..csˆ|ƒt|ƒˆkrˆjndS)NÚ)r`r!)re)Úfirststage_idsrÚ text_labelerrrrfãsÚlabelerz Model written css|]}t|ƒVqdS)N)rI)raÚsymbolrrrú ðsz@ddextension_base._write_reference_scenario_lp..)Z pyomo.environÚrepnZpluginsZcpxlpZProblemWriter_cpxlpr4r r#Ú_ScenarioTreeSymbolMapÚbySymbolr6Ú findRootNodeÚ_standard_variable_idsrrrBÚmax) rrZpyomoZlp_file_writerZscenariotree_varsZ capabilitiesrkZoutput_filenamerPrOr)rircrrjrr<Ðs$    z-ddextension_base._write_reference_scenario_lpcCs$d}x,|jjddD]}|ttt|tƒƒƒ7}qW|j ¡}|jjd}|j d}|j }|j } x t |jj jƒD]Ž\} } y| t| ƒ} Wntd| jƒtYnX| |krÆ|j | ¡| |j| <n*| |jksÚ| |jkrè|j | ¡ndsðt‚|j | ¡qnWxŽ|jjD]‚} | jdj\}}|j |¡}|jtk r | t||ƒ} | |jksVt‚| |jkr | |jksrt‚|j | ¡|j | ¡q Wt|jƒ|krÀtdƒtdƒt ƒ}x2|jjddD] }| !d d „t|tƒDƒ¡qÆWt ƒ}x(t |jj jƒD]\} } | "| j¡qWt ƒ}xJ|jjD]>} | jdj\}}|j |¡}|jtk r*| "||j¡q*Wtd t#t|ƒƒƒtd t#t|ƒƒƒtd t#t|ƒƒƒtdt#|||ƒƒx*|j D] }t|jƒt|jƒksÈt‚qÈWt|jjƒdkst‚|j $¡|j $¡|j $¡dS)NrT)Úactiver3zFAILED ON VAR DATA= Fz**** THERE IS A PROBLEM ****zBNot all model variables are on the scenario tree. Investigating...css|] }|jVqdS)N)Úname)rarbrrrrm&sz7ddextension_base._Populate_StageVars..z9Number of Scenario Tree Variables (found ddsip LP file): z>Number of Scenario Tree Cost Variables (found ddsip LP file): z$Number of Variables Found on Model: z2Variables Missing from Scenario Tree (or LP file):r2)%r#Úblock_data_objectsrIÚlistr rr6rqÚ_stagesZ _tree_nodesrrÚbyObjectrrorpr`r4ruZfoobarr$Úappendr%Z_derived_variable_idsÚ _variable_idsr&rBr'ZnodesZ_cost_variableZfind_componentÚctyperÚsetÚupdateÚaddrDÚsort)rrÚ LP_symbol_mapZ all_vars_cntÚblockÚrootnodeZstagetwoZanodeZfirststage_blended_variablesÚ LP_byObjectÚscenario_tree_idrbÚLP_nameZstageZcost_variable_nameZcost_variable_indexZstage_cost_componentZall_varsZ tree_varsZ cost_varsZ tree_noderrrr>ós~                z$ddextension_base._Populate_StageVarscCsÀi}g}g}|jjd}|jjd}|j}|j} |j} tƒ} x|jD] } g| | <qDWx.t|jƒD] \} }| | t |ƒƒ  | ¡q`Wx$|j ddD]}t |ddƒ}|dkr¼t d|jƒ‚d}t|ttfƒrÒd}x&|jtdddD]}td |jƒ‚qäWx¬|jtdddD]˜}| t |ƒ}| |}t|ƒdks6t‚|s^| j|| |¡|d }|  |¡}nd}|  |¡}|dkr‚| |¡n |dkr˜| |¡n ds t‚q Wq”W||d <||d <|S) Nrr3T)rtZ_repnz-Unable to find _repn ComponentMap on block %sF)rtZ descend_intoz9SOSConstraints are not handled by the DDSIP interface: %s)rnÚinstanceÚ FirstStageÚ SecondStage)r6rxr#ryr"ÚdictrprÚaliasesr`rzrvÚgetattrÚ ValueErrorrur:rrZcomponent_data_objectsrÚ TypeErrorrrIrBZconstraintNodeÚgetZnode_stage_indexÚextend)rrrrQZFirstStageConstrNameToIndexZSecondStageConstrNameToIndexZstage1Zstage2Zreference_instancer„Zreference_scenarioZLP_reverse_aliasrlÚaliasZ obj_weakrefr‚Z block_repnZ isPiecewiseZconstraint_datar†Z LP_aliasesZconstraint_nodeZ stage_indexrrrr=KsX             z$ddextension_base._Constraints_StagescCsytdƒtddƒ}Wn&tk r<tdƒt d¡YnX|j d¡|d}d}x |D]}||kslt‚|d7}q\W|d}d} x |D]}||ksšt‚| d7} qŠWt|j ƒ} t|j ƒ} |  |¡} |  |¡} t|j ƒ}| d ¡| d t|ƒd ¡| d t| ƒd ¡| d t| dƒd ¡| dt| dƒd ¡| d|jd ¡| dt|ƒd ¡| dt| ƒd ¡| dtdƒd ¡| dt| ƒd ¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d ¡| d!¡| d"¡| d#¡| d$¡| d%¡| d&¡| d'¡| d(¡| d)¡| d*¡| d+¡| d,¡| d-¡| d.¡| d/¡| d0¡| d1¡| d2¡| d3¡| d4¡| d5¡| d6¡| d7¡| d8¡| d9¡| d:¡| d;¡| d<¡| d=¡| d>¡| d?¡| d@¡| dA¡| dB¡| dC¡| ¡dS)DNz Write dd input file: sip.in zsip.inÚwzsip.in cannot be created!r3rˆrr‰z BEGIN z FIRSTCON Ú z FIRSTVAR zSECCON zSECVAR zPOSTFIX zSCENAR zSTOCRHS z STOCCOST Ú0zSTOCMAT z CPLEXBEGIN z$1035 0 * Output on screen indicator z2008 0.001 * Absolute Gap z2009 0.001 * Relative Gap z1039 1200 * Time limit z*1016 1e-9 * simplex feasibility tolerance z)1014 1e-9 * simplex optimality tolerance z21065 40000 * Memory available for working storage z#2010 1e-20 * integrality tolerance z2008 0 * Absolute gap z2020 0 * Priority order z2012 4 * MIP display level z2053 2 * disjunctive cuts z2040 2 * flow cover cuts z-2060 3 *DiveType mip strategy dive (probe=3) z CPLEXEND zMAXINHERIT 15 zOUTLEV 5 * Debugging z OUTFIL 2 z3STARTI 0 * (1 to use the starting values from PH) z!NODELI 2000 * Sipdual node limit z&TIMELIMIT 964000 * Sipdual time limit zIHEURISTIC 99 3 7 * Heuristics: Down, Up, Near, Common, Byaverage ...(12) z7ABSOLUTEGAP 0.001 * Absolute duality gap allowed in DD z EEVPROB 1 z=RELATIVEGAP 0.01 * (0.02) Relative duality gap allowed in DD z,BRADIRECTION -1 * Branching direction in DD zTBRASTRATEGY 1 * Branching strategy in DD (1 = unsolved nodes first, 0 = best bound) z.EPSILON 1e-13 * Branch epsilon for cont. var. zACCURACY 5e-16 * Accuracy z(BOUSTRATEGY 1 * Bounding strategy in DD zNULLDISP 1e-16 z RELAXF 0 z%INTFIRST 0 * Branch first on integer z.r“css|]}t|ƒVqdS)N)Úrepr)rar’rrrrmÝsr3csg|]}| ˆ‘qSrr)rar’)Ú num_scenariosrrrdæsz8ddextension_base.write_start_weights..z NONANT1.inz MULTIPLIER css|]}t|ƒdVqdS)r“N)rº)rarerrrrmísgr²z NONANT2.incss|]}t|ƒdVqdS)r“N)rº)rarerrrrmþscsg|]}|ˆˆ‘qSrr)rar’)r»Úwlastrrrdsz NONANT3.incss|]}t|ƒdVqdS)r“N)rº)rarerrrrm s)r6rqr9r(r7Ú_wr$r%rzrwÚziprFr˜ÚjoinÚ enumerateÚfloatrIÚ writelines)rrZ rootnode_nameZweights_vectorsZ scenarionameZscenario_weightsZscenario_weights_vectorZ varname_LPr…rRZ var_indexZvector_wÚvarnameZ v1_transposeZ vector_w_iterÚtmpÚcolumnZ v2_transposeZw_sumr’Z v3_transposer)r»r¼rr^Ésb      $ 4     $     $    z$ddextension_base.write_start_weightsc Cstdƒg}i}|j ¡}xj|jD]`}|j|\}}t|ƒt|ƒ}| dd¡}| dd¡}| dd¡}| |¡| ||¡||<q"W| ¡tdƒt d d ƒ\} |   d ¡xJ|D]B}|  |¡rÖtt t ||ƒƒƒ} ntt ||ƒƒ} |   | d ¡q²WWdQRXdS) NzE Write dd input file: solstart.in (** integers will be rounded ** ) Ú.Ú_r¹ú:r0rhzWriting init solution:z solstart.inr¸z SOLUTION r“)r4r6rqr{rDÚreplacerzZget_variable_valuer€rFr˜Zis_variable_discreteÚroundrÁ) rrZVNamesZVValsrƒZ variable_idÚvar_nameÚindexrurRÚvalrrrÚwrite_start_ins*          zddextension_base.write_start_incCsêytdƒtddƒ}Wn&tk r<tdƒt d¡YnXd|jkrR| d¡d|jkrf| d ¡d |jkrz| d ¡d |jkrŽ| d ¡d|jkr¢| d¡d|jkr¶| d¡d|jkrÊ| d¡d|jkrÞ| d¡| ¡dS)Nz" Write dd input file: input2sip Z2sipr’z!File input2sip cannot be created.r3zsip.inzsip.in zsorted_LPfile.lpzsorted_LPfile.lp z model.ordz model.ord zrhs.sczrhs.sc zcost.sczcost.sc z matrix.scz matrix.sc z order.datz order.dat zstart.inz start.in )r4rFr•r–r—r*r˜r™)rrrRrrrrN1s.                z ddextension_base.write_input2sipcCsNxH||gks ||d d¡rH|d7}|t|ƒkrtdƒt d¡qW|S)Nrú\r3z1Error: past end of file while skipping null lines)Ú startswithrIr4r–r—)rr¯r®rrrr«Ls   z ddextension_base.SkipLPNullLinescCsP|dkr |dkr tdt|ƒƒ||7}|t||ƒdkrH|d7}d}||fS)Nr3r2zunexpected step length =r)r4rDrI)rr®r¯r°Ústeprrrr­Vsz#ddextension_base.LocalPostionUpdatecCs|ddkr|dd…}|S)Nr²rÈr)rrurrrr¬_s  zddextension_base.ClearNamecCsJt| ¡ƒ}| ¡d|jd}x"|D]}| ||||f¡q(WdS)Nz%+z %s )rwr8r€r+r˜)rZ VarToCoeffMapr®r8Z line_templateÚkeyrrrr´ds   z)ddextension_base.print_coeff_var_from_mapcCs†|dkrddt|ƒkrDdt|ƒkrD| dt|ƒdt|ƒd¡q‚| t|ƒdt|ƒd¡n| t|ƒdt|ƒd¡dS)N)ú=ú<ú>z<=z>=ú+ú-r0r“)rDr˜)rZcoeffÚvarr®rrrÚprint_coeff_varqs $ z ddextension_base.print_coeff_varN)"Ú__name__Ú __module__Ú __qualname__rrrrrr,r-r.r/rXrYrZr[r\r]r_r<r>r=rMr§rKrLr^rÎrNr«r­r¬r´rÙrrrrr#s> c#XEc};E#   r)r?rŸr–r@ÚabspathÚ__file__ZthisfileZpyomo.core.baserrrrrrrr Z!pyomo.pysp.plugins.ddextensionnewr r r Zpyomo.pysp.phutilsr Z%pyomo.solvers.plugins.smanager.phpyrorÚsixrrEÚobjectrrrrrÚs (