Originally posted by: fbahr
> What I have is a excel sheet with records in each lines and columns would be date and other parameters
In that particular case, I'd probably let Excel do the preprocessing for me -- something like the VBA script below will split your worksheet (given that its entries are ordered by date) into multiple worksheets (one for each day, labelled 'Day_1', 'Day_2', ..., 'Day_2190', and with cell(A1) = # entries per day).
Sub SplitData()
Application.ScreenUpdating = False
Dim Days As Collection
Set Days = New Collection
Dim WSID As Integer
WSID = 1
Dim SourceSheet, TargetSheet As Worksheet
Set SourceSheet = Worksheets( ... ) '< worksheet name
Dim SourceRow, TargetRow As Long
Const Col As String = "A"
Const FirstRow As Integer = 1 '< offset
Dim LastRow As Long
LastRow = SourceSheet.Cells(SourceSheet.Rows.Count, Col).End(xlUp).Row
Dim DayStr As String
For SourceRow = FirstRow To LastRow
Set TargetSheet = Nothing
DayStr = SourceSheet.Cells(SourceRow, Col).Value
On Error Resume Next
Set TargetSheet = Worksheets("Day_" & Days.Item(DayStr))
On Error GoTo 0
If TargetSheet Is Nothing Then
Days.Add CStr(WSID), DayStr
Set TargetSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
TargetSheet.Name = "Day_" & CStr(WSID)
TargetSheet.Range("A1").Value = 0
WSID = WSID + 1
End If
TargetRow = TargetSheet.Cells(TargetSheet.Rows.Count, Col).End(xlUp).Row + 1
SourceSheet.Rows(SourceRow).Copy Destination:=TargetSheet.Rows(TargetRow)
TargetSheet.Range("A1").Value = TargetSheet.Range("A1").Value + 1
Next SourceRow
Application.ScreenUpdating = True
End Sub
Then, main.mod can be updated as follows:
main
{
var cplex = new IloCplex();
var model_def = new IloOplModelDefinition(new IloOplModelSource("model.mod"));
var model_dat = new IloOplDataSource("data.dat");
var basic_model = new IloOplModel(model_def,cplex);
basic_model.addDataSource(model_dat);
basic_model.generate();
for (var run = 1; run <= 2190; run++)
{
cplex.clearModel();
var custom_def = basic_model.modelDefinition;
var custom_dat = basic_model.dataElements;
var custom_mod = new IloOplModel(custom_def,cplex);
custom_dat.wsid = "Day_" + run;
custom_mod.addDataSource(custom_dat);
custom_mod.generate();
if (cplex.solve())
writeln(cplex.getBestObjValue(<wbr>));
custom_mod.end();
}
basic_model.end();
cplex.end();
}
with [model.mod]
string wsid = "Day_1";
string rows = ...;
...
and [data.dat]
SheetConnection sheet(" ... ");
rows from SheetRead(sheet,wsid + '!A1");
tuples from SheetRead(sheet,"wsid + '!A2:Z" + rows);
...
--fbahr
#DecisionOptimization#OPLusingCPLEXOptimizer