现代生产与物流运作管理(平行机调度问题)Cplex求解,OPL语言

问题描述

按照机器环境分为单机调度、平行机调度、Flow Shop调度和Job Shop调度。单机调度是指所有工件都在同一台机器上加工完成。平行机调度是指每个工件只需在多台加工功能相同的机器中的任意一台上加工一次,其中,根据平行机加工速度的不同,又可将平行机分为具有相同加工速度的同型(identical)机、具有不同的加工速度但此速度不依赖于工件的同速(uniform)机和随加工的工件不同加工速度也不同的非同类型(unrelated)机。Flow Shop调度是指所有工件以相同的工艺路径在多台机器上加工。Job Shop调度是指每个工件以各自特定的工艺路径进行加工。

已知产品批次数,机器个数,批次m在机器j内的加工时间。采用平行机调度使得最大完工时间最短,并求出每批产品在各个机器中加工的开始时间和各批次产品在各个机器中加工的顺序。

参数设置

M        产品批次数

J        机器个数

j        机器编号(j=1,2,...,J)

m        产品批次编号 (m=1,2,...,M)

k        某批产品在对应机器中的加工顺序编号(k=1,2,...,M)

P_j_m         批次m在机器j内的加工时间

t_j_k         机器j内第k批产品的开始时间

z_{mjk}=0 or 1  

模型建立

最小化最大完工时间:

\min makespan

一个批次只能分配给一个机器,不能被拆分:

\sum\nolimits_{j=1}^J{\sum\nolimits_{k=1}^M{z_{mjk}=1}},\mathrm{ }\forall m\in 1,2,...,M

一个机器在同一个时间段只能加工一批产品:

\sum\nolimits_{m=1}^M{z_{mjk}}\le 1,\mathrm{ }\forall j\in 1,2,...,J;k=1,2,...,M

最大完工时间大于各个机器的完工时间:

makespan\ge t_{jM}+\sum\nolimits_{m=1}^M{z_{mjM}p_{jm}},\mathrm{ }\forall j\in 1,2,...,J;m\in 1,2,...,M

每个机器中第一批产品的开始时间都是0:

t_{j1}=0,\mathrm{ }\forall j\in 1,2,...,J

只有第k-1位的批次加工完成后才能开始加工第k批产品:

t_{jk}\ge t_{j(k-1)}+\sum\nolimits_{m=1}^M{z_{mj(k-1)}p_{jm}},\mathrm{ }\forall j\in 1,2,...,J;k=2,...,M

分配规则,产品批次必须按顺序进行分配:

\sum\nolimits_{m=1}^M{z_{mjk}}\le \sum\nolimits_{m=1}^M{z_{mjk-1}},\mathrm{ }\forall j\in 1,2,...,J;k=2,...,M

案例数据

M=8;

J=5;

p=[[544.5,539.01,534.6,463.05,449.82,519.75,495.72,453.6],[574.2,615.33,563.76,546.84,480.69,613.8,529.74,496.8],[524.7,581.94,515.16,511.56,423.36,574.2,466.56,423.36],[544.5,524.7,534.6,480.69,414.54,539.55,456.84,427.68],[534.6,586.71,524.88,471.87,423.36,529.65,466.56,475.2]];

/*********************************************

 * OPL 12.8.0.0 Model

 * Author: Sealand

 * Creation Date: 20221112 at 下午11:33:53

 *********************************************/

int M = 8;

int J = 5;

float p[1..J][1..M] =[[544.5,539.01,534.6,463.05,449.82,519.75,495.72,453.6],[574.2,615.33,563.76,546.84,480.69,613.8,529.74,496.8],[524.7,581.94,515.16,511.56,423.36,574.2,466.56,423.36],[544.5,524.7,534.6,480.69,414.54,539.55,456.84,427.68],[534.6,586.71,524.88,471.87,423.36,529.65,466.56,475.2]];

dvar boolean z[1..M][1..J][1..M];

dvar float t[1..J][1..M];

dvar float makespan;

minimize makespan;

subject to {

    forall(m in 1..M)

    sum(j in 1..J,k in 1..M)

    z[m][j][k] == 1;

   

    forall(j in 1..J, k in 1..M)

    sum(m in 1..M)

    z[m][j][k] <= 1;

   

    forall(j in 1..J, m in 1..M)

    makespan >= t[j][M] + sum(m in 1..M) z[m][j][M] * p[j][m];

   

   

    forall(j in 1..J)

    t[j][1] == 0;

   

    forall(j in 1..J, k in 2..M)

    t[j][k] >= t[j][k-1] + sum(m in 1..M) z[m][j][k-1] * p[j][m];

   

   

    forall(j in 1..J, k in 2..M)

    sum(m in 1..M) z[m][j][k] <= sum(m in 1..M) z[m][j][k-1];

     

}

 求解结果

makespan = 939.24;
 [[0,519.75,519.75,519.75,519.75,519.75,519.75,519.75],[0,574.2,574.2,574.2,574.2,574.2,574.2,574.2],[0,423.36,938.52,938.52,938.52,938.52,938.52,938.52],[0,524.7,939.24,939.24,939.24,939.24,939.24,939.24],[0,466.56,938.43,938.43,938.43,938.43,938.43,938.43]];
 [[[0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]],[[1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]]];


 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值