【数学建模】Python+Gurobi求解非线性规划模型

这篇具有很好参考价值的文章主要介绍了【数学建模】Python+Gurobi求解非线性规划模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 概述

2 算例 

2.1 算例

2.2 参数设置

2.3 Python代码实现

2.4 求解结果


1 概述

如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。

参考:(非线性规划Python)计及动态约束及节能减排环保要求的经济调度

2 算例 

2.1 算例

【数学建模】Python+Gurobi求解非线性规划模型

2.2 参数设置

求解NLP/非凸问题时,Python+Gurobi 的参数设置

1)需要设置参数'NonConvex=2';
2)Gurobi接受的幂函数y =中,α的最大值为2.c.虽然有解,但不一定是最优值。
3)求解时间看模型规模。
观察模型可知,要想求此模型,需要在编程中把多个变量乘积变成两两相乘的形式。令、y23=x2x3即可实现此功能。建模问题解决了,调用Gurobi求解器即可求解了。可是运行模型的时候,出问题了: GurobiError: Q matrix is notpositive semi-definite (PSD). Set NonConvex parameter to 2 to solvemodel.错误很明显,告诉你需要设定参数NonConvex=2,Python+Gurobi设定参数的方法,即:

M_NLP.Params.NonConvex=2文章来源地址https://www.toymoban.com/news/detail-491163.html

2.3 Python代码实现


from gurobipy import *

# 创建模型
NLP=Model("NLP")

# 变量声明
x1  =NLP.addVar(lb=1,ub=3, name="x1")
x2  =NLP.addVar(lb=1,ub=3, name="x2")
x3  =NLP.addVar(lb=1,ub=3, name="x3")
x4  =NLP.addVar(lb=1,ub=3, name="x4")

y14 =NLP.addVar(lb=0,ub=300, name="y14")
y23 =NLP.addVar(lb=0,ub=300, name="y23")

# 设置目标函数
NLP.setObjective(y14*(x1+x2+x3)+x2,GRB.MAXIMIZE)

# 添加约束
NLP.addConstr(y14*y23>=20,"Con1")
NLP.addConstr(x1*x1+x2*x2+x3*x3+x4*x4==30,"Con2")

# 表示乘积项
NLP.addConstr(y14==x1*x4,"Con_y14")
NLP.addConstr(y23==x2*x3,"Con_y23")

NLP.Params.NonConvex=2

# Optimize model
NLP.optimize()

NLP.write("NLP.lp")

print('**************')
print(' The optimal solution ')
print('**************')
print('Obj is :',NLP.ObjVal) # 输出目标值
print('x1 is :',x1.x) # 输出 x1 的值
print('x2 is :',x2.x) # 输出 x2 的值
print('x3 is :',x3.x) # 输出 x3 的值
print('x4 is :',x4.x) # 输出 x4 的值
from gurobipy import *

# 创建模型
NLP=Model("NLP")

# 变量声明
x1  =NLP.addVar(lb=1,ub=3, name="x1")
x2  =NLP.addVar(lb=1,ub=3, name="x2")
x3  =NLP.addVar(lb=1,ub=3, name="x3")
x4  =NLP.addVar(lb=1,ub=3, name="x4")

y14 =NLP.addVar(lb=0,ub=300, name="y14")
y23 =NLP.addVar(lb=0,ub=300, name="y23")

# 设置目标函数
NLP.setObjective(y14*(x1+x2+x3)+x2,GRB.MAXIMIZE)

# 添加约束
NLP.addConstr(y14*y23>=20,"Con1")
NLP.addConstr(x1*x1+x2*x2+x3*x3+x4*x4==30,"Con2")

# 表示乘积项
NLP.addConstr(y14==x1*x4,"Con_y14")
NLP.addConstr(y23==x2*x3,"Con_y23")

NLP.Params.NonConvex=2

# Optimize model
NLP.optimize()

NLP.write("NLP.lp")

print('**************')
print(' The optimal solution ')
print('**************')
print('Obj is :',NLP.ObjVal) # 输出目标值
print('x1 is :',x1.x) # 输出 x1 的值
print('x2 is :',x2.x) # 输出 x2 的值
print('x3 is :',x3.x) # 输出 x3 的值
print('x4 is :',x4.x) # 输出 x4 的值

2.4 求解结果

Set parameter NonConvex to value 2
Gurobi Optimizer version 9.5.2 build v9.5.2rc0 (win64)
Thread count: 8 physical cores, 16 logical processors, using up to 16 threads
Optimize a model with 0 rows, 6 columns and 0 nonzeros
Model fingerprint: 0x11cd71a3
Model has 3 quadratic objective terms
Model has 4 quadratic constraints
Coefficient statistics:
  Matrix range     [0e+00, 0e+00]
  QMatrix range    [1e+00, 1e+00]
  QLMatrix range   [1e+00, 1e+00]
  Objective range  [1e+00, 1e+00]
  QObjective range [2e+00, 2e+00]
  Bounds range     [1e+00, 3e+02]
  RHS range        [0e+00, 0e+00]
  QRHS range       [2e+01, 3e+01]

