首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PYOMO/PYSP求解MINLP

用PYOMO/PYSP求解MINLP
EN

Stack Overflow用户
提问于 2018-06-15 09:12:44
回答 1查看 819关注 0票数 1

团队,

目前,我正在研究一个非线性随机优化问题。到目前为止,工具箱已经非常有用,谢谢!然而,加入非线性约束会导致错误。我用的是解药器。这个问题是由以下约束引起的。

代码语言:javascript
复制
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中,在main traceback=options.traceback中)在"C:\Users\theil\Anaconda3\lib\site-packages\pyomo\pysp\ef_writer_script.py",rc = launch_command rc=launch_command(options,*cmd_args,**cmd_kwds)文件第748行中,在runef ef.solve() File ef.solve()文件第430行中,文件"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\theil\Anaconda3\lib\site-packages\pyomo\opt\base\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",第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",中文件"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,文件"C:\Users\theil\Anaconda3\lib\site-packages\pyomo\core\base\block.py",第1681行,写入io_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_power1‘有一个具有非线性项的体。

我认为,问题可能在约束的嵌套式中,即和项和指数项的组合。因此,我将sum()-term放入一个单独的变量中。这并没有改变非线性约束的核心特性,使误差保持不变。我的另一个怀疑是,问题就在古鲁比的解决者身上。因此,我尝试使用ipopt,它生成了折叠错误消息:

错误求值约束1:无法计算pow'(0,0.5)。错误:解决程序(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中,在main traceback=options.traceback中)在"C:\Users\theil\Anaconda3\lib\site-packages\pyomo\pysp\ef_writer_script.py",rc = launch_command rc=launch_command(options,*cmd_args,**cmd_kwds)文件第748行中,在runef ef.solve() File ef.solve()文件第434行中,文件"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\theil\Anaconda3\lib\site-packages\pyomo\opt\base\solvers.py",第626行,在“解决程序(%s)未正常退出”% self.name) pyutilib.common._exceptions.ApplicationError中:求解器(ipopt)未正常退出

我现在想知道,我的错误是否存在于约束的制定或我使用求解者的方式中。否则,我必须简化我的问题,使它可以解决。

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

向飞利浦问好

EN

回答 1

Stack Overflow用户

发布于 2018-06-16 04:52:32

正如Erwin在评论中提到的,Gurobi通常不打算处理非线性问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50872435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档