我有一个CSV文件,其中包含从节点i
到节点j
的距离以及节点的权重。该文件想要测试CPLEX代码,该代码试图解决p中位数问题。我是CPLEX的新用户,我不知道如何从CSV文件获取距离和权重。我尝试使用Excel文件中的数据测试此代码,但得到了答案。但是,由于我要使用大型数据集,因此需要导入CSV文件而不是Excel工作表。您能否帮助我知道如何阅读我的d
列和w
列?接下来,我带了我的CSV文件的代码和图像
int w[demands]=...;
float d[demands][facilities]=...;
}[CSV file][1]
答案 0 :(得分:2)
为了从任何基于文本的文件格式中读取数据,可以使用脚本和IloOplInputFile。这样您就可以逐行读取文件。然后,您可以在CSV分隔符上拆分行并提取必填字段。
您可以在CPLEX论坛here上找到一个示例:
假设您有此文件demand.csv
(其中第一个字段为第一个索引,第二个字段为第二个索引,第三个字段为值)
1;1;5
1;2;10
1;3;15
2;1;20
2;2;25
2;3;30
此代码初始化d
数组:
range demands = 1..2;
range facilities = 1..3;
float d[demands][facilities];
execute {
var f = new IloOplInputFile("demand.csv");
while (!f.eof) {
var data = f.readline().split(";");
if (data.length == 3) // Beware of empty lines
d[Opl.intValue(data[0])][Opl.intValue(data[1])] = Opl.floatValue(data[2]);
}
writeln(d);
}
类似于d
数组。