【发布时间】:2021-02-17 10:04:51
【问题描述】:
我正在尝试使用 staticLexFull 目标函数在 OPL IDE 中的 CPLEX 版本 12.10 中实现多目标决策优化。我有 12 个决策表达式,它们包含在要作为第一个参数传递给 staticLexFull 的 KPI 数组中。虽然我不能分享生产代码,但本质上是这样的:
dvar int a[1..10];
dvar int b[1..10];
dvar int c[1..25];
dvar int d[1..20];
dexpr float a_sum = sum(i in 1..10) a[i]*e[i] //e is a variable declared earlier
dexpr float b_sum = sum(i in 1..10) b[i]*f[i] //f declared earlier
dexpr float c_sum = sum(i in 1..25) c[i]*g[i]*h[i] //g & h declared earlier
dexpr float d_sum = sum(i in 1..20) d[i]*j[i] //j declared earlier
dexpr float kpis[1..4] = [a_sum, b_sum, c_sum, d_sum];
float weights[i in 1..4] = 1;
int priorities[1 in 1..4] = [1,2,3,3];
float abstol[i in 1..4] = 0.001;
float reltol[i in 1..4] = 0.001;
minimize staticLexFull(kpis, weights, priorities, abstol, reltol);
这与 Opl IDE 的 staticLexFull 可用示例不同;提供的示例显示了当数组的每个元素处理相同的决策变量时如何初始化 kpis 数组,因此可以进行一般初始化,例如:
dvar int Life[Bord][Bord] in States;
dexpr float kpis[i in Bord1] = sum(i1 in Bord, j1 in Bord : i1 != i] Life[i1][j1];
当我尝试运行上述代码时,我收到“OplRun 进程没有响应,您必须重新启动运行配置”错误。然后我尝试通过命令提示符直接使用 OplRun 运行并得到错误:“错误 [生成 209]:元素“kpis”的初始化表达式无效。”
我不知道如何一般地初始化这个数组,这似乎是运行 staticLexFull 的必要条件。这似乎很奇怪,因为似乎大多数用例都与我的匹配,而不是示例中提供的示例。有没有办法以我尝试的方式利用 staticLexFull?
请注意,我试图在 IBM 决策优化社区论坛上提出这个问题,但是当我点击“发送”按钮时,帖子不会显示。
【问题讨论】: