【数学建模】Python+Gurobi——零基础学优化建模线性规划模型(LP)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 【数学建模】Python+Gurobi——零基础学优化建模线性规划模型(LP)

1 概述

规划问题的数学模型一般由三个因素构成

决策变量 目标函数 约束条件

数学规划是运筹学的一个重要分支,线性规划是数学规划的一个重要分支

线性规划即以线性函数为目标函数,线性条件为约束条件


建立线性规划模型的基本步骤

(1)分析问题,找出决策变量

(2)根据问题,找出决策变量必须满足的一组线性等式或者不等式约束,即为约束条件

(3)根据问题的目标,构造关于决策变量的一个线性函数,即为目标函数


2 算例及Matlab代码实现

2.1 算例

2.2 Python代码实现

from gurobipy import * # 在Python中调用gurobi求解包
Max_Obj=1  # 用于判定目标函数求最大值还是求最小值
M_LP=Model("LP")  #线性规划问题
# 变量声明
OP =M_LP.addVar(lb=-GRB.INFINITY,ub=GRB.INFINITY, name="OP")
x1 =M_LP.addVar(lb=0,ub=5, name="x1")
x2 =M_LP.addVar(lb=0,ub=3, name="x2")
x3 =M_LP.addVar(lb=0,ub=2, name="x3")
# 对变量边界进行限定的第二种写法:以x1为例
# M_LP.addConstr(x1>=0,"Bound_Con11")
# M_LP.addConstr(x1<=5,"Bound_Con12")
# 设置目标函数
if Max_Obj==0:
    M_LP.setObjective(x1+2*x2-3*x3,GRB.MINIMIZE)
else:
    M_LP.setObjective(x1+2*x2-3*x3,GRB.MAXIMIZE)
# 添加约束
M_LP.addConstr(x1+2*x2<=3,"Con1")
M_LP.addConstr(x2+x3<=2,"Con2")
M_LP.addConstr(x1+x2+x3==4,"Con3")
# Optimize model
M_LP.optimize()
M_LP.write("LP.lp")
print('**************')
print(' The optimal solution ')
print('**************')
print('OP is :',M_LP.ObjVal) # 输出目标值
print('x1 is :',x1.x) # .x 用于输出 X1 的值
print('x2 is :',x2.x)
print('x3 is :',x3.x)
from gurobipy import * # 在Python中调用gurobi求解包
Max_Obj=1  # 用于判定目标函数求最大值还是求最小值
M_LP=Model("LP")  #线性规划问题
# 变量声明
OP =M_LP.addVar(lb=-GRB.INFINITY,ub=GRB.INFINITY, name="OP")
x1 =M_LP.addVar(lb=0,ub=5, name="x1")
x2 =M_LP.addVar(lb=0,ub=3, name="x2")
x3 =M_LP.addVar(lb=0,ub=2, name="x3")
# 对变量边界进行限定的第二种写法:以x1为例
# M_LP.addConstr(x1>=0,"Bound_Con11")
# M_LP.addConstr(x1<=5,"Bound_Con12")
# 设置目标函数
if Max_Obj==0:
    M_LP.setObjective(x1+2*x2-3*x3,GRB.MINIMIZE)
else:
    M_LP.setObjective(x1+2*x2-3*x3,GRB.MAXIMIZE)
# 添加约束
M_LP.addConstr(x1+2*x2<=3,"Con1")
M_LP.addConstr(x2+x3<=2,"Con2")
M_LP.addConstr(x1+x2+x3==4,"Con3")
# Optimize model
M_LP.optimize()
M_LP.write("LP.lp")
print('**************')
print(' The optimal solution ')
print('**************')
print('OP is :',M_LP.ObjVal) # 输出目标值
print('x1 is :',x1.x) # .x 用于输出 X1 的值
print('x2 is :',x2.x)
print('x3 is :',x3.x)

2.3 求解结果

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 3 rows, 4 columns and 7 nonzeros
Model fingerprint: 0xdcaef29a
Coefficient statistics:
  Matrix range     [1e+00, 2e+00]
  Objective range  [1e+00, 3e+00]
  Bounds range     [2e+00, 5e+00]
  RHS range        [2e+00, 4e+00]
Presolve removed 1 rows and 2 columns
Presolve time: 0.00s
Presolved: 2 rows, 2 columns, 4 nonzeros
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    1.0100000e+00   1.004000e+00   0.000000e+00      0s
       1   -0.0000000e+00   0.000000e+00   0.000000e+00      0s
Solved in 1 iterations and 0.00 seconds (0.00 work units)
Optimal objective -0.000000000e+00
**************
 The optimal solution 
**************
OP is : -0.0
x1 is : 3.0
x2 is : 0.0
x3 is : 1.0
Process finished with exit code 0


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 3 rows, 4 columns and 7 nonzeros
Model fingerprint: 0xdcaef29a
Coefficient statistics:
  Matrix range     [1e+00, 2e+00]
  Objective range  [1e+00, 3e+00]
  Bounds range     [2e+00, 5e+00]
  RHS range        [2e+00, 4e+00]
Presolve removed 1 rows and 2 columns
Presolve time: 0.00s
Presolved: 2 rows, 2 columns, 4 nonzeros
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    1.0100000e+00   1.004000e+00   0.000000e+00      0s
       1   -0.0000000e+00   0.000000e+00   0.000000e+00      0s
Solved in 1 iterations and 0.00 seconds (0.00 work units)
Optimal objective -0.000000000e+00
**************
 The optimal solution 
**************
OP is : -0.0
x1 is : 3.0
x2 is : 0.0
x3 is : 1.0
Process finished with exit code 0
相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
512 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
4月前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
255 73
|
4月前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现智能食品消费偏好预测的深度学习模型
使用Python实现智能食品消费偏好预测的深度学习模型
193 23
|
4月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
130 21
|
4月前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
215 15
|
4月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
126 2
|
1月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
23天前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
82 28
|
1月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
1月前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
38 4

热门文章

最新文章