CPLEX 问题

在線急急急急急!!!!!
请问以下 CPLEX 该如何输出 Cmax?
我主要输出工厂之间最大总完工时间。

 int num_jobs = ...;
 int num_stages = ...;
 int num_factory = ...;
 
 range pred_jobs = 0..num_jobs;
 range jobs = 1..num_jobs;
 range stages = 1..num_stages;
 range factories = 1..num_factory;
 
 int stage_machines[stages] = ...;
 range machines = 1.. max(g in stages) stage_machines[g];
 
 int processing_time[jobs][stages] = ...;
 int setup_time[pred_jobs][jobs] = ...;
 
 int BigM = sum(j in jobs, g in stages) processing_time[j][g] + 
 sum(pred_j in pred_jobs, j in jobs) setup_time[pred_j][j];
 
 dvar boolean x[jobs][factories];
 dvar boolean y[jobs][factories][stages][machines];
 dvar boolean z[pred_jobs][jobs][stages];
 dvar int+ S[jobs][factories][stages];
 dvar int+ C[jobs][factories][stages];
 dvar int+ Cmax;
 
 minimize Cmax;
 
 subject to{
   
   forall(f in factories)
     sum(j in jobs) x[j][f] >= 1;
     
   forall(j in jobs)
     sum(f in factories) x[j][f] == 1;
     
   forall(j in jobs, f in factories, g in stages)
     sum(i in 1..stage_machines[g]) y[j][f][g][i] == x[j][f];
     
   forall(j in jobs, f in factories, g in stages)
     sum(i in 1..stage_machines[g]) y[j][f][g][i] <= 1;
     
   forall(f in factories, g in stages, i in 1..stage_machines[g])
     sum(j in jobs) y[j][f][g][i] >= 1;
   
   forall(pred_j in jobs, j in jobs: pred_j != j, g in stages)
     z[pred_j][j][g] + z[j][pred_j][g] >= 1;
     
   forall(j in jobs, g in stages)
     z[0][j][g] == 1;
   
   // 任何階段之第一個工作之起始時間及完工時間
   forall(j in jobs, f in factories, g in stages, i in 1..stage_machines[g]){
     S[j][f][g] + BigM * (2 - y[j][f][g][i] - z[0][j][g]) >= setup_time[0][j];
     C[j][f][g] + BigM * (2 - y[j][f][g][i] - z[0][j][g]) >= S[j][f][g] + processing_time[j][g];
   }
   
   // 第一個工作在後續階段之起始時間
   forall(j in jobs, f in factories, g in 1..num_stages-1, i in 1..stage_machines[g]){
     S[j][f][g+1] + BigM * (4 - y[j][f][g][i] - y[j][f][g+1][i] - z[0][j][g] - z[0][j][g+1]) >= C[j][f][g];
   }
   
   // 同一階段之後續工作之起始時間
   forall(pred_j, j in jobs: pred_j != j, f in factories, g in stages, i in 1..stage_machines[g]){
     S[j][f][g] + BigM * (3 - y[pred_j][f][g][i] - y[j][f][g][i] - z[pred_j][j][g]) >= C[pred_j][f][g] + setup_time[pred_j][j];
   }
   
   // 後續工作之下一階段之起始時間
   forall(pred_j, j in jobs: pred_j != j, f in factories, g in 1..num_stages-1, i in 1..stage_machines[g]){
     S[j][f][g+1] + BigM * (4 - y[pred_j][f][g][i] - y[j][f][g][i] - z[pred_j][j][g] - z[pred_j][j][g+1]) >= C[pred_j][f][g+1];
   }
   
   
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值