Continuous model is non-convex -- solving as a MIP

Presolve time: 0.00s
Presolved: 28 rows, 14 columns, 74 nonzeros
Presolved model has 1 quadratic constraint(s)
Presolved model has 9 bilinear constraint(s)
Variable types: 14 continuous, 0 integer (0 binary)

Root relaxation: objective 7.463397e+01, 16 iterations, 0.00 seconds (0.00 work units)

    Nodes    |    Current Node    |     Objective Bounds      |     Work
 Expl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time

     0     0   74.63397    0    3          -   74.63397      -     -    0s
H    0     0                      73.6047208   74.63397  1.40%     -    0s
     0     0   73.62217    0    3   73.60472   73.62217  0.02%     -    0s
     0     0   73.61845    0    3   73.60472   73.61845  0.02%     -    0s
     0     0   73.61845    0    3   73.60472   73.61845  0.02%     -    0s
     0     2   73.61845    0    3   73.60472   73.61845  0.02%     -    0s

Cutting planes:
  PSD: 1

Explored 5 nodes (37 simplex iterations) in 0.02 seconds (0.00 work units)
Thread count was 16 (of 16 available processors)

Solution count 1: 73.6047 

Optimal solution found (tolerance 1.00e-04)
Best objective 7.360472078597e+01, best bound 7.361117907001e+01, gap 0.0088%
**************
 The optimal solution 
**************
Obj is : 73.60472078597236
x1 is : 2.9999999998974762
x2 is : 2.5748464524640973
x3 is : 2.317361807798582
x4 is : 2.9999999997674647

Process finished with exit code 0

到了这里,关于【数学建模】Python+Gurobi求解非线性规划模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模(五)非线性规划

     课程推荐: 13 非线性规划算法在数学建模中的应用与编程实现_哔哩哔哩_bilibili 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题 。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不像线性规划有单纯形法这一通用方法,

    2024年02月11日
    浏览(48)
  • 数学建模学习---非线性规划

    目录 前言 一、非线性规划问题是什么? 二、非线性规划的数学模型 1.一般形式 三、线性规划的 Matlab 解法 Matlab 中非线性规划的数学模型: 2.Matlab 中的命令: 本篇讲述非线性规划问题极其matlab解法 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规

    2024年02月06日
    浏览(57)
  • 数学建模| 非线性规划(Matlab)

    非线性规划:约束条件和目标函数存在非线性函数。简单点说,约束条件和目标函数中至少一个决策变量不是一次方,例如三角函数、对数、多次方等。 线性规划和非线性在解决上的不同:线性规划可以有通用方法,但是非线性规划的求解是没有特定算的,只能用近似的算法

    2024年02月07日
    浏览(49)
  • 三、数学建模之非线性规划

    1、定义 2、例题matlan代码求解 1.非线性规划 (Nonlinear Programming,简称NLP)是一种数学优化问题的方法,它处理的目标函数或约束条件包含非线性项。与线性规划不同,非线性规划涉及到在非线性约束下寻找最优解。在许多领域都有广泛的 应用,包括工程、经济学、物流、金

    2024年01月16日
    浏览(52)
  • 数学建模:线性与非线性优化算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 优化算法 是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 优化的两个关键点: 1.明确优化的目标函数 2.明确优化

    2024年02月07日
    浏览(42)
  • 数学建模整理-线性规划、整数规划、非线性规划

    在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济 效益的问题。若目标函数及约束条件均为线性函数,则称为线性规划(Linear Programming 简记 LP)。 可行解 :满足约束条件的解。 可行预 :所有可行解构成的集合称为问题的可行域,记为R。 图解法

    2024年02月06日
    浏览(40)
  • 数学建模十大算法03—线性规划、整数规划、非线性规划、多目标规划

    一、线性规划(Linear Programming,LP) 1.1 引例 在人们的生产实践中,经常会遇到 如何利用现有资源来安排生产,以取得最大经济效益的问题。 此类问题构成了运筹学的一个重要分支一数学规划,而 线性规划(Linear Programming, LP) 则是数学规划的一个重要分支。 简而言之,线

    2024年02月13日
    浏览(45)
  • 【数学建模】混合整数规划MIP(Python+Gurobi代码实现)

    目录 1 概述 2 入门算例 2.1 算例 2.2 求解 ——Pulp库和cvxpy 3 进阶算例 3.1 算例 3.2 Python+Gurobi代码实现 3.3 运行结果 混合整数规划 (MIP) 是 NP-hard 问题中的一类,它的目标是在线性约束下将线性目标最小化,同时使部分或全部变量均为整数值,在容量规划、资源分配与装箱等等现

    2024年02月07日
    浏览(58)
  • 数学建模--非整数规划求解的Python实现

    目录 1.算法流程简介 2.算法核心代码 3.算法效果展示

    2024年02月10日
    浏览(40)
  • 数学建模--退火算法求解最值的Python实现

    目录 1.算法流程简介 2.算法核心代码 3.算法效果展示

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包