0
int NbPeriods = ...; range Periods = 1..NbPeriods;
int NbParts = ...; range Parts = 1..NbParts;
int NbSuppliers = ...; range Suppliers = 1..NbSuppliers;
int NbProcesses = ...; range Processes = 1..NbProcesses;
int NbPS[1..NbParts, 1..NbProcesses*NbSuppliers] = ...;


float Demand[Parts][Periods] = ...;
float BOH[Parts] = ...;
float Capacity[Suppliers][Processes] = ...;
float ProcessMapping[s in 1..NbSuppliers, pr in 1..NbProcesses, p in 1..NbParts] = NbPS[p, pr+NbProcesses*(s-1)];
float Price[Parts][Suppliers] = ...;

dvar float+ Supply[1..NbParts, 1..NbPeriods*NbSuppliers];
dvar float+ EOH[Parts][Periods];
dvar float+ Util[1..NbProcesses, 1..NbPeriods*NbSuppliers];


minimize
   sum( t in Periods ) DOIDelta[t] ;

 
subject to {
    forall(p in Parts)
        EOH[p][0] == BOH[p];
    
    forall(p in Parts)
      forall( t in Periods) 
            EOH[p][t] == EOH[p][t-1] + sum(s in Suppliers) Supply[p,t+NbPeriods*(s-1)] ;
            
    forall(t in Periods)
      forall(pr in Processes)
        forall(s in Suppliers)
            Util[pr,t+NbPeriods*(s-1)] ==  sum(p in Parts) (Supply[p,t+NbPeriods*(s-1)] * ProcessMapping[p, pr+NbProcesses*(s-1)] );
          
} 

The error message is for the last Util line: Operator not available for dvar float+ * float[][range]. I have checked other posts on this topic and the issues are on parenthesis. Even adding the parenthesis the error remains. Appreciate your help.

JMT
  • 63
  • 3
  • 7

1 Answers1

0

processMapping is a 3D array not a 2D array

forall(t in Periods)
      forall(pr in Processes)
        forall(s in Suppliers)
            Util[pr,t+NbPeriods*(s-1)] ==  sum(p in Parts) (Supply[p,t+NbPeriods*(s-1) * ftoi(ProcessMapping[s,p, pr+NbProcesses*(s-1)])] );
       

will work better

Alex Fleischer
  • 9,276
  • 2
  • 12
  • 15