This is a Python code segment for solving an optimal power flow problem:
if self.ini_state:
solver.read(self.pb_path[0]) # Problem parameters
solver.param['BaseMVA'] = 1
solver.param['RefAngle'] = self.ref_angle
solver.set_data(data=pd.DataFrame(self.params_dict['bus'], index=list(range(1, len(self.params_dict['bus']['bus_Pd']) + 1))), set_name='BUS')
solver.set_data(data=pd.DataFrame(self.params_dict['branch'], index=list(range(1, len(self.params_dict['branch']['branch_fbus']) + 1))), set_name='BRANCH')
solver.set_data(data=pd.DataFrame(self.params_dict['gen'], index=list(range(1, len(self.params_dict['gen']['gen_bus']) + 1))), set_name='GEN')
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS')
solver.read(self.pb_path[1]) # ACOPF problem
self.ini_state = False
else:
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS')
self.epoch += 1
for var in self.sol_dict.keys():
solver.getVariable(var).setValues(pd.Series(self.sol_dict[var], index=list(range(1, len(self.sol_dict[var]) + 1))))
solver.option["solver"] = "ipopt"
solver.option["ipopt_options"] = "warm_start_init_point = yes"
solver.get_output("solve;")
After solving, the parameter in self.params_dict['boundbus'] is changed. To improve computational efficiency, I want to update only this parameter instead of reloading the entire problem model. I attempted to do this with:
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS')
However, AMPL throws a runtime error: "set BOUNDBUS already defined". Is there a valid way to update the parameter without redefining the entire model?
This is a Python code segment for solving an optimal power flow problem:
if self.ini_state:
solver.read(self.pb_path[0]) # Problem parameters
solver.param['BaseMVA'] = 1
solver.param['RefAngle'] = self.ref_angle
solver.set_data(data=pd.DataFrame(self.params_dict['bus'], index=list(range(1, len(self.params_dict['bus']['bus_Pd']) + 1))), set_name='BUS')
solver.set_data(data=pd.DataFrame(self.params_dict['branch'], index=list(range(1, len(self.params_dict['branch']['branch_fbus']) + 1))), set_name='BRANCH')
solver.set_data(data=pd.DataFrame(self.params_dict['gen'], index=list(range(1, len(self.params_dict['gen']['gen_bus']) + 1))), set_name='GEN')
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS')
solver.read(self.pb_path[1]) # ACOPF problem
self.ini_state = False
else:
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS')
self.epoch += 1
for var in self.sol_dict.keys():
solver.getVariable(var).setValues(pd.Series(self.sol_dict[var], index=list(range(1, len(self.sol_dict[var]) + 1))))
solver.option["solver"] = "ipopt"
solver.option["ipopt_options"] = "warm_start_init_point = yes"
solver.get_output("solve;")
After solving, the parameter in self.params_dict['boundbus'] is changed. To improve computational efficiency, I want to update only this parameter instead of reloading the entire problem model. I attempted to do this with:
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS')
However, AMPL throws a runtime error: "set BOUNDBUS already defined". Is there a valid way to update the parameter without redefining the entire model?
Share Improve this question asked Mar 12 at 7:29 Jeff JuJeff Ju 212 bronze badges1 Answer
Reset to default 1If the data for the set has already been loaded, you don't need set_name='BOUNDBUS'
which is only needed to load the index into the set provided. The following should work:
solver.set_data(data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))))
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744766127a4592471.html
评论列表(0条)