I’m running a large model with CPLEX using parallelmode -1, so it isn’t deterministic, and most “0” values are not zero and have very small values.
Just for output reading clarity, I was hoping that I would be able to use valueSubstitutions to replace values <0.000001 with zero: valueSubstitutions: {<.000001: 0}
The valueSubstitutions option of the ExcelWriter does not work with expressions like <0.00001. It will be considered as a string when the YAML syntax gets parsed. There is the Filter agent that allows actual filtering of records. The following example should give you an idea on how to use it. Also you might want to check the documentation: https://www.gams.com/latest/docs/UG_GAMSCONNECT.html#UG_GAMSCONNECT_FILTER
set i /i1*i10/;
parameter p(i);
p(i) = uniform(0, 0.1);
embeddedCode Connect:
- GAMSReader:
symbols:
- name: p
- Filter:
name: p
newName: p_new
valueFilters:
- column: value
rule: x<0.05
- ExcelWriter:
file: out.xlsx
symbols:
- name: p_new
range: p!A1
endEmbeddedCode
Thanks. If I use the filter and let’s say for a given row of output, if one column meets the criteria to be filtered but the other columns in that row do not meet the criteria, is the whole row filtered out? Or is the one value in the relevant column blank?
All records that do not meet the given expression are removed, also for variables and equations where you might filter on the level only. See the documentation: https://www.gams.com/latest/docs/UG_GAMSCONNECT.html#UG_GAMSCONNECT_FILTER_RULE
This is not exactly what you tried to achieve in the first place, since you wanted to turn small values into zeroes and not filter them out. But perhaps it helps anyways. Alternatively you could consider to turn the small values into 0 directly in GAMS before you call Connect.
Edit: When you use the same workbook and the same sheet for writing, you probably want to specify “clearSheet: True” for the ExcelWriter since the shape of your data might be different for each solve when you use the Filter agent since it will remove records depending on the given condition and the given data. Otherwise you might see old values where things do not get overwritten.