B _e@stddlZddlZddlZddlZejeZddlTddl Tddl m Z m Z m Z ddlmZdZGdddeZdS)N)*)MatrixEntriesClassLPFileObjClassLPFileConstraintClass) iteritemsZ DDSIPhelp_x64c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?S)@ddextension_basecCstdS)N)NotImplementedError)selfphr E/tmp/pip-unpacked-wheel-d4p3hk07/pyomo/pysp/plugins/ddextensionold.py_getNumberOfStochasticRHS%sz*ddextension_base._getNumberOfStochasticRHScCstdS)N)r)r r r r r #_getNumberOfStochasticMatrixEntries(sz4ddextension_base._getNumberOfStochasticMatrixEntriescCstdS)N)r)r r RememberSecStageConstrlp ConstraintMap count_rowsMatrixEntries_ConstrToRow_Mapr r r _sort_print_second_stage_constr+sz0ddextension_base._sort_print_second_stage_constrcCstdS)N)r)r r r r r _write_rhs_sc4szddextension_base._write_rhs_sccCstdS)N)r)r r r r r _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 _ColumnMapinput_file_name_list_precision_string)r r r r __init__:szddextension_base.__init__cCs |dS)N)r#)r r r r r resetOszddextension_base.resetcCsdS)Nr )r r r r r pre_ph_initializationRsz&ddextension_base.pre_ph_initializationcCsdS)Nr )r r r r r post_instance_creationUsz'ddextension_base.post_instance_creationc Cstdt|jj|_|jj|jd|_|jj}td|t|j t j j j jjr|jj}||g|jj||jd}|j|dd|jd|_|jj}t|tfn|jj}||_td|||\}}|||}|||tj !|j"s t#d} t$d | t$d | d td t%t&d |j"d t%|t$t&d |j"d t%|tj !| d st#t$d | d tdd} d} t'| dp} xh| (D]\} | )}| dkrP|ddkr| d} t*|dkr| d} t+|d|j,|d<qWWdQRX|-|j"\}}}}|.|||||}|/||0|||1||||2||2|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 readingrZ__________________________)3printsorted_scenario_tree _scenario_mapkeysrr_name isinstanceZ_solver_managerpyomoZsolverspluginsZsmanagerZphpyroZSolverManager_PHPyroZ_scenario_instance_factoryZgenerate_scenario_treecompressZ%construct_instances_for_scenario_treeZ"_output_instance_construction_timeZlinkInInstancesZ _scenariosZ _instanceZcreate_block_symbol_mapsVarrZ_preprocess_scenario_instances_write_reference_scenario_lp_Constraints_Stages_Populate_StageVarsospathexistsrAssertionErrorsystemstr ddsip_helpopen readlinessplitlenintr _read_parse_lp sort_write_lprr write_sip_inwrite_input2sip)r r Z scenario_nameZsingleton_treeZsingleton_dictZscenario_instance max_name_len symbol_mapStageToConstraintMapZddsip_help_outputZ dashcountZvarcountflinepieces ObjObjectrremaining_lpfile_rowsAllConstraintNamesrr r r post_ph_initializationXsv       &   &  z'ddextension_base.post_ph_initializationcCsdS)Nr )r r r r r post_iteration_0_solvessz(ddextension_base.post_iteration_0_solvescCsdS)Nr )r r r r r post_iteration_0sz!ddextension_base.post_iteration_0cCsdS)Nr )r r r r r pre_iteration_k_solvessz'ddextension_base.pre_iteration_k_solvescCsdS)Nr )r r r r r post_iteration_k_solvessz(ddextension_base.post_iteration_k_solvescCsdS)Nr )r r r r r post_iteration_ksz!ddextension_base.post_iteration_kcCs||dS)N)write_start_weights)r r r r r post_ph_executionsz"ddextension_base.post_ph_executionc sddl}|jjj}tdjfjjj }|j j fddt |Ddd}tfdd}|jj|d|i\}}|jksttd td d |j D} | |fS) NrzWriting LP file to %scs g|]\}}|krt|qSr )id).0Zscenariotree_idvardata) rootnode_varsr r szAddextension_base._write_reference_scenario_lp..cSsdS)NTr )xr r r z?ddextension_base._write_reference_scenario_lp..cs|t|krjndS)N)rZr)r_)firststage_idsr text_labelerr r r`slabelerz Model written css|]}t|VqdS)N)rC)r[symbolr r r sz@ddextension_base._write_reference_scenario_lp..)Z pyomo.environrepnr3ZcpxlpZProblemWriter_cpxlpr+rr_ScenarioTreeSymbolMapbySymbolr- findRootNode_standard_variable_idsrZ TextLabelerr<max) r r r2Zlp_file_writerZscenariotree_varsZ capabilitiesreZoutput_filenamerJrIr )rcr]r rdr r6s$    z-ddextension_base._write_reference_scenario_lpcCs$d}x,|jjddD]}|ttt|t7}qW|j}|jjd}|j d}|j }|j } xt |jj jD]\} } y| t| } Wntd| jtYnX| |kr|j| | |j| <n*| |jks| |jkr|j| ndst|j| qnWx|jjD]} | jdj\}}|j|}|jtk r | t||} | |jksVt| |jkr | |jksrt|j| |j| q Wt|j|krtdtdt }x2|jjddD] }|!d d t|tDqWt }x(t |jj jD]\} } |"| jqWt }xJ|jjD]>} | jdj\}}|j|}|jtk r*|"||jq*Wtd t#t|td t#t|td t#t|tdt#|||x*|j D] }t|jt|jkstqWt|jjdkst|j$|j$|j$dS)NrT)activer*zFAILED ON VAR DATA= Fz**** THERE IS A PROBLEM ****zBNot all model variables are on the scenario tree. Investigating...css|] }|jVqdS)N)name)r[r\r r r rg'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):r))%rblock_data_objectsrClistZcomponents_datar5r-rk_stagesZ _tree_nodesrlbyObjectrrirjrZr+roZfoobarrappendrZ_derived_variable_ids _variable_idsrr<rZnodesZ_cost_variableZfind_componentctypeZ Expressionsetupdateaddr>sort)r r LP_symbol_mapZ all_vars_cntblockrootnodeZstagetwoZanodeZfirststage_blended_variables LP_byObjectscenario_tree_idr\LP_nameZstageZcost_variable_nameZcost_variable_indexZstage_cost_componentZall_varsZ tree_varsZ cost_varsZ tree_noder r r r8s~                z$ddextension_base._Populate_StageVarscCsi}g}g}|jjd}|jjd}|j}|j} |j} t} x|jD] } g| | <qDWx.t|jD] \} }| | t | | q`Wx$|j ddD]}t |dd}|dkrt d|jd}t|ttfrd}x&|jtdddD]}td |jqWx|jtdddD]}| t |}| |}t|dks6t|s^| j||||d }| |}nd}| |}|dkr||n |dkr||n ds tq WqW||d <||d <|S) Nrr*T)rnZ_repnz-Unable to find _repn ComponentMap on block %sF)rnZ descend_intoz9SOSConstraints are not handled by the DDSIP interface: %s)rhinstance FirstStage SecondStage)r-rrrrsrdictrjraliasesrZrtrpgetattr ValueErrorror1Z PiecewiseZ_PiecewiseDataZcomponent_data_objectsZ SOSConstraint TypeErrorZ ConstraintrCr<ZconstraintNodegetZnode_stage_indexextend)r r r{rKZFirstStageConstrNameToIndexZSecondStageConstrNameToIndexZstage1Zstage2Zreference_instancer~Zreference_scenarioZLP_reverse_aliasrfaliasZ obj_weakrefr|Z block_repnZ isPiecewiseZconstraint_datarZ LP_aliasesZconstraint_nodeZ stage_indexr r r r7LsX             z$ddextension_base._Constraints_StagescCsytdtdd}Wn&tk r<tdtdYnX|jd|d}d}x |D]}||kslt|d7}q\W|d}d} x |D]}||kst| d7} qWt|j } t|j } | |} | |} t|j }|d |d t|d |d t| d |d t| dd |dt| dd |d|jd |dt|d |dt| d |dtdd |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.inwzsip.in cannot be created!r*rrrz 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 zrclose)r r rKrQZsipinrZNumberOfFirstStageConstraintsZconstrrZNumberOfSecondStageConstraintsZNumberOfFirstStageVarsZNumberOfSecondStageVarsZNumberOfStochasticRHSZNumberOfStochasticMatrixEntriesZNumberOfScenariosr r r rGs                                                            zddextension_base.write_sip_inc Csy4tjtdddddd}tjtdddddd}WnBtjk rv}z"tdtd ttj |fWdd}~XYnXi}i}x@|D]8}|d }t | }||krt ||<|| |qWx$|D]}|d } |d } | || <qW||fS) NzStochDataMAT.datrbr'|T) delimiter quotecharskipinitialspacezStochDataRHS.datzStochData is not found!zfile %s, line %d: %sr*r))csvreaderr@Errorr+rrfilenamerLline_numrqr/rAddToMap) r Z MAT_datafileZ RHS_datafileeZstochMATZstochRHSrMror/Z constr_namevaluer r r _read_unique_coefs&(     z"ddextension_base._read_unique_coefc Cs0t}i}y0tdt|dtjt|ddddd}WnFtjk r}z&t|dtd t t j |fWdd}~XYnXt |d d}d }| ||}|||d |d 7}d }||||} || ||||d \}}x||gkrd} | dk r<|| |||d} ||||d \}}qd |t||krt|||} ||||d \}}q|||||||d d} ||||d \}}qW| dk rtd td | ||}d }d|||ksd|||ksd|||kr|d 7}| ||}xd||d krd||d kr||||} t|| <t||d kr|d 7}n|d 7}d} d} xJ||gkr| dk r|| | |||} |||} | dkrd} ||||d \}}nd |t||kr0|||} ||||d \}}nxd |t||kr|| ||||||d } |||} |||d } | dkrd} ||||d \}}| dkr|| | || | |d 7}d }PqWq(Wg}x*|t|kr||||d 7}qWt |}||||fS)Nz) Name of the lp file which will be read: rrtr'rT)rrrz is not found!zfile %s, line %d: %srr*r)z- error mismatched pairs in objective functionzs.t.stz subject toboundZc_e_ONE_VAR_CONSTANTrbZEndOfConstraint)rr+r>rrr@rrrrrLrrqSkipLPNullLinesZ AssignSense ClearNameZ AssignNameLocalPostionUpdaterrCrZAssignComparatorZ AssignRHSrtr/)r Z lp_filenamerOrlp_filerZ list_lp_fileCurrRowCurrElemroZ LastCoeffZCurrConstraintNameendZLastVarrPrQr r r rEs (              $    zddextension_base._read_parse_lpcCsytdtdd}Wn&tk r<tdtdYnX|jdi}||dd|dd||d ||d |d }t | } | g} d } x~| D]v} | |kr|d | d| d7} | || <||| d|||| dd|| d d q| | qW| || ||| |}xRt t|D]B} |d x0t t|| D]}||| |dqlWqLW||S)Nz. Write the LP file for dd in sorted_LPfile.lp zsorted_LPfile.lprz4IO Error so that sorted_LPfile.lp cannot be created.r*rz z: r)z s.t. rrr')r+r@rroutr!rtrprint_coeff_var_from_maprqr/rzrrangerCr)r r rOrrKrPrrrZ ConstrNamesrrrorowir r r rFsH     ( "zddextension_base.sort_write_lpc s|jj}g}xV|jD]L}|jj|j|}g}x&|jD]}|j|}|||q:W||qWt t |}t ddp} | dd dd|jDdxDt|D]8\} } |j| } | | dd dd| DdqWWdQRXtt|jg} x6|D].} | d d}fd d |D}| |q Wt d d8} | d x&t | D]}| dd|Dq^WWdQRXg}xR|D]J} d}g}| dd}x$|D]}||7}||qW||qWt dd8} | d x&t |D]}| dd|DqWWdQRXg}x@|D]8} | d| dd}fdd |D}||q0Wt dd8} | d x&t |D]}| dd|DqWWdQRXdS)Nz PHWEIGHTS.csvwtzvarname,,css|] }|VqdS)Nr )r[ror r r rgsz7ddextension_base.write_start_weights..rcss|]}t|VqdS)N)repr)r[rr r r rgsr*csg|]}| qSr r )r[r) num_scenariosr r r^sz8ddextension_base.write_start_weights..z NONANT1.inz MULTIPLIER css|]}t|dVqdS)rN)r)r[r_r r r rgsgrz NONANT2.incss|]}t|dVqdS)rN)r)r[r_r r r rgscsg|]}|qSr r )r[r)rwlastr r r^sz NONANT3.incss|]}t|dVqdS)rN)r)r[r_r r r rg s)r-rkr0rr._wrrrtrqzipr@rjoin enumeratefloatrC writelines)r r Z rootnode_nameZweights_vectorsZ scenarionameZscenario_weightsZscenario_weights_vectorZ varname_LPrrLZ var_indexZvector_wvarnameZ v1_transposeZ vector_w_itertmpcolumnZ v2_transposeZw_sumrZ v3_transposer )rrr rXsb      $ 4     $     $    z$ddextension_base.write_start_weightsc Cstdg}i}|j}xj|jD]`}|j|\}}t|t|}|dd}|dd}|dd}|||||||<q"W|tdt d d \} | d xJ|D]B}| |rtt t ||} ntt ||} | | d qWWdQRXdS) NzE Write dd input file: solstart.in (** integers will be rounded ** ) ._r:r'rbzWriting init solution:z solstart.inrz SOLUTION r)r+r-rkrur>replacertZget_variable_valuerzr@rZis_variable_discreteroundr) r r ZVNamesZVValsr}Z variable_idvar_nameindexrorLvalr r r write_start_ins*          zddextension_base.write_start_incCsytdtdd}Wn&tk r<tdtdYnXd|jkrR|dd|jkrf|d d |jkrz|d d |jkr|d d|jkr|dd|jkr|dd|jkr|dd|jkr|d|dS)Nz" Write dd input file: input2sip Z2siprz!File input2sip cannot be created.r*zsip.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 )r+r@rrrr!rr)r r rLr r r rH2s.                z ddextension_base.write_input2sipcCsNxH||gks ||ddrH|d7}|t|krtdtdqW|S)Nr\r*z1Error: past end of file while skipping null lines) startswithrCr+rr)r rrr r r rMs   z ddextension_base.SkipLPNullLinescCsP|dkr |dkr tdt|||7}|t||dkrH|d7}d}||fS)Nr*r)zunexpected step length =r)r+r>rC)r rrrstepr r r rWsz#ddextension_base.LocalPostionUpdatecCs|ddkr|dd}|S)Nrrr )r ror r r r`s  zddextension_base.ClearNamecCsJt|}|d|jd}x"|D]}|||||fq(WdS)Nz%+z %s )rqr/rzr"r)r Z VarToCoeffMaprr/Z line_templatekeyr r r res   z)ddextension_base.print_coeff_var_from_mapcCs|dkrddt|krDdt|krD|dt|dt|dq|t|dt|dn|t|dt|ddS)N)=<>z<=z>=+-r'r)r>r)r Zcoeffvarrr r r print_coeff_varrs $ z ddextension_base.print_coeff_varN)"__name__ __module__ __qualname__r rrrrr#r$r%r&rRrSrTrUrVrWrYr6r8r7rGrrErFrXrrHrrrrrr r r r r#s> d#XEc};E#   r)r9rr itertoolsr:abspath__file__ZthisfileZpyomo.core.baseZpyomo.core.base.set_typesZ!pyomo.pysp.plugins.ddextensionnewrrrsixrr?objectrr r r r s