微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运算符不适用于 dvar float+ * float[][range]

如何解决运算符不适用于 dvar float+ * float[][range]

int NbPeriods = ...; range Periods = 1..NbPeriods;
int NbParts = ...; range Parts = 1..NbParts;
int Nbsuppliers = ...; range suppliers = 1..Nbsuppliers;
int NbProcesses = ...; range Processes = 1..NbProcesses;
int NbPS[1..NbParts,1..NbProcesses*Nbsuppliers] = ...;


float Demand[Parts][Periods] = ...;
float BOH[Parts] = ...;
float Capacity[suppliers][Processes] = ...;
float ProcessMapping[s in 1..Nbsuppliers,pr in 1..NbProcesses,p in 1..NbParts] = NbPS[p,pr+NbProcesses*(s-1)];
float Price[Parts][suppliers] = ...;

dvar float+ Supply[1..NbParts,1..NbPeriods*Nbsuppliers];
dvar float+ EOH[Parts][Periods];
dvar float+ Util[1..NbProcesses,1..NbPeriods*Nbsuppliers];


minimize
   sum( t in Periods ) DOIDelta[t] ;

 
subject to {
    forall(p in Parts)
        EOH[p][0] == BOH[p];
    
    forall(p in Parts)
      forall( t in Periods) 
            EOH[p][t] == EOH[p][t-1] + sum(s in suppliers) Supply[p,t+NbPeriods*(s-1)] ;
            
    forall(t in Periods)
      forall(pr in Processes)
        forall(s in suppliers)
            Util[pr,t+NbPeriods*(s-1)] ==  sum(p in Parts) (Supply[p,t+NbPeriods*(s-1)] * ProcessMapping[p,pr+NbProcesses*(s-1)] );
          
} 

错误消息针对最后一个 Util 行:运算符不适用于 dvar float+ * float[][range]。我已经检查了有关此主题的其他帖子,问题都在括号中。即使添加括号,错误仍然存​​在。感谢您的帮助。

解决方法

processMapping 是一个 3D 数组而不是一个 2D 数组

forall(t in Periods)
      forall(pr in Processes)
        forall(s in Suppliers)
            Util[pr,t+NbPeriods*(s-1)] ==  sum(p in Parts) (Supply[p,t+NbPeriods*(s-1) * ftoi(ProcessMapping[s,p,pr+NbProcesses*(s-1)])] );
       

会更好地工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。