导读:上篇文章 【CDN布局规划】背后的算法技术1—业务问题拆解中,我们介绍了CDN服务器的布局规划问题,分析了该问题需要考虑的业务目标和业务规则。本文将逐步给出该问题的数学模型和代码实现。
作者 1:向杜兵,算法专家,某制造业龙头
作者 2:张哲铭,算法专家,某互联网大厂
- 明人不说暗话,【运筹匠心】想要大家的赞!赞!赞!。先赞后看,多多益善(* ̄︶ ̄)~~~
- 本期推文代码获取方式,将推文转发朋友圈获20赞,添加管理员微信,管理员会定期回复数据代码链接哈~~~
- 各个系列的开源资料会定期整理发放,大家可以加粉丝群领取哦~~~
请加管理员微信:IndustryOR

大家好!我们是IndustryOR 团队,致力于分享业界落地的算法技术。欢迎关注微信公众号/知乎【运筹匠心】 。本期我们来谈一谈《CDN布局规划的算法技术》。本期案例共分 3 篇文章依次讲解:(1)业务问题拆解;(2)模型算法实现;(3)多求解器批量求解对比。
本篇文章讲解(2)模型算法实现。
共分为 3 个部分,依次为:
1.基础网络构建
2.数学模型刻画
3.模型代码实现
上篇文章业务问题拆解中我们一起对CDN布局规划问题进行了拆解,明确了问题的边界。然而,talk is cheap, show me your code,本篇将开始动手环节,建立该问题的数学模型,并编写模型代码。本文代码基于 Python 3.9 + Gurobi 10.0.3 。如果你手上没有 Gurobi ,或者想用别的求解器来求解,那该如何是好?难道要从头学习其他求解器的API,然后重新写一遍几乎完全一样的代码吗?Don’t Repeat Yourself,我们下期也将介绍如何一键切换你的求解器,无需从头学习其他求解器的API,也无需编写新代码,直接求解。
1.基础网络构建
由业务问题拆解可知,该问题建立在一个基础的网络结构之上。因此,我们首先对网络基础要素进行梳理。
网络基础要素
设网络 G = ( V , E ) G=(V,E) G=(V,E),
V V V:节点集合。每个节点 i ∈ V i \in V i∈V存在以下关键属性:
1)需求 b i b_i bi:
- b i < 0 b_i<0 bi<0:该点为与用户直接相连的网络节点, ∣ b i ∣ |b_i| ∣bi∣代表消费节点的需求带宽
- b i > 0 b_i>0 bi>0:该点为服务器部署节点, ∣ b i ∣ |b_i| ∣bi∣代表节点的输出能力
- b i = 0 b_i=0 bi=0:该点为中间节点,只起到传输的作用
2)部署成本 d i d_i di:在节点 i i i部署服务器将产生的成本
E E E:弧集合。每条弧 ( i , j ) ∈ E (i,j) \in E (i,j)∈E,存在以下关键属性:
- 容量上限 u i , j u_{i,j} ui,j:该条弧允许传输的最大带宽
- 单位传输费用 c i , j c_{i,j} ci,j:该条弧单位带宽的费用
- 流量 f i , j f_{i,j} fi,j:经过该条弧的总带宽
L = { 1 , . . . , m } L=\{1,...,m\} L={ 1,...,m}:服务器档次集合。每个档次 l ∈ L l \in L l∈L存在以下关键属性:
- 硬件成本 h l h_l hl


275

被折叠的 条评论
为什么被折叠?



