1. 大M法怎么将非线性问题线性化

大M法? - 知乎

2. Gurobi 中添加数据

我认为你对n的定义没有问题。尽管如此,我还是重写了您的代码,使其更简洁易懂。首先,我们创建给定的集合和常量:

from gurobipy import Model, GRB, quicksum
import numpy as npm = Model()demo_coords = np.random.uniform(0, 100, size=(50, 2)) # Just for demonstration# Sets and Constants
demand = [f"i{k}" for k in range(1, 51)]
facilities = [ f"facility{k}" for k in range(1, 11) ]
dloc = {fac : demo_coords[i] for i, fac in enumerate(demand)}
maxdist = 40
M = 10e6

请注意,dloc是一个字典,因此dloc[i]将为您提供坐标 对于需求点i,则dloc[i][0]是x坐标,dloc[i][1]是 y坐标。在

现在我们可以创建变量并将它们存储在gurobi tubledict:

^{pr2}$

使用m.addConstrs(),约束可以写成

# Constraints
m.addConstrs(((dloc[i][0] - floc[j, 0]) * (dloc[i][0] - floc[j, 0]) \+ (dloc[i][1] - floc[j, 1])*(dloc[i][1] - floc[j, 1]) \<= maxdist**2 + M * (1 - assign[i, j]) \for i in demand for j in facilities), name="distance")m.addConstrs((quicksum(assign[i, j] for j in facilities) == 1\for i in demand), name="assignDemand")m.addConstrs((assign[i, j] <= isopen[j] for i in demand for j in facilities),\
name="closed")m.addConstr(n == quicksum(isopen[j] for j in facilities), name="numFacilities")# zip is needed to iterate over all pairs of consecutive facilites
m.addConstrs((isopen[j] >= isopen[jp1] \for j, jp1 in zip(facilities, facilities[1:])), name="order")

请注意,虽然在距离约束中写入floc[j, 0]不是问题,但不能编写dloc[i, 0],因为dloc是一个python字典,floc是tupledict。在

设置目标函数并调用m.optimize()

# Objective
m.setObjective(n, sense=GRB.MINIMIZE)m.optimize()if m.status == GRB.OPTIMAL:print(f"Optimal Solution is: {m.objVal}")print("       ")for var in m.getVars():print(var.varName, var.X)

给出了最优解n=3。

在Gurobi中添加大小为n的二进制变量 - 问答 - Python中文网

3. Gurobi 添加约束的方式

首先需要添加z作为二进制变量:

z = m.addVars(I, J, vtype=GRB.BINARY, name="z")

然后需要约束来确保z[i, j] = 1当且仅当c[i, j] <= 150。 一种方法是使用指示符约束:

这相当于

c > 150 -> z = 0
c < 150 -> z = 1

添加如下:

m.addConstrs((z[i, j] == 1) >> (c[i][j] <= 150) for i in I for j in J)
m.addConstrs((z[i, j] == 0) >> (c[i][j] >= 150) for i in I for j in J)

您也可以自己显式地建模: 如果在c[i][j] - 150的值上有上下界M和{}(即M >= c[i][j] - 150 >= m表示所有i, j),则可以使用以下约束:

M * (1-z) >= c - 150
m * z <= c - 150

如果c > 150,则两个不等式的右边都是正的。第一个强制1 - z = 1,因此{}。第二个不等式将得到满足。在

如果c < 150,则右侧为负数。第一个不等式变得微不足道,而第二个不等式则强制z = 1。在

对于Mc中的最大条目就可以了,对于m,如果所有c[i][j]都是非负的,则可以选择-150。在

按如下方式添加这些约束:

m.addConstrs( M * (1 - z[i, j]) >= c[i][j] - 150 for i in I for j in J )
m.addConstrs( m * z[i,j] <= c[i][j] - 150 for i in I for j in J )

注意,我忽略了c = 150的情况。这是因为对于浮点数,等式总是被认为是在公差范围内满足的,因此没有简单的方法来区分严格和非严格的不等式。你可以用epsilon来近似,例如:

z = 0 -> c >= 150 + epsilon

在Gurobi中添加二进制变量 - 问答 - Python中文网

4. Gurobi 中文网站,可以下载资料

学习资料-Gurobi 中国

