【数学建模】二次规划求解约束极值问题(Python+Gurobi实现)

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

目录

1 概述

2 算例及Python代码实现

2.1 算例

2.2 方法1

2.3 方法1求解结果

2.4 方法2


1 概述

        根据约束条件的不同,二次规划可分为等式约束二次规划问题和不等式约束二次规划问题。等式约束二次规划问题即只含有等式约束,常见的解法有直接消去法、广义消去法、拉格朗日(Lagrange)法;对于不等式约束二次规划问题,其基本思想是把不等式约束转化为等式约束再求解,常见解法有有效集(active set)方法,有效集方法在每步迭代中把有效约束作为等式约束,然后可以用拉格朗日法求解,重复直到求得最优解。

        很多学者专门研究各类二次规划的求解方法,如文献[4][5],对于非数学专业的的人来讲更重要的是怎么把二次规划当作一个工具去使用它。

带有约束条件的极值问题称为约束极值问题,也叫规划问题。
求解约束极值问题要比求解无约束极值问题困难得多。为了简化其优化工作,可采用下面两种方法:
1)将约束问题转化为无约束问题;
2)将非线性规划问题转化为线性规划问题。

2 算例及Python代码实现

2.1 算例

【数学建模】二次规划求解约束极值问题(Python+Gurobi实现)

2.2 方法1



from gurobipy import *

# 创建模型
M_QCP=Model("QCP")

# 变量声明
'''
上下限如果定为无穷,容易出错,所以一般设为1e4
x1  =M_QCP.addVar(lb=0,ub=GRB.INFINITY, name="x1")
x2  =M_QCP.addVar(lb=0,ub=GRB.INFINITY, name="x2")
'''
x1  =M_QCP.addVar(lb=0,ub=1e4, name="x1")
x2  =M_QCP.addVar(lb=0,ub=1e4, name="x2")

# 设置目标函数
M_QCP.setObjective(2*x1**2-4*x1*x2+4*x2**2-6*x1-3*x2,GRB.MINIMIZE)

# 添加约束
M_QCP.addConstr(x1+x2<=3,"Con1")
M_QCP.addConstr(4*x1+x2<=9,"Con2")


M_QCP.Params.NonConvex=2

# Optimize model
M_QCP.optimize()

M_QCP.write("QCP.lp")


print('=======================')
print(' =========最优解======== ')
print('===================')
print('Obj is :',M_QCP.ObjVal) # 输出目标值
print('x1 is :',x1.x) # 输出 x1 的值
print('x2 is :',x2.x) # 输出 x2 的值

2.3 方法1求解结果

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 2 rows, 2 columns and 4 nonzeros
Model fingerprint: 0xfaada561
Model has 3 quadratic objective terms
Coefficient statistics:
  Matrix range     [1e+00, 4e+00]
  Objective range  [3e+00, 6e+00]
  QObjective range [4e+00, 8e+00]
  Bounds range     [1e+04, 1e+04]
  RHS range        [3e+00, 9e+00]
Presolve time: 0.00s
Presolved: 2 rows, 2 columns, 4 nonzeros
Presolved model has 3 quadratic objective terms
Ordering time: 0.00s

Barrier statistics:
 Free vars  : 1
 AA' NZ     : 3.000e+00
 Factor NZ  : 6.000e+00
 Factor Ops : 1.400e+01 (less than 1 second per iteration)
 Threads    : 1

                  Objective                Residual
