2017-09-05 3 views
1

Je suis tombé sur un problème de sac à dos, où le nombre maximum d'éléments multiples d'un ensemble d'articles doit être placé dans un seul bac en minimisant le coût. Je suis capable de résoudre le problème d'optimisation dans CPLEX.Sac à dos multi-capacités dans CPLEX

Cependant, je trouve des difficultés à mettre en œuvre dans CPLEX, lorsque le problème consiste en deux casiers (avec des capacités différentes).

Le problème:

Bin = [B1, B2] 
Capacity = [7,5] 

Item = [I1, I2, I3, I4] 
Weight = [6,3,1,4] 
Price = [2,8,2,4] 

L'objectif est de placer le nombre maximum d'éléments et de réduire au minimum le prix total. Comment est-ce que je peux implémenter ce problème d'objectif dans CPLEX?

Ci-dessous est mon extrait de code:

// ITEMS 
int n=4; // no of items 
range items = 1..n; // range of items 
int p[items] = [2,8,2,6]; //price 
int w[items] = [6,3,1,4]; //weight 

// BINS 
int m=2; // no of bins 
range bins=1..m; // range of bin 
int capacity[bins] = [7,5]; // capacity of each bin 

dvar boolean x[items][bins]; 

// model ; max the profit 
maximize sum(i in items, j in bins) p[i]*x[i][j]; 

subject to { 
    forall (j in bins) 
     cons1 : sum(i in items) w[i]*x[i][j] <= capacity[j]; 
    forall (i in items) 
     cons2 : sum(j in bins) x[i][j] == 1;  
} 

-Merci

Répondre

1

si vous ajouter

assert sum (i dans les articles) w [i] < = somme (b dans les cases) capacité [b];

alors cet assertion est enfreinte et cela explique pourquoi vous n'obtenez pas de solution. Vous n'avez pas assez de capacité de bac.

Mais si vous tournez

capacité int [bacs] = [7,5]; // capacité de chaque bac

dans

capacité int [bacs] = [7,7]; // capacité de chaque bac

alors vous aurez un solution

ce qui a trait

+0

Merci, monsieur Alex. À la première place, je n'ai pas tenu compte du fait que nous devons avoir une capacité totale suffisante pour s'adapter à tous les articles. –

0

vous trouverez peut-être un exemple havresac dans CPLEX_Studio1271 \ OPL \ examples \ OPL \ SAC À DOS

concernant

+0

Oui, je suis passé par cet exemple. Cet exemple de Knapsack se compose d'une corbeille et de plusieurs éléments. Mais j'essaie de modifier cela pour plusieurs bacs (avec des capacités différentes) et plusieurs éléments. Jusqu'à présent, je suis incapable d'obtenir un indice pour continuer. -Merci –