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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月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
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8天前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
121 73
|
11天前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
54 21
|
13天前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现智能食品消费偏好预测的深度学习模型
使用Python实现智能食品消费偏好预测的深度学习模型
55 23
|
14天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费习惯预测的深度学习模型
使用Python实现智能食品消费习惯预测的深度学习模型
62 19
|
15天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
73 18
|
15天前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现深度学习模型:智能食品消费行为预测
使用Python实现深度学习模型:智能食品消费行为预测
57 8
|
11天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
38 2
|
19天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
17天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
6天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
98 80

热门文章

最新文章