cplex - 我的多程车辆路线问题没有解决方案
问题描述
我正在 OPL 中研究多行程车辆路线问题模型(代码添加在下面),但我有两个问题
1:我的目标函数在我试图输入的时间限制下不起作用,任何人都可以给我提示如何正确输入?应该设置,只要样品在时间限制 Lm 之前进入实验室(节点 0),就没有惩罚,而当它迟到时,在 Lm 之后,惩罚功能就会启动。
2:我只是想弄清楚到目前为止我建立的模型中是否缺少关键约束。
希望你能提供帮助!提前致谢。
int nn=...; // Number of collection sites, laboratory is 0
range N=0..nn; // Set of nodes
int nk=...; // Number of vehicles
range K=1..nk; // Set of vehicles
int nr=...; // Number of routes
range R=1..nr; // Set of routes
int nt=...; // Number of minutes per workday
range T=0..nt; // Set of minutes (planning time horizon from 08:00 - 18:00)
int t[N][N]=...; // Travel time from site i to j
int q[N]=...; // Demand per customer i
int p1=...; // Penalty cost for samples arriving after deadline lm
int Lm=...; // Maximum duration of a route
int s[N]=...; // Service time per customer i
int M=...; // Sufficiently big number
dvar boolean x[N][N][R]; // equal to 1 if arc (i,j) belongs to route r, 0 otherwise
dvar boolean y[N][T][R]; // equal to 1 if sample is picked up at customer i at time t and belongs to
route r, 0 otherwise
dvar int+ w[N][R]; // Continuous variable indicating the service start time of customer i in
route r
dvar int+ z[N][R]; // Start time at laboratory of route r
dvar int+ v[N][R]; // Arrival time at laboratory 0 after completing its route r
//Objective Function//
maximize sum (r in R, i in N, t in T: t <= v[0][r]-Lm) q[i] * y[i][t][r] +
sum (r in R,i in N, t in T: t>v[0][r]-lm) q[i]* y[i][t][r]*p1 -
0.3 * sum (r in R, i,j in N) t[i][j] * x[i][j][r];
//Constraints//
subject to {
forall (i in N, t in T)
sum(r in R) y[i][t][r] == 1; //each customer should be visited exactly
once per route
forall (i in N, r in R, t in T)
sum (j in N) x[i][j][r] == y[i][t][r]; //Link x and y variables
forall (h in N, r in R)
sum (i in N) x[i][h][r] - sum (j in N) x[h][j][r] == 0; //Flow balance constraint: if a vehicle
enters a site it should also leave that site
forall (r in R)
sum (i in N) x[0][i][r] == 1; //Every route leaves from the laboratory
forall (r in R)
sum (i in N) x[i][0][r] == 1; //Every route returns to the laboratory
forall (i,j in N, r in R)
w[i][r] + s[i] + t[i][j]-M*(1-x[i][j][r]) <= w[j][r]; //Ensures the feasbility of the time
schedule
forall (i in N, r in R)
w[i][r] <= z[0][r] + Lm; //Constrains the deadline for serving a
customer
forall (i,j in N, r in R)
x[i][j][r]==0; //Eliminate Subtours
forall (i in N)
sum(r in R, j in N) x[i][j][r] <= 2; //Collection sites can be visited at most twice
a day
forall (i in N)
sum(r in R) x[i][i][r]==0; //Prevent loops
}
解决方案
推荐阅读
- jquery - 使用 Jquery 进行动态搜索
- scipy - 对对象使用 scipy 层次聚类
- android - 不更新目标NDK平台有什么好处吗?
- python - Beautifulsoup python 类解析
- vim - Vim Fugitive:切换“:Gblame”功能
- c# - WPF:DoubleAnimation“到”属性绑定时间
- javascript - 更改组件的路由
- sql-server - SQL Server Migration Assistant for Access 是否保留表关系?
- php - 如何更改父类函数中受保护变量的值
- amazon-ec2 - 自动为 Spot 实例分配 IP 地址