''' P_prod = P_prod_data[k] P_grid = P_prod - P_sto P_grid_over = np.where(P_grid > 0.4, P_grid - 0.4, 0) P_grid_neg = np.where(P_grid < 0, P_grid, 0) penal = P_grid_over**2 + P_grid_neg**2 + 0 * P_sto**2 return penal ### Create the system description: sto_sys = SysDescription((1, 1, 0), name='Deterministic Storage for PV', stationnary=False) sto_sys.dyn = dyn_sto sto_sys.control_box = admissible_controls sto_sys.cost = cost_model sto_sys.print_summary() ### Create the DP solver: dpsolv = DPSolver(sto_sys) # discretize the state space N_E = 50 E_grid = dpsolv.discretize_state(0, E_rated, N_E)[0] dpsolv.control_steps = (.001, ) dpsolv.print_summary() J_fin = np.zeros(N_E)
P_grid = P_prod - P_sto penal = (P_grid/power_max)**2 ''' P_prod = searev_power(Speed) P_grid = P_prod - P_sto penal = (P_grid / power_max)**2 return penal cost_label = 'quadratic cost' ### Create the system description: searev_sys = SysDescription((3, 1, 1), name='Searev + Storage') searev_sys.dyn = dyn_searev_sto searev_sys.control_box = admissible_controls searev_sys.cost = cost_model searev_sys.perturb_laws = [innov_law] #searev_sys.print_summary() ### Create the DP solver: dpsolv = DPSolver(searev_sys) # discretize the state space N_E = 31 N_S = 61 N_A = 61 S_min, S_max = -4 * .254, 4 * 0.254 A_min, A_max = -4 * .227, 4 * .227 x_grid = dpsolv.discretize_state(0, E_rated, N_E, S_min, S_max, N_S, A_min, A_max, N_A) E_grid, S_grid, A_grid = x_grid
def op_cost(x, u, w): 'operational cost of the shop' holding = x * h shortage = -x * p order = u * c return np.where(x > 0, holding, shortage) + order # Test of the cost function op_cost(1, 1, 0) # Vectorized cost computation capability (required): op_cost(np.array([-2, -1, 0, 1, 2]), 1, 0) invsys.cost = op_cost #invsys.print_summary() print('Invertory Control with (h={:.1f}, p={:.1f}, c={:.1f})'.format(h, p, c)) ### DP Solver ################################################################## from stodynprog import DPSolver dpsolv = DPSolver(invsys) # discretize the state space xmin, xmax = (-3, 6) N_x = xmax - xmin + 1 # number of states dpsolv.discretize_state(xmin, xmax, N_x) # discretize the perturbation
### Cost description g = r(x) + c.u (h,p,c) = 0.5, 3, 1 def op_cost(x,u,w): 'operational cost of the shop' holding = x*h shortage = -x*p order = u*c return np.where(x>0, holding, shortage) + order # Test of the cost function op_cost(1,1,0) # Vectorized cost computation capability (required): op_cost(np.array([-2,-1,0,1,2]),1,0) invsys.cost = op_cost #invsys.print_summary() print('Invertory Control with (h={:.1f}, p={:.1f}, c={:.1f})'.format(h,p,c)) ### DP Solver ################################################################## from stodynprog import DPSolver dpsolv = DPSolver(invsys) # discretize the state space xmin, xmax = (-3,6) N_x = xmax-xmin+1 # number of states dpsolv.discretize_state(xmin, xmax, N_x) # discretize the perturbation
def cost_model(k, E_sto, P_sto): '''penalty on the power that is not absorbed P_dev = P_req - P_sto penal = P_dev**2 ''' P_req = p['P_req_data'][k] P_dev = P_req - P_sto penal = P_dev**2 return penal ### Create the system description: sto_sys = SysDescription((1,1,0), name='Deterministic Storage', stationnary=False) sto_sys.dyn = dyn_sto sto_sys.control_box = admissible_controls sto_sys.cost = cost_model sto_sys.print_summary() ### Create the DP solver: dpsolv = DPSolver(sto_sys) # discretize the state space N_E = 100 E_grid = dpsolv.discretize_state(0, p['E_rated'], N_E)[0] dpsolv.control_steps=(.001,) dpsolv.print_summary() if __name__ == '__main__': ### Solve the problem:
P_grid = P_prod - P_sto penal = (P_grid/power_max)**2 """ P_prod = searev_power(Speed) P_grid = P_prod - P_sto penal = (P_grid / power_max) ** 2 return penal cost_label = "quadratic cost" ### Create the system description: searev_sys = SysDescription((3, 1, 1), name="Searev + Storage") searev_sys.dyn = dyn_searev_sto searev_sys.control_box = admissible_controls searev_sys.cost = cost_model searev_sys.perturb_laws = [innov_law] # searev_sys.print_summary() ### Create the DP solver: dpsolv = DPSolver(searev_sys) # discretize the state space N_E = 31 N_S = 61 N_A = 61 S_min, S_max = -4 * 0.254, 4 * 0.254 A_min, A_max = -4 * 0.227, 4 * 0.227 x_grid = dpsolv.discretize_state(0, E_rated, N_E, S_min, S_max, N_S, A_min, A_max, N_A) E_grid, S_grid, A_grid = x_grid # discretize the perturbation