我正在 OPL 中开发一个优化模型,其中目标函数的参数 决策变量的平均值 目标函数的数学表达式 以元组形式从 Python 提供。目标函数最小化决策变量与外部提供的平均值之间的平方差。
我使用 doopl 库来解决 Python 中的优化模型。由于数据以元组形式从 Python 传递到 OPL,因此我的输入结构与 OPL 模型的格式相匹配,并且下面给出了 OPL 模型中目标函数的代码。
我在 OPL 中尝试的代码如下:
// Decision variable
dvar float+ x_meg[MEG];
// Tuple passed from Python containing the average values
tuple AverageMEG {
int id; // ID for MEG
float average; // Average value for MEG
};
{AverageMEG} average_meg = ...; // Input from Python
// Objective function
minimize
sum(k in MEG, avg in average_meg: avg.id == k)
(x_meg[k] - avg.average)^2;
请确认一下上面的目标函数代码是否写得正确?我特别感兴趣的是验证当前编码目标函数的方法(使用来自 Python 的元组形式的输入数据构建的方法)是否准确。我们将不胜感激您对此实施的反馈。
.mod
range MEG=1..4;
// Decision variable
dvar float+ x_meg[MEG];
// Tuple passed from Python containing the average values
tuple AverageMEG {
int id; // ID for MEG
float average; // Average value for MEG
};
{AverageMEG} average_meg = ...; // Input from Python
// Objective function
minimize
sum(k in MEG, avg in average_meg: avg.id == k)
(x_meg[k] - avg.average)^2;
.dat
average_meg={<2,5>};
工作正常,average_meg是一个元组集,所以这对于doopl来说没问题