예제 #1
0
AssetMgt.add_Markovian_uncertainty(g)
for t in range(T):
    m = AssetMgt[t]
    now, past = m.addStateVars(2, lb=0, obj=0)
    if t == 0:
        m.addConstr(now[0] + now[1] == 55)
    if t in [1, 2]:
        m.addConstr(past[0] + past[1] == now[0] + now[1],
                    uncertainty_dependent={
                        past[0]: 0,
                        past[1]: 1
                    })
    if t == 3:
        y = m.addVar(obj=1)
        w = m.addVar(obj=-4)
        m.addConstr(past[0] + past[1] - y + w == 80,
                    uncertainty_dependent={
                        past[0]: 0,
                        past[1]: 1
                    })
AssetMgt.discretize(
    n_Markov_states=25,
    n_sample_paths=10000,
)
# Extensive(AssetMgt).solve()
SDDP(AssetMgt).solve(max_iterations=400)
result = Evaluation(AssetMgt)
result.run(n_simulations=1000)
resultTrue = EvaluationTrue(AssetMgt)
resultTrue.run(n_simulations=1000)
예제 #2
0
    X_now, X_past = m.addStateVars(I, name='accumulated purchase')
    if t == 0:
        m.addConstrs(X_now[j] == 0 for j in range(J))
    else:
        # u_jt #
        u = m.addVars(J, name='shortage', uncertainty=beta_generator)
        # v_ijkt #
        v = m.addVars(I, J, K, name='allocation')
        # w_jt #
        w = m.addVars(J, name='production')
        # x_it #
        x = m.addVars(I, name='purchase', uncertainty=alpha_generator)
        ## accumulated number of purchased tools updated ##
        m.addConstrs(X_now[i] == X_past[i] + x[i] for i in range(I))
        # time allocation constraint
        m.addConstrs(
            gurobipy.quicksum(
                gurobipy.quicksum(a[i][j][k] * v[(i, j, k)] for k in range(K))
                for j in range(J)) <= c[i] * X_now[i] for i in range(I))
        # production allocation constraint
        m.addConstrs(
            gurobipy.quicksum(v[(i, j, k)] for i in range(I)) >= w[j]
            for j in range(J) for k in range(K))
        # demand constraint
        m.addConstrs((w[j] + u[j] >= 0 for j in range(J)),
                     uncertainty=d_generator)
semiconductor.discretize(n_samples=20)
SDDP(semiconductor).solve(max_iterations=10)
result = EvaluationTrue(semiconductor)
result.run(n_simulations=1000)
예제 #3
0
        gurobipy.quicksum(exchange[(j, 4)] for j in range(5)) -
        gurobipy.quicksum(exchange[(4, j)] for j in range(5)) == 0)
    m.addConstrs(stored_now[i] + spill[i] + hydro[i] -
                 stored_past[i] == inflow_now[i] for i in range(4))
    if t == 0:
        m.addConstrs(stored_past[i] == stored_initial[i] for i in range(4))
        m.addConstrs(inflow_now[i] == inflow_initial[i] for i in range(4))
    else:
        TS = m.addConstrs(inflow_now[i] + inflow_past[i] == 0
                          for i in range(4))
        m.add_continuous_uncertainty(
            uncertainty=sampler(t - 1),
            locations=([(TS[i], inflow_past[i])
                        for i in range(4)] + [TS[i] for i in range(4)]),
        )
HydroThermal.discretize(n_samples=n_samples, random_state=seed)
HT_sddp = SDDP(HydroThermal)
HT_sddp.solve(
    n_processes=6,
    n_steps=6,
    max_iterations=n_iterations,
)
result = Evaluation(HydroThermal)
result.run(random_state=666, n_simulations=n_simulations)
resultTrue = EvaluationTrue(HydroThermal)
resultTrue.run(random_state=666, n_simulations=n_simulations)
model = 'TS' + str(n_samples)
if model == 'TS100':
    fig = HT_sddp.plot_bounds(window=1, smooth=1)
    fig.tight_layout()
    fig.savefig("./result/{}_bounds.png".format(model), dpi=1200)
