def xhatbase_prep(self): verbose = self.opt.options['verbose'] if "bundles_per_rank" in self.opt.options\ and self.opt.options["bundles_per_rank"] != 0: raise RuntimeError("xhat spokes cannot have bundles (yet)") # Start code to support running trace. TBD: factor this up? if self.cylinder_rank == 0 and \ 'suffle_running_trace_prefix' in self.opt.options and \ self.opt.options['shuffle_running_trace_prefix'] is not None: running_trace_prefix =\ self.opt.options['shuffle_running_trace_prefix'] filen = running_trace_prefix + self.__class__.__name__ + '.csv' if os.path.exists(filen): raise RuntimeError( f"running trace file {filen} already exists!") with open(filen, 'w') as f: f.write("time,scen,value\n") self.running_trace_filen = filen else: self.running_trace_filen = None # end code to support running trace if not isinstance(self.opt, Xhat_Eval): raise RuntimeError( "XhatShuffleInnerBound must be used with Xhat_Eval.") xhatter = XhatBase(self.opt) ### begin iter0 stuff xhatter.pre_iter0() self.opt._save_original_nonants() teeme = False if "tee-rank0-solves" in self.opt.options: teeme = self.opt.options['tee-rank0-solves'] self.opt.solve_loop(solver_options=self.opt.current_solver_options, dtiming=False, gripe=True, tee=teeme, verbose=verbose) self.opt._update_E1() # Apologies for doing this after the solves... if abs(1 - self.opt.E1) > self.opt.E1_tolerance: raise ValueError(f"Total probability of scenarios was {self.opt.E1}"+\ f"E1_tolerance = {self.opt.E1_tolerance}") infeasP = self.opt.infeas_prob() if infeasP != 0.: raise ValueError(f"Infeasibility detected; E_infeas={infeasP}") ### end iter0 stuff xhatter.post_iter0() self.opt._save_nonants() # make the cache ## for later self.verbose = self.opt.options["verbose"] # typing aid self.solver_options = self.opt.options["xhat_looper_options"][ "xhat_solver_options"] self.xhatter = xhatter ## option drive this? (could be dangerous) self.random_seed = 42 # Have a separate stream for shuffling self.random_stream = random.Random()
def xhatbase_prep(self): if self.opt.multistage: raise RuntimeError('The XhatShuffleInnerBound only supports ' 'two-stage models at this time.') verbose = self.opt.options['verbose'] if "bundles_per_rank" in self.opt.options\ and self.opt.options["bundles_per_rank"] != 0: raise RuntimeError("xhat spokes cannot have bundles (yet)") if not isinstance(self.opt, XhatTryer): raise RuntimeError( "XhatShuffleInnerBound must be used with XhatTryer.") xhatter = XhatBase(self.opt) self.opt.PH_Prep(attach_duals=False, attach_prox=False) logger.debug( f" xhatshuffle spoke back from PH_Prep rank {self.rank_global}") self.opt.subproblem_creation(verbose) ### begin iter0 stuff xhatter.pre_iter0() self.opt._save_original_nonants() self.opt._create_solvers() teeme = False if "tee-rank0-solves" in self.opt.options: teeme = self.opt.options['tee-rank0-solves'] self.opt.solve_loop(solver_options=self.opt.current_solver_options, dtiming=False, gripe=True, tee=teeme, verbose=verbose) self.opt._update_E1() # Apologies for doing this after the solves... if abs(1 - self.opt.E1) > self.opt.E1_tolerance: if self.rank_global == self.opt.rank0: print("ERROR") print("Total probability of scenarios was ", self.opt.E1) print("E1_tolerance = ", self.opt.E1_tolerance) quit() feasP = self.opt.feas_prob() if feasP != self.opt.E1: if self.rank_global == self.opt.rank0: print("ERROR") print("Infeasibility detected; E_feas, E1=", feasP, self.opt.E1) quit() ### end iter0 stuff xhatter.post_iter0() self.opt._save_nonants() # make the cache ## for later self.verbose = self.opt.options["verbose"] # typing aid self.solver_options = self.opt.options["xhat_looper_options"][ "xhat_solver_options"] self.is_minimizing = self.opt.is_minimizing self.xhatter = xhatter ## option drive this? (could be dangerous) self.random_seed = 42 # Have a separate stream for shuffling self.random_stream = random.Random()
def xhatbase_prep(self): if self.opt.multistage: raise RuntimeError('The XhatShuffleInnerBound only supports ' 'two-stage models at this time.') verbose = self.opt.options['verbose'] if "bundles_per_rank" in self.opt.options\ and self.opt.options["bundles_per_rank"] != 0: raise RuntimeError("xhat spokes cannot have bundles (yet)") # Start code to support running trace. TBD: factor this up? if self.cylinder_rank == 0 and \ 'suffle_running_trace_prefix' in self.opt.options and \ self.opt.options['shuffle_running_trace_prefix'] is not None: running_trace_prefix =\ self.opt.options['shuffle_running_trace_prefix'] filen = running_trace_prefix+self.__class__.__name__+'.csv' if os.path.exists(filen): raise RuntimeError(f"running trace file {filen} already exists!") with open(filen, 'w') as f: f.write("time,scen,value\n") self.running_trace_filen = filen else: self.running_trace_filen = None # end code to support running trace if not isinstance(self.opt, XhatTryer): raise RuntimeError("XhatShuffleInnerBound must be used with XhatTryer.") xhatter = XhatBase(self.opt) self.opt.PH_Prep(attach_duals=False, attach_prox=False) logger.debug(f" xhatshuffle spoke back from PH_Prep rank {self.global_rank}") self.opt.subproblem_creation(verbose) ### begin iter0 stuff xhatter.pre_iter0() self.opt._save_original_nonants() self.opt._create_solvers() teeme = False if "tee-rank0-solves" in self.opt.options: teeme = self.opt.options['tee-rank0-solves'] self.opt.solve_loop( solver_options=self.opt.current_solver_options, dtiming=False, gripe=True, tee=teeme, verbose=verbose ) self.opt._update_E1() # Apologies for doing this after the solves... if abs(1 - self.opt.E1) > self.opt.E1_tolerance: if self.opt.cylinder_rank == 0: print("ERROR") print("Total probability of scenarios was ", self.opt.E1) print("E1_tolerance = ", self.opt.E1_tolerance) quit() infeasP = self.opt.infeas_prob() if infeasP != 0.: if self.opt.cylinder_rank == 0: print("ERROR") print("Infeasibility detected; E_infeas, E1=", infeasP, self.opt.E1) quit() ### end iter0 stuff xhatter.post_iter0() self.opt._save_nonants() # make the cache ## for later self.verbose = self.opt.options["verbose"] # typing aid self.solver_options = self.opt.options["xhat_looper_options"]["xhat_solver_options"] self.is_minimizing = self.opt.is_minimizing self.xhatter = xhatter self.best_nonants = None self.best_scenario = None ## option drive this? (could be dangerous) self.random_seed = 42 # Have a separate stream for shuffling self.random_stream = random.Random()