首页 > 解决方案 > 如何在 OPL 中反映 3 维参数的数据

问题描述

我愿意在我的 LP 项目中使用 3D 参数。但是,我无法以正确的方式读取参数的数据。是否可以通过使用 Excel 或在 .dat 文件中以矩阵形式写入参数值来获取数据。此外,其他潜在的解决方案可能会有所帮助。

float rt[B][P][Z]=...; //Response time of boat type b at port p to zone z

标签: opl

解决方案


好吧,3dim 数组用于 3 个索引的所有组合,而 excel 是 2dim 表格格式,因此在您开始编写内容的过程中,您无法直接从 excel 读取 3dim 数组。3dim 是否意味着您确实需要所有组合或一些组合。如果稍后,如果某些组合存在 B/P/Z,那么您可以对三元组使用元组格式...元组类型的声明类似于

tuple BPZ {int B; 
       float P; 
       float Z};

然后你用这种类型声明数据,比如

{BPZ} myData = ...;

然后在excel中你有一张包含所有三胞胎的表格。

如果第一个(所有组合都有数据),那么另一种方法是让每个 PZ 2dim 数组/表/矩阵在 excel B 次中......乏味,但如果您不手动创建数据而是以编程方式 = 在 Python 中创建数据是可行的您可以使用 openpyxl(https://openpyxl.readthedocs.io/en/stable/ - 我已经使用它,它非常好/直截了当),然后使用 DOOPL 将 OPL/Python 放在一起(https://developer.ibm .com/docloud/blog/2018/09/26/opl-and-python/ + https://pypi.org/project/doopl/)。你可以在任何情况下使用三元组/元组,当所有组合都存在时,但它可能很有价值,所以这取决于你想要的 B P Z 的大小......


推荐阅读