2016-04-09 11 views
0

Ich habe IBM ILOG CPLEX Optimierung Studio verwendet, um ein MILProblem auszuführen, aber einen Fehler mit Massy-Code erhalten. Der Dateieditor hat keine Fehler gemeldet, bis ich die Run-Taste gedrückt habe.CPLEX OPL Massy Codefehler

Der Fehler ist

ÔËÐÐÅäÖá°option 1¡±²»´æÔڡ£   unknown OPL 

Als ein solcher Fehler, ich weiß wirklich nicht, wie es googeln. Hier ist die Datei .mod und .dat.

.mod Datei

{string} prd = ...; 
int NP = ...;//number of periods 
range T = 0..NP; 
int Inventory[prd] = ...; 
int purchase[prd] = ...; 

int sl = ...; 
int sm = ...; 
float cl = ...; 
float cm = ...; 
float hR = ...; 
float hI = ...; 
float cB = ...; 
int demand[prd][1..NP] = ...; 
int buy[prd][T] = ...; 
int inv[prd][T] = ...; 
int u[prd] = ...; 
int lb = ...; 
int ubl = ...; 
int ubm = ...; 

dvar int+ Y[prd][T]; 
dvar int+ X[prd][T]; 
dvar int+ raw[prd][T]; 
dvar int+ backlog[prd][T]; 
dvar boolean L[prd][T]; 
dvar boolean M[prd][T]; 


minimize 
    sum(p in prd, t in T) 
     (sl*L[p][t] + sm*M[p][t] + cl*Y[p][t] + cm*X[p][t] + 
     hR*raw[p][t] + hI*inv[p][t] + cB*backlog[p][t]); 

subject to { 
    forall(p in prd, t in T) 
     ctraw: 
      raw[p][t] + (X[p][t] + Y[p][t])*u[p] == buy[p][t] + raw[p][t-1] ; 
    forall(p in prd, t in T) 
     ctInventory: 
      inv[p][t] + buy[p][t-1] + demand[p][t] == X[p][t] + Y[p][t] + inv[p][t-1] + buy[p][t] ; 
    forall(p in prd, t in T) 
     ctYub: 
     Y[p][t] <= ubl*L[p][t]; 
    forall(p in prd, t in T) 
     ctYlb: 
     Y[p][t] >= lb*L[p][t]; 
    forall(p in prd, t in T) 
     ctXub: 
     X[p][t] <= ubm*M[p][t]; 
    forall(p in prd, t in T) 
     ctYcapacity: 
     sum(p in prd) 
      Y[p][t] <= ubl; 
    forall(p in prd, t in T) 
     ctXcapacity: 
     sum(p in prd) 
      X[p][t] <= ubm; 
    forall(p in prd) 
     ctInitialInventory: 
     inv[p][0] == Inventory[p]; inv[prd][0] 
    forall(p in prd) 
     ctInitialBuy: 
     buy[p][0] == purchase[p]; 
}; 

.dat-Datei

prd = {A B C D E F G H I}; 
NP = 52; 
demand = #[ 
... 
]#; 

buy = #[ 
... 
]#; 

Inventory = #[0 0 0 0 0 0 0 0 0]#; 
purchase = #[2900 500 2400 900 500 30 800 20 150]#; 
u = #[0.09 0.09 0.09 0.09 0.09 0.05 0.09 0.09 0.09]#; 
sl = 1500; 
sm = 500; 
cl = 0.225; 
cm = 0.5; 
hR = 0.05; 
hI = 0.01; 
cB = 0.1; 
lb = 1000; 
ubl = 8000; 
ubm = 2500; 
+0

Wenn ich nur diesen Code in den Editor einfügen, wird sofort ein Fehler angezeigt. Was soll der zusätzliche Code am Ende der Zeile 61 sein? Ist das nur ein Tippfehler beim Einfügen Ihres Codes hier? – TimChippingtonDerrick

+0

Es ist ein Tippfehler. Aber selbst wenn ich den Code nach dem Semikolon entferne ';' habe ich den gleichen Fehler –

Antwort

0

.dat

demand = []; 
buy = []; 
inv=[]; 

und .mod

Sie müssen auch einige Korrekturen.

Zum Beispiel

forall(p in prd, t in T:t-1 in T) 

versuchen, wenn Sie t-1 verwenden müssen.

grüße

+0

Ich habe meine Codes sorgfältig überprüft und einige Fehler gefunden, aber der Grund für diesen chaotischen Codefehler ist, dass mein cplex Promotionsversion ist, die höchstens begrenzt 1000 Einschränkungen. Was noch schlimmer ist, ist, dass bei der Fehleranzeige auch ein Codierungsproblem aufgetreten ist (mein Gebietsschema ist Chinesisch). Als ich die Befehlszeile zum Ausführen von cplex verwendete, wurde dieser Fehler angezeigt. 'Werbeversion. Problemgrößenbeschränkungen überschritten –