gurobi 基于python的gurobipy库使用,具有一维变量和二维变量的复杂模型求解
创始人
2024-03-02 20:34:23
0

写在前面

可以参考下pulp和scip两篇的,比较详细,尤其pulp篇。举一反三,很好入门。

步骤

定义问题:m = Model(name)
定义变量:x = m.addVars(range(len), vtype=GRB.BINARY)
定义目标函数:m.setObjective(目标函数)
设置约束条件:m.addConstr(约束条件)
求解:m.optimize()#求解
m.objVal#目标函数结果

导入

from gurobipy import *

栗子 复杂模型 一维、二维变量

在这里插入图片描述

from gurobipy import *
import numpy as np
import csv
import os
import pandas as pd
import altair as altn = 200 #residential areas -变量i居民区数量
m = 40 # shelters-变量j庇护所数量
areas = range(n)
shelters = range(m)
print(areas,shelters)path = 'Pb2_areas.csv'
areas_matrix = np.genfromtxt(path, dtype=float, delimiter=',', encoding='utf-8-sig')
path = 'Pb2_shelters.csv'
shelters_matrix = np.genfromtxt(path, dtype=float, delimiter=',', encoding='utf-8-sig')R = areas_matrix[:,2]#第三列的居民区居民数量-变量R_i
C = shelters_matrix[:,2]#第三列的庇护所能庇护的容量-变量C_j#计算居民到庇护所的距离
D = np.zeros((n,m))#-变量D_ij距离
for i in areas:for j in shelters:D[i,j] = abs(areas_matrix[i,0] - shelters_matrix[j,0]) + abs(areas_matrix[i,1] - shelters_matrix[j,1])#定义问题
m = Model("assignment")#定义变量
x = m.addVars(shelters, vtype=GRB.BINARY)#一维变量
y_ij = m.addVars(areas, shelters, vtype=GRB.BINARY)#二维变量#定义目标函数
m.setObjective(sum(sum(D[i,j] * y_ij[i,j] for i in areas) for j in shelters), GRB.MINIMIZE)#设置约束
# shelter constraint
m.addConstr(sum(x[j] for j in shelters) == 10)# resident constraint
for i in areas:m.addConstr(sum(y_ij[i, j] for j in shelters) == 1)# capacity constraint
for j in shelters:m.addConstr(sum(R[i] * y_ij[i, j] for i in areas) <= C[j] * x[j])m.Params.TimeLimit = 60 # seconds
m.optimize()
print("Retrieve Optimal Solution.")# Print objective value
print("Objective value =", m.objVal)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...