Iter       Primal          Dual         Primal    Dual     Compl     Time
   0   4.74748686e+05 -5.00249810e+05  1.12e+03 2.40e+01  4.98e+05     0s
   1   5.02754710e+04 -5.33880584e+04  1.10e+02 7.69e-09  3.72e+04     0s
   2   1.19043097e+04 -1.33290955e+04  1.05e+01 8.08e-10  6.95e+03     0s
   3  -1.68878089e-01 -3.18400831e+03  1.27e+00 9.39e-11  1.52e+03     0s
   4  -6.85245486e+00 -1.81873310e+03  5.57e-07 0.00e+00  3.02e+02     0s
   5  -7.05868976e+00 -5.47071675e+01  1.39e-08 0.00e+00  7.94e+00     0s
   6  -1.00688999e+01 -2.63884980e+01  1.37e-14 0.00e+00  2.72e+00     0s
   7  -1.09095108e+01 -1.14480512e+01  1.11e-16 0.00e+00  8.98e-02     0s
   8  -1.10239216e+01 -1.10381544e+01  2.44e-15 2.61e-15  2.37e-03     0s
   9  -1.10249905e+01 -1.10253761e+01  8.87e-14 4.44e-16  6.43e-05     0s
  10  -1.10250000e+01 -1.10250004e+01  9.22e-14 1.06e-15  7.01e-08     0s
  11  -1.10250000e+01 -1.10250000e+01  5.28e-14 0.00e+00  7.02e-11     0s

Barrier solved model in 11 iterations and 0.00 seconds (0.00 work units)
Optimal objective -1.10250000e+01

=======================
 =========最优解======== 
===================
Obj is : -11.024999999988966
x1 is : 1.9499999996029882
x2 is : 1.0500000003927306

Process finished with exit code 0

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 2 rows, 2 columns and 4 nonzeros
Model fingerprint: 0xfaada561
Model has 3 quadratic objective terms
Coefficient statistics:
  Matrix range     [1e+00, 4e+00]
  Objective range  [3e+00, 6e+00]
  QObjective range [4e+00, 8e+00]
  Bounds range     [1e+04, 1e+04]
  RHS range        [3e+00, 9e+00]
Presolve time: 0.00s
Presolved: 2 rows, 2 columns, 4 nonzeros
Presolved model has 3 quadratic objective terms
Ordering time: 0.00s

Barrier statistics:
 Free vars  : 1
 AA' NZ     : 3.000e+00
 Factor NZ  : 6.000e+00
 Factor Ops : 1.400e+01 (less than 1 second per iteration)
 Threads    : 1

                  Objective                Residual
Iter       Primal          Dual         Primal    Dual     Compl     Time
   0   4.74748686e+05 -5.00249810e+05  1.12e+03 2.40e+01  4.98e+05     0s
   1   5.02754710e+04 -5.33880584e+04  1.10e+02 7.69e-09  3.72e+04     0s
   2   1.19043097e+04 -1.33290955e+04  1.05e+01 8.08e-10  6.95e+03     0s
   3  -1.68878089e-01 -3.18400831e+03  1.27e+00 9.39e-11  1.52e+03     0s
   4  -6.85245486e+00 -1.81873310e+03  5.57e-07 0.00e+00  3.02e+02     0s
   5  -7.05868976e+00 -5.47071675e+01  1.39e-08 0.00e+00  7.94e+00     0s
   6  -1.00688999e+01 -2.63884980e+01  1.37e-14 0.00e+00  2.72e+00     0s
   7  -1.09095108e+01 -1.14480512e+01  1.11e-16 0.00e+00  8.98e-02     0s
   8  -1.10239216e+01 -1.10381544e+01  2.44e-15 2.61e-15  2.37e-03     0s
   9  -1.10249905e+01 -1.10253761e+01  8.87e-14 4.44e-16  6.43e-05     0s
  10  -1.10250000e+01 -1.10250004e+01  9.22e-14 1.06e-15  7.01e-08     0s
  11  -1.10250000e+01 -1.10250000e+01  5.28e-14 0.00e+00  7.02e-11     0s

Barrier solved model in 11 iterations and 0.00 seconds (0.00 work units)
Optimal objective -1.10250000e+01

=======================
 =========最优解======== 
===================
Obj is : -11.024999999988966
x1 is : 1.9499999996029882
x2 is : 1.0500000003927306

Process finished with exit code 0

