/*********************************************
* OPL 12.6.2.0 Model
* Author: halenguy
* Creation Date: Jun 18, 2016 at 10:32:46 PM
*********************************************/
//parameters
int m =2; // number of product
int n =2; // number of station
int k =4; // number of MT
range station = 1..n;
range products = 1..m;
range MT = 1..k;
float prodGoal[station][products]=...;
float runrate[station][products]=...;
float LS[station][products]= ...;
float PT[station][products]=...;
float TS[station]=[0.5 , 0.25];
float MA[station]=[0.9, 0.8];
float T=10;
float weight[1..6]=[0.3 , 0.3, 0.1, 0.1, 0.1, 0.1];
float C[station]=[0.5, 0.5];
float l[MT]= [0.5, 0.3, 0.5, 1];
//variables
dvar float x[MT][station];
dvar float dp[station];
dvar float dn[station];
dvar boolean y[MT];
dvar boolean c[MT][station];
dvar float bp1[station];
dvar float bp2[station];
dvar float bp3[station];
dvar float bn1[station];
dvar float bn2[station];
dvar float bn3[station];
//Objective:
dvar float abc; //=sum(j in station)(abs(sum( p in products)(prodGoal[j][p]*PT[j][p])/LS[j][p]-T*sum( i in MT)((1-y[i])*x[i][j]) - T*(sum (i in MT)(y[i]*x[i][j]*l[i]))));
dvar float priority1; //= sum(j in station)(0.2*bp1[j]+0.3*bn1[j]);
dvar float priority2; //=sum(j in station)(0.2*bp2[j]+0.1*bn2[j]);
dvar float priority3; //=sum(j in station)(0.1*bp3[j]+0.1*bn3[j]);
dvar float xy[MT][station];
minimize (weight[3]*abc + weight[4]*priority1 + weight[5]*priority2 + weight[6]*priority3) ;
subject to {
forall(i in MT, j in station) (xy[i][j]==x[i][j]) == (y[i]==1);
forall(i in MT, j in station) (xy[i][j]==0) == (y[i]==0);
abc==sum(j in station)(abs(sum( p in products)(prodGoal[j][p]*PT[j][p])/LS[j][p]
-T*sum( i in MT)(x[i][j]-xy[i][j])
- T*(sum (i in MT)(xy[i][j]*l[i]))));
priority1== sum(j in station)(0.2*bp1[j]+0.3*bn1[j]);
priority2==sum(j in station)(0.2*bp2[j]+0.1*bn2[j]);
priority3==sum(j in station)(0.1*bp3[j]+0.1*bn3[j]);
forall(i in MT, j in station, p in products)
workload1:
c[i][j]==1 && y[i]==1 && l[i]==0.5 &&
T*sum (i in MT)(x[i][j]*l[i])+bn1[j] - bp1[j]== sum( p in products)((prodGoal[j][p]*PT[j][p])/LS[j][p]);
forall(i in MT, j in station, p in products)
workload2:
c[i][j]==1 &&y[i]==0 &&
T*sum (i in MT)(0)+bn2[j] - bp2[j]== sum( p in products)((prodGoal[j][p]*PT[j][p])/LS[j][p]);
forall(i in MT, j in station, p in products)
workload3:
c[i][j]==1 && y[i]==1 && l[i]==0.5 &&
T*sum (i in MT)(x[i][j]*l[i])+bn3[j] - bp3[j]== sum( p in products)((prodGoal[j][p]*PT[j][p])/LS[j][p]);
forall(i in MT, j in station)
workload4:
x[i][j] <= 1000000*c[i][j];
forall(i in MT, j in station)
sum (j in station) x[i][j] <= l[i];
forall(i in MT, j in station)
0<=x[i][j]<=1;
}