队,
目前我正在研究非线性随机优化问题。到目前为止,工具箱真的很有帮助,谢谢!但是,添加非线性约束会导致错误。我使用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)
我收到此错误消息:
我认为,问题可能存在于约束的嵌套公式中,即和和指数项的组合。因此,我将sum() - 项放入一个单独的变量中。这并没有改变核心非线性约束的特性,因此误差保持不变。我的另一个怀疑是,问题出现在gurobi求解器中。所以我试图利用ipopt,它产生了以下错误信息:初始化随机规划的广泛形式算法 问题。遇到异常。场景树管理器尝试 关掉。 Traceback(最近一次调用最后一次):文件 &#34; C:\ Users \ theil \ Anaconda3 \ Scripts \ runef-script.py&#34;,第5行,in sys.exit(pyomo.pysp.ef_writer_script.main())File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py&#34;, 第863行,主要 traceback = options.traceback)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ util \ misc.py&#34;, 第344行,在launch_command中 rc = command(options,* cmd_args,** cmd_kwds)File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py&#34;, 第748行,在runef ef.solve()文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py&#34;, 第430行,在解决 ** solve_kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ manager.py&#34;, 第122行,在队列中 return self._perform_queue(啊,* args,** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ local.py&#34;, 第59行,在_perform_queue中 results = opt.solve(* args,** kwds)File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py&#34;, 第599行,在解决 self._presolve(* args,** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ solvers \ plugins \ solvers \ GUROBI.py&#34;, 第224行,在_presolve中 ILMLicensedSystemCallSolver._presolve(self,* args,** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ solver \ shellcmd.py&#34;, 第196行,在_presolve中 OptSolver._presolve(self,* args,** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py&#34;, 第696行,在_presolve中 ** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py&#34;, 第767行,在_convert_problem中 ** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ convert.py&#34;, 第110行,在convert_problem中 problem_files,symbol_map = converter.apply(* tmp,** tmpkw)File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ solvers \ plugins \ converter \ model.py&#34;, 第96行,申请中 io_options = io_options)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ core \ base \ block.py&#34;, 第1681行,写在 io_options)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ repn \ plugins \ cpxlp.py&#34;, 第176行,致电 include_all_variable_bounds = include_all_variable_bounds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ repn \ plugins \ cpxlp.py&#34;, 第719行,在_print_model_LP中 &#34;具有非线性项。&#34; %(constraint_data.name))ValueError:无法写入合法的LP文件。约束&#39; 1.max_pcr_power [1]&#39;有个 身体与非线性术语。
评估约束1时出错:无法评估pow&#39;(0,0.5)。错误: Solver(ipopt)返回非零返回码(1)错误:请参阅求解器 在上面记录诊断信息。遇到异常。脚本 树经理试图关闭。追溯(最近的电话 最后):文件&#34; C:\ Users \ theil \ Anaconda3 \ Scripts \ runef-script.py&#34;,line 5,在 sys.exit(pyomo.pysp.ef_writer_script.main())File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py&#34;, 第863行,主要 traceback = options.traceback)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ util \ misc.py&#34;, 第344行,在launch_command中 rc = command(options,* cmd_args,** cmd_kwds)File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py&#34;, 第748行,在runef ef.solve()文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ pysp \ ef_writer_script.py&#34;, 第434行,在解决 ** solve_kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ manager.py&#34;, 第122行,在队列中 return self._perform_queue(啊,* args,** kwds)文件&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ parallel \ local.py&#34;, 第59行,在_perform_queue中 results = opt.solve(* args,** kwds)File&#34; C:\ Users \ theil \ Anaconda3 \ lib \ site-packages \ pyomo \ opt \ base \ solvers.py&#34;, 第626行,在解决 &#34;解算器(%s)没有正常退出&#34; %self.name)pyutilib.common._exceptions.ApplicationError:Solver(ipopt)没有 通常退出
我现在想知道,如果我的错误存在于约束的形式或我利用求解器的方式中。否则我必须简化我的问题以使其可解决。
如果你能指出我正确的方向,我会很高兴的。谢谢!
祝你好运 菲利普
答案 0 :(得分:0)
正如欧文在评论中所提到的,Gurobi通常不适用于非线性问题。