Eine Frage zu CPLEX -Einschränkungen im Green Field -Modus [geschlossen]Java

Java-Forum
Anonymous
 Eine Frage zu CPLEX -Einschränkungen im Green Field -Modus [geschlossen]

Post by Anonymous »

In meinem Szenario gibt es Kundenpunkte und Lagerpunkte, an denen die Lagerkoordinaten die Variablen sind, die ich optimiere, und der Optimierungszweck besteht darin, den Transportabstand zu minimieren. Ich nehme den Abstand vom Kundenpunkt zum Lagerpunkt durch Projektion an und bekomme die CPLEX -Variable, die die Entfernungsmatrix zwischen dem Lagerhaus und dem Kundenpunkt darstellt. Mein nächster Schritt ist es, diese Distanzmatrix zu verwenden, um die Abdeckungsbeziehungsmatrix zwischen dem Lagerhaus und der Nachfrage zu berechnen (jede Nachfrage muss vom nächsten Lagerhaus abgedeckt werden). Ich fand, dass es kein Problem mit dem Optimierungsziel des Modells gibt, aber wenn ich die Optimierungsergebnisse ausgibt, stellte ich fest, dass es immer vom ersten Lagerhaus abgedeckt ist. Im Folgenden werde ich die Einschränkungen der Projektionsberechnung und die Einschränkungen der Berechnung der Abdeckungsmatrix aus der Entfernungsmatrix bereitstellen. Bitte helfen Sie mir zu überprüfen, ob es ein Problem mit meinen Modellbeschränkungen gibt. < /P>

Code: Select all

private void calcWareToCustomers() throws IloException {
for (int i = 0; i < warehouseNum; i++) {
for (int j = 0; j < customerNum; j++) {
// Distance:custom j to wareHouse i
IloNumVar l = cplex.numVar(0, Double.MAX_VALUE, "l_" + i + "_" + j);

IloNumVar absXDiff = cplex.numVar(0, Double.MAX_VALUE);
IloNumVar absYDiff = cplex.numVar(0, Double.MAX_VALUE);

IloNumExpr deltaX = cplex.diff(x[i][0], locations[j][0]);
IloNumExpr deltaY = cplex.diff(x[i][1], locations[j][1]);

cplex.addEq(absXDiff, cplex.abs(deltaX));
cplex.addEq(absYDiff, cplex.abs(deltaY));

for (int degrees = 0; degrees 
Abort wird die Entfernung zwischen Kunden und Lager berechnen. Dann sind die Einschränkungen zur Berechnung der Deckbeziehung. < /p>
private void calcWareCoverCustomers() throws IloException {
for (int j = 0; j < customerNum; j++) {
// customer cover by only one warehouse
IloLinearNumExpr expr = cplex.linearNumExpr();
for (int i = 0; i < warehouseNum; i++) {
expr.addTerm(1, wareCoverCustomer[i][j]);
}
cplex.addEq(expr, 1, "custom_only_cover_" + j);

// cover by nearest
IloNumExpr slack = cplex.numVar(0.0, Double.MAX_VALUE, "slack_" + j);
for (int i = 0; i < warehouseNum; i++) {
for (int k = 0; k < warehouseNum; k++) {
if (i != k) {
cplex.addLe(
cplex.diff(wareToCustomer[i][j], wareToCustomer[k][j]),
cplex.prod(cplex.diff(1, wareCoverCustomer[i][j]), BIGM),
"min_dis_cover_" + i + "_" + j
);
}
}
}
cplex.addEq(coverPenalty[j], cplex.prod(PUNISH, slack));
}
}
< /code>
Möglicherweise wird das Ziel benötigt: < /p>
    private void initObjective() throws IloException {
for (int i = 0; i < customerNum; i++) {
minDist[i] = cplex.numVar(0, Double.MAX_VALUE, "minDist_" + i);

IloNumExpr[] numExpr = new IloNumExpr[warehouseNum];

for (int j = 0; j < warehouseNum; j++) {
numExpr[j] = wareToCustomer[j][i];
}
cplex.addEq(minDist[i], cplex.min(numExpr));
}

cplex.addMinimize(cplex.sum(minDist));

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post