关于matlab的solver求解器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于matlab的solver求解器相关的知识,希望对你有一定的参考价值。

求解器的参数设置中有一项为type,包括variable-step和fixed-step,当设置为variable-step时,有ode45,ode23,ode113,ode15s,ode23s,ode23t和ode23tb,其中前三个为非刚性求解方法,其余为刚性求解方法。这里面的ode是什么意思?还有何谓刚性和非刚性啊?

常微分方程的意思。
非刚性大概的意思就是函数随自变量变化相对比较小的,刚性的就是会有剧烈变化的。
参考技术A 都是基于欧拉法,adams法,库拉格龙方法的解算器.在用微分方程描述的一个变化过程中,若往往又包含着多个相互作用但变化速度相差十分悬殊的子过程,这样一类过程就认为具有“刚性”.

如何设置 Pyomo 求解器超时?

【中文标题】如何设置 Pyomo 求解器超时?【英文标题】:How to set Pyomo solver timeout? 【发布时间】:2016-05-26 03:26:22 【问题描述】:

如何设置 Pyomo solve() 方法的超时时间?更具体地说,告诉pyomo,在x秒后,返回当前找到的最优解?

【问题讨论】:

【参考方案1】:

所以我能够通过 pyomo 文档找到答案,我认为分享会有所帮助。

设置 Pyomo solve() 方法的超时时间:

solver.solve(model, timelimit=5)

但是,如果求解器没有终止,这将抛出 pyutilib.common._exceptions.ApplicationError: "Solver (%s) did not exit normally" % self.name )。我真正想要的是将timelimit 选项传递给我的求解器。在我的cplex求解器的情况下,代码将是这样的:

solver = SolverFactory('cplex')
solver.options['timelimit'] = 5
results = solver.solve(model, tee=True)

更多关于pyomo 和cplex docs。

【讨论】:

我正在做同样的事情(虽然使用'cbc'求解器,但不确定这是否相关)但我认为这不能回答最初的问题:“告诉 pyomo,x 秒后,返回当前找到的最优解。”这似乎只是抛出了提到的错误。即使它不是最优的和/或不满足所有约束,它是否应该返回一个实际的“解决方案”?这可能吗?【参考方案2】:

我在 PYOMO 中取得了以下成功。 cplex 和 glpk 的时间限制选项名称不同。

    self.solver = pyomo.opt.SolverFactory(SOLVER_NAME)
    if SOLVER_NAME == 'cplex':
        self.solver.options['timelimit'] = TIME_LIMIT
    elif SOLVER_NAME == 'glpk':         
        self.solver.options['tmlim'] = TIME_LIMIT
    elif SOLVER_NAME == 'gurobi':           
        self.solver.options['TimeLimit'] = TIME_LIMIT

其中 TIME_LIMIT 是以秒为单位的整数时间限制。

【讨论】:

以上是关于关于matlab的solver求解器的主要内容,如果未能解决你的问题,请参考以下文章

F-Chart.Engineering.Equation.Solver.Pro.v9.478-3D工程方程求解器

matlab中ode23函数输出的是啥

一道matlab关于求齐次方程的问题

如何通过 Pyomo 指定 GAMS 求解器特定的选项?

编程求解器的分段错误(核心转储)

求解器加载项错误,未找到求解器 32.dll 并发生意外错误