Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only
  • 1.  Operator not available for dvar float+ * float[][range]

    Posted Mon July 26, 2021 01:00 PM
    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)]/ Capacity[s][pr] );
              
    } 
    


    The error message is for the last Util line: Operator not available for dvar float+ * float[][range].
    Appreciate your help.



    ------------------------------
    JM Tan
    ------------------------------

    #DecisionOptimization


  • 2.  RE: Operator not available for dvar float+ * float[][range]

    Posted Mon July 26, 2021 05:09 PM
    When you declare ProcessMapping, you give it three dimensions. In the line where the error occurs, I only see two indices for it.

    ------------------------------
    Paul Rubin
    Professor Emeritus
    Michigan State University
    ------------------------------



  • 3.  RE: Operator not available for dvar float+ * float[][range]

    Posted Tue July 27, 2021 03:44 AM
    Hi,

    same question at https://stackoverflow.com/questions/68524238/operator-not-available-for-dvar-float-floatrange/68540426#68540426

    Please try to avoid cross posting.

    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)])] );
           ​


    works better



    ------------------------------
    [Alex] [Fleischer]
    [EMEA CPLEX Optimization Technical Sales]
    [IBM]
    ------------------------------