【设施选址】 覆盖问题-Python调用Gurobi实现

1、问题描述:假设有一个需求点的位置集合和一个设施的位置集合,且已知每个设施的服务范围。在满足覆盖所有需求点顾客的前提下,选取若干个点建造设施,以使得建设总成本最小。要求满足客户集合内所有客户的需求的前提下,合理对设施进行选址达到建设成本最小。
在这里插入图片描述

2、模型构建
在这里插入图片描述

3、代码实现

from gurobipy import *
import random
import numpy as np

# Parameters 参数
num_ponits = 5        # I: set of the demand ponits
num_facilities = 10       # J: set of possible facility location
setup_cost = [3,2,3,1,3,3,4,3,2,4]   # f: cost of locate each facility
np.random.seed(0)
cover = np.random.randint(2,size=(num_ponits,num_facilities))

#Creat a new model
m = Model("Covering Model")

# Create variables
select = m.addVars(num_facilities, vtype=GRB.BINARY,name='Select') # X

# 添加约束
m.addConstrs((quicksum((cover[i,j]*select[j]) for j in range(num_facilities)) >=1 for i in range(num_ponits)),name='Cover' )

#添加目标函数
m.setObjective(select.prod(setup_cost),GRB.MINIMIZE) #gurobi构建线性表达式,变量的系数为1时使用sum方法,变量的系数不为1时使用prod方法(变量和系数相乘后累加)

m.optimize()

for v in m.getVars():
    if v.x >0:
        print('%s %g'% (v.varName, v.x))

print('obj:%g'%m.objVal)

参考文献
[1] 运小筹:优化 | 五个经典设施选址模型的详解及其实践:Python调用Gurobi实现

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值