2.4 方法2

MPC的终结——二次规划求解约束极值问题文章来源地址https://www.toymoban.com/news/detail-475081.html

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

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

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

相关文章

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

    目录 1 概述 2 算例  2.1 算例 2.2 参数设置 2.3 Python代码实现 2.4 求解结果 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。 参考:(非线性规划Python)计及动态约束及节能减排环保要求的经济调度 2.1 算例 2.2 参数设置 求解NLP/非凸问题时,

    2024年02月09日
    浏览(35)
  • 数学建模1:lingo软件求解优化模型

    本次数学建模学习笔记系列,以代码学习为主,附带建模及论文亮点记录 由于队友为两位经济学小伙伴,因此以大数据类型题目为主要学习方向 注:论文代码资料来源网络 1、结构清晰(后附该论文前两问的目录结构) 2、lingo求解优化模型,涉及函数循环与求和 3、表格很好

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

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

    2024年02月09日
    浏览(26)
  • 数学建模论文写作方法之一(模型的建立与求解)

    一、模型的建立:(大多数都是根据实际问题套用别人已经建立的模型,但需要将问题与模型结合起来) 1.物理类问题中模型的建立 由。。。。知识的得到。。。。(公式) 2.优化类问题中模型的建立 ①目标函数+ ②约束条件 ③关于约束条件的说明 3.使用别人已经建立好的

    2024年02月11日
    浏览(34)
  • 数学建模:图论模型 — 最短路模型示例 (Python 求解)

    某种工程设备的役龄为 4 年, 每年年初都面临着是否更新的问题: 若卖旧买新, 就要支付一定的购置费用; 若继续使用, 则要支付更多的维护费用, 且使用年限越长维护费用越多. 役龄期内每年的年初购置价格, 当年维护费用及年末剩余净值如下表所示. 为该设备制定一个 4 年役龄

    2024年02月07日
    浏览(31)
  • 基于梯度下降算法的无约束函数极值问题求解

    导数(Derivative),也叫 导函数值 。又名 微商 ,是微积分中的重要基础概念。 导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率 。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线

    2024年02月13日
    浏览(31)
  • 数学建模中提升目标、变量和约束的紧凑度的几种技巧

    在数学建模中,我们常常会更青睐于紧凑的形式,以下有一些常见的方法来提升目标、约束、变量的范围。 针对问题的特定信息来收紧边界 :尽管求解器常常会有自己的预处理策略,其中包括推导约束的隐藏关系来对变量边界做收紧处理,但这些方法是从模型本身出发进行

    2024年02月04日
    浏览(24)
  • 图论最短路径求解——手把手教你数学建模

    很多朋友在学习图论,或是数学建模的时候都会碰到最短路径问题。本讲将从如何作图开始,手把手教你图论中的最短路径问题。根据图的不同,我们将介绍两种不同的算法:迪杰斯特拉Dijkstra算法和Bellman‐Ford(贝尔曼‐福特)算法。 在线作图:https://csacademy.com/app/graph_ed

    2024年02月16日
    浏览(29)
  • 数学建模学习之发动机最优生产计划模型求解

    问题重述 某工厂向用户提供发动机,按合同规定,其交货数量和日期是:第一季末交 40 台第二季末交 60 台,第三季末交 80 台。工厂的最大生产能力为每季 100 台,每季的生产费用是 (元),此处  为该季生产发动机的台数。若工厂生产得多,多余的发动机可移到下一季度向用户

    2024年02月08日
    浏览(40)
  • python数学建模之用sympy.solve求解方程组的解

    在sympy.solve(expression)方法的帮助下,我们可以很容易地求解数学方程,它将返回使用sympy.solve()方法作为参数提供的方程的根。 参考文档: 参考文档 https://www.geeksforgeeks.org/python-sympy-solve-method/ 在下面这个例子中,我们可以看到通过使用sympy.solve()方法,我们可以求解数

    2024年02月10日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包