B u `2{@sddlZddlZddlZddlZddlZddlmZddlmZm Z m Z ddl m Z ddl mZddZddd Zd d Zd d ZddZddZddZddZedkredS)N)ScenarioTreeInstanceFactory)construct_ph_options_parserGenerateScenarioTreeForPH PHFromScratch)find_active_objective) lagrangeutilscCsdttjS)Nz datetime = )strdatetimenowr r |j_j Wn&t k r}z|j Sd}~XYnXj dkrtd?t jj}t|z6|dksdkrtd@|j_|j_|}Wd|Xj dkrbtdAtdBj d0krbtdCxt|D]}t|qHWtdAy|j} tdDt|jWntdEtYnXyf|j} t| tjdFdG>} x6|jD],} | t| d8dHt| d0dIqWWdQRXWntdJtYnXyj|j} | j t!"d8dKtjdLdG8} x0| D](} | | ddHt| d8dIqRWWdQRXWntdMtYnXdS)ONzRUNNING - run args=%src= sGdddt}|}dtd|_d}d}j}j}j}j}j} j} j } j } j } j }j }j}d}d}|}t}d|_|d krtd tt|d t|ft}||_|jjdjd}|j|jdj}t|jjdjd d r d}nd}tjdj}jdkrBtdt|t|fdt|_|dkrbt|jg}d}t || ||!d}d}d}t"|| dxR|jD]H}|j|j}|j}|j#} || }t$|| }t%|| }|&|| gqW|j't()d d|dkrtd|||f||_*|d}!td|!t+|!d8}"x0|D](}|",|ddt|d dqHWWdQRX||_*d|d}#|jd|#|_|dkrt|#|dkrtdttd|t-|\}$}%|dkrtdttd t|$td!t|%t.|| |}&|&dkrPtd"t|&t| f|S|dkrrtd#t|%t|&ft"|| d |dkrtdttd$t|t-|\}$}'|dkrtdttd t|$td%t|'|$ddd&ks:tt|$dd'd(d)}#t|#|jd|#|_|St.|| |}(|(d|krn|dkrntd*t|(|d krtd+t|(t| t|ft/|| |d krtd,t| t|fd|&|%gd|(|'gg|_0g|g|_1d })|dkr.td-d |%|'| f|d kr&td.ttdx|)| k rFt|}*|*| krxd/t|*}#t|#|jd|#|_P|d krtd0|)|*ft2|j0d}xt3d t|j0D]l}+|j0|+ddkr|j0|+d d }&|j0|+d d}%|j0|+d }(|j0|+d}'|'|%|(|&}PqW|d krt|d=}#t|#d|j|#|_|S|d kr td?|.|%|ks&|.|'|krjd@t|.d<t|%dt|'d=}#t|#d|j|#|_|S|%||&}/t5|/|'||(|t5|/krdAt|/dBt|'||(dCt|d=}#|j|#|_|S|d krtdDt%t$t5|/t5|,d}0t5|/|,||0k}1|d k rXtdEt|/|1 rHtdFt|,ntdGt|,|1 rl||j0|+d<t5|-|&|k ot5|-|(|k}2|2 s|d k rtdHt|j0|+|dk rtdIt|&dt|(d=tdJ|d k rtdK|1|2f|2 r|)d 7})|1 r\|d k r*tdL|+t6||-|.g|+|j0|_0dM}#|dk rt|#dn0|d k rrtdN|+t6d|-|.g|+|j0|_0dO}#|jd|#|_|d k rtdPt2|j0g}3x8|D]0}|j|d}t|| j7d k r|3&| qWt6|3|+|j1|_1|dk rltdQt|+dRt|&dt|(dSt|-dt|.d=tdTtt|3dU|d k r~tdVt|j0t|j1k stdWt2|j0tdXx*t3|j1D]}4tdY|4|j1|4f qW|S|)| k r&dZt|)d[t| }#|dk rt|#d|jd|#|_|d kr2td\t2|j0q2W|d k rZtd]xt3d t|j0D]r}4|j0|4d |j0|4d d }5|j0|4d|j0|4d d}6|6dk r|6|5|j0|4d<nd|j0|4d< qlW|dk rt2|j0d^t}#|dk rt|#d|j|#|_|d_}!t+|!dX}"|dk rPtd`|!dx6|j0D],}7|",t|7d dt|7dd qXWWdQRX|da}!t+|!dr}"|dk rtdb|dcxP|j1D]F}8dd}9dd}:x(|8D] };|; r|:|9|;d}:de}9 qW|",|:d qWWdQRX|dkr4tdf|j|dkr~tdgtt89|x t89|D]}.LagrangeParametric..ObjectN)__name__ __module__ __qualname__r r r r Object.srzLagrangeParam begins z...running new phz rz options setz3From LagrangeParametric, status = %s STARTTIME = %sstatusT)Z safety_checksminmaxz%s %s scenariosz starting at gg?)keyz'probabilities sum to %f range: %f to %fzScenarioList.csvz writing to %swz,  zScenario List written to zsolve begins %sz - lambda = %fz solve ends %sz - status = %sz - zL = %sz** bL = %s > 0 (all %s = 0)z$Initial optimal obj = %s for bL = %sz - lambda = %sz - zU = %sokz is not 'ok'z%** Solution is non-optimal...abortingz** Warning: bU = %s < 1z8We have bU = %s ...about to free all %s for %d scenariosz all %s freed; elapsed time = %fz6Initial relative Lagrangian gap = %f maxIntervals = %dzentering while loop %sz** max time reached z0Top of while with %d intervals elapsed time = %fz3exited for loop with PRpoint = %s ...lambdaval = %sz(Searching for b in [%s, %s] with %s = %fz - %s = %fz** Solution status z is not optimalz - Lagrangian = %fz - b = %sz - z = %sz testing bz** fatal error: probability (= z) is outside interval, ()z (tolerance = z testing zz** fatal error: obj (= z(** fatal error: Lagrangian at (bL,zL) = z not= z (optTol = z&No anomalies...testing if b = bL or bUzoldLagrangian = %sz:= Lagrangian = %sz> Lagrangian = %sz not an endpoint lbz = %sz7Lagangian solution is new PR point on line segment of (z8 splitting (bL,bU) into (bL,b) and (b,bU), both fathomedz" alternativeOpt %s newPRpoint = %sz Insert [lambdaval,b,z] at %fz*Added PR point on line segment of envelopez Insert [None,b,z] at %fz?new envelope extreme point added (interval split, not fathomed)z...after insertion:z Interval z, [z ] split at (z new PR point has z selectionsz*test that selections list aligned with lbzz#** fatal error: lbz not= selectionszResult.selections:z%d %fz-** terminating because number of intervals = z >= max = zbottom of while loopz% end while loop...setting multipliersz Lagrange multiplier search endsz PRoptimal.csvzwriting PR points to zOptimalSelections.csvz0writing optimal selections for each PR point to zPRoptimal.csv ,z/ Returning status: %s =======================z( About to return...Result attributes: %dz, ===========================================):objectr rbeta_minbeta_maxbeta_tol Lagrange_gapmin_prob max_intervalsmax_timeindicator_var_namelambda_parm_name stage_num csvPrefix verbositytimeprintrgetattrrph_scenario_tree_stages _tree_nodes _instances _scenarios_namerZ _instanceZ is_minimizinglenlagrUtilZ Set_ParmValueZ_preprocess_scenario_instancesZFixAllIndicatorVariables _probabilityrrappendsortoperator itemgetter ScenarioListopenwrite solve_ph_codeCompute_ExpectationforVariableZFreeAllIndicatorVariableslbz selections PrintPRpointsrangeroundabsInsertvalueinspect getmembers)=argsrResultr1blanksZbetaMinZbetaMaxZbetaTolZgapTolZminProbZ maxIntervalsZmaxTime IndVarNameZmultName CCStageNumr,r-ZHGdebugZoptTolZ STARTTIMErootnodeZReferenceInstanceZsenseZscenario_countr? lambdavalZsumprobZminprobZmaxprobscenarioinstancesnameZsprobZoutNameoutFileZ addstatusSolStatZzLZbLZzUZbUZ NumIntervalsZ lapsedTimeZPRpoint LagrangianbzZ oldLagrangianZrefValueZalternativeOptZ newPRpointZ SelectionsidbZdzrDrEcharZ thisSelectionslistattr)full_scenario_treeoptionsr r LagrangeParametric-s8             2                          (       (   (   "0   "          B                 6       zrun..LagrangeParametricFzlagrange [options]z --beta-minz:The min beta level for the chance constraint. Default is 0storer"g)helpactiondesttypedefaultz --beta-maxz7The beta level for the chance constraint. Default is 1.r#g?z --beta-tolz7Tolerance for testing equality to beta. Default is 1e-5r$gh㈵>z--Lagrange-gapzTThe (relative) Lagrangian gap acceptable for the chance constraint. Default is 10^-4r%g-C6?)rfrgrirhrjz --min-probz6Tolerance for testing probability > 0. Default is 1e-9r&z--max-intervalszzThe max number of intervals generated; if causes termination, non-fathomed intervals have multiplier=None. Default = 100.r'dz --max-timez(Maximum time (seconds). Default is 3600.r(iz--lambda-parm-namezDThe name of the lambda parameter in the model. Default is lambdaMultr*Z lambdaMultz--indicator-var-namezRThe name of the indicator variable for the chance constraint. The default is deltar)deltaz --stage-numzNThe stage number of the CC indicator variable (number, not name). Default is 2r+rz --csvPrefixz Output file name. Default is ''r,rz --verbosityzXverbosity=0 is no extra output, =1 is medium, =2 is debug, =3 super-debug. Default is 1.r-rz--solve-with-phz?Perform solves via PH rather than an EF solve. Default is False store_trueZ solve_with_ph)rfrgrhrj)rNz)Loading reference model and scenario treezC***ERROR: Failed to initialize the model and/or scenario tree data.z, ===========================================z! returned from LagrangeParametricz6 From run, Result should have status and ph objects...z status = zstatus not definedz PRoptimal.csvrz, rzResult.lbz not defined)rzScenarioList.csvzResult.ScenarioList not defined)N)#r/rZ pyomo.environr add_argumentfloatint parse_argsZ _ef_optionsZimport_argparse SystemExitcoder-rZmodel_directoryZinstance_directoryr RuntimeErrorZ_model_filenameZ_scenario_tree_filenamecloserLrMrsysexitrDrFr@r,rAr?r<r=r>)rNZpyomordZAllInOneZconf_options_parserZ_excZscenario_instance_factoryrOrarrDrXr?rUr )rbrcr run&s)       : 6rxc Csld}d}|jj|d}xJ|jD]@}x:|jD]0}|j|j}||j7}||jt||j7}q,Wq W||S)Ngr) r2r3r4r6r5r7r:r0rK) r1rQrRZSumSoFarZnode_probabilityZstageZ tree_noderUrVr r r rCys    rCcCsXg}xt|D]}|||qW||x$t|t|D]}|||q>W|S)N)rGr;r8)ZnewpointlocationListZnewListr]r r r rJs rJcCs4x.|D]&}t|ddkrq|d|krdSqWdS)NrT)r8)rzmemberr]r r r ismembers   r|cCst|}|d}|dkr4||d}|d|}nd}t|dkrL||St|dt|dd|t|dt||SdS)N.rrrrr )rfindr8 putcommas)numZsnumdecimalfracr r r rs   rc Cstdt||\}}|j}xB|D]:}|d}|j|}t||jrLd} nd} t||jj} q$Wt |||j } || | } ||fS)Nz,HGdebugSolve prints attributes after solvingrfixedfree) r/r9rBr)r5r0rr*rKrCr+) r1rcr?rYrZrQrUrWrVstatrTr[r\r r r HGdebugSolves    rcCst|dkrtdntdt|d}tdx|D]}tt|dd}tt|d}t|d}|dd t||}t|}|dd t||}t|}|dd t||}t|d |d |q8Wtd dS) Nrz No PR pointsz %d PR points:z z9 lambda beta-probability min costrrr zB==================================================================)r8r/rorHrr)ZPRlistrProwr[r\slZsbszr r r rFs"    rF__main__)N)rvr.r r=rLZ(pyomo.pysp.scenariotree.instance_factoryrZpyomo.pysp.phinitrrrZpyomo.pysp.phutilsrZ pyomo.pysprr9r rxrCrJr|rrrFrr r r r s,    W