VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > python爬虫 >
  • 手把手教你用Gurobi求解一个数学模型

手把手教你用Gurobi求解一个数学模型

在接触Gurobi之前,一直使用Java语言调用cplex求解数学模型,这段时间在师兄的指点下,学习了使用python调用Gurobi的一些基础操作,感叹实在是太简易了。
在此分享一个求解Vrptw问题的小例子。

带时间窗的车辆路径规划问题(Vrptw)

对于Vrptw问题来说,数学模型主要由以下部分组成。首先我们定义一些相关参数,一个图可以表示为G ( V , A ) G(V,A)G(V,A),其中V = { 0 , 1 , . . . , n , n + 1 } V= { 0,1,...,n,n+1 }V={0,1,...,n,n+1}为图中所有点的集合,A AA为图中所有弧的集合,有( i , j ) ∈ (i,j)in(i,j)A,∀ i , j ∈ V , i ≠ j orall i,jin V, i e ji,jV,i=j。弧( i , j ) (i,j)(i,j)的单位运输费用为c i j c_{ij}cij,运输时间为t i j t_{ij}tij,每个客户点的需求为q i j q_{ij}qij,可服务的时间窗为[ e i , l i ] [e_i,l_i][ei,li],服务时长为s e r v i serv_iservi。令车辆的集合为K KK,每辆车的最大载重为Q k , ∀ k ∈ K Q_k, orall kin KQk,kK。决策变量为x i j k x_{ij}^kxijk,代表第k kk辆车是否服务了弧( i , j ) (i,j)(i,j)s i s_isi为客户点i ii开始被服务的时间。

接下来构建数学模型。
目标函数为最小化运输成本:
m i n ∑ k ∈ K ∑ ( i , j ) ∈ A c i j x i j (1) min sum_{kin K} sum_{(i,j)in A}c_{ij}x_{ij} ag{1}minkK(i,j)Acijxij(1)
约束一让车辆驶出仓库(depot):
∑ ( 0 , j ) ∈ A x 0 j k = 1 ,   ∀ k ∈ K (2) sum_{(0,j)in A}x_{0j}^k =1, orall kin K ag{2}(0,j)Ax0jk=1, kK(2)
约束二为流平衡(除去depot之外的点):
∑ ( i , j ) ∈ A x i j k − ∑ ( j , i ) ∈ A x j i k = 0 ,   ∀ k ∈ K , i ∈ V ∖ { s , t } (3) sum_{(i,j)in A}x_{ij}^k - sum_{(j,i)in A}x_{ji}^k = 0, orall kin K ,i in Vsetminus {s,t} ag{3}(i,j)Axijk(j,i)Axjik=0, kK,iV{s,t}(3)
约束三让车辆驶回depot:
∑ ( i , n + 1 ) ∈ A x i , n + 1 k = 1 ,   ∀ k ∈ K (4) sum_{(i,n+1)in A}x_{i,n+1}^k =1, orall kin K ag{4}(i,n+1)Ax


相关教程