Gurobi - 入门资料相关推荐

  1. 少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)

    (图片付费下载自视觉中国) 作者 | 黄海广 来源 | 机器学习初学者(ID: ai-start-com) 知识更新非常快,需要一直学习才能跟上时代进步,举个例子:吴恩达老师在深度学习课上讲的Tens ...

  2. mapreduce程序输出评分8.6分以上的书名和评分_如何选编程入门资料?光评分高怎么够|文末赠书...

    说到编程入门,很多人第一想到的肯定是Python. 那么,编程零基础应当如何开始学 Python ,才不会入门即放弃?一开始的学习资料的选择尤为重要.那么,如何筛选适合自己的入门资料?这里和大家谈谈我 ...

  3. 带你少走弯路:强烈推荐的Keras快速入门资料和翻译(可下载)

    上次写了TensorFlow和PyTorch的快速入门资料,受到很多好评,读者强烈建议我再出一个keras的快速入门路线,经过翻译和搜索网上资源,我推荐4份入门资料,希望对大家有所帮助. 备注:另外两 ...

  4. 带你少走弯路:强烈推荐的Pytorch快速入门资料和翻译(可下载)

    上次写了TensorFlow的快速入门资料,受到很多好评,读者强烈建议我出一个pytorch的快速入门路线,经过翻译和搜索网上资源,我推荐3份入门资料,希望对大家有所帮助. 备注:TensorFlow ...

  5. 带你少走弯路:强烈推荐的TensorFlow快速入门资料和翻译(可下载)

    知识更新非常快,需要一直学习才能跟上时代进步,举个例子:吴恩达老师在深度学习课上讲的TensorFlow使用,这个肯定是他近几年才学的,因为谷歌开源了TensorFlow也就很短的时间. 吴恩达老师以 ...

  6. 一些NLP的入门资料参考

    本站整理了一些NLP的入门资料参考,建议初学者看看. 需要复制链接在浏览器里打开. 1.通过kaggle比赛学习机器学习文本分类方法https://zhuanlan.zhihu.com/p/34899 ...

  7. Node.js:入门资料

    <快速搭建 Node.js 开发环境以及加速 npm> http://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html <N ...

  8. 循环神经网络(RNN)和LSTM初学者指南 | 入门资料

    原作 Skymind  乾明 编译  量子位 出品 | 公众号 QbitAI 最近,有一篇入门文章引发了不少关注.文章中详细介绍了循环神经网络(RNN),及其变体长短期记忆(LSTM)背后的原理. 具 ...

  9. 基于Jupyter Notebook从头学习机器学习 | 入门资料分享

    乾明 编译整理  量子位 报道 | 公众号 QbitAI 热心分享机器学习入门资料的人越来越多了. 今天跟大家介绍的是一个名为ZekeLabs的机构推出的机器学习入门资料. ZekeLabs是一个位于 ...

最新文章

  1. 几个数判断大小_chemistry three 配合物的配位数
  2. 2021 网易创新企业大会来了
  3. linux yum nothing,Centos6.9 yum安装htop报错解决过程
  4. SpringBoot @ConfigurationProperties详解
  5. mysql5.7.11 创建用户_修改更新查找MySQL5.7.x的root用户的默认密码
  6. 图解linux启动过程
  7. 普适计算机的应用领域有哪些,2017年度计算机科学各领域热点词汇
  8. 实验四+074+林盼皇
  9. 拓端tecdat:Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集
  10. 数据挖掘原理与算法_【干货】UIUC韩家炜老师2020年新课:CS512 数据挖掘:原理与算法,附PPT...
  11. (一)Redis实战教程之redis简介
  12. Android网络框架情景分析之NetworkManagementService和Netd交互深入分析一
  13. Python 将tif文件分割成多个小tif
  14. java aws_适用于Java的AWS开发工具包-开发人员-AWS文档.PDF
  15. (附源码)SSM 汽车停车位共享APP 毕业设计 041534
  16. 中国新冠疫情数据可视化
  17. 第5章第27节:如何录制幻灯片的演示过程 [PowerPoint精美幻灯片实战教程]
  18. mysql支持ASCII_MySQL ASCII()函数返回字符的ASCII码值
  19. html去掉nav的圆点,web前端分享HTML5中的nav标签
  20. 「深圳搬家」空调移机有哪些注意事项?

热门文章

  1. 天创速盈电商:拼多多运营技巧有哪些?注意事项有哪些?
  2. Web服务器对客户端请求的响应信息是,图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应...
  3. 零拷贝之mmap和sendfile
  4. 网页设计与制作html+css
  5. Hadoop 生态之 MapReduce 及 Hive 简介
  6. 圆通开放平台电子面单下单接口,适用于第三方系统对接
  7. MySQL数据库主从数据库配置
  8. 如何理解拉格朗日乘子法?
  9. python中的pass是什么意思_python中的pass代表什么意思呢
  10. 关于Java获取公网IP地址