如何使用 python 将输入提供给 OPL 模型

问题描述 投票:0回答:1

我正在 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 的元组形式的输入数据构建的方法)是否准确。我们将不胜感激您对此实施的反馈。

optimization cplex doopl
1个回答
0
投票

.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来说没问题

© www.soinside.com 2019 - 2024. All rights reserved.