首页 文章

用PYOMO / PYSP解决MINLP问题

提问于
浏览
0

球队,

目前我正在研究非线性随机优化问题 . 到目前为止,工具箱真的很有帮助,谢谢!但是,添加非线性约束会导致错误 . 我使用gurobi求解器 . 该问题源于以下约束 .

def max_pcr_power_rule(model, t):
    if t == 0:
        return 0 <= battery.P_bat_max-model.P_sc_max[t+1]-model.P_pcr
    else:       
        return model.P_trade_c[t+1] + np.sqrt(-2*np.log(rob_opt.max_vio)) \
        *sum(model.U_max_pow[t,i]**2 for i in set_sim.tme_dat_stp)**(0.5) \
        <= battery.P_bat_max-model.P_sc_max[t+1]-model.P_pcr
model.max_pcr_power = Constraint(set_sim.tme_dat_stp, rule=max_pcr_power_rule)

我收到此错误消息:

初始化随机规划问题的广泛形式算法 . 遇到异常 . 场景树管理器试图关闭 . 回溯(最近一次调用最后一次):文件“C:\ Users \ theil \ Anaconda3 \ Scripts \ runef-script.py”,第5行,在sys.exit中(pyomo.pysp.ef_writer_script.main())文件“C: \ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py“,第863行,在主traceback = options.traceback中)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ util \ misc.py“,第344行,在launch_command rc = command(options,* cmd_args,** cmd_kwds)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py“,第748行,在runef ef.solve()文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py“,第430行,解决** solve_kwds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ manager.py”,第122行,在队列中返回self._perform_queue(啊,* args,** kwds)文件“C :\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ local.py“,第59行,在_perform_queue结果= opt.solve(* args,** kwds)文件”C:\ Users \泰尔\ Anaconda3 \ LIB \站点包\ pyomo \选择\ BA se \ solvers.py“,第599行,解决self._presolve(* args,** kwds)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ solvers \ plugins \ solvers \ GUROBI . py“,第224行,在_presolve中ILMLicensedSystemCallSolver._presolve(self,* args,** kwds)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ solver \ shellcmd.py“,line 196,在_presolve OptSolver._presolve(self,* args,** kwds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py”,第696行,在_presolve中** kwds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py”,第767行,在_convert_problem ** kwds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ convert.py“,第110行,在convert_problem problem_files,symbol_map = converter.apply(* tmp,** tmpkw)文件”C:\ Users \ theil \ anaconda3 \ lib \ site-packages \ pyomo \ solvers \ plugins \ converter \ model.py“,第96行,在apply io_options = io_options中)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ core \ base \ block.py“,第1681行,写入i o_options)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ repn \ plugins \ cpxlp.py”,第176行,调用include_all_variable_bounds = include_all_variable_bounds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ repn \ plugins \ cpxlp.py“,第719行,在_print_model_LP中”,带有非线性项 . “ %(constraint_data.name))ValueError:无法写入合法的LP文件 . 约束'1.max_pcr_power [1]'具有非线性项 .

我认为,问题可能在于约束的嵌套公式,即和和指数项的组合 . 因此,我将sum() - 项放入一个单独的变量中 . 这并没有改变核心非线性约束的特性,因此误差保持不变 . 我的另一个怀疑是,问题出现在gurobi求解器中 . 所以我试图利用ipopt,它产生了以下错误信息:

评估约束1时出错:无法评估pow'(0,0.5) . 错误:Solver(ipopt)返回非零返回码(1)错误:请参阅上面的求解器日志以获取诊断信息 . 遇到异常 . 场景树管理器试图关闭 . 回溯(最近一次调用最后一次):文件“C:\ Users \ theil \ Anaconda3 \ Scripts \ runef-script.py”,第5行,在sys.exit中(pyomo.pysp.ef_writer_script.main())文件“C: \ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py“,第863行,在主traceback = options.traceback中)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ util \ misc.py“,第344行,在launch_command rc = command(options,* cmd_args,** cmd_kwds)文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py“,第748行,在runef ef.solve()文件”C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py“,第434行,解决** solve_kwds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ manager.py”,第122行,在队列中返回self._perform_queue(啊,* args,** kwds)文件“C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ local.py”,第59行,在_perform_queue中结果= opt.solve(* args,** kwds)文件“C:\用户\ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py“,第626行,解决”解算器(%s)未正常退出“%self.name)pyutilib.common._exceptions . ApplicationError:Solver(ipopt)没有正常退出

我现在想知道,如果我的错误存在于约束的形式或我利用求解器的方式中 . 否则我必须简化我的问题以使其可解决 .

如果你能指出我正确的方向,我会很高兴的 . 谢谢!

最好的问候Philipp

1 回答

  • 0

    正如欧文在评论中提到的那样,Gurobi通常不适用于非线性问题 .

相关问题