'''
    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)
Esempio n. 2
0
    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