python - AMPLPY: How to resetupdate the parameter after solving the AMPL model? - Stack Overflow

This is a Python code segment for solving an optimal power flow problem:if self.ini_state:solver.read(s

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 badges
Add a comment  | 

1 Answer 1

Reset to default 1

If 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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信