我正在一个 opl 项目中工作。在我的 .dat 文件中,我有
px = 20
JDBCConnection in("jdbc:sqlite:my_database.db", "");
my_param from JDBCRead(in, "SELECT COL FROM TABLE WHERE COL2 <= 20");
我需要:
my_param from JDBCRead(in, "SELECT COL FROM TABLE WHERE COL2 <= :px");
.mod 文件中所有变量都已正确定义
这里是您在 .mod 中设置 .dat 中的字符串的示例
.mod
string paramread=...;
string parambuses=...;
string paramwrite=...;
tuple param
{
int nbKids;
}
{param} params=...;
assert card(params)==1;
int nbKids=first(params).nbKids;
// a tuple is like a struct in C, a class in C++ or a record in Pascal
tuple bus
{
key int nbSeats;
float cost;
}
// This is a tuple set
{bus} buses=...;
// asserts help make sure data is fine
assert forall(b in buses) b.nbSeats>0;
assert forall(b in buses) b.cost>0;
// decision variable array
dvar int+ nbBus[buses];
// objective
minimize
sum(b in buses) b.cost*nbBus[b];
// constraints
subject to
{
sum(b in buses) b.nbSeats*nbBus[b]>=nbKids;
}
tuple result
{
key int nbSeats;
int nbBuses;
}
{result} results={<b.nbSeats,nbBus[b]> | b in buses};
main
{
thisOplModel.generate();
thisOpLModel.data.paramRead="nn"
; }
.数据
SheetConnection s("zoo2.xlsx");
params from SheetRead(s,paramread);
buses from SheetRead(s,parambuses);
results to SheetWrite(s,paramwrite);
和主模型来完成这项工作
main
{
var source = new IloOplModelSource("variablesheetreadstring.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
var opl = new IloOplModel(def,cplex);
var data1=new IloOplDataElements();
data1.paramread="params!A2";
data1.parambuses="buses!A2:B3";
data1.paramwrite="buses!E2:F3";
opl.addDataSource(data1);
var data2 = new IloOplDataSource("variablesheetreadstring.dat");
opl.addDataSource(data2);
opl.generate();
if (cplex.solve()) {
writeln("OBJ = " + cplex.getObjValue());
opl.postProcess();
} else {
writeln("No solution");
}
opl.end();
}