软件版本:IBM ILOG Cplex 12.6
代码:
int NbCustomers = ...;
int NbVehicles = ...;
range Nodes = 0..NbCustomers + 1;
range Customers = 0..NbCustomers - 1;
range Vehicles = 0..NbVehicles - 1;
float Distance[Nodes][Nodes] = ...;
int Demand[Nodes] = ...;
int ServiceTime = ...;
int VehicleCapacity[Vehicles] = ...;
float VehicleSpeed[Vehicles]= ...;
int TotalTime= ...;
dvar float c[Nodes][Nodes][Vehicles];
dvar boolean x[Nodes][Nodes][Vehicles];
minimize
sum( i in Nodes, j in Nodes, k in Vehicles ) Distance[i][j] * x[i][j][k];
subject to{
forall( i in Nodes, j in Customers )
sum( k in Vehicles : j != NbCustomers +1 && j != NbCustomers && i != j )
x[i][j][k] * c[i][j][k]== Demand[j];
forall( i in Nodes, j in Customers, k in Vehicles : i != NbCustomers +1 && i != j )
x[i][j][k] <= c[i][j][k];
forall( i in Nodes, j in Customers, k in Vehicles : i != j )
c[i][j][k] <= VehicleCapacity[k];
//forall( i in Nodes, j in Customers, k in Vehicles : i != j )
// x[i][j][k] <= x[i][j][k+1];
forall( m in Nodes, k in Vehicles : m != NbCustomers && m != NbCustomers + 1 )
sum( i in Nodes : i != NbCustomers + 1 && i != m ) x[i][m][k] ==
sum( j in Nodes : j != NbCustomers && m != j ) x[m][j][k];
forall( k in Vehicles )
sum( i in Nodes, j in Nodes : i != j ) x[i][j][k] * Distance[i][j]/VehicleSpeed[k]
+ sum( i in Nodes, j in Nodes : i != j ) c[i][j][k] * ServiceTime <= TotalTime;
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632