Может ли кто-нибудь помочь мне с этой моделью CPLEX? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь суммировать стоимость запасов в каждой части [i] [j] дерева в зависимости от:

X={x[i][j]} 
x[i][j] = 1 if has stock at ij
x[i][j] = 0 if has no stock at

Запасов, зависящих от времени подготовки, от которых зависят их сами.есть запас, как указано ниже:

a[i][j] = t[i][j] if it's the end node
    = t[i][j] + max(s€sons of the brunch){ a[i+1][s] * (1 - x[i][s]}

Ну, код компилируется без каких-либо структурных ошибок, но массивы a и переменная решения не получают никакого ответа

//getting all the sons

range L=0..ligne;
range C=1..colone;

int sons[L][C][C];
int a[L][L];
execute
{
    for (var i in Li){
        for (var j in C){
            for (var k in C){
                if (parent[i+1][k] == j){
                   sons[i][j][k] = k;
                }else
                   sons[i][j][k] = 0;
            }
        }
        a[i][0]=0;
    }
    for (var j in C){
        for (var k in C)
            sons[ligne][j][k]=0;    
    }
 }

//the variable and the objective function and constraints
 dvar boolean x[L][Ci];

 dexpr float TotalCost = aih_cost*adup*(1.5+var_factor)*lt_factor*sum(i in L,j   in C)( unit_price[i][j]*rqtf[i][j]*x[i][j]*a[i][j] ); 

 minimize TotalCost;

 subject to {
    forall(i in Li){
        forall(j in C){     
            forall(k in C) 
            (1-x[i+1][sons[i][j][k]]) * a[i+1][sons[i][j][k]] + t_process[i][j] - a[i][j] >= 0;
        }
}        
    a[0][1]<=service_t; 
}

Я ожидаю, чтоиметь по крайней мере предложенный массив для x и некоторые времена подготовки "a".

1 Ответ

2 голосов
/ 11 апреля 2019

Ваша модель может быть невозможна.Вы можете добавить имена к ограничениям, превратив

   forall(i in Li){
        forall(j in C){     
            forall(k in C) 
            (1-x[i+1][sons[i][j][k]]) * a[i+1][sons[i][j][k]] + t_process[i][j] - a[i][j] >= 0;
        }
}        
    a[0][1]<=service_t; 

в

forall(i in Li){
        forall(j in C){     
            forall(k in C) 
            ct1:(1-x[i+1][sons[i][j][k]]) * a[i+1][sons[i][j][k]] + t_process[i][j] - a[i][j] >= 0;
        }
}        
    ct2:a[0][1]<=service_t; 

, и тогда вы сможете немного расслабиться, и это поможет вам.

...