Search code examples
mathematical-optimizationcplexopl

CPLEX not enough memory when usingCP Optimizer


I am trying to run a CPOptimizer but it has an error saying:"not enough memory"

I tried to run it on a 16GB RAM with 16000mb memory available for the workspace but the error still happened.

Is it because of my constraints or is it that I need a larger memory system?

Thank you so much in advance.

Here are my mode:

using CP;
int scale=10;

int NumbDay =...;
int NumbTask =...;

range Day = 1 .. NumbDay;
range Task = 1 .. NumbTask;

int h [Day]=...;
int c [Day]=...;
int d [Day]=...;
int R [Task]=...;
int E [Task]=...;
int O [Task]=...;
float t [Task]=...;

dvar int+ q [Task];
dvar int+ n [Task];
dvar int+ m [Task];
dvar int scaleW[Day] in 0..1000;
dexpr float W [k in Day]=scaleW[k]/scale;
dvar boolean X [Day][Task];

dexpr float e1 = sum(k in Day)(W [k])^2;

dexpr float e2 = sum(i in Task) (q [i]*n[i]*m[i]);

minimize staticLex(e1, e2);
subject to 
{
    constraint_1:
        forall (k in Day){
            sum(i in Task) t [i]*X [k][i] == W [k];
    }  
    constraint_2:
        forall (i in Task){
            sum(k in Day) X [k][i] == 1;
    }
    constraint_3:
        forall (k in Day, i in Task){
            X [k][i] == 0 || X [k][i] == 1;
    }  
    constraint_4:
        forall (i in Task){
            sum(k in Day) X [k][i] * h [k] <= R [i];
    }
    constraint_5:
        forall (k in Day, i in Task){
            q [i] == R [i] - sum(k in Day) X [k][i] * h [k];
    }
    constraint_6:
        forall (i in Task){
            sum(k in Day) X [k][i] * c [k] <= E [i];
    }
    constraint_7:
        forall (k in Day, i in Task){
            n [i] == E [i] - sum(k in Day) X [k][i] * c [k];
    }
    constraint_8:
        forall (i in Task){
            sum(k in Day) X [k][i] * d [k] <= O [i];
    }
    constraint_9:
        forall (k in Day, i in Task){
            m [i] == O [i] - sum(k in Day) X [k][i] * d [k];
    }
}

Solution

    1. Can you share your .dat so that other users could try ?

    2. Moving to 1 worker could save memory

      execute { cp.param.Workers=1; }