Gurobi搭建模型系列1——基础

2023-12-30 12:58

本文主要是介绍Gurobi搭建模型系列1——基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gurobi搭建模型思路

  • 基本思路
    • 一、准备工作:anaconda+gurobi搭建
    • 二、重点:建模
      • 建模顺序
      • 工具
      • 建模部分

基本思路

anaconda、python、pycharm选择。

1.pycharm适用于群体开发项目时用,是个大型的集中平台。数据库、代码、项目、环境等等资源。

2.python适合深入研究python的人使用,对使用者要求较高。

3.anaconda比较适合一般人,也是个开发平台,可视化效果比较好。

一、准备工作:anaconda+gurobi搭建

anaconda 3.* 自带spyder,可视化效果比较好,类似于matlab界面。

anaconda+gurobi使用最好。

统一放在c:\gurobi文件夹下,是为了便于管理。
安装方式
激活

二、重点:建模

建模顺序

如:

from gurobipy import *
创建模型
m = Model("mip")1.设置参数&变量
x = m.addVars(vtype=GRB.BINARY, name="x")2.设置目标函数
m.setObjective(2*x, GRB.MAXIMIZE)3.设置约束
m.addConstr(x>=1, "c0")如果要写进lp文件阅读,可以:
m.update()
m.write("mip.lp")如果要从lp格式中读出模型
m = read("mip.lp")4.求解
m.optimize()

工具

gurobi的扩展对象tuplelisttupledict
可以不用循环遍历,大大减少运行时间。

spyder清除console输入框用:clear all
spyder清除变量用:reset.

在这里插入图片描述
在这里插入图片描述

建模部分

实际中,通常是多下标复杂模型。

多下标约束常出现遍历求和的情况:
m.addConstrs(
(quicksum**(**nutritionValues[f,c] * buy[f] for f in foods)
== [minNutrition[c], maxNutrition[c]]
for c in categories), “_”)

几个常用的公式:

x = m.addVar(obj=1, vtype = GRB.CONTINUOUS, name="x")
y = m.addVar(obj=1, vtype = GRB.CONTINUOUS, name="y")
z = m.addVar(obj=1, vtype = GRB.CONTINUOUS, name="z")m.addConstr(z == max_(x, y, 3), name="maxconstr")
m.addConstr(z == min_(x, y, 3), "minconstr")
m.addConstr(x == abs_(y), "absconstr")
m.addConstr(z == and_(x, y), "andconstr")
m.addConstr((z == 1) >>(x + y<= 4))
#m.addRange(x+y+z, 5, 10, "c")
m.addConstr(x+y+z==[5,10])对应的lp文件为:LP format - for model browsing. Use MPS format to capture full model detail.
Minimizex + y + z
Subject ToR0: x + y + z + RgR0 = 10GC4: z = 1 -> x + y <= 4
BoundsRgR0 <= 5
General Constraintsmaxconstr: z = MAX ( x , y , 3 )GC1: z = MIN ( x , y , 3 )GC2: x = ABS ( y )GC3: z = AND ( x , y )
End

这篇关于Gurobi搭建模型系列1——基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/552901

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