首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在pyomo中使用/选择/安装混合整数非线性求解器

如何在pyomo中使用/选择/安装混合整数非线性求解器
EN

Stack Overflow用户
提问于 2019-05-07 18:45:55
回答 2查看 1.7K关注 0票数 4

我在网上读到,用pyomo解决混合整数非线性问题是可能的。但我不明白是怎么回事。我用“glpk”和“ipopt”求解器解决了问题,但这两个都不适用于我当前的问题(ipopt不考虑布尔变量)。(我还重新构建了问题以避免布尔变量,但如果全局最优值为0(在一维中),ipopt仅显示远离0的局部最优值)。

我找到了这篇介绍MindtPy的论文http://egon.cheme.cmu.edu/Papers/Bernal_Chen_MindtPy_PSE2018Paper.pdf,但我不知道如何安装它。我读到了许多可能的求解器,比如BARON,ANTIGONE,SCIP,LINDOGLOBAL和COUENNE。但是我如何在pyomo中使用它们,如果可能的话,没有许可证,或者您可以推荐另一个随pyomo或anaconda (或易于安装)提供的求解器。提前谢谢你

EN

回答 2

Stack Overflow用户

发布于 2019-08-28 01:58:46

我正在为Pyomo (或AMPL)开发一个免费的MINLP求解器,名为APOPT。您可以下载当前可解决NLP problems in Pyomo (MINLP not yet supported)问题的版本。它将.nl问题发送到服务器,然后将.sol解决方案返回给Pyomo。

我使用Python Gekko解决MINLP问题的接口。这也是Pyomo的求解器性能预览。您可以使用以下命令安装Gekko:

pip install gekko

或者,如果您使用的是Jupyter笔记本电脑,则可以通过在计算单元中运行以下命令来安装Gekko (只需要一次):

!pip install gekko

以下是MINLP问题的一个示例:

代码语言:javascript
运行
复制
from gekko import GEKKO
m = GEKKO() # Initialize gekko
m.options.SOLVER=1  # APOPT is an MINLP solver

# optional solver settings with APOPT
m.solver_options = ['minlp_maximum_iterations 500', \
                    # minlp iterations with integer solution
                    'minlp_max_iter_with_int_sol 10', \
                    # nlp sub-problem max iterations
                    'nlp_maximum_iterations 50', \
                    # maximum deviation from whole number
                    'minlp_integer_tol 0.05', \
                    # covergence tolerance
                    'minlp_gap_tol 0.01']

# Initialize variables
x1 = m.Var(value=1,lb=1,ub=5)
x2 = m.Var(value=5,lb=1,ub=5)
# Integer constraints for x3 and x4
x3 = m.Var(value=5,lb=1,ub=5,integer=True)
x4 = m.Var(value=1,lb=1,ub=5,integer=True)
# Equations
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Obj(x1*x4*(x1+x2+x3)+x3) # Objective
m.solve(disp=False) # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))
print('Objective: ' + str(m.options.objfcnval))

它会产生以下输出:

代码语言:javascript
运行
复制
Results
x1: [1.3589086474]
x2: [4.5992789966]
x3: [4.0]
x4: [1.0]
Objective: 17.532267301
票数 3
EN

Stack Overflow用户

发布于 2019-05-07 23:04:20

在最新版本(v.5.6.2)中,MindtPy随Pyomo一起分发。看一看示例here,看看如何使用MindtPy来制定和解决问题。您提到的其他求解器必须手动安装并添加到搜索路径中,其中一些确实需要许可证。COUENNE是一个免费的开源选项,您可以在here中找到安装说明。搜索其他求解器的主页以了解其许可以及如何访问它们。

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

https://stackoverflow.com/questions/56020864

复制
相关文章

相似问题

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