Exemple #1
0
    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
Exemple #2
0
    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