Для вашего первого вопроса вы можете использовать main для установки другого выходного csv-файла. Позвольте привести небольшой пример:
test.mod
tuple t
{
string firstname;
int number;
}
{t} s={<"Nicolas",2>,<"Alexander",3>};
string csvOutput=...;
execute
{
var f=new IloOplOutputFile(csvOutput);
for(var i in s)
{
f.writeln(i.firstname,";",i.number,";");
}
f.close();
}
и затем main.mod
{string} csvOutputs={"csv1.csv","csv2.csv"};
main {
var source = new IloOplModelSource("test.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
for(var o in thisOplModel.csvOutputs)
{
var opl = new IloOplModel(def,cplex);
var data2= new IloOplDataElements();
data2.csvOutput=o;
opl.addDataSource(data2);
opl.generate();
if (cplex.solve()) {
opl.postProcess();
writeln("OBJ = " + cplex.getObjValue());
} else {
writeln("No solution");
}
opl.end();
}
}
Это создаст 2 файла CSV, CSV1 и CSV2.
Для вашего второго вопроса вы можете либо отправить параметры через такую же магистраль, либо много раз вызвать oplrun и изменить параметры с помощью параметра -D
:
oplrun -DcsvOutput="csv3.csv" test.mod
Это сгенерирует csv3.csv
.