def solve(self,net,forecast): # Local variables params = self.parameters # Parameters quiet = params['quiet'] # Problem self.problem = self.create_problem(net,forecast,params) if not quiet: self.problem.show() # Prediction Er_list = self.problem.predict_W(self.problem.get_num_stages()-1) assert(len(Er_list) == self.problem.T) # Solve certainty equivalent x,Q,gQ,results = self.problem.solve_stages(0,Er_list,self.problem.x_prev,quiet=quiet) # Slow generator powers xfull = results['x'] assert(xfull.size == self.problem.T*self.problem.num_x) p_list = [] offset = 0 for t in range(self.problem.T): p_list.append(xfull[offset:offset+self.problem.num_p]) offset += self.problem.num_x assert(len(p_list) == self.problem.T) # Construct policy def apply(cls,t,x_prev,Wt): assert(0 <= t < cls.problem.T) assert(len(Wt) == t+1) p = cls.data[t] p_prev = x_prev[:cls.problem.num_p] q,w,s,z = cls.problem.solve_stage_adjustments(t,Wt[-1],p,quiet=True) x = cls.problem.construct_x(p=p,q=q,w=w,s=s,y=p-p_prev,z=z) # Check feasibility if not cls.problem.is_point_feasible(t,x,x_prev,Wt[-1]): raise ValueError('point not feasible') # Return return x policy = StochProblemMS_Policy(self.problem,data=p_list,name='Two-Stage Certainty-Equivalent') policy.apply = MethodType(apply,policy) # Return return policy
def solve(self,net,forecast): # Local variables params = self.parameters # Parameters quiet = params['quiet'] # Problem self.problem = self.create_problem(net,forecast,params) if not quiet: self.problem.show() # Construct policy def apply(cls,t,x_prev,Wt): T = cls.problem.T assert(0 <= t < T) assert(len(Wt) == t+1) w_list = Wt[-1:] + cls.problem.predict_W(T-1,t+1,Wt) x,Q,gQ,results = cls.problem.solve_stages(t, w_list, x_prev, quiet=True) # Check feasibility if not cls.problem.is_point_feasible(t,x,x_prev,Wt[-1]): raise ValueError('infeasible point') # Return return x policy = StochProblemMS_Policy(self.problem, data=None, name='Certainty-Equivalent') policy.apply = MethodType(apply,policy) # Return return policy