gurobi 基于python的gurobipy库使用,具有一维变量和二维变量的复杂模型求解

写在前面

可以参考下pulpscip两篇的,比较详细,尤其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 alt

n = 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)


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值