B @`Uk@sddlZddlZddlZddlZddlZddlmZddlmZddl m Z m Z m Z ddl mZddlmZddZdd d Zd d Zd dZddZddZddZddZddZedkredS)N)SolverManagerFactory)ScenarioTreeInstanceFactory)construct_ph_options_parserGenerateScenarioTreeForPH PHFromScratch)find_active_objective) lagrangeutilscCsdttjS)Nz datetime = )strdatetimenowr r =/tmp/pip-unpacked-wheel-bi3529v6/pyomo/pysp/lagrangeMorePR.pydatetime_string!src sJddl}ddl}dNfdd }d}y^td}|jdddd tdd |jd d dd tdd |jddddtdd |jddddtdd |jdddtddd|jddddtdd |jdd dd!td"d |jd#d$dd%td&d |jd'd(dd)td*d |jd+d,dd-td.d |jd/d0dd1td2d |jd3d4dd5td6d |jd7d8dd9tdd |jd:d;d|j|d?|j_j Wn&t k r}z|j Sd}~XYnXj d@krt dAtjj}t|}tj}|dkrtdBjdCt||jjjjjrtdDzZ|dks0|dkr8tdE|j_|j_t|jdFj } j d@krlt dG|} Wd|!Xt dHt t| j"y0t dIt tt#| j$t dJt#| j%Wnt dKt&'YnXt| j%dkrFt()| j$} x| j%D]} | *| qWt dL| j+t,-d6dMt tt#| dS)ONrc1 sD tdtd}Gdddt}|}j}j}j}j}j}j} j } j } j } dt|_ t } t}|jjdjd}t|jjdjddrtd ntd g}t| d d <}x4|D](}|d }||dt|dgqWWdQRXtt|d| d }| dkr6t||j d||_ g}t| dd D}x<|D]0}|d }|dt|dt|dgqdWWdQRXtt|d| d}| dkrt||j d||_ |jtddd|dd<x`t dt|D]N}||d||dd}||d||dd}||||d<q W| dkrnt!|||_"d}t#$|j||%t| dd }g}x|D]x}t|dkrP|d }t|}t||d}||dd|d||d<| dkrtt|||qWWdQRX||_&tt|d| d}|j d||_ t|t|kr| dkrt|n8|d}t||j d||_ tt|t||S| dkrt'|}ng}t| d R}| dkrtd| x4|D](}t|dkrPt|} || qWWdQRX| dkr^tdtt|d| dkrttt|t(||}| dkrtdx|D]}!tt|!qWtt|d}| dkrt||j d||_ t | }"dt|"}| dkr t||j d||_ | dkr,tdg|_)xJ|D]@}!t | }"|"| krd t|"d!t| }| dkrt||j d||_ P|!d}#|!d}$||#d}%||#dd}&| dkrtd"t|$d#t|#d$t|#dd%|$|&ks |$|%krhd&t|$d't|&d(t|%d)}t|tt|tt||j d||_ |S| dkrtd*t|#d+t|%d,tt||#d-tt||#x.|D]&\}'}(|j*|'})t#+||)|dqWx.||#D]"}'|j*|'})t#+||)|dqW|%}*x|D]\}'}(|j*|'})|*|(|$krFq |j,|'}+t-|+|j.dkrfq |*|(}*t#+||)|d| dkr td.|'d/t|(d0t|*q W| dkrtd1t|*d2t|$d3t|&d)|*|&|ks|*|%|kr| dkr:td4q:| dkrd},x|D]})|)d}'|)d}(|j,|'}+td5|'d6tt-|+|j.d7tt-|+|j/d8t|(t-|+|j.dkr|,|(},t-|+|j.}q.Wtd9|,| dkrtd:ttd;|t#0|\}-}.t1|||}$| dk rTtdt|$td?t|.td@|j)d|$|.g| dkr:t!|j)q:Wt| dAdB:}/x2|j)D](}0|/2t|0dd t|0d qWWdQRXtt|j)dC| dA}| dk rt||j d||_ dDt3t | }| dk r0t||j d||_ |S)ENzlagrangeMorePR begins %sz c@s eZdZdS)z+run..LagrangeMorePR..ObjectN)__name__ __module__ __qualname__r r r r Object/srz starting rT)Z safety_checksz&We are solving a MINIMIZATION problem.z&We are solving a MAXIMIZATION problem.zScenarioList.csvr,z scenarios read from file:  z PRoptimal.csvz PR points read from file: z!PRoptimal.csv (envelope function))keygzOptimalSelections.csvz$ Optimal selections read from file: z9 ** Number of selections not equal to number of PR pointszreading from probList = z z probabilitieszPRlist:z$Initialize complete...lapsed time = zC looping over Intervals to generate PR points by flipping heuristicz** lapsed time = z > max time = ztarget probability = z < bU = PRoptimal[z][1] and > bL = PRoptimal[z][1]z** probability = z, not in gap interval: (z, )zi = z : Starting with bU = z having z selections:z flipped z with prob = z ...bNew = z flipped selections reach z >= target = z (bL = z2 Not generating PR point...flipping from bU failedzfix z = z is z probability = z total probability = %fzsolve begins %sz - lambda = %fz solve ends %sz - SolStat = %sz - b = %sz - z = %sz(adding to more PR points)z PRmore.csvwz PR points written to file: zlapsed time = )4printrobjectbeta_tolindicator_var_namelambda_parm_name stage_num max_numbermax_time csvPrefix probFileName verbositystatustimer_scenario_tree_stages _tree_nodesr _scenariosZ _instanceZ is_minimizingopen readlinessplitappendfloatr lensortoperator itemgetterrange PrintPRpoints PRoptimallagrUtilZ Set_ParmValueZ_preprocess_scenario_instancesOptimalSelections FindPRpoints GetPointsmorePRZ get_scenarioZFixIndicatorVariableOneScenario _instancesgetattrvalueZfixedZ solve_ph_codeCompute_ExpectationforVariablewrite putcommas)1argsblanksrResultZbetaTol IndVarNameZmultName CCStageNumZ MaxMorePRZMaxTimer#r$r%Z STARTTIMEphrootnodeZ ScenarioListZ inputFilelineLZ addstatusr7ZbzSpZdzdbZ lambdavalr9Z selectionsZLsPRlistprobListprobintervalZ lapsedTimeibZbUZbLZsnameZsprobscenarioZbNewinstanceZ totalprobZSolStatzZoutFileZpoint)optionsr r LagrangeMorePR,s   (  0                                .(   2       * ,    >       2  zrun..LagrangeMorePRFzlagrange [options]z --beta-minz=The min beta level for the chance constraint. Default is NonestoreZbeta_min)helpactiondesttypedefaultz --beta-maxz9The beta level for the chance constraint. Default is NoneZbeta_maxz --min-probz6Tolerance for testing probability > 0. Default is 1e-5Zmin_probgh㈵>z --beta-tolz8Tolerance for testing equality to beta. Default is 10^-2rg{Gz?z--Lagrange-gapzUThe (relative) Lagrangian gap acceptable for the chance constraint. Default is 10^-4.Z Lagrange_gapg-C6?)rZr[r]r\r^z --max-numberz*The max number of PR points. Default = 10.r! z --max-timez(Maximum time (seconds). Default is 3600.r"iz --csvPrefixz&Input file name prefix. Default is ''r#z--lambda-parm-namezDThe name of the lambda parameter in the model. Default is lambdaMultrZ lambdaMultz--indicator-var-namezRThe name of the indicator variable for the chance constraint. The default is deltardeltaz --stage-numzNThe stage number of the CC indicator variable (number, not name). Default is 2r rz --verbosityzXverbosity=0 is no extra output, =1 is medium, =2 is debug, =3 super-debug. Default is 1.r%rz --prob-filez#file name specifiying probabilitiesr$z--solve-with-phz?Perform solves via PH rather than an EF solve. Default is False store_trueZ solve_with_ph)rZr[r\r^)rCTz)Loading reference model and scenario treez(Failed to create solver manager of type=z$ specified in call to PH constructorz,PHPyro can not be used as the solver managerzC***ERROR: Failed to initialize the model and/or scenario tree data.zKLoading scenario instances and initializing scenario tree for full problem.z3 ==================== returned from LagrangeMorePRz Envelope:z Added:zfrom run: PrintPRpoints failedz%Combined table of PR points (sorted):)r)N).Z pyomo.environZ%pyomo.solvers.plugins.smanager.phpyror add_argumentr0intr parse_argsZ _ef_optionsZimport_argparse SystemExitcodeverboserrZmodel_directoryZinstance_directoryrrZsolver_manager_type ValueError isinstanceZsolversZpluginsZsmanagerZphpyroZSolverManager_PHPyro RuntimeErrorZ_model_filenameZ_scenario_tree_filenamer1r)r*closer&r6r7r<sysexitcopydeepcopyr/r2r3r4) rCZpyomorXZAllInOneZconf_options_parserZ_excZscenario_instance_factoryZfull_scenario_treeZsolver_managerZscenario_countrEZPRpointsZlbzr )rWr run%s         rrc Cs|jdkrtd|jg}|jdkr8tdd|jxtdt|D]|}||d||dd}|d|jkrxqH||d||ddd}||||g|jdkrHtd|||fqHW|jt ddd|jdkrtd t|x|D]}td t |qWxt||jkr(|d }|d}|d|jkrd t |d t d|j}t||jdkrtdP|d }|d}|jdkrtdt ||d|d d<||d|d d<t ||d||dgd|}|jt ddd|jdkrtdt|qW|jdkrftdt|x|D]}tdt |qLWg}x$|D]}||d |dgqpW|jdkrtdx|D]} tdt | qW|S)Nrz&entered FindPRpoints seeking %d pointsz&Collecting intervals having width > %frg@z'Interval: %d width = %f midpoint = %fT)rreversez %d Intervals:z %srzgreatest width = z < 2*beta_tol = z ** break out of whilezsplitting interval: %sg@zNumber of intervals = %dz! --- end while with %d intervals:z %sz returning PRlist:z %s) r%rr!rr5r1r/r2r3r4r Insert) rWr7Z IntervalsrRwidthZmidpointrQr&rNrLr r r r:sb              r:cCsNg}xD|D]<}x(tdt|D]}||d|krPqW|||gq W|S)Nr)r5r1r/)rWr7rOrNrPrRr r r r;&s r;c Csld}d}|jj|d}xJ|jD]@}x:|jD]0}|j|j}||j7}||jt||j7}q,Wq W||S)Ngr) r(r)r*r+r=_nameZ _probabilityr>r?) rHrFrGZSumSoFarZnode_probabilityZstageZ tree_noderTrUr r r r@1s    r@cCsXg}xt|D]}|||qW||x$t|t|D]}|||q>W|S)N)r5r/r1)ZnewpointlocationListZnewListrRr r r rtBs rtcCs4x.|D]&}t|ddkrq|d|krdSqWdS)NrT)r1)rxmemberrRr r r ismemberKs   rzcCst|}|d}|dkr4||d}|d|}nd}t|dkrL||St|dt|dd|t|dt||SdS)N.rr`r)r findr1rB)numZsnumdecimalfracr r r rBSs   rBcCst|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 z: lambda beta-probability min cost rr|r zB==================================================================)r1rr0roundr rB)rNrDrowrSrVslZsbszr r r r6_s"    r6__main__)N)rnr'r r3rpZ pyomo.optrZ(pyomo.pysp.scenariotree.instance_factoryrZpyomo.pysp.phinitrrrZpyomo.pysp.phutilsrZ pyomo.pysprr8rrrr:r;r@rtrzrBr6rr r r r s.     H<