首页 文章

CPLEX OPL海量代码错误

提问于
浏览
0

我使用IBM ILOG CPLEX Optimization Studio来运行MILProblem,但是使用了大量代码时出错了 . 在我按下运行按钮之前,文件编辑器没有发出任何错误警报 .

错误是

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

由于这样的错误,我真的不知道如何google它 . 这是.mod和.dat文件 .

.mod文件

{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文件

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;

2 回答

  • 0

    .DAT

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

    和.mod

    你还需要一些修复 .

    例如试试

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

    当你需要使用t-1时 .

    问候

  • 0

    如果您使用的是中文版Studio,请尝试将所有内容设置为英语,包括文件名,配置名称和目录 . 工作室中存在几个编码问题 .

相关问题