예제 #4
0
         v = m.addVar(obj=1, lb=-gurobipy.GRB.INFINITY, name='wealth')
         capm = m.addVars(N, lb = -gurobipy.GRB.INFINITY, name='capm')
         idio = m.addVars(N, name='idio')
         m.addConstr(v == gurobipy.quicksum(now[j] for j in range(N+1)))
         m.addConstrs(
             now[j] == capm[j] + idio[j]
             for j in range(N)
         )
         for j in range(N):
             m.addConstr(past[j] == capm[j], uncertainty_dependent={past[j]:j})
             m.addConstr(past[j] == idio[j], uncertainty={past[j]:f(alpha[j],sigma[j])})
         m.addConstr(now[N] == (1+rf) * past[N])
 AssetMgt.discretize(
     n_samples=100,
     method='input',
     Markov_states=Markov_states,
     transition_matrix=transition_matrix,
     random_state=888,
 )
 AssetMgt.set_AVaR(lambda_=lambda_, alpha_=0.25)
 AssetMgt_SDDP = SDDP(AssetMgt)
 AssetMgt_SDDP.solve(max_iterations=50, n_steps=3, n_processes=3)
 evaluation = Evaluation(AssetMgt)
 evaluation.run(n_simulations=1000, random_state=666)
 evaluationTrue = EvaluationTrue(AssetMgt)
 evaluationTrue.run(n_simulations=1000, random_state=666)
 result = {
     'mean':numpy.mean(evaluation.pv)-100,
     'std':numpy.std(evaluation.pv),
     'VAR': numpy.quantile(evaluation.pv,0.05)-100,
     'skewness': stats.skew(evaluation.pv),
예제 #5
0
                                      for j in range(5)) == demand.iloc[t %
                                                                        12][i])
    m.addConstr(
        gurobipy.quicksum(exchange[(j, 4)] for j in range(5)) -
        gurobipy.quicksum(exchange[(4, j)] for j in range(5)) == 0)
    m.addConstrs(
        (stored_now[i] + spill[i] + hydro[i] - stored_past[i] == 0
         for i in range(4)),
        uncertainty_dependent=[0, 1, 2, 3],
    )
    if t == 0:
        m.addConstrs(stored_past[i] == stored_initial[i] for i in range(4))
start = time.time()
HydroThermal.discretize(
    method=method,
    n_Markov_states=n_Markov_states,
    n_sample_paths=n_sample_paths,
)
time_MCA = time.time() - start
HT_sddp = SDDP(HydroThermal)
HT_sddp.solve(
    n_processes=6,
    n_steps=6,
    max_iterations=n_iterations,
)
result = Evaluation(HydroThermal)
result.run(random_state=666, n_simulations=3000)
resultTrue = EvaluationTrue(HydroThermal)
resultTrue.run(random_state=666, n_simulations=3000)
model = method + str(n_Markov_states)
if model == 'SA100':
예제 #6
0
                                      for j in range(5)) == demand.iloc[t %
                                                                        12][i])
    m.addConstr(
        gurobipy.quicksum(exchange[(j, 4)] for j in range(5)) -
        gurobipy.quicksum(exchange[(4, j)] for j in range(5)) == 0)
    m.addConstrs(
        (stored_now[i] + spill[i] + hydro[i] - stored_past[i] == 0
         for i in range(4)),
        uncertainty_dependent=[0, 1, 2, 3],
    )
    if t == 0:
        m.addConstrs(stored_past[i] == stored_initial[i] for i in range(4))
start = time.time()
HydroThermal.discretize(
    method='input',
    Markov_states=Markov_states,
    transition_matrix=transition_matrix,
)
time_MCA = time.time() - start
HT_sddp = SDDP(HydroThermal)
HT_sddp.solve(
    n_processes=6,
    n_steps=6,
    max_iterations=n_iterations,
)
result = Evaluation(HydroThermal)
result.run(random_state=666, n_simulations=n_simulations)
resultTrue = EvaluationTrue(HydroThermal)
resultTrue.run(random_state=666, n_simulations=n_simulations)
if model == 'SA100':
    fig = HT_sddp.plot_bounds(window=1, smooth=1)