test
This commit is contained in:
parent
25a5da0e00
commit
ceff6e0ffe
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
21
tools.py
21
tools.py
|
@ -46,39 +46,38 @@ def optimization_base_result(env, month, day, initial_soc):
|
||||||
|
|
||||||
m = gp.Model("UC")
|
m = gp.Model("UC")
|
||||||
|
|
||||||
# set system variables
|
# 设置系统变量
|
||||||
on_off = m.addVars(NUM_GEN, period, vtype=GRB.BINARY, name='on_off')
|
on_off = m.addVars(NUM_GEN, period, vtype=GRB.BINARY, name='on_off')
|
||||||
gen_output = m.addVars(NUM_GEN, period, vtype=GRB.CONTINUOUS, name='output')
|
gen_output = m.addVars(NUM_GEN, period, vtype=GRB.CONTINUOUS, name='output')
|
||||||
# set constrains for charge/discharge
|
pv = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0, name='pv')
|
||||||
|
# 设置充放电约束
|
||||||
battery_energy_change = m.addVars(period, vtype=GRB.CONTINUOUS, lb=env.battery.max_discharge,
|
battery_energy_change = m.addVars(period, vtype=GRB.CONTINUOUS, lb=env.battery.max_discharge,
|
||||||
ub=env.battery.max_charge, name='battery_action')
|
ub=env.battery.max_charge, name='battery_action')
|
||||||
# set constrains for exchange between external grid and distributed energy system
|
# 设置外部电网与能源系统交换约束
|
||||||
grid_energy_import = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0, ub=env.grid.exchange_ability, name='import')
|
grid_energy_import = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0, ub=env.grid.exchange_ability, name='import')
|
||||||
grid_energy_export = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0, ub=env.grid.exchange_ability, name='export')
|
grid_energy_export = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0, ub=env.grid.exchange_ability, name='export')
|
||||||
soc = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0.2, ub=0.8, name='SOC')
|
soc = m.addVars(period, vtype=GRB.CONTINUOUS, lb=0.2, ub=0.8, name='SOC')
|
||||||
|
|
||||||
# 1. add balance constrain
|
# 1. 添加平衡约束
|
||||||
m.addConstrs(((sum(gen_output[g, t] for g in range(NUM_GEN)) + pv[t] + wind[t] + grid_energy_import[t] >= load[t] +
|
m.addConstrs(((sum(gen_output[g, t] for g in range(NUM_GEN)) + pv[t] + wind[t] + grid_energy_import[t] >= load[t] +
|
||||||
battery_energy_change[t] + grid_energy_export[t]) for t in range(period)), name='powerbalance')
|
battery_energy_change[t] + grid_energy_export[t]) for t in range(period)), name='powerbalance')
|
||||||
# 2. add constrain for pmax pmin
|
# 2. 添加发电机最大/最小功率约束
|
||||||
m.addConstrs((gen_output[g, t] <= on_off[g, t] * p_max[g] for g in range(NUM_GEN) for t in range(period)),
|
m.addConstrs((gen_output[g, t] <= on_off[g, t] * p_max[g] for g in range(NUM_GEN) for t in range(period)),
|
||||||
'gen_output_max')
|
'gen_output_max')
|
||||||
m.addConstrs((gen_output[g, t] >= on_off[g, t] * p_min[g] for g in range(NUM_GEN) for t in range(period)),
|
m.addConstrs((gen_output[g, t] >= on_off[g, t] * p_min[g] for g in range(NUM_GEN) for t in range(period)),
|
||||||
'gen_output_min')
|
'gen_output_min')
|
||||||
# 3. add constrain for ramping up ramping down
|
# 3. 添加上升和下降约束
|
||||||
m.addConstrs((gen_output[g, t + 1] - gen_output[g, t] <= ramping_up[g] for g in range(NUM_GEN)
|
m.addConstrs((gen_output[g, t + 1] - gen_output[g, t] <= ramping_up[g] for g in range(NUM_GEN)
|
||||||
for t in range(period - 1)), 'ramping_up')
|
for t in range(period - 1)), 'ramping_up')
|
||||||
m.addConstrs((gen_output[g, t] - gen_output[g, t + 1] <= ramping_down[g] for g in range(NUM_GEN)
|
m.addConstrs((gen_output[g, t] - gen_output[g, t + 1] <= ramping_down[g] for g in range(NUM_GEN)
|
||||||
for t in range(period - 1)), 'ramping_down')
|
for t in range(period - 1)), 'ramping_down')
|
||||||
# 4. add constrains for SOC
|
# 4. 添加电池容量约束
|
||||||
m.addConstr(battery_capacity * soc[0] == battery_capacity * initial_soc +
|
m.addConstr(battery_capacity * soc[0] == battery_capacity * initial_soc +
|
||||||
(battery_energy_change[0] * battery_efficiency), name='soc0')
|
(battery_energy_change[0] * battery_efficiency), name='soc0')
|
||||||
m.addConstrs((battery_capacity * soc[t] == battery_capacity * soc[t - 1] +
|
m.addConstrs((battery_capacity * soc[t] == battery_capacity * soc[t - 1] +
|
||||||
(battery_energy_change[t] * battery_efficiency) for t in range(1, period)), name='soc update')
|
(battery_energy_change[t] * battery_efficiency) for t in range(1, period)), name='soc update')
|
||||||
# 5. add constrain for pv output
|
# 设置成本函数
|
||||||
m.addConstrs((pv[t] >= 0 for t in range(period)), name='pv_output_min')
|
# 发电机成本
|
||||||
# set cost function
|
|
||||||
# 1 cost of generator
|
|
||||||
cost_gen = gp.quicksum(
|
cost_gen = gp.quicksum(
|
||||||
(a_para[g] * gen_output[g, t] * gen_output[g, t] + b_para[g] * gen_output[g, t] + c_para[g] * on_off[g, t]) for
|
(a_para[g] * gen_output[g, t] * gen_output[g, t] + b_para[g] * gen_output[g, t] + c_para[g] * on_off[g, t]) for
|
||||||
t in range(period) for g in range(NUM_GEN))
|
t in range(period) for g in range(NUM_GEN))
|
||||||
|
|
Loading…
Reference in New Issue